SlideShare a Scribd company logo
1 of 42
Download to read offline
部屋とYシャツと私
2015/12/05
Japan.R 2015@株式会社RCO
和田 計也
(4年ぶり2回目)
2015/12/05
いつもの
この発表は個人
の見解であり、
所属する組織の
公式見解ではあ
りません
サイバー系
2
サイバー系
2015/12/05
自己紹介
u和田 計也(@wdkz)
!
!
!
u静岡県袋井市出身
uサイバー系企業でデータマイニングエンジニア職
u 趣味は音楽鑑賞
u 最近は松浦亜弥ばっか聴いてます
サイバー系
3
サイバー系
2015/12/05
部屋とYシャツと私、といえば
サイバー系
4
サイバー系
u 2013年12月のライブで松浦亜弥がカヴァーした曲
u それから2年経って…
u 部屋 ̶> Shiny
u Yシャツ ̶> rApache
u 私 ̶> DeployR
2015/12/05
Shiny
サイバー系
u Rでweb applicationを作るためのframework
!
5
サイバー系
2015/12/05
rApache
サイバー系
u RとApacheでWeb Application を作るための
Framework
u mod_perl的なmod_R
6
サイバー系
2015/12/05
DeployR
サイバー系
u RでREST API作るためのFramework
7
サイバー系
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社)
2015/12/05
ここで一旦CMです
サイバー系
9
サイバー系
u サイバー系企業ではエンジニア絶賛募集中です!!
u 学会発表できます!
u 論文執筆できます!
u もちろん実務もバリバリやりましょう!
!
第9回SIG-DOCMAS研究会(2015) より  http://www.ai.soc.i.kyoto-u.ac.jp/docmas/ja/
2015/12/05
ここで一旦CMです
サイバー系
10
サイバー系
第9回SIG-DOCMAS研究会(2015) より  http://www.ai.soc.i.kyoto-u.ac.jp/docmas/ja/
Rでword2vec
やりたいじゃないですか
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()
2015/12/05
word2vecやりましょう
サイバー系
12
サイバー系
vectors.txtというモデルを生成(中身はテキストファイル)
2015/12/05
尚、現在は
サイバー系
13
サイバー系
u 2015年11月にGithub上に公開されてたwordVectors
ライブラリを使うほうが真っ当
  https://github.com/bmschmidt/wordVectors
!
u rPython使えば、今後も出てくるであろうpythonで書かれ
たライブラリをいち早くRでも利用できるよ!!
2015/12/05
今日やること
サイバー系
14
サイバー系
u 作成したmodelを使って、結果を返すようなweb
applicationをShiny, rApache, DeployRで作ってみま
しょう
!
  
2015/12/05
準備
サイバー系
15
サイバー系
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")
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)
}
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")
}
2015/12/05
Shiny
サイバー系
19
サイバー系
2015/12/05
Shinyで
サイバー系
20
サイバー系
u RStudioで「New Project」̶>「New Directory」
̶> 「Shiny Web Application」̶>適当な名前付ける
2015/12/05
Shinyで
サイバー系
21
サイバー系
u いい感じのテンプレートが生成されるので、後は適当にこの
ファイル2つserver.Rとui.Rを修正すれば良い
u ちなみに、生成されたままの状態で「Run App」するとこ
んなのが起動します→→→→→→→
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読み込んだり、
関数定義したりする
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
}
})
})
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表記微調整
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表記微調整
2015/12/05
Shinyで
サイバー系
26
サイバー系
u やってみた例
2015/12/05
rApache
サイバー系
27
サイバー系
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ベタ書き
2015/12/05
rApacheで
サイバー系
29
サイバー系
u まずはRookライブラリで動作チャック
rk <- Rhttpd$new()
rk$start(quiet = TRUE)
rk$add(app=run_w2v, name="word2vec")
rk$browse("word2vec")
一個前で定義した関数
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の一部になる
2015/12/05
rApacheは
サイバー系
31
サイバー系
やること
多くて面倒い
2015/12/05
DeployR
サイバー系
32
サイバー系
2015/12/05
deployRで
サイバー系
33
サイバー系
u 起動します
!
u Vivaldiブラウザで以下のURLにアクセスします
/path/to/deployr/version/startAll.sh
http://<deployr server>:7400/deployr
loginします
2015/12/05
deployRで
サイバー系
34
サイバー系
u ログイン後の画面
2015/12/05
deployRで
サイバー系
35
サイバー系
u Repository Manager
u まだ空ですね
ファイルをuploadしましょう
2015/12/05
deployRで
サイバー系
36
サイバー系
u Repository Manager
u ファイルupload後
ファイルがuploadできました!
      &
クリック
2015/12/05
deployRで
サイバー系
37
サイバー系
u Repository Manager
u uploadしたFileのプロパティ
ここら辺でアクセス制御設定できたり
クリック
2015/12/05
deployRで
サイバー系
38
サイバー系
u Repository Manager
u ブラウザ上で開発ができちゃいます!!
ここで
軽めの
開発
2015/12/05
deployRで
サイバー系
39
サイバー系
①
②
③
④
⑤
⑥
①結果をresという変数に入れるよう変更 
②APIへの入力値としてword <- king みたいな感じのを設定 
③resをAPIの戻り値として設定 & ④実行
⑤実行中の標準出力
⑥「API Response」ボタンを押して、意図する結果が返るか確認
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)
ここら辺
参考に
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社)
2015/12/05
最後に
サイバー系
42
サイバー系
u (主に) DeployR 使ってみたわー
u 「スピーカー欲しい人、低額で譲ります!」からの1年経過。
問い合わせ2件、コンバージョン0
u 再募集します!!(アンプ持ってない方、CambridgeAudio
製Azur 350A用意できます!)
これ↓の一個まえの型(GX100)左右ペア
@wdkzまでご連絡下さい!!

