準備
AWSのt2microインスタンスにGroovyとjubatus 0.6.6が入ってる前提で。ほかはRecommenderチュートリアルに準じます。
まずはJubatusのライブラリを持ってきます。GroovyなのでGrapeを使えば良いですね。JubatusとmsgpackのMavenリポジトリを追加する形で
@GrabResolver(name='jubatus', root='http://download.jubat.us/maven')
@GrabResolver(name='msgpack', root='http://msgpack.org/maven2/')
@Grab('us.jubat:jubatus:[0.6,)')
import us.jubat.recommender.RecommenderClient
import us.jubat.common.Datum
println "done!"
とかやってあげます。なぜか
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during conversion: Error grabbing Grapes -- [download failed: org.slf4j#slf4j-api;1.6.1!slf4j-api.jar]
と言われたので slf4j-api-1.6.1.jar
を手動でダウンロードして ~/.m2/repository/org/slf4j/slf4j-api/1.6.1/
の中に放り込んだら動きました。ディレクトリはできてたんですが。何でしょうね。
Recommenderチュートリアル(Groovy)
作ったソースはこんな感じ。
update.groovy
@GrabResolver(name='jubatus', root='http://download.jubat.us/maven')
@GrabResolver(name='msgpack', root='http://msgpack.org/maven2/')
@Grab('us.jubat:jubatus:[0.6,)')
import us.jubat.recommender.RecommenderClient
import us.jubat.common.Datum
HOST = "127.0.0.1"
PORT = 9199
NAME = "recommender_baseball"
TIMEOUT = 5
columns = ["打率", "試合数", "打席", "打数", "安打", "本塁打", "打点", "盗塁", "四球", "死球", "三振", "犠打", "併殺打", "長打率", "出塁率", "OPS", "RC27", "XR27"]
csv = new File("dat/baseball.csv")
recommender = new RecommenderClient(HOST,PORT,NAME,TIMEOUT)
csv.eachLine{ line ->
datum = new Datum()
splitted = line.split(",")
datum.addString( "チーム", splitted[1] )
columns.eachWithIndex{ it, idx ->
datum.addNumber( it, splitted[idx+2] as Double )
}
println splitted[0]
recommender.updateRow(splitted[0], datum)
}
println "done!"
analyze.groovy
@GrabResolver(name='jubatus', root='http://download.jubat.us/maven')
@GrabResolver(name='msgpack', root='http://msgpack.org/maven2/')
@Grab('us.jubat:jubatus:[0.6,)')
import us.jubat.recommender.RecommenderClient
HOST = "127.0.0.1"
PORT = 9199
NAME = "recommender_baseball"
TIMEOUT = 5
columns = ["打率", "試合数", "打席", "打数", "安打", "本塁打", "打点", "盗塁", "四球", "死球", "三振", "犠打", "併殺打", "長打率", "出塁率", "OPS", "RC27", "XR27"]
csv = new File("dat/baseball.csv")
recommender = new RecommenderClient(HOST,PORT,NAME,TIMEOUT)
csv.eachLine{ line ->
splitted = line.split(",")
sr = recommender.similarRowFromId(splitted[0],4)
println "player ${splitted[0]} is similar to : ${sr[1].id} ${sr[2].id} ${sr[3].id}"
}
println "done!"
jubarecommenderを起動します。
$ jubarecommender --configpath npb_similar_player.json &
下記のコマンドで実行します。
データを突っ込む:
$ groovy update.groovy
長野久義
大島洋平
鳥谷敬
坂本勇人
中田翔
李大浩
陽岱鋼
糸井嘉男
...
...(以下略)
done!
Recommenderから結果を取得する:
$ groovy analyze.groovy
player 長野久義 is similar to : 糸井嘉男 ミレッジ 栗山巧
player 大島洋平 is similar to : 本多雄一 石川雄洋 荒波翔
player 鳥谷敬 is similar to : サブロー 糸井嘉男 和田一浩
player 坂本勇人 is similar to : 角中勝也 稲葉篤紀 秋山翔吾
player 中田翔 is similar to : 井口資仁 新井貴浩 中村紀洋
player 李大浩 is similar to : 中村紀洋 ミレッジ 中島裕之
player 陽岱鋼 is similar to : 秋山翔吾 枡田慎太郎 長谷川勇也
player 糸井嘉男 is similar to : 長野久義 栗山巧 ミレッジ
...
...(以下略)
done!