how to use animation packages in r(japanese)

Post on 14-Jun-2015

4.258 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

これからの可視化は動画の時代~Rでanimationパッケージで動画を作成する方法~

@sleipnir002

Tokyo.R#20

自己紹介

@sleipnir002

•Tokyo.Rでパターン認識の発表をシリーズでやっています。•職業:ITコンサル•データマイニングのIT業界への普及と促進のために活動しています。•ガイア好きです。•好きなAKB48のメンバーはこじはるです。

自主規制

animation

パッケージのご紹介

パッケージ概要

1. Rから複数のアニメーションフォーマットへのエクスポートをサポート

→自分の望む形式に変換して、ホームページやレポート

に埋め込みができる!

2. 統計教育用のサンプルアニメーションを含む→統計の勉強になる!

Rのプロットを結合して、アニメーション形式で出力するパッケージ

これからは動画で可視化の時代!!

animationを使って動画を作成してみよう!

library(animation)

ani.options(outdir="/var/XXX/")

s<-function(x, k){x^3+k*x^2-5*x+4}

ani.start()

for(i in -30:30){

plot(s(-30:30, i), type="l", ylim=c(-10000, 10000))

}

ani.stop()

オプションの設定

3次関数の係数を変更してプロット

録画開始

録画停止

Package animation

HTML形式のファイルが作成されていることを確認する。

インストール

• install.packages(“animation”)だけでOK!

• 以下のコマンドのインストールが必要

• ImageMagick・・・画像処理用のコマンドラインツール

• SWF Tools・・・SWF生成用のコマンドラインツール

$ sudo apt-get install imagemagick

$ sudo apt-get install libfreetype6-dev libgif-dev xpdf libjpeg8 libjpeg8-dev ←r-base-devを削除した。$ wget http://www.swftools.org/swftools-0.9.1.tar.gz$ tar -zxvf swftools-0.9.1.tar.gz$cd swftools-0.9.1$./configure$make$sudo make install

OS:Ubuntu 10.10 64bitの場合

出力形式

• HTML形式・・・ブラウザ上で再生するページを作成

• GIF形式・・・GIFに出力

• SWF形式・・・FLASHに出力

• PDF形式・・・Texで埋め込み

• 動画形式・・・mpeg4等に出力

• 動画をRのグラフィックデバイス上に作成することも可能。

動画を作成してみる

animationを使って動画を作成する3つの方法

A) savehoge()形式で特定フォーマットで保存

B) ani.start()形式でHTML形式で保存

C) ani.record()で録画、ani.replayで再生を行う。

A)saveHTML

• JSを使用してHTMLから動画を閲覧可能にする。

• exprで指定した手順でplotした画像を動画にする。

• img.nameの引数を保存する画像の拡張子に使用する。

• saveHTMLを複数回実行すると、ページ上にはHTMLが複数表示される。

>saveHTML(expr={bisection.method()}, img.name="bi")>saveHTML(expr={newton.method()}, img.name="newton")

動画を閲覧できるHMTLページを作成する。

方程式の根を求めるアルゴリズムのデモ

*ソース1を参照

A)saveGIF

• ImageMagickのコマンドを使用して、動画を作成する。

• exprで指定した手順でplotした画像を動画にする。

• img.nameで指定した接頭辞で保存する。

• ファイルはオプションoutdirで指定したディレクトリにmovie.nameの名前で保存される。

>saveGIF(expr={boot.iid()}, clean=TRUE, img.name="boot", movie.name="boot.gif")

GIF形式の動画を作成する。

ブートストラップのデモ

*ソース1を参照

A)saveSWF

• SWF Toolsのpng2swfコマンドなどを使用して、画像をFLASHに変換する。

• exprで指定した手順でplotした画像を動画にする。

• img.nameで指定した接頭辞で保存する。

• ファイルはオプションoutdirで指定したディレクトリにswf.nameの名前で保存される。

> saveSWF({expr=kmeans.ani(centers=4)},swftools=NULL, img.name="kmeans", swf.name="kmeans.swf")

FLASH形式の動画を画像から作成する。

K-means法の動きを表すアルゴリズムのデモ

*ソース1を参照

B)ani.start(), ani.stop()

• 自動的にoutdirにJSファイルをコピーして、start開始後、stopまでに作成されたplotで動画を作成する。

• saveHTMLとは出力画面の形式が異なる。

• 指定したフォルダに必要なjavascriptファイルを出力するので注意。

HTMLによるアニメーションページを作成

>ani.start()>・・・>ani.stop()

デモは省略

C)ani.record (), ani.replay()

• ani.recordでカレントのデバイスの画像を保存して、記録する。

• ani.replayで記録した動画の再生を行う。

recordでカレントのデバイスを録画して、replayで再生する。

>for(i in 0:9){+ rbfsvm <- ksvm(x,y,kernel=rbfdot(sigma=1), C=1+i*20)+ ani.record()+ plot(rbfsvm,data=x,key.axes=axis(4, seq(-7, 7, by=1)), zlim=c(-7, 7))+}>ani.replay()

SVMの正則化のコストを大きくした時の挙動のデモ

*ソース2を参照

オプション

ani.option(1)

• interval・・・フレームの間隔(秒)

• nmax・・・フレームの最大数

• ani.width,ani.height・・・画像の幅と高さ

• ani.dev,ani.type・・・デバイス、画像の種類

>ani.option() or ani.option(“interval”) #オプション内容の確認>ani.option(oopt) #デフォルトに戻す。>ani.options(interval=0.5)#インターバルを0.5に設定

ani.option(2)

[OUTDIR][hmtlfile]

[IMAGES]

・・・デフォルトのHTML出力ファイル

