Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
一粒で3回おいしい
ggplot2
id:syou6162
Sunday, November 22, 2009
自己紹介
• id:syou6162
• 吉田康久
• 筑波大学の院生(M1)
• 専門は自然言語処理と機械学習
Sunday, November 22, 2009
近況
• 7月にNAISTに合格 => 来年から奈良へ
• 8月ははてなにインターン
• スパムフィルタを作った
Sunday, November 22, 2009
Rユーザー会の告知!!
• wikiを見て!
• http://www.okada.jp.org/RWiki/?R
%B7%C7%BC%A8%C8%C4#i3afa741
• Tsukuba.Rの活動のことも少し紹介させ
てもらいます
Sund...
ここから本題
Sunday, November 22, 2009
まとめ
• きれい
• 統一的なplotの考え方を与えてくれる
• 使いこなしていると、統計解析の基礎
が身についている
Sunday, November 22, 2009
graphic関係の発表
• id:wakuteka(Tsukuba.R#1)
• Happy Graphics!
• id:syou6162(Tsukuba.R#2)
• もうちょっと高度なグラフィックス特集
• id:mickey24(Ts...
Rのグラフィックス
• baseパッケージにある関数群
• 高水準作図関数
• 低水準作図関数
• 対話的作図関数
• latticeパッケージ
• animationパッケージ
Sunday, November 22, 2009
高水準作図関数
Sunday, November 22, 2009
低水準作図関数
Sunday, November 22, 2009
library(base)
• 低水準、高水準ともにbaseパッケージ
• 具体的なデータでもって、この関数た
ちで遊んでみる
Sunday, November 22, 2009
library(MASS)
• quineというデータ
• オーストラリアの子供の学校の欠席日
数
• 性別、年代などなどの因子データ
Sunday, November 22, 2009
年代別でhistgram(1)
Sunday, November 22, 2009
年代別でhistgram(2)
par(mfrow=c(2,2))
hist(quine$Days[quine$Age == "F0"])
hist(quine$Days[quine$Age == "F1"])
hist(quine$Days[...
問題点
• 因子の数が増えてくると面倒
• 横軸のメモリが微妙に違うので比較が
しづらい(かもしれない)
Sunday, November 22, 2009
無理やり頑張る...
Sunday, November 22, 2009
改造後
Sunday, November 22, 2009
うーむ。。。
age <- c("F0", "F1", "F2", "F3")
for(i in 1:4) {
	 plot(density(quine$Days[quine$Age == age[i]]),
	 	 col=i, lwd=3,...
そこでggplotですよ!!
Sunday, November 22, 2009
ggplotを使うと…!!
Sunday, November 22, 2009
ぷろぐらむ
透過の割合!!
library(ggplot2)
q <- ggplot(quine, aes(Days, fill = Age))
q <- q + geom_density(alpha = 0.3)
print(q)
Sunda...
histgramのほうも!!
q <- ggplot(quine, aes(Days))
q <- q + geom_histogram(binwidth = 10)
q <- q + facet_grid( ~ Age)
print(q)
S...
改変版histgram
Sunday, November 22, 2009
条件を増やしても
Sunday, November 22, 2009
ちょっと変えるだけ
q <- ggplot(quine, aes(Days))
q <- q + geom_histogram(binwidth = 10)
q <- q + facet_grid(Sex ~ Age)
print(q)
Sun...
疑問
• たまたまそういう関数があるだけ?
• こういうのいくつも覚えないといけな
いの?
• 他のパッケージではどうなのか
• →library(lattice)
Sunday, November 22, 2009
一応書ける...
Sunday, November 22, 2009
latticeパッケージ
library(lattice)
histogram(~Days | Age, data=quine)
Sunday, November 22, 2009
統一性..
• 個々の関数はそれなりの数、用意され
ている
• やりたいことごとに調べないといけな
い→統一性、一貫性がないorz
Sunday, November 22, 2009
パッケージ間の比較
base lattice ggplot
自動的に凡例
(カテゴリなどで)条件付
けが容易
複数のデータセットを使
うのが容易
段階的にplotを完成させ
るスタイル
拡張が容易か
使用する関数の一貫性
ディフォルトのplot...
一貫性?
• ggplotの中の人は「plotするのに必要な
構成要素は何か」について考えた
Sunday, November 22, 2009
構成要素
• 各軸と実際のデータとの対応付け(aes)
• どういう統計処理を使うか(例 : 平滑化)
• データをどのようにplotするか(例 : 散布図)
• グラフをどう配置するか
ggplotのreference manualを見よう!...
Components
• Geoms
• Statistics
• Scales
• Coordinate systems
• Faceting
• Position adujstments
• 注意→MECEになっているわけではない
Sund...
要素を構成する
• さっきの構成要素は全て”layerオブジェ
クト”を返す関数
• レイヤーという考え方でくっつけてい
く!!
Sunday, November 22, 2009
ggplotの基本 => layer
• Photoshopのレイヤーとかと似たような
もの
• レイヤー(層)を重ねていく
• “Statistics”などもlayerを返す
http://retouch-weblab.com/kennkyu...
layerを重ねる(1)
• q <- ggplot(mtcars, aes(qsec, wt))
• (ggplotのオブジェクトが生成されるだけ
で、plotはまだされない。)
Sunday, November 22, 2009
layerを重ねる(2)
• q <- q + stat_smooth()
• print(q)
Sunday, November 22, 2009
layerを重ねる(3)
• q <- q + geom_point()
• print(q)
• さっきのレイヤーに
dotのレイヤーを重ね
ている!
Sunday, November 22, 2009
余談
• “+”というのはどういう風に定義されている
のか?
• ggplotオブジェクトについて再定義
• "%+%" <- `+.ggplot`とか
• ggplot2/R/plot-construction.rに定義がある
Sunday,...
ヒストグラム
• Geom:bar
• Stat:bin
• Scale:liner
• Coordinate
system:Cartesian
http://had.co.nz/ggplot2/resources/2007-vanderbil...
散布図
• Geom:point
• Stat:identity
• Scale:liner
• Coordinate
system:Cartesian
http://had.co.nz/ggplot2/resources/2007-vande...
さっきの例
Sunday, November 22, 2009
どのlayerを使ってい
るでしょう?
Sunday, November 22, 2009
さっきの例
q <- ggplot(mtcars,
aes(qsec, wt))
# geomsのレイヤー
q <- q + geom_point()
# statisticsのレイヤー
q <- q + stat_smooth()
print...
もう少し複雑な例で
• kNN method(k近傍法)
• データを分類する方法の一つ
• 自分の周りのk個のデータの多数決で、
どのラベルか判断する
Sunday, November 22, 2009
kNN
Sunday, November 22, 2009
k = 1
Sunday, November 22, 2009
prob.c.k.given.x <- function(x,y,k,data){
	 x1 <- data$x1; x2 <- data$x2
	 o <- rank(mapply(function(X1,X2){sqrt((X1-x)^2 ...
point
q <- ggplot(result, aes(x = x, y = y))
# geomsのレイヤー
q <- q + geom_tile(aes(xmin = x, xmax = x + 0.01,
ymin = y, ymax...
kを変化させてみる
Sunday, November 22, 2009
必要なレイヤーは
どれ?
Sunday, November 22, 2009
答え => Faceting
q <- q + facet_grid(k ~ .)
Sunday, November 22, 2009
副産物
• ggplotの使い方、考え方はこんな感じ
• しかし、使っていくなかで副産物が出
てくる(ように思う)
• 統計解析の基礎!!
Sunday, November 22, 2009
まとめ
• plotにまつわる面倒なところを隠してくれる
• しかも、統一的な考え方で扱える
• 「やりたいことは構成要素のどれでできる
か?」
• レイヤーを重ねていく
• 使っているうちに統計解析の基礎が身に付く
Sunday, Novem...
参考
• http://had.co.nz/ggplot2/
• http://had.co.nz/ggplot2/resources/2007-
vanderbilt.pdf
• http://en.wordpress.com/tag/ggp...
Special Thanks
• @nozmaさんに95%くらいのことは教え
てもらいました
• ありがとう!!
Sunday, November 22, 2009
ご静聴ありがとうご
ざいました
Sunday, November 22, 2009
FAQ
Sunday, November 22, 2009
重くないですか?
• かなり重いですorz
• スペックが低いマシンだと厳しいかも
しれない
Sunday, November 22, 2009
背景変えられる?
• 変えられます
• see http://groups.google.com/group/
ggplot2/browse_thread/thread/
beff7d92f05dc741
Sunday, November 22...
Sunday, November 22, 2009
Upcoming SlideShare
Loading in …5
×

Tsukuba

5,689 views

Published on

Tsukuba

  1. 1. 一粒で3回おいしい ggplot2 id:syou6162 Sunday, November 22, 2009
  2. 2. 自己紹介 • id:syou6162 • 吉田康久 • 筑波大学の院生(M1) • 専門は自然言語処理と機械学習 Sunday, November 22, 2009
  3. 3. 近況 • 7月にNAISTに合格 => 来年から奈良へ • 8月ははてなにインターン • スパムフィルタを作った Sunday, November 22, 2009
  4. 4. Rユーザー会の告知!! • wikiを見て! • http://www.okada.jp.org/RWiki/?R %B7%C7%BC%A8%C8%C4#i3afa741 • Tsukuba.Rの活動のことも少し紹介させ てもらいます Sunday, November 22, 2009
  5. 5. ここから本題 Sunday, November 22, 2009
  6. 6. まとめ • きれい • 統一的なplotの考え方を与えてくれる • 使いこなしていると、統計解析の基礎 が身についている Sunday, November 22, 2009
  7. 7. graphic関係の発表 • id:wakuteka(Tsukuba.R#1) • Happy Graphics! • id:syou6162(Tsukuba.R#2) • もうちょっと高度なグラフィックス特集 • id:mickey24(Tsukuba.R#5) • Animation with R Sunday, November 22, 2009
  8. 8. Rのグラフィックス • baseパッケージにある関数群 • 高水準作図関数 • 低水準作図関数 • 対話的作図関数 • latticeパッケージ • animationパッケージ Sunday, November 22, 2009
  9. 9. 高水準作図関数 Sunday, November 22, 2009
  10. 10. 低水準作図関数 Sunday, November 22, 2009
  11. 11. library(base) • 低水準、高水準ともにbaseパッケージ • 具体的なデータでもって、この関数た ちで遊んでみる Sunday, November 22, 2009
  12. 12. library(MASS) • quineというデータ • オーストラリアの子供の学校の欠席日 数 • 性別、年代などなどの因子データ Sunday, November 22, 2009
  13. 13. 年代別でhistgram(1) Sunday, November 22, 2009
  14. 14. 年代別でhistgram(2) par(mfrow=c(2,2)) hist(quine$Days[quine$Age == "F0"]) hist(quine$Days[quine$Age == "F1"]) hist(quine$Days[quine$Age == "F2"]) hist(quine$Days[quine$Age == "F3"]) Sunday, November 22, 2009
  15. 15. 問題点 • 因子の数が増えてくると面倒 • 横軸のメモリが微妙に違うので比較が しづらい(かもしれない) Sunday, November 22, 2009
  16. 16. 無理やり頑張る... Sunday, November 22, 2009
  17. 17. 改造後 Sunday, November 22, 2009
  18. 18. うーむ。。。 age <- c("F0", "F1", "F2", "F3") for(i in 1:4) { plot(density(quine$Days[quine$Age == age[i]]), col=i, lwd=3, xlim=c(-20, 80), ylim=c(0, 0.08), main="", xlab="", ylab="") par("new"=TRUE) } title("Density of days in each age") legend(40, 0.06, age, lwd=3, col=1:4) Sunday, November 22, 2009
  19. 19. そこでggplotですよ!! Sunday, November 22, 2009
  20. 20. ggplotを使うと…!! Sunday, November 22, 2009
  21. 21. ぷろぐらむ 透過の割合!! library(ggplot2) q <- ggplot(quine, aes(Days, fill = Age)) q <- q + geom_density(alpha = 0.3) print(q) Sunday, November 22, 2009
  22. 22. histgramのほうも!! q <- ggplot(quine, aes(Days)) q <- q + geom_histogram(binwidth = 10) q <- q + facet_grid( ~ Age) print(q) Sunday, November 22, 2009
  23. 23. 改変版histgram Sunday, November 22, 2009
  24. 24. 条件を増やしても Sunday, November 22, 2009
  25. 25. ちょっと変えるだけ q <- ggplot(quine, aes(Days)) q <- q + geom_histogram(binwidth = 10) q <- q + facet_grid(Sex ~ Age) print(q) Sunday, November 22, 2009
  26. 26. 疑問 • たまたまそういう関数があるだけ? • こういうのいくつも覚えないといけな いの? • 他のパッケージではどうなのか • →library(lattice) Sunday, November 22, 2009
  27. 27. 一応書ける... Sunday, November 22, 2009
  28. 28. latticeパッケージ library(lattice) histogram(~Days | Age, data=quine) Sunday, November 22, 2009
  29. 29. 統一性.. • 個々の関数はそれなりの数、用意され ている • やりたいことごとに調べないといけな い→統一性、一貫性がないorz Sunday, November 22, 2009
  30. 30. パッケージ間の比較 base lattice ggplot 自動的に凡例 (カテゴリなどで)条件付 けが容易 複数のデータセットを使 うのが容易 段階的にplotを完成させ るスタイル 拡張が容易か 使用する関数の一貫性 ディフォルトのplotが魅 力的なものか × ×/○ ○ × ○ ○ ○ × ○ ○ × ○ × × ○ × × ○ × × ○ Sunday, November 22, 2009
  31. 31. 一貫性? • ggplotの中の人は「plotするのに必要な 構成要素は何か」について考えた Sunday, November 22, 2009
  32. 32. 構成要素 • 各軸と実際のデータとの対応付け(aes) • どういう統計処理を使うか(例 : 平滑化) • データをどのようにplotするか(例 : 散布図) • グラフをどう配置するか ggplotのreference manualを見よう!! Sunday, November 22, 2009
  33. 33. Components • Geoms • Statistics • Scales • Coordinate systems • Faceting • Position adujstments • 注意→MECEになっているわけではない Sunday, November 22, 2009
  34. 34. 要素を構成する • さっきの構成要素は全て”layerオブジェ クト”を返す関数 • レイヤーという考え方でくっつけてい く!! Sunday, November 22, 2009
  35. 35. ggplotの基本 => layer • Photoshopのレイヤーとかと似たような もの • レイヤー(層)を重ねていく • “Statistics”などもlayerを返す http://retouch-weblab.com/kennkyuu/layer/layer1.html Sunday, November 22, 2009
  36. 36. layerを重ねる(1) • q <- ggplot(mtcars, aes(qsec, wt)) • (ggplotのオブジェクトが生成されるだけ で、plotはまだされない。) Sunday, November 22, 2009
  37. 37. layerを重ねる(2) • q <- q + stat_smooth() • print(q) Sunday, November 22, 2009
  38. 38. layerを重ねる(3) • q <- q + geom_point() • print(q) • さっきのレイヤーに dotのレイヤーを重ね ている! Sunday, November 22, 2009
  39. 39. 余談 • “+”というのはどういう風に定義されている のか? • ggplotオブジェクトについて再定義 • "%+%" <- `+.ggplot`とか • ggplot2/R/plot-construction.rに定義がある Sunday, November 22, 2009
  40. 40. ヒストグラム • Geom:bar • Stat:bin • Scale:liner • Coordinate system:Cartesian http://had.co.nz/ggplot2/resources/2007-vanderbilt.pdf Sunday, November 22, 2009
  41. 41. 散布図 • Geom:point • Stat:identity • Scale:liner • Coordinate system:Cartesian http://had.co.nz/ggplot2/resources/2007-vanderbilt.pdf Sunday, November 22, 2009
  42. 42. さっきの例 Sunday, November 22, 2009
  43. 43. どのlayerを使ってい るでしょう? Sunday, November 22, 2009
  44. 44. さっきの例 q <- ggplot(mtcars, aes(qsec, wt)) # geomsのレイヤー q <- q + geom_point() # statisticsのレイヤー q <- q + stat_smooth() print(q) Sunday, November 22, 2009
  45. 45. もう少し複雑な例で • kNN method(k近傍法) • データを分類する方法の一つ • 自分の周りのk個のデータの多数決で、 どのラベルか判断する Sunday, November 22, 2009
  46. 46. kNN Sunday, November 22, 2009
  47. 47. k = 1 Sunday, November 22, 2009
  48. 48. prob.c.k.given.x <- function(x,y,k,data){ x1 <- data$x1; x2 <- data$x2 o <- rank(mapply(function(X1,X2){sqrt((X1-x)^2 + (X2- y)^2)},x1,x2)) k.k <- sum(data$class[seq(length(o))[o <= k]] == "r") return(k.k / k) } s <- seq(0, 1, length.out=100) result <- as.data.frame(expand.grid(s, s)) result <- cbind(result, apply(result, 1, function(col) { x <- col[1]; y <- col[2] prob.c.k.given.x(x, y, 1, d) })) colnames(result) <- c("x", "y", "probability") q <- ggplot(result, aes(x = x, y = y)) q <- q + geom_tile(aes(xmin = x, xmax = x + 0.01, ymin = y, ymax = y + 0.01, fill = probability), alpha = 0.1) q <- q + geom_point(data = d, size = 2, aes(x = x1, y = x2, color = factor(class))) q <- q + scale_fill_gradient(low="red", high="blue") print(q) プログラム Sunday, November 22, 2009
  49. 49. point q <- ggplot(result, aes(x = x, y = y)) # geomsのレイヤー q <- q + geom_tile(aes(xmin = x, xmax = x + 0.01, ymin = y, ymax = y + 0.01, fill = probability), alpha = 0.1) # geomsのレイヤー q <- q + geom_point(data = d, size = 2, aes(x = x1, y = x2, color = factor(class))) # scalesのレイヤー q <- q + scale_fill_gradient(low="red", high="blue") print(q) Sunday, November 22, 2009
  50. 50. kを変化させてみる Sunday, November 22, 2009
  51. 51. 必要なレイヤーは どれ? Sunday, November 22, 2009
  52. 52. 答え => Faceting q <- q + facet_grid(k ~ .) Sunday, November 22, 2009
  53. 53. 副産物 • ggplotの使い方、考え方はこんな感じ • しかし、使っていくなかで副産物が出 てくる(ように思う) • 統計解析の基礎!! Sunday, November 22, 2009
  54. 54. まとめ • plotにまつわる面倒なところを隠してくれる • しかも、統一的な考え方で扱える • 「やりたいことは構成要素のどれでできる か?」 • レイヤーを重ねていく • 使っているうちに統計解析の基礎が身に付く Sunday, November 22, 2009
  55. 55. 参考 • http://had.co.nz/ggplot2/ • http://had.co.nz/ggplot2/resources/2007- vanderbilt.pdf • http://en.wordpress.com/tag/ggplot2/ • http://ito-hi.blog.so-net.ne.jp/tag/ggplot2 • http://d.hatena.ne.jp/ Rion778/20091025/1256508686 Sunday, November 22, 2009
  56. 56. Special Thanks • @nozmaさんに95%くらいのことは教え てもらいました • ありがとう!! Sunday, November 22, 2009
  57. 57. ご静聴ありがとうご ざいました Sunday, November 22, 2009
  58. 58. FAQ Sunday, November 22, 2009
  59. 59. 重くないですか? • かなり重いですorz • スペックが低いマシンだと厳しいかも しれない Sunday, November 22, 2009
  60. 60. 背景変えられる? • 変えられます • see http://groups.google.com/group/ ggplot2/browse_thread/thread/ beff7d92f05dc741 Sunday, November 22, 2009
  61. 61. Sunday, November 22, 2009

×