data frameあれこれ

26
DataFrame.jl ああああ version 1.0 あああ ( あああ ) あああああああああ Julia Tokyo #2 @weda_654

Upload: weda654

Post on 29-Nov-2014

600 views

Category:

Data & Analytics


1 download

DESCRIPTION

JuliaでDataFrameの表面をすくってみました

TRANSCRIPT

Page 1: Data frameあれこれ

DataFrame.jl あれこれ

version 1.0初心者 ( 俺向け ) セッション的なあれ

Julia Tokyo #2

@weda_654

Page 2: Data frameあれこれ

注意事項• 本資料は突貫工事ゆえ不完全な箇所があります

• Julia の version は 0.4.0-dev+728, DataFrames の version は 0.5.7

• 今後も内容を更新させていきますので勘弁して下さい

• はじめての Keynote 使い方よくわかりません><

要するに

ガバガバな資料です

Page 3: Data frameあれこれ

自己紹介

• 本日の発表者の中でも最弱

• Julia 歴 : 2.5 ヶ月 ( 実働時間は 2 〜 3 日ぐらい )

• weda.654 (@weda_654)

• データ分析 ( 前処理とドキュメント作成 )に従事する新入社員

• 使用言語 : R( メイン ), Python( たまに )

こんなアイコン

Page 4: Data frameあれこれ

なんのために学んでいますか?

Page 5: Data frameあれこれ

データ分析のために学んでいます

Page 6: Data frameあれこれ

データ分析といえば

Page 7: Data frameあれこれ

R や Python といえば

DataFrame !

* Python は pandas を導入すると使える

今回は DataFrame.jl よりJulia で DataFrame を扱ってみます

Page 8: Data frameあれこれ

DataFrame.jl とは

• 作者は John myles White

• 機械学習入門の筆者

• Julia の統計周りでいろいろパッケージをつくっている

• Julia でデータフレームを扱うためのパッケージ

Page 9: Data frameあれこれ

お品書• DataFrame とは

• DataFrame をつくる• 行数・列数の出力• データの抽出• colwise 関数

• データの要約

• データのソート• 導入

• データの結合

Page 10: Data frameあれこれ

DataFrame とは (1)• 量的変数と質的変数などの型の違うデータの

混在ができる行列

6x5 DataFrame|————|——-————|——————|———————|——————|—————|| Row # | SepalLength | SepalWidth | PetalLength | PetalWidth | Species || 1 | 5.1 | 3.5 | 1.4 | 0.2 | "setosa" || 2 | 4.9 | 3.0 | 1.4 | 0.2 | "setosa" || 3 | 4.7 | 3.2 | 1.3 | 0.2 | "setosa" || 4 | 4.6 | 3.1 | 1.5 | 0.2 | "setosa" || 5 | 5.0 | 3.6 | 1.4 | 0.2 | "setosa" || 6 | 5.4 | 3.9 | 1.7 | 0.4 | "setosa" |

Page 11: Data frameあれこれ

DataFrame とは (2)• なぜ DataFrame を使うのか

We believe that Julia is the future of technical computing. Nevertheless, Base Julia is not sufficient for statistical computing. The DataFrames package (and its sibling, DataArrays) extends Base Julia by introducing three basic types needed for statistical computing:

超意訳 : Julia で統計やりたい

Page 12: Data frameあれこれ

導入 (1)

