2013年7月9日火曜日

ビッグデータより小さいデータを扱うメモ

エクセルでは扱えないが、
サーバで分析するにはちょっと仰々しい場合の
データ分析はどうやればいんですかね。
Pythonを初めて間もないですが、
勉強がてら触ってみました。

■やったこと
ニコニコ動画のコメントデータを国立情報学研究所からDLして、
ほんの一部のデータを単純集計できる形にまでもってきました。
*DLした全データでやったわけではないです。

なお、ニコニコ動画のデータはここから落とせます。

■やった手順
1.コメントデータのダウンロード

2.Pythonでコメントのみを抽出

3.コメントをChaSenに投げて形態素情報を抽出<Pythonからじゃなく、シェルから>

4.ChaSenから取得した形態素情報をsedとかを使ってクレンジング<これもシェル>

5.sqliteに格納してSQLでコメントの単語を集計

■やった手順の詳細
1.コメントデータのダウンロード
 これはダウンロードをするサイトで詳しい情報がのっています。
 が、最初wgetがわからなかったのでつまづきました。。。
 wgetはmacportから一瞬でダウンロードできます。

2.Pythonでコメントのみを抽出
 ダウンロードしてきたデータは2種類あります。
 その2種類の最初のファイルだけを読み込むPythonコードです。
 なので、新しいディレクトリを作って、
 ・0001.dat.gz
 ・0001.tar.gz
 と下記の2つのPythonコードを同一ディレクトリに格納したら
 プログラムは動くかと思います。

input.py output.py
3.コメントをChaSenに投げて形態素情報を抽出
 そもそも、ChaSenとは、日本語の文章を名詞とか連体詞とか語彙の機能別に
 仕分けてくれるすごいツールのようです。

 例)
   -------
 熱意 ネツイ 熱意 名詞-一般
 に 助詞-格助詞-一般
 燃える モエル 燃える 動詞-自立 一段 基本形
 商社マン ショウシャマン 商社マン 名詞-一般
 ------

 で、僕がやったのは、
 すごく原始的な方法です。。


4.ChaSenから取得した形態素情報をsedとかを使ってクレンジング
 3で出たデータをそのままsqliteに突っ込む方法があるかと思うのですが、
 なかなかうまく入らなかったのでクレンジングしました。
 *ChaSenが吐き出すデータはタブ区切りっぽいのですが、
  sqlite側を調整してもデータが入らず、
  吐き出したデータ側を調整することにしました。

5.sqliteに格納してSQLでコメントの単語を集計
 あとはカンマ区切りを指定して、output_8.txtをsqliteに突っ込めば
 SQLで集計したり、Rで分析したりすることができるかと。
 ただ、最初の読み込みで1ファイルだけしか取得していないので、
 全データでやるには調整する必要があります。
 また、EOSを途中で消しちゃっているので文章がひとつながりになっていたり、
 コメントと動画情報が紐づいていなかったりするので、
 まだまだ整備をする必要があるかと思います。

にしても、ちょっと効率の悪いやり方っすね。
もっといいやり方ないかな。。
まともにこのまま、全データ読み込もうとするとHDDがいくらあっても足りなくなるな。。