入門機会学習11章
ソーシャルグラフの分析
@ringtaro
11章でやること
• ソーシャルネットワーク分析・グラフ理
論がどういうものかを知る
• ツイッターのネットワークデータを収集
してみる
• 収集したネットワークデータでクラスタ
リングを試してみる
•
構築する
ソーシャルネットワーク分析
• ソーシャルネットワークとは様々な関係
によって結び付けられたノード(個人や組
織)から成る社会的な構造(Wikipediaより)。
• 「ノード」と「つながり」から分析を行
うので、ツールとしては、主にグラフ理
...
ソーシャルネットワーク分析の
例
• エルデシュ数
– エルデシュ=20世紀で最も多くの論文を残した(と言って
も過言ではない)数学者
– ある数学者がエルデシュと共同論文を執筆した場合エルデ
シュ数は1

• ソシオメトリー
–

L・モレノ...
グラフについて
• グラフはノードの集合とエッジの集合で
構成される。
• ノード
– 節点・頂点
– node,vertex

• エッジ
– 枝・辺・リンク
– edge,link
グラフについて
無向?有向?
• フェイスブックは無向グラフ
• ツイッターは有向グラフ
Rでのグラフのプログラミング
• igraphライブラリを使ってグラフの分析を
行う。
• エッジリストを作り、igraphの形式に変換
する。
• エッジリスト
– グラフを表す2列の行列

