SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
DeployR使ってみた話
Report
Kazuya Wada
Follow
データマイニングエンジニア at 株式会社サイバーエージェント [CyberAgent]
Dec. 5, 2015
•
0 likes
•
17,208 views
1
of
42
DeployR使ってみた話
Dec. 5, 2015
•
0 likes
•
17,208 views
Download Now
Download to read offline
Report
Data & Analytics
Japan.R 2015での発表資料です。ShinyとrApacheとDeployRとのお話
Kazuya Wada
Follow
データマイニングエンジニア at 株式会社サイバーエージェント [CyberAgent]
Recommended
Shinyで確率分布を学ぶアプリ作った。あるいは、ShinyでD3.jsを使う方法
ksmzn
13.1K views
•
23 slides
はじめてのShiny
Kazuya Wada
14.5K views
•
39 slides
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
3.4K views
•
107 slides
20140920 tokyo r43
Takashi Kitano
4.5K views
•
39 slides
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
徹 上野山
319.5K views
•
61 slides
Tokyo r33 beginner
Takashi Minoda
17.8K views
•
39 slides
More Related Content
Viewers also liked
10分で分かるr言語入門 短縮バージョン 15-0117_upload用
Nobuaki Oshiro
9K views
•
43 slides
Julia最新情報 2015
Kenta Sato
23K views
•
55 slides
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Yohei Sato
15K views
•
62 slides
R45LT
TokorosawaYoshio
9.9K views
•
36 slides
20151205 Japan.R SparkRとParquet
Ryuji Tamagawa
14.7K views
•
8 slides
Jenkins によるレポートスクリプト管理
Tatsuya Tojima
12.2K views
•
36 slides
Viewers also liked
(11)
10分で分かるr言語入門 短縮バージョン 15-0117_upload用
Nobuaki Oshiro
•
9K views
Julia最新情報 2015
Kenta Sato
•
23K views
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Yohei Sato
•
15K views
R45LT
TokorosawaYoshio
•
9.9K views
20151205 Japan.R SparkRとParquet
Ryuji Tamagawa
•
14.7K views
Jenkins によるレポートスクリプト管理
Tatsuya Tojima
•
12.2K views
「R for Cloud Computing」の紹介
Takekatsu Hiramura
•
11.9K views
前処理のための前処理(Tokyo.R#45)
Shinya Uryu
•
13.6K views
Tokyo r45 beginner_2
Takashi Minoda
•
8.6K views
SeekR Annual Search Trends Report 2015
Takekatsu Hiramura
•
14.6K views
Estimating the effect of advertising with Machine learning
Shota Yasui
•
18.4K views
More from Kazuya Wada
オンラインTVサービスの分析事例
Kazuya Wada
1.3K views
•
48 slides
道玄坂Lt#2 wdkz
Kazuya Wada
4.7K views
•
25 slides
ハイレゾの話
Kazuya Wada
5.3K views
•
17 slides
Shiny-Serverあれこれ
Kazuya Wada
21.1K views
•
24 slides
データサイエンティストカジュアルトーク by wdkz
Kazuya Wada
2.6K views
•
27 slides
R-3.0.0でGLM
Kazuya Wada
4.9K views
•
22 slides
More from Kazuya Wada
(16)
オンラインTVサービスの分析事例
Kazuya Wada
•
1.3K views
道玄坂Lt#2 wdkz
Kazuya Wada
•
4.7K views
ハイレゾの話
Kazuya Wada
•
5.3K views
Shiny-Serverあれこれ
Kazuya Wada
•
21.1K views
データサイエンティストカジュアルトーク by wdkz
Kazuya Wada
•
2.6K views
R-3.0.0でGLM
Kazuya Wada
•
4.9K views
JuliaでGLM
Kazuya Wada
•
3.2K views
Rで触れる日本経済~RでVAR編~
Kazuya Wada
•
5.4K views
RのffでGLMしてみたけど...
Kazuya Wada
•
11.2K views
そろそろRStudioの話
Kazuya Wada
•
48.6K views
RでつくるWebアプリ~rApache編~
Kazuya Wada
•
4.7K views
Rでウォーリを探してみた
Kazuya Wada
•
7.1K views
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Kazuya Wada
•
5.3K views
RのffとbigmemoryとRevoScaleRとを比較してみた
Kazuya Wada
•
23.1K views
RでGPU使ってみた
Kazuya Wada
•
16.1K views
Tokyo.R#16 wdkz
Kazuya Wada
•
7.3K views
DeployR使ってみた話
1.
部屋とYシャツと私 2015/12/05 Japan.R 2015@株式会社RCO 和田 計也 (4年ぶり2回目)
2.
2015/12/05 いつもの この発表は個人 の見解であり、 所属する組織の 公式見解ではあ りません サイバー系 2 サイバー系
3.
2015/12/05 自己紹介 u和田 計也(@wdkz) ! ! ! u静岡県袋井市出身 uサイバー系企業でデータマイニングエンジニア職 u 趣味は音楽鑑賞 u
最近は松浦亜弥ばっか聴いてます サイバー系 3 サイバー系
4.
2015/12/05 部屋とYシャツと私、といえば サイバー系 4 サイバー系 u 2013年12月のライブで松浦亜弥がカヴァーした曲 u それから2年経って… u
部屋 ̶> Shiny u Yシャツ ̶> rApache u 私 ̶> DeployR
5.
2015/12/05 Shiny サイバー系 u Rでweb applicationを作るためのframework ! 5 サイバー系
6.
2015/12/05 rApache サイバー系 u RとApacheでWeb Application
を作るための Framework u mod_perl的なmod_R 6 サイバー系
7.
2015/12/05 DeployR サイバー系 u RでREST API作るためのFramework 7 サイバー系
8.
2015/12/05 比較表 サイバー系 8 サイバー系 shiny rApache DeployR 想定ユーザー
人 (人と)プログラム プログラム メリット 簡単にBIツールっ ぽのが作成できる 戻り値を柔軟に設 定できる 開発&デバッグが やりやすい デメリット 同時アクセスにめっ ぽう弱い 開発&デバッグが やりづらい 戻り値が冗長 ライセンス ・AGPL v3 ・RStudio License Agreement ・Apache License 2.0 ・AGPL v3 ・Microsoft License Agreement 開発者 R Studio社 Jeffrey Horner Microsoft(Revolutio nAnalytics社)
9.
2015/12/05 ここで一旦CMです サイバー系 9 サイバー系 u サイバー系企業ではエンジニア絶賛募集中です!! u 学会発表できます! u
論文執筆できます! u もちろん実務もバリバリやりましょう! ! 第9回SIG-DOCMAS研究会(2015) より http://www.ai.soc.i.kyoto-u.ac.jp/docmas/ja/
10.
2015/12/05 ここで一旦CMです サイバー系 10 サイバー系 第9回SIG-DOCMAS研究会(2015) より http://www.ai.soc.i.kyoto-u.ac.jp/docmas/ja/ Rでword2vec やりたいじゃないですか
11.
2015/12/05 word2vecやりましょう サイバー系 11 サイバー系 python 2.7以上がインストールされているとしてshell上でgensimをinstall >pip install
gensim build_mdl_w2v <- function(input_data = 'text8', #入力 size = 256, windows = 5, sg = 0, min_count = 5, model_out = 'vectors.txt' #出力 ){ library(rPython) python.assign("data", input_data) python.assign("size", size) python.assign("windows", windows) python.assign("sg", sg) python.assign("min_count", min_count) python.assign("model_out", model_out) python.exec("from gensim.models import word2vec") python.exec("sentence = word2vec.Text8Corpus(data)") python.exec("model = word2vec.Word2Vec(sentence, size=size, window=windows, sg=sg, min_count=min_count)") python.exec("model.save_word2vec_format(model_out, binary=False)") } build_mdl_w2v()
12.
2015/12/05 word2vecやりましょう サイバー系 12 サイバー系 vectors.txtというモデルを生成(中身はテキストファイル)
13.
2015/12/05 尚、現在は サイバー系 13 サイバー系 u 2015年11月にGithub上に公開されてたwordVectors ライブラリを使うほうが真っ当 https://github.com/bmschmidt/wordVectors ! u rPython使えば、今後も出てくるであろうpythonで書かれ たライブラリをいち早くRでも利用できるよ!!
14.
2015/12/05 今日やること サイバー系 14 サイバー系 u 作成したmodelを使って、結果を返すようなweb applicationをShiny, rApache,
DeployRで作ってみま しょう !
15.
2015/12/05 準備 サイバー系 15 サイバー系
16.
2015/12/05 まずは サイバー系 16 サイバー系 u 表現層ベクトルの演算からのコサイン類似度算出のロジックを 作る u コサイン類似度部分(速度必要なのでRcppで) library(inline) cos.simfun
= cxxfunction( signature(A="numeric", B="matrix"), body = ' NumericVector a(A); NumericMatrix xx(B); NumericVector yy(xx.nrow()); for(int i = 0; i < xx.nrow(); i++){ yy[i] = sum(a * xx(i,_))/sqrt(sum(a*a)*sum(xx(i,_)*xx(i,_))); } return( yy ); ', plugin="Rcpp")
17.
2015/12/05 まずは サイバー系 17 サイバー系 u 表現層ベクトルの演算からのコサイン類似度算出のロジックを 作る u 表現層ベクトル演算(の単発文字列例_このままだと演算で きないよ)と類似度TopN算出部分 calc_distance
<- function(mdl, word = "king", topn=10 ) { mdl %>% filter(V1 == word) %>% select(-V1) %>% as.numeric -> this_vec data.frame(word = mdl$V1, cos_sim = cos.simfun(A = this_vec, B = as.matrix(mdl[,-1, with=F]) ), stringsAsFactors = F) %>% arrange(desc(cos_sim)) %>% head(topn) }
18.
2015/12/05 まずは サイバー系 18 サイバー系 u 表現層ベクトルの演算からのコサイン類似度算出のロジックを 作る u 実行部分 run_w2v
<- function(){ #build_mdl_w2v() library(data.table) mdl <- fread("vectors.txt", sep = ' ', skip = 1, header = F) mdl %>% calc_distance(word = "king - man + woman") }
19.
2015/12/05 Shiny サイバー系 19 サイバー系
20.
2015/12/05 Shinyで サイバー系 20 サイバー系 u RStudioで「New Project」̶>「New
Directory」 ̶> 「Shiny Web Application」̶>適当な名前付ける
21.
2015/12/05 Shinyで サイバー系 21 サイバー系 u いい感じのテンプレートが生成されるので、後は適当にこの ファイル2つserver.Rとui.Rを修正すれば良い u ちなみに、生成されたままの状態で「Run
App」するとこ んなのが起動します→→→→→→→
22.
2015/12/05 Shinyで サイバー系 22 サイバー系 u server.R部分修正前 u さっき作ったロジック部分のコードをそれなりの箇所に追記します よ library(shiny) ! shinyServer(function(input,
output) { output$distPlot <- renderPlot({ x <- faithful[, 2] bins <- seq(min(x), max(x), length.out = input$bins + 1) hist(x, breaks = bins, col = 'darkgray', border = 'white') }) }) plotをtable 描写へ 変更 動的にcalc_distance関数 を呼ぶよう追記 library読み込んだり、 関数定義したりする
23.
2015/12/05 Shinyで サイバー系 23 サイバー系 u server.R部分修正後 u こんな感じ library(shiny);
library(dplyr); library(inline) library(data.table); library(rhandsontable) cos.simfun = cxxfunction( … ) #略 calc_distance <- function(mdl, word, topn){…} #略 mdl <- fread(txt, sep = ‘ ’, skip = 1){} #略 shinyServer(function(input, output) { select_data <- reactive({ calc_distance(mdl, word = input$word, topn = input$topn) }) output$table1 <- renderRHandsontable({ if(is.null(input$terms)){ return(NULL) }else{ select_data() %>% rhandsontable } }) })
24.
2015/12/05 Shinyで サイバー系 24 サイバー系 u ui.R部分修正前 u Viewに合わせてそれなりに追記しますよ library(shiny) shinyUI(fluidPage( titlePanel("Old
Faithful Geyser Data"), sidebarLayout( sidebarPanel( sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30) ), mainPanel( plotOutput("distPlot") ) ) )) plotをtable 描写へ 変更 input部分を微調整 title表記微調整
25.
2015/12/05 Shinyで サイバー系 25 サイバー系 u ui.R部分修正後 u こんな感じ library(shiny);
library(rhandsontable) shinyUI(fluidPage( titlePanel("word2vec"), sidebarLayout( sidebarPanel( sliderInput("topn", "TopN:", min = 1, max = 50, value = 10), textInput("words", "入力", "king") ), mainPanel( rHandsontableOutput("table1", height = 1250) ) ) )) plotをtable 描写へ 変更 input部分を微調整 title表記微調整
26.
2015/12/05 Shinyで サイバー系 26 サイバー系 u やってみた例
27.
2015/12/05 rApache サイバー系 27 サイバー系
28.
2015/12/05 rApacheで サイバー系 28 サイバー系 u まずはRookライブラリでそれっぽいの構築します library(Rook); library(dplyr);
library(inline); library(data.table); cos.simfun = cxxfunction( … ) #略 calc_distance <- function(mdl, term, topn){…} #略 run_w2v <- function(env){ mdl <- fread(txt, sep = ‘ ’, skip = 1){} #略 req <- Rook::Request$new(env); res <- Rook::Response$new() words <- NULL if(!is.null(req$GET()[['word']])){ words <- req$GET()[['word']] mdl %>% calc_distance(term=words) -> res_tbl } res$write('input term.n') res$write('<form method="GET">n') res$write('<input type="text" name="term">n') res$write('<input type="submit" name="Submit"><br>n</form>n<br>') if(!is.null(words)) res$write(paste(‘<h1>’,terms,’</h1>n')) if(exists(‘res_tbl’)) res$write(hwriter::hwrite(res_tbl)) res$finish() } ここら辺の outputは HTMLベタ書き
29.
2015/12/05 rApacheで サイバー系 29 サイバー系 u まずはRookライブラリで動作チャック rk <-
Rhttpd$new() rk$start(quiet = TRUE) rk$add(app=run_w2v, name="word2vec") rk$browse("word2vec") 一個前で定義した関数
30.
2015/12/05 rApacheで サイバー系 30 サイバー系 u rApacheにデプロイなんだけど、その前にrApacheの準備 u Ubuntuの場合 sudo
add-apt-repository ppa:opencpu/rapache sudo apt-get update sudo apt-get install libapache2-mod-r-base sudo vi /etc/apache2/mods-available/mod_R.load LoadModule R_module /usr/lib/apache2/modules/mod_R.so 1行追記 sudo a2enmod mod_R sudo service apache2 restart sudo vi /etc/apache2/apache2.conf <Location /word2vec> SetHandler r-handler RFileEval /home/parallels/sandbox/w2v_rook.R:R::Server$call(run_W2v) </Location> Rook使って書いた Rのファイル名 Rookのbrowseで 呼んでた関数名 URLの一部になる
31.
2015/12/05 rApacheは サイバー系 31 サイバー系 やること 多くて面倒い
32.
2015/12/05 DeployR サイバー系 32 サイバー系
33.
2015/12/05 deployRで サイバー系 33 サイバー系 u 起動します ! u Vivaldiブラウザで以下のURLにアクセスします /path/to/deployr/version/startAll.sh http://<deployr
server>:7400/deployr loginします
34.
2015/12/05 deployRで サイバー系 34 サイバー系 u ログイン後の画面
35.
2015/12/05 deployRで サイバー系 35 サイバー系 u Repository Manager u
まだ空ですね ファイルをuploadしましょう
36.
2015/12/05 deployRで サイバー系 36 サイバー系 u Repository Manager u
ファイルupload後 ファイルがuploadできました! & クリック
37.
2015/12/05 deployRで サイバー系 37 サイバー系 u Repository Manager u
uploadしたFileのプロパティ ここら辺でアクセス制御設定できたり クリック
38.
2015/12/05 deployRで サイバー系 38 サイバー系 u Repository Manager u
ブラウザ上で開発ができちゃいます!! ここで 軽めの 開発
39.
2015/12/05 deployRで サイバー系 39 サイバー系 ① ② ③ ④ ⑤ ⑥ ①結果をresという変数に入れるよう変更 ②APIへの入力値としてword <- king
みたいな感じのを設定 ③resをAPIの戻り値として設定 & ④実行 ⑤実行中の標準出力 ⑥「API Response」ボタンを押して、意図する結果が返るか確認
40.
2015/12/05 deployRで サイバー系 40 サイバー系 u APIを叩いてみよう u 何でRから叩いてるの?とか聞かない library(RCurl) tt
<- postForm(“http://xx.xx.xx.xx:7400/deployr/r/repository/script/execute”, format = "json", filename = "w2v.R", directory = "jr", author = "admin", csvinputs = "word,king", robjects = "res" ) library(jsonlite) tl <- fromJSON(tt)[[1]]$response$workspace$objects$value[[1]]$value names(tl) <- fromJSON(tt)[[1]]$response$workspace$objects$value[[1]]$name as.data.frame(tl) ここら辺 参考に
41.
2015/12/05 比較表 サイバー系 41 サイバー系 shiny rApache DeployR 想定ユーザー
人 (人と)プログラム プログラム メリット 簡単にBIツールっ ぽのが作成できる 戻り値を柔軟に設 定できる 開発&デバッグが やりやすい デメリット 同時アクセスにめっ ぽう弱い 開発&デバッグが 大変面倒い 戻り値が冗長だし 柔軟性なし ライセンス ・AGPL v3 ・RStudio License Agreement ・Apache License 2.0 ・AGPL v3 ・Microsoft License Agreement 開発者 R Studio社 Jeffrey Horner Microsoft(Revolutio nAnalytics社)
42.
2015/12/05 最後に サイバー系 42 サイバー系 u (主に) DeployR 使ってみたわー u
「スピーカー欲しい人、低額で譲ります!」からの1年経過。 問い合わせ2件、コンバージョン0 u 再募集します!!(アンプ持ってない方、CambridgeAudio 製Azur 350A用意できます!) これ↓の一個まえの型(GX100)左右ペア @wdkzまでご連絡下さい!!