Pkg.add(“DataFrames")Pkg.add(“RDatasets”)

• パッケージの導入

using DataFrames, RDatasets

* データフレームとサンプルデータのパッケージを導入

• パッケージの読み込み

Page 13: Data frameあれこれ

導入 (2)• データの用意

iris = dataset(“datasets”, “iris”)* RDatesets パッケージより iris データを呼び出す

• ベクトル・配列データvc = [1, 2, 3]array = [1 2 3 ; 4 5 6]

vc2 = @data([1, 2, 3, NA])array2 = @data([1 2 3 ; 4 NA 6])

* @data() で NA( 欠損値 ) を許容

Page 14: Data frameあれこれ

DataFrame をつくる

df = DataFrame(A = data([11, 22, 33, 44, 55]), B = data(["a", "b", "c", "d", "e"]))

5x2 DataFrame|——-—|——-|——|| Row # | A | B || 1 | 11 | "a" || 2 | 22 | "b" || 3 | 33 | "c" || 4 | 44 | "d" || 5 | 55 | "e" |

Page 15: Data frameあれこれ

行数・列数の出力• DataFrame の行数・列数を確認する

行数size(df, 1)nrow(df)

列数size(df, 2)ncol(df)

* df の行数を出力

* df の列数を出力

Page 16: Data frameあれこれ

データの抽出 (1)• データの先頭を抜き出す

head(iris)

抜き出す行数を設定することもできるhead(iris, 10)

* iris から先頭 10 行を抜き出す

• データの末尾を抜き出す

tail(iris)

* head() と同じく行数の設定が可能

Page 17: Data frameあれこれ

データの抽出 (2)• 行を指定して抜き出す

df[1, : ]

• 列を指定して抜き出す

df[1]

df[:A]

df[“A”]

* df から 1 行目を抜き出す

* df から 1 列目を抜き出す

列名を指定して抜き出すこともできる

* df から列名” A" を抜き出す

Page 18: Data frameあれこれ

データの抽出 (3)• 行と列を指定して抜き出す

df[1, 1] * df から 1 行 ,1 列にある要素を抜き出す

• 抽出条件を設けて抜き出すdf[df[:A] .> 30, : ]

* df の A 列において値が 30 以上の行を抜き出す

iris[iris[:Species] .== “setosa”, : ]

* iris の Species 列において値が” setosa” の行を抜き出す

Page 19: Data frameあれこれ

colwise 関数• 列ごとに関数を実行する

colwise(mean, df[:A])

* df の A 列の平均をとる

colwise(median, iris[1:3])

* iris の 1 〜 3 列の中央値をとる

Page 20: Data frameあれこれ

データの結合 (1)• 行方向の結合

rbind(df, df)

* 2 つの df を行方向に結合する

10x2 DataFrame|————|——|———|| Row # | A | B || 1 | 11 | "a" || 2 | 22 | “b" || 3 | 33 | "c" || 4 | 44 | “d" || 5 | 55 | "e" || 6 | 11 | "a" || 7 | 22 | "b" || 8 | 33 | "c" || 9 | 44 | "d" || 10 | 55 | "e" |

Page 21: Data frameあれこれ

データの結合 (2)• 列方向の結合

cbind(df, df)

* 2 つの df を列方向に結合する

5x4 DataFrame|————|-—-|——|——-|—-—|| Row # | A | B | A_1 | B_1 || 1 | 11 | "a" | 11 | "a" || 2 | 22 | "b" | 22 | "b" || 3 | 33 | "c" | 33 | "c" || 4 | 44 | "d" | 44 | "d" || 5 | 55 | "e" | 55 | "e" |

Page 22: Data frameあれこれ

データの結合 (3)• データのマージ

df2 = DataFrame(A = data([11, 22, 33, 44, 55]), C = data(["f", "g", "h", "i", "j"]))

* マージ用の DataFrame を作成

join(df, df2, on=:A)

* A 列をキーとして df と df2 を結合する5x3 DataFrame|————|—-|——|——|| Row # | A | B | C || 1 | 11   | "a" | "f" || 2 | 22 | "b" | "g" || 3 | 33 | "c" | "h" || 4 | 44 | "d" | "i" || 5 | 55 | "e" | "j" |

join は kind で結合の仕方を設定できる

Page 23: Data frameあれこれ

データのソート• 昇順に並び替える

sort!(iris)

• 降順に並び替える

sort!(iris, rev = true)

• キーとなる列を設定して並び替えるsort!(iris, cols = :SepalWidth)sort!(iris, cols = [:SepalLength, :SepalWidth])

Page 24: Data frameあれこれ

データの要約• 基礎統計量を求める

describe(iris)

最小値 , 第 1 四分位 , 中央値 , 平均 , 第 3 四分位 , 最大値 , 欠損値の数 , 欠損値の占める割合

by(iris, :Species, MEAN -> mean(iris[:PetalLength]))

• 列の要素をキーにして関数を実行する

* Species の各要素ごとに PetallLength の平均を求める

Page 25: Data frameあれこれ

今回はここまで

もっと DataFrames.jl を知るのなら

John myles white を追っかけしましょうhttp://www.johnmyleswhite.com/

Page 26: Data frameあれこれ

ご清聴ありがとうございました