NodeXLでfacebookのコメントデータを取得し描画する

このブログも1年以上放置してしまいましたが、久しぶりにNodeXLについて書きます。
2008年に社会学専攻の学生を対象としたネットワーク分析の授業をしたときはRを使い、それが『Rで学ぶデータサイエンス8 ネットワーク分析』につながったのですが、今大学でネットワーク分析の授業するならNodeXLを使うと思います。

WindowsPCでExcel2007以降という制約はありますが、それほどきつい制約ではないと思います。文系の学生にとってはプログラミングとかの方がきつい。


NodeXLは普段Excelを使っている感覚で使えますし、ファイルの扱いなどExcelの知識がそのまま使えます。加えて、ソーシャルメディアのデータ収集がAPIなどの知識がなくてもできます。twitterについてはデフォルトでできるし(以前の記事参照)facebookも追加プラグインで可能です。


この機能が魅力的なのは、ソーシャルメディアにおけるソーシャルグラフ(いわゆるマイミクとか友達関係)と書き込んだテキストの両方がExcel(NodeXL)を通して収集できて、分析、描画もできる点です。テキストマイニングだけ他のフリーソフト(KH Coderとかttmとか)を使う必要があります。

今回はNodeXLとttmを使ってfacebookのデータ収集とグラフ描画をしてみたいと思います。コマンドラインによる操作は一切不要です。(私自身は普段はRとMeCabを使っています。例えばこちらで公開のスライド参照。手軽さと自由度で使い分ければいいと思います。)


NodeXLはこちらからダウンロードしてインストール。
CodePlex Archive


facebookデータ収集用プラグインをこちらからダウンロード。SocialNetImporterというzipファイル。
CodePlex Archive

zipフィルを展開してFacebookAPI.DLLとSocialNetImporter.DLLというファイルをNodeXLのプラグインディレクトリ (例えばC:\Program Files\Social Media Research Foundation\NodeXL Excel Template\PlugIns)にコピー。


NodeXLを起動しNodeXLリボンのImportボタンからメニューを開くと"From Facebook Fan Page Network"と"From Facebook Personal Network"が追加されている。



"From Facebook Personal Network"からfacebookにログインすると自分のソーシャルグラフを取得できます。

"From Facebook Fan Page Network"からはfacebookのファンページの書き込みやソーシャルグラフを取得できます。

例として自民党石破幹事長のfacebookファンページのデータを読み込んでみます。



NodeXLリボンからImport→"From Facebook Fan Page Network"を選択。
Name/IDの欄にishibashigeru.fanpageと入力。
Networkは今回はBi-Modal NetworksのUser-Post NetworkからBased on commentsを選択します。
つまりユーザーとポストの二部グラフコメントに基づいてネットワークを抽出することになります。



Loginボタンを押すとfacebookへのログインを求められますので、ログインします。



ログインするとDownloadボタンが有効になるので、ダウンロードを開始し、しばらく待ちます。
すると、このような感じでデータが取得できます。



これをグラフ描画(ドキュメントアクション領域のRefresh Graphボタン)すると下のように、ファンページ事務局のポスト(今回は最近の2件分)に対してコメントを書いたユーザーが二部グラフとして描かれています。



取得したデータのComments列にはユーザーが書き込んだコメント本文があります。
折角ですから、このコメントデータをテキストマイニングしてみます。
今回はttmを使います。


人文・社会科学のためのテキストマイニング

人文・社会科学のためのテキストマイニング


こちらからttmをダウンロードします。MeCabがインストールされていなければMeCabもインストールします。
TTM: TinyTextMiner β version


入力用のCSVファイルを作ります。
先ほどのComments列をコピーし、テキストエディタなどに張り付けて、1列目にタグ(今回は連番)2列目にコメント本文がくるように整形し、CSV形式で保存します(ここではtext.csv)。
こんな感じ。



ttmを起動します。
解析タブでは、入力ファイル欄に先ほど作ったCSVファイルを指定します。mecab.exeの欄にはMeCabのインストール先を指定します(インストール先がデフォルトと異なる場合に注意)。
出力フォーマットのチェック欄には必要なものにチェックを入れます。とりあえず全部チェックしてかまいません。



詳細設定タブで、抽出したい品詞を選択します。ここでは名詞のみにチェックを入れました。



解析タブに戻って実行ボタンを押し、解析結果のファイルが出力されるのを待ちます。
解析結果についてはそれぞれの出力ファイルを見てもらえればわかると思います。
ここではtext_ttm5.csvというファイルに出力された語×語のクロス集計表から語の共起グラフを作ってみます。
text_ttm5.csvファイルを開き、品詞についての情報の部分(第2、第3行と第2、第3列)を削除します。
こんな感じ。



これを語×語の隣接行列として適当な名前のCSVファイル(ここではadj.csv)で保存しておきます。


NodeXLに戻り、NodeXLリボンのImportから"From Open Matrix Workbook"を選択します。
今作った隣接行列を指定、頂点の名前あり、無向きグラフを選択してインポートします。



語の共起グラフのデータがインポートされたら、VerticesのシートでVertex列をLabel列にコピー&ペースト。
Refresh Graphボタンを押すと語の共起グラフが描画されます。



実際にはループを消すとか色々調整も必要ですが、大体こんな感じでソーシャルメディアの情報収集とグラフ描画までできます。

既にテキストデータがある場合はKH Coderでグラフ描画できますが、データ取得からやってくれるのはNodeXLの便利なところです。

Analyzing Social Media Networks with NodeXL: Insights from a Connected World

Analyzing Social Media Networks with NodeXL: Insights from a Connected World