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.

Juliaで前処理

3,288 views

Published on

Juliaでdplyrみたいな処理ができるパッケージの紹介

Published in: Data & Analytics
  • Be the first to comment

Juliaで前処理

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

×