データサイエンティストカジュアルトーク by wdkz
-
Upload
kazuya-wada -
Category
Education
-
view
1.331 -
download
0
description
Transcript of データサイエンティストカジュアルトーク by wdkz
![Page 1: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/1.jpg)
大事な話は他の人に譲ってReproducible Researchの話
2013/09/06Data Scientist Casual Talk in 白金台
和田 計也
サイバー系
![Page 2: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/2.jpg)
2013/09/06
はじめに
※この発表は個人の見解であり、所属する組織の公式見解ではありません。
サイバー系
2
![Page 3: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/3.jpg)
2013/09/06
u和田 計也(@wdkz)u 静岡県袋井市出身
uサイバー系企業でデータマイニングエンジニア職u 最近はJUDY AND MARYばっか聴いてます
u前職はバイオベンチャーu バイオマーカ探索してたu 学生時代は枯草菌の研究
自己紹介サイバー系
3
![Page 4: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/4.jpg)
2013/09/06
いきなりですがサイバー系
u祝!出版!!
4
u 具体的な事例が豊富u 入門用として最適u コナンの正体は工藤新一
![Page 5: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/5.jpg)
2013/09/06
Reproducible Research意識してますか?サイバー系
u 再利用・再現可能な分析のことu ⬇こんな経験ありませんか?
✦ データ取得どうやったっけ??✦ SQL忘れたー✦ モデリングに突っ込むデータフレームどう作ったっけ?✦ プロット図どうやって描いたっけ??
u 全部時間の無駄ですu はい、今日からknitr使いましょう
5
![Page 6: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/6.jpg)
2013/09/06
やり方はとても簡単サイバー系
6
R Studioでごく普通にコーディングして 押す
![Page 7: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/7.jpg)
2013/09/06
やり方はとても簡単サイバー系
7
何か出るけど気にせず「Compile」ボタン押す
![Page 8: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/8.jpg)
2013/09/06
はい、できましたサイバー系
8
u R使って分析するなら今日から早速knitr使いましょうu markdown形式で記述できるRmdもありますよ(数式とかも描ける) http://rpubs.com/wdkz/8129
ソースコードと実行結果が一体となったhtmlファイルが生成された!!
![Page 9: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/9.jpg)
2013/09/06
サイバー系
9
前置きはこのくらいにして
![Page 10: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/10.jpg)
2013/09/06
(今日の本題)RHadoopについてサイバー系
u RからHadoop使えるパッケージ群u 以下の3つのパッケージからなる• rmr2・・・Rから簡単にMap Reduce使える• rhdfs・・・Rからhdfsへの読み書きができる• rhbase・・・RからHBaseへの読み書きができる
u Revolution R 作ってるRevolutionAnalytics社が作ってるu https://github.com/RevolutionAnalytics/RHadoop/wiki
10
今日はこれの話
![Page 11: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/11.jpg)
2013/09/06
rmr2パッケージ使ってみるかサイバー系
u rmr2パッケージ使って、RからHadoopのMap Reduce使うu Map Reduce版のthe Worldといえばword countu toy data はPubmedからちょっくら取得
11
⬇Pubmed(医療系のジャーナル検索サイト)
![Page 12: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/12.jpg)
2013/09/06
toy dataの取得用関数(参考)サイバー系
12
library(RCurl)library(XML)#検索ワードからpmidを取得get.pmid <- function(term="wada+kazuya[author]"){ url.str <- paste0("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=", term) xml1 <- xmlTreeParse(getURL(url.str)) pmids.list <- xml1[["doc"]][["eSearchResult"]][["IdList"]] pmids <- rep(NA, length=length(pmids.list)) for(i in 1:length(pmids.list)){ pmids[i] <- as.integer(xmlValue(pmids.list[[i]])) } return(pmids)}#pmidから論文のAbstructを取得get.pmsummary <- function(pmids=c(21799770,21416533)){ url.str <- paste0("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=", paste(pmids, collapse=","), "&retmode=xml") xml1 <- xmlTreeParse(getURL(url.str)) pm.summaries <- xml1[["doc"]][["PubmedArticleSet"]] pmsummary <- rep(NA, length=length(pm.summaries)) for(i in 1:length(pm.summaries)){ pmsummary[i] <- xmlValue(pm.summaries[[i]][[1]][["Article"]][["Abstract"]][["AbstractText"]]) } return(pmsummary)}pmsummary <- get.pmsummary(get.pmid("wada+kazuya[author]")) #wdkzの論文サマリ取得
![Page 13: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/13.jpg)
2013/09/06
toy dataの中身とhdfsへの転送サイバー系
13
⬆こんな感じで、取得できた論文数の長さの文字列ベクトル
★ローカルのRオブジェクトをhdfs上に送る
★toy dataの取得
★hdfs上のパス
![Page 14: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/14.jpg)
2013/09/06
hdfs上でのdataの中身サイバー系
14
⬆こんな感じでkey-value型になっているが、to.dfs()で転送した場合は大抵keyはNULL
★中身
![Page 15: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/15.jpg)
2013/09/06
Mapフェーズサイバー系
15
⬆こんな感じで文字列ベクトルvをpatternで分割して単語にし、その単語をkey, 1(単語出現数)をvalueとするkey-valueを構成する
★Mapの関数定義NULL 文章(文字列ベクトル)
★Map関数適用後にできるもの・・・以下のようなリスト
Key
Value
![Page 16: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/16.jpg)
2013/09/06
Reduceフェーズサイバー系
16
⬆こんな感じでkey(単語)ごとにgroup byして、1をsumするから、最終的に文字数が出るよ
★Reduceの関数定義単語 1(カウント)
★Reduce関数適用後にできるもの・・・以下のようなリスト
Key
Value
![Page 17: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/17.jpg)
2013/09/06
Map Reduce発動サイバー系
17
★Map Reduceの関数定義map関数 reduce関数hdfs上の入力
ファイル
⬆こんな感じでMap Reduce処理を発動させる。戻り値はhdfs上のパスだが、上記の例のように戻り値を変数に保存してない場合は以下のようにすれば大丈夫
![Page 18: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/18.jpg)
2013/09/06
結果サイバー系
18
★結果の整形
蟹好きだということがわかった
![Page 19: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/19.jpg)
2013/09/06
サイバー系
19
(中途半端な)応用事例
![Page 20: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/20.jpg)
2013/09/06
Hadoop上で動かすrandomForestサイバー系
20
★randomForest on Map-Reduce概要_モデル構築
��train�� ����� �
� model ����
Map� Reduce�
�� ����
![Page 21: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/21.jpg)
2013/09/06
Hadoop上で動かすrandomForestサイバー系
21
★randomForest on Map-Reduce概要_予測
��test����������
������
������
������
Map� Reduce�
�� ��� ����
�������
![Page 22: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/22.jpg)
2013/09/06
簡易実装例_model構築サイバー系
22
wadandomForest <- function(formula, data, ndiv=10,...){� data.hdfs <- to.dfs(data) #����hdfs� #� �_Maper�����ndiv�����map.fun <- function(k, v){� generate.rand <- function(i){� draws <- rpois(n=nrow(v), lambda=(1/ndiv))� indices <- rep((1:nrow(v)), draws)� keyval(i, v[indices, ])� }� c.keyval(lapply(1:ndiv, generate.rand))� }� #� �_Reducer�randomForest����hdfs�������reduce.fun <- function(k, v){� rf_mdl <- randomForest::randomForest(formula=formula, data=v, ...)� keyval(k, list(forest=rf_mdl))� }� #Map-Reduce����mr_res <- mapreduce(input=data.hdfs, map=map.fun, reduce=reduce.fun)�}�
![Page 23: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/23.jpg)
2013/09/06
簡易実装例_変数重要度サイバー系
23
variableImp <- function(wf_mdl, var_output=NULL){� #variableImportace���Mapper #� ��key, MeanDecreaseGinivalue map.fun <- function(k, v){� mk.keyval <- function(i){� keyval(key=rownames(v[[i]]$importance), val=as.numeric(v[[i]]$importance))� }� c.keyval(lapply(1:length(k), mk.keyval))� }� #variableImportance�reduce reduce.fun <- function(k, v){� keyval(k, mean(v))� }� #MR����mr_res <- mapreduce(input=wf_mdl$model_output, map=map.fun, reduce=reduce.fun)�}�variableImp.plot <- function(vi_df=as.data.frame(varImportance)){� library(ggplot2)� print(ggplot(vi_df, aes(x=key, y=val)) + geom_bar(stat="identity") ����������+ opts(axis.text.x=theme_text(angle=-90)))�}�
![Page 24: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/24.jpg)
2013/09/06
簡易実装例_予測サイバー系
24
predict.wadandomForest <- function(wf_mdl, data, ...){ � data.hdfs <- to.dfs(data)��#predict��Mapper map.fun <- function(k, v){� generate.rnd <- function(i){� draws <- rpois(n=nrow(v), lambda=0.2)� indices <- rep((1:nrow(v)), draws)� vv <- v[unique(indices), ]� rf_mdl <- rf_mdls$val[[sample(length(rf_mdls$key),1)]]� vv_prd <- predict(rf_mdl, vv, …)� keyval(as.integer(names(vv_prd)), as.integer(vv_prd))� }� library(randomForest)� rf_mdls <- from.dfs(wf_mdl$model_output)� c.keyval(lapply(1:100, generate.rnd)) � } #predict��reduce reduce.fun <- function(k, v){� keyval(k, mean(v))� }� #MR�����mr_res <- mapreduce(input=data.hdfs, map=map.fun, reduce=reduce.fun)�} �
![Page 25: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/25.jpg)
2013/09/06
randomForest on Hadoop実行結果例サイバー系
25
★randomForest on Map-Reduce概要_予測
�������������1 ���� 2� 1 45576 1664� 2 ��3893 5824�
#model�� �� ����hdfs����� wf_mdl <- wadandomForest(formula=label ~ ., data=train.data)�#��������� wf_varImp <- variableImp(wf_mdl)�varImportance <- from.dfs(wf_varImp)�variableImp.plot(as.data.frame(varImportance))�#�� wf_pred <- predict.wadandomForest(wf_mdl, test.data)�wf_result <- from.dfs(wf_pred)�#���table(as.integer(gf_test$label), ifelse(wf_result$val>=1.5,2,1))�
![Page 26: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/26.jpg)
2013/09/06
待望のRevolution R Enterprise 7サイバー系
26
![Page 27: データサイエンティストカジュアルトーク by wdkz](https://reader033.fdocument.pub/reader033/viewer/2022052620/5577b1f3d8b42af34a8b5480/html5/thumbnails/27.jpg)
2013/09/06
最後にサイバー系
•Reproducible Research意識して下さい•R(RStudio)なら追加コスト追加工数なしで簡単に実現できます
•RHadoop•今後のRevolution R Enterprise7
のリリースに期待•MahoutのrandomForest
(DecisionForest)でちゃんとスケールして 大きなデータを動かせた人いましたら教えて下さい
27