・・・デフォルトの画像出力先フォルダ

デフォルトの出力先フォルダ。特に指定しなければ、tmpフォルダが使用される。

• outdir・・・デフォルトの出力先フォルダ

• htmlfile・・・HTML出力(index.html)

• images・・・作成した画像を含むフォルダ

まとめ

• animationパッケージでRで簡単に動画が作成できるからみんな動画で可視化してみよう。

• animationパッケージで動画を作成する際のフォーマットはGIF,HTML,SWF,MPEGなど

• 統計教育用アニメーションがいっぱいあるので、暇な人は見てみよう。

ソース1

#A)saveHoge関数のデモ

#SaveHTML

#2分割法で方程式を解く動画サンプル

saveHTML(expr={bisection.method()}, img.name="bi")

#ニュートン法で方程式を解く動画サンプル

saveHTML(expr={newton.method()}, img.name="newton")

#SaveGIF ブートストラップのデモ動画サンプル

saveGIF(expr={boot.lowess(cars, f=1, pch = 20, iter=20, xlab = "speed", ylab = "dist")}, clean=TRUE, img.name="boot", movie.name="boot.gif")

#SaveSWF k-means法による動画の可視化

saveSWF({kmeans.ani(centers=3)},swftools=NULL,img.name="kmeans", swf.name="kmeans.swf")

ソース2

#C)ani,record,ani.replay方式のデモ~SVMの正則化項を大きくしていった際の挙動の可視化

#ライブラリの読み込みとデータの生成

library(kernlab);library(mlbench)

dat <- mlbench.2dnormals(400, cl=2, r=sqrt(20), sd=2);x <- dat$x; y <- dat$classes

#これまでの画像のクリアー

ani.record(reset=TRUE)

for(i in 0:9){

#SVMの正則化項のコストを大きくしながらモデルを作成

rbfsvm <- ksvm(x,y,kernel=rbfdot(sigma=1), C=1+i*20)

plot(rbfsvm,data=x,key.axes=axis(1, seq(-i, 7, by=1)), zlim=c(-7, 7), sub=paste("C=", 1+i*20))

#直前のプロットを記録する。

ani.record()

}

#記録した画像を再生

ani.replay()

*パターン認識 (Rで学ぶデータサイエンス 5) 共立出版(金森ほか, 2009)を参考に作成

ソース3

#ハートの方程式

love<-"僕とお付き合いしてください"

retx<-function(t, d){d * 0.01 * (-(t^2)+40*t+1200)*sin(pi * t /180)}

rety<-function(t){0.01 * (-(t^2)+40*t+1200)*cos(pi * t /180)}

ani.options(outdir="/var/www/html/rtmp", interval = 0.05, nmax = 150)

saveGIF(

expr={

#ハートの方程式を徐々に記述していく。

plot(retx(1, 1), rety(1), xlim=c(-15, 15), ylim=c(-10, 20), xlab="", ylab="")

for(t in 2:60){

plot(c(retx(1:t, -1), retx(1:t, 1)), c(rety(1:t), rety(1:t)), xlim=c(-15, 15), ylim=c(-10, 20), main=, xlab="", ylab="")

}

#告白のを付け加えた状態で画像を固定する。

for(t in 1:30){

plot(c(retx(1:60, -1), retx(1:60, 1)), c(rety(1:60), rety(1:60)), xlim=c(-15, 15), ylim=c(-10, 20), main="", xlab="", ylab="")

mtext(love, side = 3, line = -16, cex= 2, col="red")

}

}, movie.name="heart.gif"

)

*ハートはhttp://www.mathematische-basteleien.de/heart.htmを参考に作成

)600(

)180/cos()120040(01.0

)180/sin()120040(01.0

2

2

t

ttty

tttx

最後に

こんな使い方はいかがでしょうか?

Tokyo.R第20回記念作品

「Rを巡る素敵な恋の物語」

DREAMS COMES TRUE 『LOVE LOVE LOVE』

今からお話しするのは

Rを巡る素敵な恋の物語

この物語の主人公は

Tokyo.Rに参加しているR君

理系大学院生の彼は勉強熱心で

まじめな青年

そしてRが大好き

強いて挙げるとすると

彼の欠点はまじめすぎて奥手なところ

そんな彼は毎回

Tokyo.Rに参加しています

その理由はRの勉強をするため

でも、彼にはTokyo.Rに参加する

もう一つの理由がありました

それはよくTokyo.Rに参加しているSちゃん

彼はひそかに彼女に想いを

よせいていたのでした

奥手な彼は彼女のアドレスを

教えてもらったのですが、

Rの話しかできずにいたのです

そんなある日、

彼は素敵なイケメンITコンサルさんの紹介で

animationパッケージに出会いました

「よし、これだ!」

意を決したS君

ある日、Sちゃんを

誘ってこう話しかけました

「ねぇSちゃん、Rのプロットにサブタイトルを付けたいんだけど、付け方がわからないから

教えてくれないかな」

Sちゃんは答えました

『あら、そんなの簡単だわ。』

「ほんとに、じゃあこのソースコードに

付け加えてもらえるかな?」

R君は自分のPCをSちゃんの前に

置きました

『えーと、plotは・・・あっ・・・』

Sちゃんはソースコード読み、

一瞬はっとします

そして、彼女はそのソースコードに

sub=“yes”と書き加え、

二人はめでたく結ばれました。

そのコードはanimation

パッケージを使用していました

そしてそのコードを実行すると・・・

*ソース3を参照

ソース3を実行してみてね!!

Fin

animationで素敵なRライフを

Be happyWith animation

※今日の資料はコードも含めてblogにアップします。

top related