このスライドは、
ダメ院生のクソみたいな日常を
淡々と述べる物です。
過度な期待はしないでください。
あと、部屋は明るくして、
画面から3メートルは離れて
見やがって下さい。
Pythonによるソーシャルデータ分析
―わたしはこうやって修士号を取得しました―




                @who_you_me
このスライドの目的

●   とある元院生の修論体験記を通して
    –   Pythonのステマをする
    –   ソーシャルデータ分析に便利なツールを知る

    –   実際のソーシャルデータ分析の流れを知る
        ●   ただし自己流ですが
修論の概要

●   Twitterの分析

●   リスト機能を使って自分とこの学生のアカウ
    ントを抽出

●   2010年12月~2011年9月の期間、プロ
    フィール、フォロワー、ツイート等を取得
●   スケールこのくらい
    –   アカウント数:1,631
    –   ツイート数:1,174,684


●   このデータをもとにテキストマイニングやっ
    たりクラスタリングしたりネットワーク分析
    やったり
下準備

●   研究テーマどうしよう?
    –   適当にTwitter API叩いてたら楽しかったので、
        適当にデータ取って分析でもするか


●   言語なにつかおう?
    –   Python!!!!
    –   先生がPythonの人だったので
データの収集

●   Twitter APIからデータ取得

●   取り始める前に考えよう
    –   闇雲に集めても意味ないよ!
    –   分析対象は誰?何?


●   ランダムサンプリングはあんま意味ない
    –   ネットワーク分析できないし……
    –   対象となるトピック、コミュニティを絞ろう
●   生のAPI叩くより、各言語のラッパー使った
    方がお手軽
    –   PythonならTweepyがお勧めらしい


●   ただし自分はラッパー使いませんでした
    –   BASIC認証からOAuth認証に完全移行した直後
        で、まだ対応してなかった、、、
    –   urllib, urllib2, oauth2などでゴリゴリと
Twitter APIの注意点

●   1時間に350回しかAPI叩けない
    –   3垢作って回す
    –   毎月1日にデータ取得した
    –   日付変わると同時にスクリプト回す。昼前には終
        わる


●   よく落ちる(今は知らん)
●   仕様変わる(仕方ないけど)
データの永続化

●   何も考えずにMySQLを使った

●   今やるなら絶対にMongoDB使う
    –   JSONでデータ取ってそのままぶち込むだけ。ス
        キーマレス最高!!!
    –   MySQLだといちいちデータの形式に合わせてス
        キーマ定義するのめんどい
データ収集を始めて数ヶ月……
データ溜まってきたし、そろそろ分
     析するぞ!!
就活
内定出たことだし、
そろそろ分析するぞ!!
まあでもまだ時間あるし、
   ちょっと遊ぶか
ちょっと……?
気付けば9月……
(就活は4月に終わりました)
月末に中間発表会が
あったような……
分析するぞオラァ!!!!!

●   まずはグラフ描くよね
    –   フォロー数、フォロワー数の分布
    –   1ヶ月のツイート数
    –   こいつらの相関


●   matplotlibを使いましょう
    –   Pythonのグラフ描画ライブラリ
●   テキストマイニングでもやるか

●   ツイート内容でユーザー分類できたら面白い
    よね

●   MeCabで形態素解析
    –   ツイートを単語に区切る
●   ユーザごとの名詞の使用頻度を算出

●   k-meansでクラスタリング
cluster 0   cluster 1   cluster 2        cluster 3

・・・(名詞)     私(名詞)       僕(名詞)            俺(名詞)

ゆう(動詞)      わたし(名詞)     日本(名詞)           ww(名詞)

俺(名詞)       lt(名詞)      ありがとうございます(名詞)   僕(名詞)

ラーメン(名詞)    ありがとう(名詞)   ブログ(名詞)          マジ(名詞)

ちょっと(名詞)    gt(名詞)      考える(動詞)          www(名詞)

リアル(名詞)     ちゃう(動詞)     本(名詞)            at(名詞)

一橋(名詞)      うち(名詞)      仕事(名詞)           飲む(動詞)

嘘(名詞)       食べる(動詞)     問題(名詞)           やつ(名詞)

食べる(動詞)     バイト(名詞)     学生(名詞)           誰(名詞)

まあ(副詞)      ちゃん(名詞)     者(名詞)            リア充(名詞)

