Submit Search
Upload
DeployR使ってみた話
•
9 likes
•
17,438 views
Kazuya Wada
Follow
Japan.R 2015での発表資料です。ShinyとrApacheとDeployRとのお話
Read less
Read more
Data & Analytics
Report
Share
Report
Share
1 of 42
Download now
Download to read offline
Recommended
Shinyで確率分布を学ぶアプリ作った。あるいは、ShinyでD3.jsを使う方法
Shinyで確率分布を学ぶアプリ作った。あるいは、ShinyでD3.jsを使う方法
ksmzn
はじめてのShiny
はじめてのShiny
Kazuya Wada
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
20140920 tokyo r43
20140920 tokyo r43
Takashi Kitano
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
徹 上野山
Tokyo r33 beginner
Tokyo r33 beginner
Takashi Minoda
Cmdstanr入門とreduce_sum()解説
Cmdstanr入門とreduce_sum()解説
Hiroshi Shimizu
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
Takahiro Iwase
Recommended
Shinyで確率分布を学ぶアプリ作った。あるいは、ShinyでD3.jsを使う方法
Shinyで確率分布を学ぶアプリ作った。あるいは、ShinyでD3.jsを使う方法
ksmzn
はじめてのShiny
はじめてのShiny
Kazuya Wada
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
20140920 tokyo r43
20140920 tokyo r43
Takashi Kitano
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
TensorFlow を使った機械学習ことはじめ (GDG京都 機械学習勉強会)
徹 上野山
Tokyo r33 beginner
Tokyo r33 beginner
Takashi Minoda
Cmdstanr入門とreduce_sum()解説
Cmdstanr入門とreduce_sum()解説
Hiroshi Shimizu
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
Takahiro Iwase
10分で分かるr言語入門 短縮バージョン 15-0117_upload用
10分で分かるr言語入門 短縮バージョン 15-0117_upload用
Nobuaki Oshiro
Julia最新情報 2015
Julia最新情報 2015
Kenta Sato
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Yohei Sato
R45LT
R45LT
TokorosawaYoshio
20151205 Japan.R SparkRとParquet
20151205 Japan.R SparkRとParquet
Ryuji Tamagawa
Jenkins によるレポートスクリプト管理
Jenkins によるレポートスクリプト管理
Tatsuya Tojima
「R for Cloud Computing」の紹介
「R for Cloud Computing」の紹介
Takekatsu Hiramura
前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)
Shinya Uryu
Tokyo r45 beginner_2
Tokyo r45 beginner_2
Takashi Minoda
SeekR Annual Search Trends Report 2015
SeekR Annual Search Trends Report 2015
Takekatsu Hiramura
Estimating the effect of advertising with Machine learning
Estimating the effect of advertising with Machine learning
Shota Yasui
オンラインTVサービスの分析事例
オンラインTVサービスの分析事例
Kazuya Wada
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz
Kazuya Wada
ハイレゾの話
ハイレゾの話
Kazuya Wada
Shiny-Serverあれこれ
Shiny-Serverあれこれ
Kazuya Wada
データサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkz
Kazuya Wada
R-3.0.0でGLM
R-3.0.0でGLM
Kazuya Wada
JuliaでGLM
JuliaでGLM
Kazuya Wada
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
Kazuya Wada
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
Kazuya Wada
そろそろRStudioの話
そろそろRStudioの話
Kazuya Wada
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
Kazuya Wada
More Related Content
Viewers also liked
10分で分かるr言語入門 短縮バージョン 15-0117_upload用
10分で分かるr言語入門 短縮バージョン 15-0117_upload用
Nobuaki Oshiro
Julia最新情報 2015
Julia最新情報 2015
Kenta Sato
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Yohei Sato
R45LT
R45LT
TokorosawaYoshio
20151205 Japan.R SparkRとParquet
20151205 Japan.R SparkRとParquet
Ryuji Tamagawa
Jenkins によるレポートスクリプト管理
Jenkins によるレポートスクリプト管理
Tatsuya Tojima
「R for Cloud Computing」の紹介
「R for Cloud Computing」の紹介
Takekatsu Hiramura
前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)
Shinya Uryu
Tokyo r45 beginner_2
Tokyo r45 beginner_2
Takashi Minoda
SeekR Annual Search Trends Report 2015
SeekR Annual Search Trends Report 2015
Takekatsu Hiramura
Estimating the effect of advertising with Machine learning
Estimating the effect of advertising with Machine learning
Shota Yasui
Viewers also liked
(11)
10分で分かるr言語入門 短縮バージョン 15-0117_upload用
10分で分かるr言語入門 短縮バージョン 15-0117_upload用
Julia最新情報 2015
Julia最新情報 2015
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
R45LT
R45LT
20151205 Japan.R SparkRとParquet
20151205 Japan.R SparkRとParquet
Jenkins によるレポートスクリプト管理
Jenkins によるレポートスクリプト管理
「R for Cloud Computing」の紹介
「R for Cloud Computing」の紹介
前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)
Tokyo r45 beginner_2
Tokyo r45 beginner_2
SeekR Annual Search Trends Report 2015
SeekR Annual Search Trends Report 2015
Estimating the effect of advertising with Machine learning
Estimating the effect of advertising with Machine learning
More from Kazuya Wada
オンラインTVサービスの分析事例
オンラインTVサービスの分析事例
Kazuya Wada
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz
Kazuya Wada
ハイレゾの話
ハイレゾの話
Kazuya Wada
Shiny-Serverあれこれ
Shiny-Serverあれこれ
Kazuya Wada
データサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkz
Kazuya Wada
R-3.0.0でGLM
R-3.0.0でGLM
Kazuya Wada
JuliaでGLM
JuliaでGLM
Kazuya Wada
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
Kazuya Wada
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
Kazuya Wada
そろそろRStudioの話
そろそろRStudioの話
Kazuya Wada
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
Kazuya Wada
Rでウォーリを探してみた
Rでウォーリを探してみた
Kazuya Wada
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Kazuya Wada
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
Kazuya Wada
RでGPU使ってみた
RでGPU使ってみた
Kazuya Wada
Tokyo.R#16 wdkz
Tokyo.R#16 wdkz
Kazuya Wada
More from Kazuya Wada
(16)
オンラインTVサービスの分析事例
オンラインTVサービスの分析事例
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz
ハイレゾの話
ハイレゾの話
Shiny-Serverあれこれ
Shiny-Serverあれこれ
データサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkz
R-3.0.0でGLM
R-3.0.0でGLM
JuliaでGLM
JuliaでGLM
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
そろそろRStudioの話
そろそろRStudioの話
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
Rでウォーリを探してみた
Rでウォーリを探してみた
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
RでGPU使ってみた
RでGPU使ってみた
Tokyo.R#16 wdkz
Tokyo.R#16 wdkz
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までご連絡下さい!!
Download now