2012-01-27
■Solrを使ったレシピ検索のプロトタイピング 
モーショノロジー#1で発表してきました http://atnd.org/events/23608
資料: http://www.slideshare.net/penguinana/solr-11287004
他の発表の資料は順次以下から見れるようになるようです。
クックパッドではchankoという仕組みを使って本番で複数のバージョンを安全にデプロイできるようにしています。
これによって1つの場所を複数のチームが同時に改善したりできるようになりました。
chankoについては以下をお読みください。
2011-09-13
■「Solr@Cookpad」- Solr勉強会で発表してきました 
9月12日にECナビにて第6回Solr勉強会がありました。事例紹介に「Solr@cookpad」という発表で参加させて頂いた時の資料を公開しておきます。
みなさんの発表が面白くてすごく勉強になりました。勉強会の様子はこちらに詳細に書かれています。 http://johtani.jugem.jp/?eid=26
スライド:Solr@cookpad
分かりにくいスライドかも…お気づきの点ありましたらコメント欄などでお知らせください。
ところで
また、スライドでも少し紹介したtwitter検索(yats)ですが、15億docのセットを150msで7000万req/月で返していて、Solrのベンチマークにも役立っておったのですがAPIの規約にひっかかっている(第三者がオリジナルのAPIを無許諾で提供してはならない)部分があって、先月更新を止めました。今まで使ってくださっていたみなさんありがとうございました...!
2011-02-03
■yatsが回収した2011年のお正月ダンプ 
久しぶりにTwitter日本語圏のダンプを公開したいと思います。
2010年12月31日から2011年1月1日のつぶやきのMySQLダンプです(load dataで取り込むタイプ)
yatsの収集対象は
- 公開ユーザー状態でつぶやかれたもののうち
- 過去3週間以内につぶやいたユーザーからのもの、
- 累積400〜つぶやきの日本語ユーザーからのもの
です。ベストエフォートです。
streaming apiで流れてくるつぶやきもだいたい記録しています。
スキーマ:
CREATE TABLE `buffer_2011` ( `id_autoinc` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `id` bigint(20) unsigned NOT NULL, `user` varchar(20) NOT NULL, `content` text NOT NULL, `source` text, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id_autoinc`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8
記録されている内容:
CREATE TABLE `buffer_yyyymmdd` ( `id_autoinc` yats内部ID, `id` ステータスID, `user` スクリーンネーム, `content` 本文, `source` 投稿に用いたクライアント情報, `time` つぶやかれた時刻, PRIMARY KEY (`id_autoinc`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8
データ:
http://api.yats-data.com/data/20101231-201101.bz2
使い方:
$ wget http://api.yats-data.com/data/20101231-201101.bz2 $ bunzip2 20101231-201101.bz2 $ mysql -u hoge
mysql > use hogebase; mysql > CREATE TABLE `buffer_2011` ( `id_autoinc` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `id` bigint(20) unsigned NOT NULL, `user` varchar(20) NOT NULL, `content` text NOT NULL, `source` text, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id_autoinc`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; mysql > LOAD DATA INFILE 'buffer_20101231-201101' INTO TABLE buffer_2011; mysql> select * from buffer_2011 where user like 'fuba' limit 1\G ...
その他の使い方:
MySQLダンプですがスキーマは必要以上にインデックスを張っていません。
用途に応じて張ってみてください。
MySQLに入れずに使うことも出来ます。
bunzip2後のファイルは以下のようになっています。
$ bzcat 20101231-201101.bz2 |head id_autoinc id user content source time id_autoinc id user content source time id_autoinc id user content source time
本文などに改行が入る場合など例外もありますのでちょっと処理が面倒かもですが、
違うデータベースに入れてもいいし、そのまま使っても良いと思います。
2011-01-30
■twitter日本語ユーザーのソーシャルグラフダンプ 
twitter日本語ユーザー100万人分のフォローイングとプロフィールのダンプを作成しました。
レコメンデーションの実験や分析に使えるかもしれません。
プロフィール:
108万人分のスクリーンネームや自己紹介文
フォローイング:
103万人分のフォローイング先ID一覧です。
展開すると300万ノード 2.8億エッジになります。(※被フォローエッジを含みません)
以下のURLからダウンロードできます
今回はMongoDBをストレージにしました。ダンプの利用にはMongoDBのインストールが必要となります。
https://github.com/penguinco/yats-socialgraph-dump
使い方:
$ git clone git://github.com/penguinco/yats-socialgraph-dump.git $ cd yats-socialgraph-dump/ $ less README.md $ bundle # scripts/tutorial.rbを使うために必要なgemが入ります。
データの準備ができるとこんな感じで使えます。
pp profiles.find_one("screen_name" => 'fuba')
fuba_internal_id = profiles.find_one("screen_name" => "fuba")["internal_id"] fuba_following = friends.find_one("internal_id" => fuba_internal_id) shokai_internal_id = profiles.find_one("screen_name" => "shokai")["internal_id"] #is shokai followed by fuba? pp fuba_following["ids"].include?(shokai_internal_id)
=> true
#output id csv friends.find("internal_id" => fuba_internal_id).each do |me| puts me["ids"].map{|id| id.to_s}.join(",")[0,100] end
=> 164743710,51774619,18574112,6064612,175079593,99697384,101801049,123140561,15210265,180215207,156135
#output screen_name csv friends.find("internal_id" => fuba_internal_id).each do |me| result = [] me["ids"].each do |id| prof = profiles.find_one("internal_id" => id) if prof != nil result << prof["screen_name"] else result << id.to_s end end puts result.join(",")[0,100] end
=>164743710,51774619,umaiboo,6064612,kanda_daisuke,bolze_doujin,KEUMAYA,Joey__Jones,0mg,ma2omat2,amasa
便利〜
レコメンデーションの実験とか、プロフィールから分類器とか
Pagerank求めるとかできるのかもしれないですね。
何か面白いものができたら教えてください!
TODO
- リプライの頻度情報を追加する
- 定期的に更新される
2010-09-19
■yatsが回収したTwitter日本語圏 9月(1/2) 
久しぶりにTwitter日本語圏のダンプを公開したいと思います。
9/1-9/16の1.77億つぶやきのMySQLダンプです(load dataで取り込むタイプ)
yatsの収集対象は
- 公開ユーザー状態でつぶやかれたもののうち
- 過去3週間以内につぶやいたユーザーからのもの、
- 累積200〜400つぶやきの日本語ユーザーからのもの
です。ベストエフォートです。
streaming apiで流れてくるつぶやきもだいたい記録しています。
スキーマ:
CREATE TABLE `buffer_20100916` ( `id_autoinc` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `id` bigint(20) unsigned NOT NULL, `user` varchar(20) NOT NULL, `content` text NOT NULL, `source` text, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id_autoinc`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2179575472 DEFAULT CHARSET=utf8
記録されている内容:
CREATE TABLE `buffer_yyyymmdd` ( `id_autoinc` yats内部ID, `id` ステータスID, `user` スクリーンネーム, `content` 本文, `source` 投稿に用いたクライアント情報, `time` つぶやかれた時刻, PRIMARY KEY (`id_autoinc`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=x DEFAULT CHARSET=utf8
データ:
http://yats-api.no-ip.org/data/buffer_20100916.bz2 8.7G (36GB)
使い方:
$ wget http://yats-api.no-ip.org/data/buffer_20100916.bz2 $ bunzip2 buffer_20100916.bz2 $ mysql -u hoge
mysql > use hogebase; mysql > CREATE TABLE `buffer_20100916` ( `id_autoinc` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `id` bigint(20) unsigned NOT NULL, `user` varchar(20) NOT NULL, `content` text NOT NULL, `source` text, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id_autoinc`), UNIQUE KEY `id` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2179575472 DEFAULT CHARSET=utf8; mysql > LOAD DATA INFILE 'buffer_20100916' INTO TABLE buffer_20100916; mysql> select * from buffer_20100916 where user like 'fuba' limit 1\G id_autoinc: 1979328940 id: 22534370639 user: fuba content: 当分夏だろ source: <a href="http://sites.google.com/site/peraperaprv/Home" rel="nofollow">P3:PeraPeraPrv</a> time: 2010-08-31 00:39:46 1 row in set (19.56 sec)
その他の使い方:
MySQLダンプですがスキーマは必要以上にインデックスを張っていません。
用途に応じて張ってみてください。
MySQLに入れずに使うことも出来ます。
bunzip2後のファイルは以下のようになっています。
$ bzcat buffer_20100916.bz2 |head id_autoinc id user content source time id_autoinc id user content source time id_autoinc id user content source time
本文などに改行が入る場合など例外もありますのでちょっと処理が面倒かもですが、
違うデータベースに入れてもいいし、そのまま使っても良いと思います。

私はWeb Miningの研究をしているものです。
たいへん不躾なお願いなのですが、このTwitterダンプを研究目的に使わせて頂いてよろしいでしょうか?基本的に利益などが発生する研究ではありませんが、念のため、提供者様から許可をいただきたいと考えています。
よろしければ、私までメールを頂ければ幸いです。