LoginSignup
4
4

More than 5 years have passed since last update.

JubatusのRecommenderチュートリアルをGroovyで書いてみた #jubatus_mokumoku

Last updated at Posted at 2015-02-21

準備

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!
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4