1
Julia.Tokyo #3 LT
@weda_654
Julia で 前処理
2
自己紹介
TwitterID : weda_654
所属 : GoogleMapとAWSとデータ分析の会社
業務 : データ分析(実力はお察し)
使用言語 : R(メイン), Python(たまに)
こんなアイコンJuliaは0.4.0-devをつかってます
注意事項
本資料は個人の意見・認識によるものです
所属する組織の意見・認識とは無関係です
ご了承おねがいいたします
4
2014年Rの前処理界隈に
新たなトレンドが生まれた…
5
dplyr
6
dplyrとは
速いデータ処理が可能になる
%>%で処理をつないでいくことで可読性の向上も見込める
データの選択・抽出・追加・集計を組み合わせ前処理ができる
要するに前処理が る!
* %>%:チェイン演算子とよばれている
7
dplyr実行例
iris2 <- iris[iris$Sepal.Length > 7.0, ]
iris2[["SLM"]] <- mean(iris2$Sepal.Length)
iris2 <- iris2[ , c("Sepal.Length", "Species", "SLM")]
iris2 <- iris2[order(iris2$Sepal.Length), ]
dplyr不使用
library(dplyr)を実行
iris2 <- iris %>%
filter(Sepal.Length > 7.0) %>%
mutate(SLM = mean(Sepal.Length)) %>%
select(Sepal.Length, Species, SLM) %>%
arrange(Sepal.Length)
8
まったく、dplyrは最高だぜ!!
dplyrない前処理なんて考えられない…
Juliaでもできないかなぁー
9
……るよ…
10
ん?
11
…………できるよ…
12
えっ?
13
Juliaでもできるよっ!!
14
15
まじかよ…
16
DataFramesMeta
17
DataFramesMetaとは?
DataFrame用のメタプログラミングツール
DataFrameとは?
• 数値や文字列などの異なるデータ型をまとめた2次元配列
DataFrameの操作に便利なマクロを備えている
• JuliaでもDataFramesパッケージを導入すれば使える
18
Julia dplyr LINQ
行の抽出 @where filter Where
列の追加 @transform mutate Select(?)
グループ化+計算 @by Groupby
グループ化 @groupby group_by
要約 @based_on summarise
並び替え @orderby arrange OderBy
列の選択 @select select Select
dplyrとの対応表
19
機能紹介
データの準備
using DataFrames, RDatasets, DataFramesMeta
iris = dataset("datasets", "iris");
Pkg.add( DataFramesMeta")
• Pkg.add()でDataFramesMetaパッケージを導入
• 今回はRDatasetsよりirisデータを用いる
20
行の抽出
@where(iris, :SepalLength .> 7.0)
列の追加
@transform(iris, SLM = mean(:SepalLength))
グループ化+計算
@by(iris, :Species, SLmean = mean(:SepalLength))
機能紹介
21
並び替え
@orderby(iris, -:SepalLength, :SepalWidth)
列の選択
@select(iris, :Species)
機能紹介
22
処理をつなげる@linq
iris2 = @linq iris ¦>
@where(:SepalLength .> 7.0) ¦>
@transform(SLM = mean(:SepalLength)) ¦>
@select(:SepalLength, :SLM, :Species) ¦>
@orderby(:SLM)
• ¦>はdplyrにおける%>%と同じ.パイプの役割を持つ
*¦>はデフォルトであるのでDataFramesMetaがなくても使える
機能紹介
23
処理をつなげる@linq
iris2 = @linq iris ¦>
where(:SepalLength .> 7.0) ¦>
transform(SLM = mean(:SepalLength)) ¦>
select(:SepalLength, :SLM, :Species) ¦>
orderby(:SepalLength)
• @linqでつなげば@は不要になる
機能紹介
24
機能紹介
処理をつなげる@linq(要約編)
• @based_onがなぜかいうことをきかなかった…
iris3 = @linq iris ¦>
by(:Species, PLM = mean(:PetalLength)) ¦>
transform(Rate = :PLM/sum(:PLM))
25
さいごに
DataFramesMeta歴1日?なのでまだまだ検証する必要がある
• @linqのほかにも処理をつなげる方法がある(実行できない…)
• DataFrame本来の操作との速度検証
•そもそもREADME最後まで読んでない…
作者曰くパフォーマンスをあげたりしたいとか…
今後に期待したい
26
参考
DataFrames
DataFramesMeta
https://github.com/JuliaStats/DataFramesMeta.jl
Macro Conflict with Lazy.jl
https://github.com/JuliaStats/DataFramesMeta.jl/issues/12
https://github.com/JuliaStats/DataFrames.jl
27
ご視聴ありがとうございました

Juliaで前処理