Data frameあれこれ

Preview:

DESCRIPTION

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

Citation preview

DataFrame.jl あれこれ

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

Julia Tokyo #2

@weda_654

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

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

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

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

要するに

ガバガバな資料です

自己紹介

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

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

• weda.654 (@weda_654)

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

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

こんなアイコン

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

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

データ分析といえば

R や Python といえば

DataFrame !

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

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

DataFrame.jl とは

• 作者は John myles White

• 機械学習入門の筆者

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

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

お品書• DataFrame とは

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

• データの要約

• データのソート• 導入

• データの結合

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" |

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 で統計やりたい

導入 (1)

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

• パッケージの導入

using DataFrames, RDatasets

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

• パッケージの読み込み

導入 (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( 欠損値 ) を許容

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" |

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

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

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

* df の行数を出力

* df の列数を出力

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

head(iris)

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

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

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

tail(iris)

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

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

df[1, : ]

• 列を指定して抜き出す

df[1]

df[:A]

df[“A”]

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

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

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

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

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

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

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

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

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

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

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

colwise(mean, df[:A])

* df の A 列の平均をとる

colwise(median, iris[1:3])

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

データの結合 (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" |

データの結合 (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" |

データの結合 (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 で結合の仕方を設定できる

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

sort!(iris)

• 降順に並び替える

sort!(iris, rev = true)

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

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

describe(iris)

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

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

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

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

今回はここまで

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

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

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