• c(integer(0), integer(0...
試してみる
• グラフのプログラミング
• ringtaro / 11-SNA.R
– https://gist.github.com/ringtaro/7544101
タの収集
• ツイッターの制限があるので必要なデータを
収集するのは厳しい
• なので、Google SocialGraph APIを使った。
• でも、本の執筆時と出版時でSGAの仕様が変
わったのでサンプルを動作させてもちゃんと
した結果は...
Google SocialGraphのデータ構造
{
"canonical_mapping": {
"http://twitter.com/drewconway": "http://twitter.com/drewconway"
},
"nod...
試してみる
• JSONのデータからTwitterネットワークを
取り出す。
• ringtaro / 11-SNA.R
– https://gist.github.com/ringtaro/7544101

• ringtaro / ring...
どうやってグラフオブジェクトを
収集するか
• 1つのツイッターユーザーをシードにする
• そのシードからネットワークを構築する
• スノーボールサンプリング(雪だるま式標
本抽出)
– 1つのシードに対する入出力次数接続を見つけ
る
– その...
イメージ

Seed
イメージ

Seed
イメージ

Seed
イメージ

Seed
プログラムの階層
• twitter.snowball(シードと次数を受け取って雪だるま
式標本抽出しigraphグラフオブジェクトを返す)

– twitter.network (ユーザー名を受け取り、SGAに接続して
ネットワークのエッジリ...
試してみる
• スノーボールサンプリング
• ringtaro / 11-SNA.R
– https://gist.github.com/ringtaro/7544101
ツイッターネットワークの分析
• 準備
– ノードにラベルを付ける(Gephi可視化のため)

• スクリーニング
– 2コア
– エゴネットワーク

• 階層的クラスタリング
– 系統樹
– 区分データを追加
– Gephiによる可視化

•...
ノードにラベルを付ける
• Gephiで可視化するためにノードにラベル
をつける。
• dataフォルダにある.graphmlファイルには
付いてます。
試してみる
• ノードにラベルを付ける
• Gephiで表示してみよう
• ringtaro / 11-SNA.R
– https://gist.github.com/ringtaro/7544101
k-コア
• 最低k個以上の次数を持つ最大サブクラス
• 2コアのサブグラフを作ると、他と密に結
びついていないノードを削除することが
できる
エゴネットワーク
• ネットワーク内の1つのノードを取り囲む
ソーシャルグラフの構造
• シードとその隣接ノード
試してみる
• k-コア
• エゴネットワーク
• ringtaro / 11-SNA.R
– https://gist.github.com/ringtaro/7544101
階層的クラスタリング
• 密接に接続されているノードほどノード
間のホップが少なく類似していると考え
る
• 系統樹(デンドログラム)
試してみる
• 階層的クラスタリング
• 区分ごとに色分けして、Gephiで可視化
• ringtaro / 11-SNA.R
– https://gist.github.com/ringtaro/7544101
おすすめユーザー
• 「シードがフォローしていない「フォロ
アーのフォロアー」」(開いた三角形)の中
で最もフォローされている人
• やってみる
試してみる
• おすすめユーザー
• ringtaro / 11-SNA.R
– https://gist.github.com/ringtaro/7544101
区分ごとのおすすめユーザー
• 階層的クラスタリングで分けた区分ごと
のおすすめユーザー
– 似たようなユーザーの間で共通してフォロー
されているならより精度が高まるだろうとい
う考え

• やってみる
• 可視化されたおすすめユーザー
試してみる
• おすすめユーザー
• ringtaro / 11-SNA.R
– https://gist.github.com/ringtaro/7544101
まとめ
• ツイッターの「
構築する ことにより、
ネットワークデータの収集から分析まで、
ソーシャルネットワーク分析の一通りを
体験した
Upcoming SlideShare
Loading in …5
×

入門機会学習11章ソーシャルグラフの分析

1,982 views

Published on

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,982
On SlideShare
0
From Embeds
0
Number of Embeds
38
Actions
Shares
0
Downloads
14
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

入門機会学習11章ソーシャルグラフの分析

  1. 1. 入門機会学習11章 ソーシャルグラフの分析 @ringtaro
  2. 2. 11章でやること • ソーシャルネットワーク分析・グラフ理 論がどういうものかを知る • ツイッターのネットワークデータを収集 してみる • 収集したネットワークデータでクラスタ リングを試してみる • 構築する
  3. 3. ソーシャルネットワーク分析 • ソーシャルネットワークとは様々な関係 によって結び付けられたノード(個人や組 織)から成る社会的な構造(Wikipediaより)。 • 「ノード」と「つながり」から分析を行 うので、ツールとしては、主にグラフ理 論を用いている。
  4. 4. ソーシャルネットワーク分析の 例 • エルデシュ数 – エルデシュ=20世紀で最も多くの論文を残した(と言って も過言ではない)数学者 – ある数学者がエルデシュと共同論文を執筆した場合エルデ シュ数は1 • ソシオメトリー – L・モレノ • 人々 幸福にと めに、友人関係をマッピング 影響するかを知るた – • 黒人と白人の小学生の子供の間の人種的な亀裂 • 150人の法則(Wikipediaより) – 現実のソーシャルネットワークにおけるメンバーは150人 に限定される
  5. 5. グラフについて • グラフはノードの集合とエッジの集合で 構成される。 • ノード – 節点・頂点 – node,vertex • エッジ – 枝・辺・リンク – edge,link
  6. 6. グラフについて
  7. 7. 無向?有向? • フェイスブックは無向グラフ • ツイッターは有向グラフ
  8. 8. Rでのグラフのプログラミング • igraphライブラリを使ってグラフの分析を 行う。 • エッジリストを作り、igraphの形式に変換 する。 • エッジリスト – グラフを表す2列の行列 • c(integer(0), integer(0)) – 何もないエッジを表すベクトル
  9. 9. 試してみる • グラフのプログラミング • ringtaro / 11-SNA.R – https://gist.github.com/ringtaro/7544101
  10. 10. タの収集 • ツイッターの制限があるので必要なデータを 収集するのは厳しい • なので、Google SocialGraph APIを使った。 • でも、本の執筆時と出版時でSGAの仕様が変 わったのでサンプルを動作させてもちゃんと した結果は返らない。 • なおかつ、SGAは2012年1月にサービスを終了 している。Σ(゚Д゚;エーッ! • 試せない!どうしよう!
  11. 11. Google SocialGraphのデータ構造 { "canonical_mapping": { "http://twitter.com/drewconway": "http://twitter.com/drewconway" }, "nodes": { "http://twitter.com/drewconway": { "attributes": { "exists": "1", "bio": "Hopeful academic, data nerd, average hacker, student of conflict.", "profile": "http://twitter.com/drewconway", "rss": "http://twitter.com/statuses/user_timeline/drewconway.rss", "atom": "http://twitter.com/statuses/user_timeline/drewconway.atom", "url": "http://twitter.com/drewconway" }, "nodes_referenced": { "http://blog.fkoji.com/": {"types": [ "me" ]}, "http://twitter.com/8maki": {"types": [ "contact" ]}, "http://twitter.com/aibamika": { "types": [ "contact" ] }, }, "nodes_referenced_by": { "http://twitter.com/244": { "types": [ "contact" ] }, "http://twitter.com/37to": { "types": [ "contact" ] }, "http://twitter.com/adamrocker": { "types": [ "contact" ] }, } } } }
  12. 12. 試してみる • JSONのデータからTwitterネットワークを 取り出す。 • ringtaro / 11-SNA.R – https://gist.github.com/ringtaro/7544101 • ringtaro / ringtaro.json – https://gist.github.com/ringtaro/7544028
  13. 13. どうやってグラフオブジェクトを 収集するか • 1つのツイッターユーザーをシードにする • そのシードからネットワークを構築する • スノーボールサンプリング(雪だるま式標 本抽出) – 1つのシードに対する入出力次数接続を見つけ る – その接続を新たなシードとして使う – この処理を決まった次数だけ繰り返す • このケーススタディでは2周期 – 最初のシードユーザーがフォローすべき人を見つけるた め – SGAの制限を超えないため
  14. 14. イメージ Seed
  15. 15. イメージ Seed
  16. 16. イメージ Seed
  17. 17. イメージ Seed
  18. 18. プログラムの階層 • twitter.snowball(シードと次数を受け取って雪だるま 式標本抽出しigraphグラフオブジェクトを返す) – twitter.network (ユーザー名を受け取り、SGAに接続して ネットワークのエッジリストを返す) • build.ego(ネットワークをJSON形式で受け取り、ツイッターユー ザーネットワークのエッジリストを返す) – find.twitter(ツイッターユーザーだけを抽出する) – get.seeds(エッジリストからシード以外のユーザーを抽出)
  19. 19. 試してみる • スノーボールサンプリング • ringtaro / 11-SNA.R – https://gist.github.com/ringtaro/7544101
  20. 20. ツイッターネットワークの分析 • 準備 – ノードにラベルを付ける(Gephi可視化のため) • スクリーニング – 2コア – エゴネットワーク • 階層的クラスタリング – 系統樹 – 区分データを追加 – Gephiによる可視化 • おすすめユーザーエンシ 構築 • 区分ごとのおすすめユーザー
  21. 21. ノードにラベルを付ける • Gephiで可視化するためにノードにラベル をつける。 • dataフォルダにある.graphmlファイルには 付いてます。
  22. 22. 試してみる • ノードにラベルを付ける • Gephiで表示してみよう • ringtaro / 11-SNA.R – https://gist.github.com/ringtaro/7544101
  23. 23. k-コア • 最低k個以上の次数を持つ最大サブクラス • 2コアのサブグラフを作ると、他と密に結 びついていないノードを削除することが できる
  24. 24. エゴネットワーク • ネットワーク内の1つのノードを取り囲む ソーシャルグラフの構造 • シードとその隣接ノード
  25. 25. 試してみる • k-コア • エゴネットワーク • ringtaro / 11-SNA.R – https://gist.github.com/ringtaro/7544101
  26. 26. 階層的クラスタリング • 密接に接続されているノードほどノード 間のホップが少なく類似していると考え る • 系統樹(デンドログラム)
  27. 27. 試してみる • 階層的クラスタリング • 区分ごとに色分けして、Gephiで可視化 • ringtaro / 11-SNA.R – https://gist.github.com/ringtaro/7544101
  28. 28. おすすめユーザー • 「シードがフォローしていない「フォロ アーのフォロアー」」(開いた三角形)の中 で最もフォローされている人 • やってみる
  29. 29. 試してみる • おすすめユーザー • ringtaro / 11-SNA.R – https://gist.github.com/ringtaro/7544101
  30. 30. 区分ごとのおすすめユーザー • 階層的クラスタリングで分けた区分ごと のおすすめユーザー – 似たようなユーザーの間で共通してフォロー されているならより精度が高まるだろうとい う考え • やってみる • 可視化されたおすすめユーザー
  31. 31. 試してみる • おすすめユーザー • ringtaro / 11-SNA.R – https://gist.github.com/ringtaro/7544101
  32. 32. まとめ • ツイッターの「 構築する ことにより、 ネットワークデータの収集から分析まで、 ソーシャルネットワーク分析の一通りを 体験した

×