円(名詞)       がんばる(動詞)    性(名詞)            卒論(名詞)

とりあえず(副詞)   かわいい(名詞)    the(名詞)          バイト(名詞)

わかる(動詞)     ふる(動詞)      ため(名詞)           食う(動詞)

なに(名詞)      みんな(名詞)     読む(動詞)           君(名詞)

寝る(名詞)      好き(名詞)      書く(動詞)           わかる(動詞)

大学(名詞)      楽しみ(名詞)     必要(名詞)           行く(名詞)

曲(名詞)       先輩(名詞)      会(名詞)            友達(名詞)

怖い(形容詞)     素敵(名詞)      話(名詞)            やっぱ(副詞)

無い(形容詞)     ほんとに(副詞)    ところ(名詞)          とく(動詞)

帰宅(名詞)      こ(名詞)       おれ(名詞)           奴(名詞)
●   MeCab-pythonで形態素解析

●   PyClusterでクラスタリング

●   どっちもCで書いてあるから実行早い!!
よーしなんとか中間発表
 乗り切れそうだぞ!!


 と思った矢先……
PCを電車に置き忘れる
   \(^o^)/
翌日発見されて事無きを得ました
データのバックアップ超大事!!!
     (当たり前)
本格的に分析しましょう

●   中間発表乗り切ったので、本腰入れて分析し
    よう!!!
    –   発表終わった直後にPS3買いに走ったのは内緒だぜぇ



●   データクリーニングしないと
    –   ウチの学生じゃない垢含まれてる
    –   プロフィールでだいたい判別できるかな?
●   正解データ100個ぐらい用意してベイズ分類
    器でも作るか?
    –   精度低そう


●   たかだか2,000アカウントぐらいだし、手作
    業でやっちゃえ!!!!

●   大量のプロフィールを「正解」「不正解」
    「判別不能」に分類
●   2日ぐらいで終わったからよかったよね
ゴールが見えてきたぞ!

●   ユーザのクラスタリング
    –   情報発信クラスタ
    –   日常会話クラスタ(男)
    –   日常会話クラスタ(女)
    –   中間クラスタ


●   利用形態違うよねー
    –   情報発信はRT多い、PC使う
    –   日常会話は@多い、スマホ使う
●   「片想い」に注目
    –   Facebookは対称
    –   Twitterは非対称


●   情報発信する人ほど、片想い/片想われの比
    率が高い
    –   Twitterが情報発信によく使われるのって、関係
        が非対称だからなのかなー
●   ネットワーク分析もやりましょう
    –   利用目的違う人たちって、ネットワーク上の分布
        も離れてるのかな?


●   networkX!!!!!!
●   情報発信する人たちはやや固まる傾向
    –   他はバラバラ


●   とはいえ、違う利用目的の人も活発に交流し
    てるみたいだねー
と、分析終わったのはいいが

●   お前Python好きだな!

●   だって便利だもん

●   データ分析にはPythonだよ!!!
vs. C, Java, ...

●   Pythonの方が覚えるのが楽チン
●   コーディングも楽

●   もちろん実行速度は遅いけど……
vs. Ruby, Perl, ...

●   Pythonは分析系のライブラリが豊富
    –   Numpy, Scipy
    –   matplotlib
    –   NLTK
    –   networkX


●   オライリーのいい感じの本はだいたいPython
vs. R

●   最大のライバル!!!
    –   向こうはライバルと思ってないだろうけど……


●   統計計算に特化してるだけあって、Rはすっ
    ごく手軽に計算できる
●   でも、実はRって大規模データに向いてない
    んだよね……
    –   メモリがすぐに溢れる


●   Pythonの方がメモリの扱いはお上手な気がす
    る

●   Pythonだと API叩いてデータ収集→DBに保
    存→分析→グラフ描く まで1つの言語でで
    きる!!!
Pythonのステマは以上。続き

●   分析はできたけど、これで終わりじゃない
    よ!!

●   論文書いて発表するまでが修士論文です
修士号取るまでが修論です

●   TeXで書きました。Wordなんか使ってられ
    るか

