-
Notifications
You must be signed in to change notification settings - Fork 3
How to upload csv via ruby client
TAKEI Yuya edited this page Feb 27, 2013
·
8 revisions
Bazilサービスでは以下のようなヘッダ付きcsvを使いトレーニングデータの登録をしています。
string,string,number,number
男,太郎,180,80
女,花子,155,40
男,裕也,163,75これに対し、RubyClientではJSONをベースにしたインターフェースになっています。 ここでは、BazilのCSVをRubyClient経由でBazilサービスにアップロードする簡単なサンプルスクリプトを紹介します。 モデルやコンフィグのIDや、元データの形式など、必要に応じて書き換えてご利用ください。
#!/usr/bin/env ruby
# encoding: utf-8
require 'bazil'
require 'csv'
require 'json'
# https://github.com/pfi/bazil_ruby_client/wiki/How-to-use の「1. 準備」と「2. クライアントの作成」を参考にクライアントを作る
client = Bazil::Client.new()
# モデルIDとコンフィグIDからモデルを取得します。
# モデルIDとコンフィグIDはWebから確認できるほか、RubyClientからもアクセス可能なモデルの一覧を取得できます。
# 詳しくは How-to-use の 「3. モデルの取得」をご覧ください。
model = client.model(1, 23)
# RubyのCSVライブラリを使ってCSVファイルを読み込みます。
# ここでは"name_demo.csv"をいう名前を使っています。
CSV::open('name_demo.csv', 'r') {|csv|
# 先頭二行にヘッダ(型とラベル)
types = csv.readline
labels = csv.readline
# 左1列はアノテーション(正解のラベル)
annotation_type = types.shift
annotation_label = labels.shift
raise "header must have same # of columns" if types.size != labels.size
raise "empty data" if types.size == 0
# CSVのボディーの読み込み
csv.each{|row|
# アノテーション
annotation = row.shift
raise "each row have same # of columns as header" if row.size != types.size
# データ
data = {}
row.map.with_index{|value, index|
case types[index]
when 'string'
data[labels[index]] = value.to_s
when 'number'
data[labels[index]] = value.to_f
else
raise "Unknown type '#{types[index]}'"
end
}
# モデルに学習データを追加する
model.train(annotation: annotation, data: data)
}
}
# 試しにクエリを投げてみる
res = model.query({'content' => '綾 子'})
# 判定された結果
p res["classification_result"]
# => "女"
# それぞれの結果のスコア
p res["score"]
# =>{"男"=>-0.289951503277, "女"=>0.289951503277}