how to use animation packages in r(japanese)

56
これからの可視化は動画の時代 ~Ranimationパッケージ で動画を作成する方法~ @sleipnir002 Tokyo.R#20

Upload: sleipnir002

Post on 14-Jun-2015

4.258 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: How to use animation packages in R(Japanese)

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

@sleipnir002

Tokyo.R#20

Page 2: How to use animation packages in R(Japanese)

自己紹介

@sleipnir002

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

自主規制

Page 3: How to use animation packages in R(Japanese)

animation

パッケージのご紹介

Page 4: How to use animation packages in R(Japanese)

パッケージ概要

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

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

に埋め込みができる!

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

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

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

Page 5: How to use animation packages in R(Japanese)

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形式のファイルが作成されていることを確認する。

Page 6: How to use animation packages in R(Japanese)

インストール

• 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の場合

Page 7: How to use animation packages in R(Japanese)

出力形式

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

• GIF形式・・・GIFに出力

• SWF形式・・・FLASHに出力

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

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

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

Page 8: How to use animation packages in R(Japanese)

動画を作成してみる

Page 9: How to use animation packages in R(Japanese)

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

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

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

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

Page 10: How to use animation packages in R(Japanese)

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を参照

Page 11: How to use animation packages in R(Japanese)

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を参照

Page 12: How to use animation packages in R(Japanese)

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を参照

Page 13: How to use animation packages in R(Japanese)

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

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

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

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

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

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

デモは省略

Page 14: How to use animation packages in R(Japanese)

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を参照

Page 15: How to use animation packages in R(Japanese)

オプション

Page 16: How to use animation packages in R(Japanese)

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に設定

Page 17: How to use animation packages in R(Japanese)

ani.option(2)

[OUTDIR][hmtlfile]

[IMAGES]

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

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

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

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

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

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

Page 18: How to use animation packages in R(Japanese)

まとめ

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

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

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

Page 19: How to use animation packages in R(Japanese)

ソース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")

Page 20: How to use animation packages in R(Japanese)

ソース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)を参考に作成

Page 21: How to use animation packages in R(Japanese)

ソース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

Page 22: How to use animation packages in R(Japanese)

最後に

Page 23: How to use animation packages in R(Japanese)

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

Page 24: How to use animation packages in R(Japanese)

Tokyo.R第20回記念作品

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

Page 25: How to use animation packages in R(Japanese)

DREAMS COMES TRUE 『LOVE LOVE LOVE』

Page 26: How to use animation packages in R(Japanese)

今からお話しするのは

Rを巡る素敵な恋の物語

Page 27: How to use animation packages in R(Japanese)

この物語の主人公は

Page 28: How to use animation packages in R(Japanese)

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

Page 29: How to use animation packages in R(Japanese)

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

まじめな青年

Page 30: How to use animation packages in R(Japanese)

そしてRが大好き

Page 31: How to use animation packages in R(Japanese)

強いて挙げるとすると

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

Page 32: How to use animation packages in R(Japanese)

そんな彼は毎回

Tokyo.Rに参加しています

Page 33: How to use animation packages in R(Japanese)

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

Page 34: How to use animation packages in R(Japanese)

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

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

Page 35: How to use animation packages in R(Japanese)

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

Page 36: How to use animation packages in R(Japanese)

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

よせいていたのでした

Page 37: How to use animation packages in R(Japanese)

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

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

Page 38: How to use animation packages in R(Japanese)

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

Page 39: How to use animation packages in R(Japanese)

そんなある日、

Page 40: How to use animation packages in R(Japanese)

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

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

Page 41: How to use animation packages in R(Japanese)

「よし、これだ!」

Page 42: How to use animation packages in R(Japanese)

意を決したS君

Page 43: How to use animation packages in R(Japanese)

ある日、Sちゃんを

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

Page 44: How to use animation packages in R(Japanese)

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

教えてくれないかな」

Page 45: How to use animation packages in R(Japanese)

Sちゃんは答えました

Page 46: How to use animation packages in R(Japanese)

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

Page 47: How to use animation packages in R(Japanese)

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

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

Page 48: How to use animation packages in R(Japanese)

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

置きました

Page 49: How to use animation packages in R(Japanese)

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

Page 50: How to use animation packages in R(Japanese)

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

一瞬はっとします

Page 51: How to use animation packages in R(Japanese)

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

sub=“yes”と書き加え、

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

Page 52: How to use animation packages in R(Japanese)

そのコードはanimation

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

Page 53: How to use animation packages in R(Japanese)

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

Page 54: How to use animation packages in R(Japanese)

*ソース3を参照

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

Page 55: How to use animation packages in R(Japanese)

Fin

Page 56: How to use animation packages in R(Japanese)

animationで素敵なRライフを

Be happyWith animation

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