●   製本出して提出すれば、あとは最終試験ある
    のみ!!
    –   先生の前でプレゼンして質疑応答
    –   先生優しいし、楽勝だろ(ホジ
最終試験当日の朝
PCがぶっ壊れる
  \(^o^)/
発表資料USBメモリに入れといて
      よかった
結論

●   Pythonは便利

●   日頃の行いが良くない人には報いが訪れる
    –   神様っているんだね!!!
    –   報いに備えてバックアップを


●   分析して終わり ではダメ
    –   論文とか、報告書とか、企画書とか、ブログとか
そう、どんなに良い分析したって
   アウトプットしないと
   何の意味もない!!!
というわけで、
発表者募集中です!!




    社会ネットワーク分析勉強会

Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―

  • 1.
  • 2.
  • 3.
  • 4.
    このスライドの目的 ● とある元院生の修論体験記を通して – Pythonのステマをする – ソーシャルデータ分析に便利なツールを知る – 実際のソーシャルデータ分析の流れを知る ● ただし自己流ですが
  • 5.
    修論の概要 ● Twitterの分析 ● リスト機能を使って自分とこの学生のアカウ ントを抽出 ● 2010年12月~2011年9月の期間、プロ フィール、フォロワー、ツイート等を取得
  • 6.
    スケールこのくらい – アカウント数:1,631 – ツイート数:1,174,684 ● このデータをもとにテキストマイニングやっ たりクラスタリングしたりネットワーク分析 やったり
  • 7.
    下準備 ● 研究テーマどうしよう? – 適当にTwitter API叩いてたら楽しかったので、 適当にデータ取って分析でもするか ● 言語なにつかおう? – Python!!!! – 先生がPythonの人だったので
  • 8.
    データの収集 ● Twitter APIからデータ取得 ● 取り始める前に考えよう – 闇雲に集めても意味ないよ! – 分析対象は誰?何? ● ランダムサンプリングはあんま意味ない – ネットワーク分析できないし…… – 対象となるトピック、コミュニティを絞ろう
  • 9.
    生のAPI叩くより、各言語のラッパー使った 方がお手軽 – PythonならTweepyがお勧めらしい ● ただし自分はラッパー使いませんでした – BASIC認証からOAuth認証に完全移行した直後 で、まだ対応してなかった、、、 – urllib, urllib2, oauth2などでゴリゴリと
  • 10.
    Twitter APIの注意点 ● 1時間に350回しかAPI叩けない – 3垢作って回す – 毎月1日にデータ取得した – 日付変わると同時にスクリプト回す。昼前には終 わる ● よく落ちる(今は知らん) ● 仕様変わる(仕方ないけど)
  • 11.
    データの永続化 ● 何も考えずにMySQLを使った ● 今やるなら絶対にMongoDB使う – JSONでデータ取ってそのままぶち込むだけ。ス キーマレス最高!!! – MySQLだといちいちデータの形式に合わせてス キーマ定義するのめんどい
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
    分析するぞオラァ!!!!! ● まずはグラフ描くよね – フォロー数、フォロワー数の分布 – 1ヶ月のツイート数 – こいつらの相関 ● matplotlibを使いましょう – Pythonのグラフ描画ライブラリ
  • 21.
    テキストマイニングでもやるか ● ツイート内容でユーザー分類できたら面白い よね ● MeCabで形態素解析 – ツイートを単語に区切る ● ユーザごとの名詞の使用頻度を算出 ● k-meansでクラスタリング
  • 22.
    cluster 0 cluster 1 cluster 2 cluster 3 ・・・(名詞) 私(名詞) 僕(名詞) 俺(名詞) ゆう(動詞) わたし(名詞) 日本(名詞) ww(名詞) 俺(名詞) lt(名詞) ありがとうございます(名詞) 僕(名詞) ラーメン(名詞) ありがとう(名詞) ブログ(名詞) マジ(名詞) ちょっと(名詞) gt(名詞) 考える(動詞) www(名詞) リアル(名詞) ちゃう(動詞) 本(名詞) at(名詞) 一橋(名詞) うち(名詞) 仕事(名詞) 飲む(動詞) 嘘(名詞) 食べる(動詞) 問題(名詞) やつ(名詞) 食べる(動詞) バイト(名詞) 学生(名詞) 誰(名詞) まあ(副詞) ちゃん(名詞) 者(名詞) リア充(名詞) 円(名詞) がんばる(動詞) 性(名詞) 卒論(名詞) とりあえず(副詞) かわいい(名詞) the(名詞) バイト(名詞) わかる(動詞) ふる(動詞) ため(名詞) 食う(動詞) なに(名詞) みんな(名詞) 読む(動詞) 君(名詞) 寝る(名詞) 好き(名詞) 書く(動詞) わかる(動詞) 大学(名詞) 楽しみ(名詞) 必要(名詞) 行く(名詞) 曲(名詞) 先輩(名詞) 会(名詞) 友達(名詞) 怖い(形容詞) 素敵(名詞) 話(名詞) やっぱ(副詞) 無い(形容詞) ほんとに(副詞) ところ(名詞) とく(動詞) 帰宅(名詞) こ(名詞) おれ(名詞) 奴(名詞)
  • 23.
    MeCab-pythonで形態素解析 ● PyClusterでクラスタリング ● どっちもCで書いてあるから実行早い!!
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
    本格的に分析しましょう ● 中間発表乗り切ったので、本腰入れて分析し よう!!! – 発表終わった直後にPS3買いに走ったのは内緒だぜぇ ● データクリーニングしないと – ウチの学生じゃない垢含まれてる – プロフィールでだいたい判別できるかな?
  • 29.
    正解データ100個ぐらい用意してベイズ分類 器でも作るか? – 精度低そう ● たかだか2,000アカウントぐらいだし、手作 業でやっちゃえ!!!! ● 大量のプロフィールを「正解」「不正解」 「判別不能」に分類 ● 2日ぐらいで終わったからよかったよね
  • 30.
    ゴールが見えてきたぞ! ● ユーザのクラスタリング – 情報発信クラスタ – 日常会話クラスタ(男) – 日常会話クラスタ(女) – 中間クラスタ ● 利用形態違うよねー – 情報発信はRT多い、PC使う – 日常会話は@多い、スマホ使う
  • 32.
    「片想い」に注目 – Facebookは対称 – Twitterは非対称 ● 情報発信する人ほど、片想い/片想われの比 率が高い – Twitterが情報発信によく使われるのって、関係 が非対称だからなのかなー
  • 33.
    ネットワーク分析もやりましょう – 利用目的違う人たちって、ネットワーク上の分布 も離れてるのかな? ● networkX!!!!!!
  • 36.
    情報発信する人たちはやや固まる傾向 – 他はバラバラ ● とはいえ、違う利用目的の人も活発に交流し てるみたいだねー
  • 37.
    と、分析終わったのはいいが ● お前Python好きだな! ● だって便利だもん ● データ分析にはPythonだよ!!!
  • 38.
    vs. C, Java,... ● Pythonの方が覚えるのが楽チン ● コーディングも楽 ● もちろん実行速度は遅いけど……
  • 39.
    vs. Ruby, Perl,... ● Pythonは分析系のライブラリが豊富 – Numpy, Scipy – matplotlib – NLTK – networkX ● オライリーのいい感じの本はだいたいPython
  • 41.
    vs. R ● 最大のライバル!!! – 向こうはライバルと思ってないだろうけど…… ● 統計計算に特化してるだけあって、Rはすっ ごく手軽に計算できる
  • 42.
    でも、実はRって大規模データに向いてない んだよね…… – メモリがすぐに溢れる ● Pythonの方がメモリの扱いはお上手な気がす る ● Pythonだと API叩いてデータ収集→DBに保 存→分析→グラフ描く まで1つの言語でで きる!!!
  • 45.
    Pythonのステマは以上。続き ● 分析はできたけど、これで終わりじゃない よ!! ● 論文書いて発表するまでが修士論文です
  • 46.
    修士号取るまでが修論です ● TeXで書きました。Wordなんか使ってられ るか ● 製本出して提出すれば、あとは最終試験ある のみ!! – 先生の前でプレゼンして質疑応答 – 先生優しいし、楽勝だろ(ホジ
  • 47.
  • 48.
  • 49.
  • 50.
    結論 ● Pythonは便利 ● 日頃の行いが良くない人には報いが訪れる – 神様っているんだね!!! – 報いに備えてバックアップを ● 分析して終わり ではダメ – 論文とか、報告書とか、企画書とか、ブログとか
  • 51.
    そう、どんなに良い分析したって アウトプットしないと 何の意味もない!!!
  • 52.
    というわけで、 発表者募集中です!! 社会ネットワーク分析勉強会