More Related Content

Viewers also liked

10分で分かるr言語入門 短縮バージョン 15-0117_upload用
10分で分かるr言語入門 短縮バージョン 15-0117_upload用10分で分かるr言語入門 短縮バージョン 15-0117_upload用
10分で分かるr言語入門 短縮バージョン 15-0117_upload用Nobuaki Oshiro
 
Julia最新情報 2015
Julia最新情報 2015Julia最新情報 2015
Julia最新情報 2015Kenta Sato
 
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組みTokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組みYohei Sato
 
20151205 Japan.R SparkRとParquet
20151205 Japan.R SparkRとParquet20151205 Japan.R SparkRとParquet
20151205 Japan.R SparkRとParquetRyuji Tamagawa
 
Jenkins によるレポートスクリプト管理
Jenkins によるレポートスクリプト管理Jenkins によるレポートスクリプト管理
Jenkins によるレポートスクリプト管理Tatsuya Tojima
 
「R for Cloud Computing」の紹介
「R for Cloud Computing」の紹介「R for Cloud Computing」の紹介
「R for Cloud Computing」の紹介Takekatsu Hiramura
 
前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)Shinya Uryu
 
SeekR Annual Search Trends Report 2015
SeekR Annual Search Trends Report 2015SeekR Annual Search Trends Report 2015
SeekR Annual Search Trends Report 2015Takekatsu Hiramura
 
Estimating the effect of advertising with Machine learning
Estimating the effect of advertising with Machine learningEstimating the effect of advertising with Machine learning
Estimating the effect of advertising with Machine learningShota Yasui
 

Viewers also liked (11)

10分で分かるr言語入門 短縮バージョン 15-0117_upload用
10分で分かるr言語入門 短縮バージョン 15-0117_upload用10分で分かるr言語入門 短縮バージョン 15-0117_upload用
10分で分かるr言語入門 短縮バージョン 15-0117_upload用
 
Julia最新情報 2015
Julia最新情報 2015Julia最新情報 2015
Julia最新情報 2015
 
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組みTokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
Tokyor45 カーネル多変量解析第2章 カーネル多変量解析の仕組み
 
R45LT
R45LTR45LT
R45LT
 
20151205 Japan.R SparkRとParquet
20151205 Japan.R SparkRとParquet20151205 Japan.R SparkRとParquet
20151205 Japan.R SparkRとParquet
 
Jenkins によるレポートスクリプト管理
Jenkins によるレポートスクリプト管理Jenkins によるレポートスクリプト管理
Jenkins によるレポートスクリプト管理
 
「R for Cloud Computing」の紹介
「R for Cloud Computing」の紹介「R for Cloud Computing」の紹介
「R for Cloud Computing」の紹介
 
前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)
 
Tokyo r45 beginner_2
Tokyo r45 beginner_2Tokyo r45 beginner_2
Tokyo r45 beginner_2
 
SeekR Annual Search Trends Report 2015
SeekR Annual Search Trends Report 2015SeekR 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 learningEstimating the effect of advertising with Machine learning
Estimating the effect of advertising with Machine learning
 

More from Kazuya Wada

オンラインTVサービスの分析事例
オンラインTVサービスの分析事例オンラインTVサービスの分析事例
オンラインTVサービスの分析事例Kazuya Wada
 
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkzKazuya Wada
 
ハイレゾの話
ハイレゾの話ハイレゾの話
ハイレゾの話Kazuya Wada
 
Shiny-Serverあれこれ
Shiny-ServerあれこれShiny-Serverあれこれ
Shiny-ServerあれこれKazuya Wada
 
データサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkzデータサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkzKazuya Wada
 
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~Kazuya Wada
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...Kazuya Wada
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話Kazuya Wada
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~Kazuya Wada
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみたKazuya Wada
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Kazuya Wada
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたKazuya Wada
 
RでGPU使ってみた
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみたKazuya Wada
 

More from Kazuya Wada (16)

オンラインTVサービスの分析事例
オンラインTVサービスの分析事例オンラインTVサービスの分析事例
オンラインTVサービスの分析事例
 
道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz道玄坂Lt#2 wdkz
道玄坂Lt#2 wdkz
 
ハイレゾの話
ハイレゾの話ハイレゾの話
ハイレゾの話
 
Shiny-Serverあれこれ
Shiny-ServerあれこれShiny-Serverあれこれ
Shiny-Serverあれこれ
 
データサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkzデータサイエンティストカジュアルトーク by wdkz
データサイエンティストカジュアルトーク by wdkz
 
R-3.0.0でGLM
R-3.0.0でGLMR-3.0.0でGLM
R-3.0.0でGLM
 
JuliaでGLM
JuliaでGLMJuliaでGLM
JuliaでGLM
 
Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~Rで触れる日本経済~RでVAR編~
Rで触れる日本経済~RでVAR編~
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみた
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
RでGPU使ってみた
RでGPU使ってみたRでGPU使ってみた
RでGPU使ってみた
 
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
 

DeployR使ってみた話