Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

大規模ネットワーク分析 篠田

4,034 views

Published on

ネットワーク分析のための基礎的内容.所属は2012年当時のものです

Published in: Science
  • Be the first to comment

大規模ネットワーク分析 篠田

  1. 1. 情報処理学会連続セミナー情報処理学会連続セミナー情報処理学会連続セミナー情報処理学会連続セミナー2012「ビックデータとスマートな社会」「ビックデータとスマートな社会」「ビックデータとスマートな社会」「ビックデータとスマートな社会」 第4回「ソーシャルメディアの大規模ネットワーク分析」第4回「ソーシャルメディアの大規模ネットワーク分析」第4回「ソーシャルメディアの大規模ネットワーク分析」第4回「ソーシャルメディアの大規模ネットワーク分析」 大規模大規模大規模大規模ネットワークネットワークネットワークネットワークのののの 構造的構造的構造的構造的特徴量の計算手法特徴量の計算手法特徴量の計算手法特徴量の計算手法 (独)理化学研究所 基幹研究所 光グリーンテクノロジー特別研究ユニット 篠田孝祐 2012/10/10 ビックデータとスマートな社会(第4回) 1
  2. 2. 自己紹介自己紹介自己紹介自己紹介 • 所属 (独)理化学研究所 基幹研究所 光グリーンテクノロジー特別研究ユニット • 学位 博士(知識科学)博士(知識科学)博士(知識科学)博士(知識科学) 北陸先端科学技術大学院大学 知識科学研究科 • 専門 – 社会シミュレーション、ネットワーク分析 • ネットワーク分析の対象 – ネットワークの成長モデル – 学術・国際会議ネットワーク – 公共交通機関(鉄道、高速道路、バス) 2012/10/10 ビックデータとスマートな社会(第4回) 2
  3. 3. 本日の概要 • ネットワーク分析の概要として、その特徴をし る手がかりとなる、構造的特長量ならびに ネットワーク中心性の算出方法を示す • それらを求めるためのソフトならびにライブラ リを紹介する • ならびに、大規模な(数10万ノード)ネットワー クのネットワークに適応できるように簡易な並 列化の手法を紹介する 2012/10/10 ビックデータとスマートな社会(第4回) 3
  4. 4. 予定予定予定予定 1. ネットワーク分析概要ネットワーク分析概要ネットワーク分析概要ネットワーク分析概要 2. ネットワークの特徴を知るネットワークの特徴を知るネットワークの特徴を知るネットワークの特徴を知る 3. 構造的特長量・中心性の計算構造的特長量・中心性の計算構造的特長量・中心性の計算構造的特長量・中心性の計算 1. ネットワークの記述 2. 代表的なソフトウェア、ライブラリ 4. ネットワークを記述するネットワークを記述するネットワークを記述するネットワークを記述する 5. データを解析するデータを解析するデータを解析するデータを解析する 1. ソフトウェアを用いた解析 2. プログラムを用いた解析 6. 大規模ネットワーク分析のための並列化大規模ネットワーク分析のための並列化大規模ネットワーク分析のための並列化大規模ネットワーク分析のための並列化 2012/10/10 ビックデータとスマートな社会(第4回) 4
  5. 5. 1. ネットワーク分析概要ネットワーク分析概要ネットワーク分析概要ネットワーク分析概要 2012/10/10 ビックデータとスマートな社会(第4回) 5
  6. 6. ネットワーク分析の流れネットワーク分析の流れネットワーク分析の流れネットワーク分析の流れ 2012/10/10 ビックデータとスマートな社会(第4回) 6
  7. 7. ネットワーク分析とはネットワーク分析とはネットワーク分析とはネットワーク分析とは • “ネットワークネットワークネットワークネットワーク”というデータ表現 – まず、データにある関係性に着目する • AさんさんさんさんとBさんさんさんさんは友達友達友達友達である • Protein A interacts with protein B. – データ構成 • ノードノードノードノード(Vertex, Actor) • エッジエッジエッジエッジ(Link,Arc) – 主体であるノード、その関係を示すエッジという単 純な表現形式により、全体と個を分析する 2012/10/10 ビックデータとスマートな社会(第4回) 7
  8. 8. ネットワークの表現ネットワークの表現ネットワークの表現ネットワークの表現 2012/10/10 ビックデータとスマートな社会(第4回) 8
  9. 9. 主主主主な対象な対象な対象な対象 • コミュニティ抽出 – クラスタリング、モジュラリティ分割 • 伝達性の検証 – 感染性症状、広告効果 • 頑健性の検証 – 通信ネットワーク構造 • 重要なノード、リンクの抽出 – ネットワーク中心性 • 可視化 2012/10/10 ビックデータとスマートな社会(第4回) 9
  10. 10. 分析の事例分析の事例分析の事例分析の事例 国際会議ネットワーク(1) • 目的 – 国際会議どうしの近さ(類似度)を知りたい • 手段 – 採択論文データから、著者と国際会議の共起関係を抽出 – 国際会議同士の”距離”距離”距離”距離””””を算出 • 手順 – ネットワークデータの準備 • DBLPからXMLファイルをDL • 国際会議と著者のリストを作成 – ネットワークの生成 • 国際会議と著者の共起関係を生成 • 国際会議間の類似度を、著者を特徴ベクトルとするベクトルコサイン 値から求める • 一定の類似度以上の国際会議間にリンクを設置 2012/10/10 ビックデータとスマートな社会(第4回) 10
  11. 11. 分析の事例分析の事例分析の事例分析の事例 国際会議ネットワーク(2) • クラスターによる分野間の関係性を抽出 • 多次元尺度構成法(MDS)を用いた研究分野 ごとのカンファレンス順位の抽出 2012/10/10 ビックデータとスマートな社会(第4回) 11
  12. 12. 分析の事例分析の事例分析の事例分析の事例 学会における中心人物の抽出 • 学会誌に採択された論文メタデータより共著 関係を抽出してネットワークを作成 • ネットワーク内のノード(著者)の重要度を算出 • グラフとして描画 2012/10/10 ビックデータとスマートな社会(第4回) 12 人工人工人工人工知能知能知能知能研究研究研究研究の系譜の系譜の系譜の系譜 http://familytree.k4no.info/ 「日本における人工知能研究の系譜」人工「日本における人工知能研究の系譜」人工「日本における人工知能研究の系譜」人工「日本における人工知能研究の系譜」人工知能学知能学知能学知能学会誌会誌会誌会誌 Vol.26 No6 pp. 584 -- 589
  13. 13. 2. ネットワークの特長を知るネットワークの特長を知るネットワークの特長を知るネットワークの特長を知る 2012/10/10 ビックデータとスマートな社会(第4回) 13
  14. 14. 基本的な構造的特長量と指標基本的な構造的特長量と指標基本的な構造的特長量と指標基本的な構造的特長量と指標 • 全体の特徴 – ノード総数 – エッジ総数 – 平均次数 – 直径・半径 – 平均クラスタリング係数 – 平均経路長 – 次数相関 – モジュラリティ – 次数分布 – 中心性分布 • ノード、エッジの特徴 – 次数 – 近接ノード次数平均 – クラスタリング係数 – 中心性指標 • Degree(次数) • Closeness (経路長平均) • Betweeness(媒介値) • PageRank • Eigenvector(固有値) 2012/10/10 ビックデータとスマートな社会(第4回) 14
  15. 15. ノード、エッジの特徴ノード、エッジの特徴ノード、エッジの特徴ノード、エッジの特徴 • 次数 – 1つのノードあたりのエッジの数 • 近接ノード次数平均 – 近接ノード(対象ノードとエッジで結ばれたノード)の 次数の平均 • クラスタリング係数 – 近接ノード間のエッジの存在割合 • 中心性指標 – ネットワーク内におけるノードの重要性を示すための 指標。さまざまな指標が定義されている。 2012/10/10 ビックデータとスマートな社会(第4回) 15
  16. 16. ネットワーク全体の特徴を知るネットワーク全体の特徴を知るネットワーク全体の特徴を知るネットワーク全体の特徴を知る • ノードの数、エッジの数 – ネットワークの規模を示す値 • 次数平均 – 次数の平均値 • 次数分布 – 次数のヒストグラム。スケールフリー性などにより次数分 布がベキとなっていることが注目された • 次数相関 – 近接ノードとの次数の相関関係を示す値 • 平均クラスタリング係数 – クラスタリング係数の平均値 2012/10/10 ビックデータとスマートな社会(第4回) 16
  17. 17. • 平均経路長 – 任意のノード間の経路長の平均値 • 直径・半径 – ネットワーク内にある、最短経路長の最大の値 • モジュラリティ、クラスタリング – コミュニティ(ネットワークの密度が高いコンポー ネント)の抽出 • 中心性分布 – ネットワーク中心性指標のヒストグラム 2012/10/10 ビックデータとスマートな社会(第4回) 17
  18. 18. 3. 構造的特長量・中心性の計算構造的特長量・中心性の計算構造的特長量・中心性の計算構造的特長量・中心性の計算 2012/10/10 ビックデータとスマートな社会(第4回) 18
  19. 19. • 特長量・中心性の意味の説明と計算式を書く 2012/10/10 ビックデータとスマートな社会(第4回) 19
  20. 20. 次数の平均、分布、相関次数の平均、分布、相関次数の平均、分布、相関次数の平均、分布、相関 • 次数(݀௜)とは – ノード݅のリンクの数 • 入次数(in-degree) • 出自数(out-degree) • 平均 – リンクの発生割合 ݀̅ = ∑ ݀௜ ܰ⁄ • 分布 – リンクの発生確率分布 • 正規分布: ランダムネットワーク • ベキ分布: スケールフリーネットワーク • 片対数分布 • 相関 – リンクの発生の偏り 2012/10/10 ビックデータとスマートな社会(第4回) 20 3 6 2 2 2 2 3 3 4 4
  21. 21. クラスタリング係数クラスタリング係数クラスタリング係数クラスタリング係数 • クラスタリング係数とは – グラフ内の近傍関係に占める 三角形(近傍ノード間にリンク が存在する)の割合 • 解釈 – 密な関係性が存在する • その他 – 第N近傍までもとめることもあ る。 2012/10/10 ビックデータとスマートな社会(第4回) 21 0.0083 1 1 0.67 0.33 0.083 0 0 0 0
  22. 22. コミュニティの抽出コミュニティの抽出コミュニティの抽出コミュニティの抽出 • 関係性の強いグループの抽 出 – 趣味・興味 – 取引グループ • 抽出方法 – モジュラリティ分割 – クラスリング • k-means • etc. – etc. 2012/10/10 ビックデータとスマートな社会(第4回) 22
  23. 23. ネットワークの中心性ネットワークの中心性ネットワークの中心性ネットワークの中心性 • ネットワークの中心性指標は多数提案されて いる。その中でも、代表的な中心性指標は以 下である。 – 次数中心性(Degree Centrality) – 近接中心性(Closeness Centrality) – 媒介中心性(Betweeness Centrality) – PageRank – HITS 2012/10/10 ビックデータとスマートな社会(第4回) 23
  24. 24. 次数中心性次数中心性次数中心性次数中心性(Degree Centrality) • ネットワークの次数(݀) – ネットワークの規模最大値であ るため ܰで割ることで正規化 • ܰ: ノード数 • 次数の高さ=リンクを生成す る行為・関係性への積極的な 参加 2012/10/10 ビックデータとスマートな社会(第4回) 24
  25. 25. 近接中心性近接中心性近接中心性近接中心性(Closeness Centrality) • 特定のノードからネットワーク全体への アクセスしやすさを示す指標 – 経路長平均 ‫ܮ‬ = ∑ ݀௜௝௝∈୒,௜ஷ௝ • ݀௜௝ はノード݅, ݆ の経路長 – ネットワークの規模ならびにネットワーク の連結性に影響を受ける • ܰ で割ることで規模への正規化 • それを逆数にすることで連結性への正規化 • アルゴリズム – ノードを選択 – ノードからすべてのノードへの距離(経路 長)を求める • 深さ優先探索などで – その距離の総和が経路長平均 2012/10/10 ビックデータとスマートな社会(第4回) 25
  26. 26. 媒介媒介媒介媒介中心性中心性中心性中心性(Betweeness Centrality) • 任意のノード間の最短パスの経由ノードであ るかを評価 – 情報が集約しやすいノードの評価 – ただし、情報はかならずしも最短パスだけを通る わけではない.. • アルゴリズム – ‫ݏݏ݁݊݁݁ݓݐ݁ܤ‬௜ = ∑ ݊௝௞(݅)/݊௝௞௝,௞∈ே,௜ஷ௝,௞ – ݊௝௞: ノード j, k の最短パス本数 – ݊௝௞(݅): ݊௝௞のうちノードiを通過する本数 2012/10/10 ビックデータとスマートな社会(第4回) 26
  27. 27. Page Rank • リンク構造から重要ノードを算出する • EigenVector(固有値)を計算する式に、任意の ノードへの遷移を想定したアルゴリズム • アルゴリズム – 初期値 ܲ௜ ଴ = 1 – ܲ௜ ௞ = 1 − ߙ ∑ ܲ௝ ௞ିଵ /‫ܦ‬௝௘೔ೕ∈ா + ߙ ∑ ܲ௜ ௞ିଵ – ߙ = 0.15 (任意のノードへの遷移) 2012/10/10 ビックデータとスマートな社会(第4回) 27
  28. 28. HITS • グラフ内のオーソリティ(情報提供)とハブ(情報収 集)を抽出する手法 – 有向グラフを前提 – 無向グラフである場合は、固有値の計算と同じ • アルゴリズム – 初期値: ‫ݔ‬௜ ଴ = 1, ‫ݕ‬௜ ଴ = 1 – オーソリティ: ‫ݔ‬௜ ௞ = ∑ ‫ݕ‬௝ ௞ିଵ ௝:௘೔ೕ∈ா – ハブ: ‫ݕ‬௜ ௞ = ∑ ‫ݔ‬௝ ௞ିଵ ௝:௘೔ೕ∈ா – 正規化: ‫ݔ‬௜ ௞ /∑(‫ݔ‬௝ ௞ )ଶ , ‫ݕ‬௜ ௞ /∑(‫ݕ‬௝ ௞ )ଶ などで正規化 2012/10/10 ビックデータとスマートな社会(第4回) 28
  29. 29. 大規模なネットワークへの適応大規模なネットワークへの適応大規模なネットワークへの適応大規模なネットワークへの適応 • 計算量の問題 – ノード数が10倍になるだけで、ほとんどの指標が10 倍以上の計算時間が必要となる – 指数的な計算時間がかかるものもある • 媒介値中心性 • クラスタリング係数: – 次数が極端に大きなノードが存在する場合 • 解釈の問題 – 平均とは? – 中心性とは? – クラスタリング係数などは、次数平均が同じであれば 規模が大きくなるほど小さな値になってしまう。 2012/10/10 ビックデータとスマートな社会(第4回) 29
  30. 30. 4.ネットワークを記述するネットワークを記述するネットワークを記述するネットワークを記述する 2012/10/10 ビックデータとスマートな社会(第4回) 30
  31. 31. グラフ記述言語 • Edge List – ノードの対のみの記述方式 • Pajek NET – 解析ソフト Pajek で扱っている記述方式 – ノード、エッジは別ファイルに記述する • Graphviz DOT – 描画ツール Graphviz が定義した記述方式 – ノード、エッジは1ファイルで記述。 – ノード座標指定なども可能 • Graph ML – XMLベースの記述言語 2012/10/10 ビックデータとスマートな社会(第4回) 31
  32. 32. Pajek NET • テキストベースのネットワークデータ表現 • ノードの宣言 – “*Vertices N”とノードの数を冒頭に宣言 • N はノード数 • エッジの宣言 – “*Edges”で以降エッジリスト 2012/10/10 ビックデータとスマートな社会(第4回) 32
  33. 33. GraphvizGraphvizGraphvizGraphviz DOTDOTDOTDOT • テキスト形式の記述言語 • 比較的多くのネットワーク分析ソフト、ライブラリ でサポート • 例) digraph sample2 { A -> B [ label = "Edge A to B" ]; B -> C [ label = "Edge B to C" ]; A [label="Node A"]; } 2012/10/10 ビックデータとスマートな社会(第4回) 33
  34. 34. Graph ML • XMLベースの記述言語 • 例) <?xml version="1.0" encoding="UTF-8"?> <graphml xmlns=http://graphml.graphdrawing.org/xmlns xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd"> <graph id="G" edgedefault="undirected"> <node id="n0"/> <node id="n1"/> <edge id="e1" source="n0" target="n1"/> </graph> </graphml> • 参考: http://graphml.graphdrawing.org/ 2012/10/10 ビックデータとスマートな社会(第4回) 34
  35. 35. 5. データを解析するデータを解析するデータを解析するデータを解析する 図 http://www.cytoscape.org/ より2012/10/10 ビックデータとスマートな社会(第4回) 35
  36. 36. データ解析手法データ解析手法データ解析手法データ解析手法 • 分析ソフトを用いた解析 – 定型の解析は行える – 100万ノードを歌うものもあ るが、現実的には数万ノー ドの計算、数千ノードの描 画が限界 • 代表的なソフトウェア – Gephi – Cytoscape – Pajak – R: 統計解析・可視化ソフト • ライブラリを用いた解析 – 独自の解析、大規模な解 析も可能 – 実装が必要、描画をさせ るにはさらに苦労が… • 代表的なライブラリ – Boost/graph: C++ – RGL: Ruby – Graphstream: Java – Graphviz: C, C++ 2012/10/10 ビックデータとスマートな社会(第4回) 36
  37. 37. Gephi • 特長 – Java ベース – Windows, Mac OS, Linux と複数のプラットフォームで動作 • ただし、Linux では描画周辺に難あり – 多数のグラフ記述言語に対応 • Graph ML, Graphviz DOT, Pajek NET, etc. – 描画レイアウト、分析などがプラグインで追加可能 • 配布 – https://gephi.org/ 最新版(日本語表示対応) – 日本語解説 http://oss.infoscience.co.jp/gephi/gephi.org/index.html 2012/10/10 ビックデータとスマートな社会(第4回) 37
  38. 38. Gephiデモデモデモデモ 2012/10/10 ビックデータとスマートな社会(第4回) 38
  39. 39. • 特長 – 主に Bio-informatics 分野にて利用されている – データ統合/解析/可視化プラットフォーム – 比較的多数のデータ形式への対応 • GML, XGMML, GraphML, CSV など • サイト – http://www.cytoscape.org/ – 日本語解説 http://cydoc.sourceforge.jp/cydocwiki/ Cytoscape Cytoscape: An Open Source Platform for Complex Network Analysis and Visualization 2012/10/10 ビックデータとスマートな社会(第4回) 39
  40. 40. Graphviz 2012/10/10 ビックデータとスマートな社会(第4回) 40
  41. 41. Boost/Graphを用いた実装を用いた実装を用いた実装を用いた実装 • Boost は C++用ライブラリ群 – Boost/Graph はそのなかの一つのグラフデータ処 理用ライブラリ – Boost 1.33.1 以降からは、ネットワーク分析用のメ ソッドが徐々に追加されている – ネットワークの構造的特長や、ネットワーク中心 性指標を計算するメソッドはほぼそろっている。 – 計算速度という点では他のライブラリより利点 2012/10/10 ビックデータとスマートな社会(第4回) 41
  42. 42. Ruby Graph Library (RGL) • Ruby 用グラフライブラリ – グラフ構造を管理するためのライブラリ – ネットワーク分析にも使えるメソッドは多少ある – 実装コンセプトは boost /graph と類似 • RGLの導入 – Ruby のライブラリ群の rubygems を用いてインス トール – サイト: http://rgl.rubyforge.org/rgl/ 2012/10/10 ビックデータとスマートな社会(第4回) 42
  43. 43. GraphStream • Java用グラフライブラリ – 主に、グラフの描画を重視している – グラフ分析用のメソッドも用意されている – グラフデータの形式が幅広い – 現在、積極的に開発が行われている • 以前は JUNG がJavaのグラフライブラリとして利用されてい たが、最近は開発が停止している様子 • GraphStream の導入 – サイト: http://graphstream-project.org/ – jar ファイルにクラスパスを通せば(コンパイル、実行 時だけでももちろん可)利用可能 2012/10/10 ビックデータとスマートな社会(第4回) 43
  44. 44. 6. 大規模データのための並列化大規模データのための並列化大規模データのための並列化大規模データのための並列化 2012/10/10 ビックデータとスマートな社会(第4回) 44
  45. 45. Boost/Graph を用いた並列化を用いた並列化を用いた並列化を用いた並列化 • Boost で用意されている並列化 – MPIを用いる – OpenMPを用いる • 今回は OpenMP を紹介 2012/10/10 ビックデータとスマートな社会(第4回) 45
  46. 46. Boost/Graph with OpenMP • OpenMP を利用するメリット – マルチコアCPUを活用できる – 既存のプログラムの拡張が容易 • スレッドなどをあまり意識する必要はない – 主要コンパイラが対応 • (gcc, Visutal C++, Intel コンパイラなど) – そこそこ、速度向上が見込める • 速度をもとめるなら MPI のほうがよいみたいだが… • OpenMP を利用するには – gcc で作成したプログラムであれば、並列実行可能な部 分を拡張するだけでよい – コンパイル時に –fopenmp を加えてコンパイルするだけ • ただし、gcc 4.2 以降から正式サポート… 2012/10/10 ビックデータとスマートな社会(第4回) 46
  47. 47. OpenMPを用いたを用いたを用いたを用いた実装例実装例実装例実装例(1) • closeness centrality の計算の場合 1. 各ノードの経路長平均の配列を準備する 2. ノードを一つ選択 1. ノードからすべてのノードへの距離を求める 2. 自身を除くすべてのノード間の距離の総和を求める 3. ノード数で正規化 3. 2 をすべてのノードに対して行う 4. すべてのノードの経路長平均の平均を求める • 上記の2は、他の計算の影響を受けないため並 列化可能であるので、その部分をOpenMPで並 列化する 2012/10/10 ビックデータとスマートな社会(第4回) 47
  48. 48. OpenMPを用いた実装例を用いた実装例を用いた実装例を用いた実装例(2) 2012/10/10 ビックデータとスマートな社会(第4回) 48 #ifdef _OPENMP #pragma omp parallel for private(i) schedule(guided) num_threads(omp_get_max_threads()) #endif for(i = 0; i < num_vertices(g); i++){ //########## diameter, path length ########## DistTable dist(num_vertices(g), 0); breadth_first_search(g, i, visitor(distance_recorder(&dist[0]))); int count = 0; VIter vi2, vi2_end; for(tie(vi2, vi2_end) = vertices(g); vi2 != vi2_end; vi2++) { if(i != *vi2 && (int)dist[*vi2] == 0) count += (int)num_vertices(g); else count += (int)dist[*vi2]; if(diameter < dist[*vi2]) { diameter = (int)dist[*vi2]; } } score[i] = (float)count / (float)(num_vertices(g) - 1); } OpenMPの宣言部の宣言部の宣言部の宣言部 下記下記下記下記ののののfor文のスレッド作成文のスレッド作成文のスレッド作成文のスレッド作成 スレッド割当ルール指定スレッド割当ルール指定スレッド割当ルール指定スレッド割当ルール指定 スレッドを実行するスレッドを実行するスレッドを実行するスレッドを実行するCPUの数の指定の数の指定の数の指定の数の指定
  49. 49. OpenMPの注意点の注意点の注意点の注意点 • for 文では、iterator は利用できない 2012/10/10 ビックデータとスマートな社会(第4回) 49 for(tie(vi, vi_end) = vertices(g); vi != vi_end; vi++) { //########## diameter, path length ########## DistTable dist(num_vertices(g), 0); breadth_first_search(g, *vi, visitor(distance_recorder(&dist[0]))); int count = 0; VIter vi2, vi2_end; (中略) score[*vi] = (float)count / (float)(num_vertices(g) - 1); } #ifdef _OPENMP #pragma omp parallel for private(i) schedule(guided) num_threads(omp_get_max_threads()) #endif for(i = 0; i < num_vertices(g); i++){ //########## diameter, path length ########## DistTable dist(num_vertices(g), 0); breadth_first_search(g, i, visitor(distance_recorder(&dist[0]))); int count = 0; VIter vi2, vi2_end; 以下略
  50. 50. 参考文献など参考文献など参考文献など参考文献など 2012/10/10 ビックデータとスマートな社会(第4回) 50
  51. 51. EXT.参考参考参考参考資料資料資料資料 2012/10/10 ビックデータとスマートな社会(第4回) 51
  52. 52. 隣接行列からグラフデータを生成 2012/10/10 ビックデータとスマートな社会(第4回) 52 matrix = [[]] # 行列 rows = [] # row name cols = [] # col name begin colp = true n_row = 0 # 行数をカウント File.open("sample.dot").each { |line| # ファイルを開き,1行ごとに読み込み items = line.chomp!.split(",") if(cols) 1.upto(items.size-1) { |n| # 1 から (items.size-1) まで数え上げる cols.push(items[n]) # 列のヘッダを保存 } cols = false next # 現在のループを終了して次のループに以降 end rows.push(items[0]) values = [] 1.upto(items.size-1) { |n| values.push(items[n].to_i) # items[n].to_i は、整数値に変換している } n_row += 1 }
  53. 53. 2012/10/10 ビックデータとスマートな社会(第4回) 53 # graphviz DOT ファイルの出力 puts "graph G{" # graphviz DOT 宣言 puts "node [shape=rect]" # node の共通属性 puts "edge [style=dotted]" # edge の共通属性 n_row = 0 n_col = 0 matrix.each { |col| col.each { |v| if v == 1 puts "#{rows[n_row]} -- #{cols[n_col]}" # edgelist を出力 end n_cols += 0 } n_rows += 0 } puts "}" end 前の続き
  54. 54. J-Stageの論文メタデータの論文メタデータの論文メタデータの論文メタデータ取得取得取得取得(1) • Twitter を含む論文を取得 2012/10/10 ビックデータとスマートな社会(第4回) 54 getJSTAGE_twitter.rb require 'net/http' begin Net::HTTP.version_1_2 AGENTNAME = 'Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.8.1.4) Gecko/200705' @crawler = Net::HTTP.start('api.jstage.jst.go.jp', 80) @query = “/searchapi/do?service=3&system=3&keyword=twitter” puts @crawler.get(@query, 'User-Agent' <= AGENTNAME).body end ← ネットワークライブラリの呼び出し ← HTTPを使うときのおまじない ← TCPの接続準備 ← クエリー ← 結果を出力 キーワード指定サーバーとの通信 実行環境 % ruby getJSTAGE_twitter.rb
  55. 55. J-Stageのののの論文メタ論文メタ論文メタ論文メタデータデータデータデータ取得取得取得取得(2) • 任意のキーワードを含むXMLデータの取得 2012/10/10 ビックデータとスマートな社会(第4回) 55 getJSTAGE.rb require 'net/http' begin Net::HTTP.version_1_2 AGENTNAME = 'Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.8.1.4) Gecko/200705' @crawler = Net::HTTP.start('api.jstage.jst.go.jp', 80) word = URI::encode(ARGV[0]) @query = “/searchapi/do?service=3&system=3&keyword=#{word}” puts @crawler.get(@query, 'User-Agent' <= AGENTNAME).body end wordの値の代入 日本語を含む検索の場合はエンコードが必要 コマンドラインオプションの読み込み 実行環境 % ruby getJSTAGE.rb キーワード
  56. 56. RGLのサンプルのサンプルのサンプルのサンプル 2012/10/10 ビックデータとスマートな社会(第4回) 56 require 'rubygems' require 'rgl/adjacency' require 'rgl/dot' dg=RGL::DirectedAdjacencyGraph[1,2 ,2,3 ,2,4, 4,5, 6,4, 1,6] # Use DOT to visualize this graph: dg.write_to_graphic_file('jpg') puts dg.directed? puts dg.vertices dg.add_vertex 7 dg.add_edge 2,7 dg.write_to_graphic_file('jpg') ← RGL ライブラリの呼び出し ←rubygems ←グラフ構造モジュール(近接ノード) ←グラフ記述モジュール(DOT形式) ←グラフの宣言 ←描画 ← ノードの出力 ← エッジの追加 ← ノードの追加
  57. 57. JJJJ----STAGESTAGESTAGESTAGE WebAPIWebAPIWebAPIWebAPI のののの注意点注意点注意点注意点 • アクセスの頻度に明確な条件はないが、適度な間隔 で • 1回のリクエストには、最大2000アイテムまでなので、 それ以上のアイテムを取得するには、クエリのコント ロールが必要。 • 詳細は、利用規約を確認のうえマニュアルを参照のこ と – http://info.jstage.jst.go.jp/info_server_api/terms_api.html • なお、現時点(2012/09/24)でWebAPIは準備中になっ てしまっているので、利用できないかもしれない。その 際には CiNii の利用を薦めます。 2012/10/10 ビックデータとスマートな社会(第4回) 57
  58. 58. Twitter データの簡易な収集 • Tiny Tweet Crawler(TTC)/Tiny Tweet Tracker(TTT) – 大阪大学松村准教授が提供するアプリ • TTC: 検索キーワードを含むつぶやきを最大1500個取 得可能 • TTT: 検索キーワードを含むつぶやきを30秒ごとに取 得 – Windows/Macで動作 2012/10/10 ビックデータとスマートな社会(第4回) 58
  59. 59. GraphStream のサンプルのサンプルのサンプルのサンプル 2012/10/10 ビックデータとスマートな社会(第4回) 59

×