大規模ネットワーク分析 篠田
TRANSCRIPT
情報処理学会連続セミナー情報処理学会連続セミナー情報処理学会連続セミナー情報処理学会連続セミナー2012「ビックデータとスマートな社会」「ビックデータとスマートな社会」「ビックデータとスマートな社会」「ビックデータとスマートな社会」第4回「ソーシャルメディアの大規模ネットワーク分析」第4回「ソーシャルメディアの大規模ネットワーク分析」第4回「ソーシャルメディアの大規模ネットワーク分析」第4回「ソーシャルメディアの大規模ネットワーク分析」
大規模大規模大規模大規模ネットワークネットワークネットワークネットワークのののの構造的構造的構造的構造的特徴量の計算手法特徴量の計算手法特徴量の計算手法特徴量の計算手法
(独)理化学研究所基幹研究所
光グリーンテクノロジー特別研究ユニット
篠田孝祐
2012/10/10 ビックデータとスマートな社会(第4回) 1
自己紹介自己紹介自己紹介自己紹介
• 所属(独)理化学研究所 基幹研究所 光グリーンテクノロジー特別研究ユニット
• 学位博士(知識科学)博士(知識科学)博士(知識科学)博士(知識科学) 北陸先端科学技術大学院大学 知識科学研究科
• 専門– 社会シミュレーション、ネットワーク分析
• ネットワーク分析の対象– ネットワークの成長モデル
– 学術・国際会議ネットワーク
– 公共交通機関(鉄道、高速道路、バス)
2012/10/10 ビックデータとスマートな社会(第4回) 2
本日の概要
• ネットワーク分析の概要として、その特徴をしる手がかりとなる、構造的特長量ならびにネットワーク中心性の算出方法を示す
• それらを求めるためのソフトならびにライブラリを紹介する
• ならびに、大規模な(数10万ノード)ネットワー
クのネットワークに適応できるように簡易な並列化の手法を紹介する
2012/10/10 ビックデータとスマートな社会(第4回) 3
予定予定予定予定
1. ネットワーク分析概要ネットワーク分析概要ネットワーク分析概要ネットワーク分析概要2. ネットワークの特徴を知るネットワークの特徴を知るネットワークの特徴を知るネットワークの特徴を知る3. 構造的特長量・中心性の計算構造的特長量・中心性の計算構造的特長量・中心性の計算構造的特長量・中心性の計算
1. ネットワークの記述2. 代表的なソフトウェア、ライブラリ
4. ネットワークを記述するネットワークを記述するネットワークを記述するネットワークを記述する5. データを解析するデータを解析するデータを解析するデータを解析する
1. ソフトウェアを用いた解析2. プログラムを用いた解析
6. 大規模ネットワーク分析のための並列化大規模ネットワーク分析のための並列化大規模ネットワーク分析のための並列化大規模ネットワーク分析のための並列化
2012/10/10 ビックデータとスマートな社会(第4回) 4
1. ネットワーク分析概要ネットワーク分析概要ネットワーク分析概要ネットワーク分析概要
2012/10/10 ビックデータとスマートな社会(第4回) 5
ネットワーク分析の流れネットワーク分析の流れネットワーク分析の流れネットワーク分析の流れ
2012/10/10 ビックデータとスマートな社会(第4回) 6
ネットワーク分析とはネットワーク分析とはネットワーク分析とはネットワーク分析とは
• “ネットワークネットワークネットワークネットワーク”というデータ表現
–まず、データにある関係性に着目する
• AさんさんさんさんとBさんさんさんさんは友達友達友達友達である
• Protein A interacts with protein B.
–データ構成
• ノードノードノードノード(Vertex, Actor)
• エッジエッジエッジエッジ(Link,Arc)
–主体であるノード、その関係を示すエッジという単純な表現形式により、全体と個を分析する
2012/10/10 ビックデータとスマートな社会(第4回) 7
ネットワークの表現ネットワークの表現ネットワークの表現ネットワークの表現
2012/10/10 ビックデータとスマートな社会(第4回) 8
主主主主な対象な対象な対象な対象
• コミュニティ抽出– クラスタリング、モジュラリティ分割
• 伝達性の検証– 感染性症状、広告効果
• 頑健性の検証– 通信ネットワーク構造
• 重要なノード、リンクの抽出– ネットワーク中心性
• 可視化
2012/10/10 ビックデータとスマートな社会(第4回) 9
分析の事例分析の事例分析の事例分析の事例国際会議ネットワーク(1)
• 目的– 国際会議どうしの近さ(類似度)を知りたい
• 手段– 採択論文データから、著者と国際会議の共起関係を抽出– 国際会議同士の”距離”距離”距離”距離””””を算出
• 手順– ネットワークデータの準備
• DBLPからXMLファイルをDL
• 国際会議と著者のリストを作成
– ネットワークの生成• 国際会議と著者の共起関係を生成
• 国際会議間の類似度を、著者を特徴ベクトルとするベクトルコサイン値から求める
• 一定の類似度以上の国際会議間にリンクを設置
2012/10/10 ビックデータとスマートな社会(第4回) 10
分析の事例分析の事例分析の事例分析の事例国際会議ネットワーク(2)
• クラスターによる分野間の関係性を抽出
• 多次元尺度構成法(MDS)を用いた研究分野ごとのカンファレンス順位の抽出
2012/10/10 ビックデータとスマートな社会(第4回) 11
分析の事例分析の事例分析の事例分析の事例学会における中心人物の抽出
• 学会誌に採択された論文メタデータより共著関係を抽出してネットワークを作成
• ネットワーク内のノード(著者)の重要度を算出
• グラフとして描画
2012/10/10 ビックデータとスマートな社会(第4回) 12
人工人工人工人工知能知能知能知能研究研究研究研究の系譜の系譜の系譜の系譜 http://familytree.k4no.info/
「日本における人工知能研究の系譜」人工「日本における人工知能研究の系譜」人工「日本における人工知能研究の系譜」人工「日本における人工知能研究の系譜」人工知能学知能学知能学知能学会誌会誌会誌会誌 Vol.26 No6 pp. 584 -- 589
2. ネットワークの特長を知るネットワークの特長を知るネットワークの特長を知るネットワークの特長を知る
2012/10/10 ビックデータとスマートな社会(第4回) 13
基本的な構造的特長量と指標基本的な構造的特長量と指標基本的な構造的特長量と指標基本的な構造的特長量と指標
• 全体の特徴– ノード総数
– エッジ総数
– 平均次数
– 直径・半径
– 平均クラスタリング係数
– 平均経路長
– 次数相関
– モジュラリティ
– 次数分布
– 中心性分布
• ノード、エッジの特徴– 次数
– 近接ノード次数平均
– クラスタリング係数
– 中心性指標• Degree(次数)
• Closeness (経路長平均)
• Betweeness(媒介値)
• PageRank
• Eigenvector(固有値)
2012/10/10 ビックデータとスマートな社会(第4回) 14
ノード、エッジの特徴ノード、エッジの特徴ノード、エッジの特徴ノード、エッジの特徴
• 次数– 1つのノードあたりのエッジの数
• 近接ノード次数平均– 近接ノード(対象ノードとエッジで結ばれたノード)の
次数の平均
• クラスタリング係数– 近接ノード間のエッジの存在割合
• 中心性指標– ネットワーク内におけるノードの重要性を示すための
指標。さまざまな指標が定義されている。
2012/10/10 ビックデータとスマートな社会(第4回) 15
ネットワーク全体の特徴を知るネットワーク全体の特徴を知るネットワーク全体の特徴を知るネットワーク全体の特徴を知る
• ノードの数、エッジの数– ネットワークの規模を示す値
• 次数平均– 次数の平均値
• 次数分布– 次数のヒストグラム。スケールフリー性などにより次数分
布がベキとなっていることが注目された
• 次数相関– 近接ノードとの次数の相関関係を示す値
• 平均クラスタリング係数– クラスタリング係数の平均値
2012/10/10 ビックデータとスマートな社会(第4回) 16
• 平均経路長–任意のノード間の経路長の平均値
• 直径・半径–ネットワーク内にある、最短経路長の最大の値
• モジュラリティ、クラスタリング
– コミュニティ(ネットワークの密度が高いコンポーネント)の抽出
• 中心性分布–ネットワーク中心性指標のヒストグラム
2012/10/10 ビックデータとスマートな社会(第4回) 17
3. 構造的特長量・中心性の計算構造的特長量・中心性の計算構造的特長量・中心性の計算構造的特長量・中心性の計算
2012/10/10 ビックデータとスマートな社会(第4回) 18
• 特長量・中心性の意味の説明と計算式を書く
2012/10/10 ビックデータとスマートな社会(第4回) 19
次数の平均、分布、相関次数の平均、分布、相関次数の平均、分布、相関次数の平均、分布、相関
• 次数(��)とは– ノード�のリンクの数
• 入次数(in-degree)
• 出自数(out-degree)
• 平均– リンクの発生割合 �̅ = ∑�� �⁄
• 分布– リンクの発生確率分布
• 正規分布: ランダムネットワーク• ベキ分布: スケールフリーネットワーク• 片対数分布
• 相関– リンクの発生の偏り
2012/10/10 ビックデータとスマートな社会(第4回) 20
3
6
2
2
2
2
33
4
4
クラスタリング係数クラスタリング係数クラスタリング係数クラスタリング係数
• クラスタリング係数とは
–グラフ内の近傍関係に占める三角形(近傍ノード間にリンクが存在する)の割合
• 解釈–密な関係性が存在する
• その他–第N近傍までもとめることもあ
る。
2012/10/10 ビックデータとスマートな社会(第4回) 21
0.0083
1
10.67
0.33
0.083
0
0
00
コミュニティの抽出コミュニティの抽出コミュニティの抽出コミュニティの抽出
• 関係性の強いグループの抽出– 趣味・興味
– 取引グループ
• 抽出方法– モジュラリティ分割
– クラスリング• k-means
• etc.
– etc.
2012/10/10 ビックデータとスマートな社会(第4回) 22
ネットワークの中心性ネットワークの中心性ネットワークの中心性ネットワークの中心性
• ネットワークの中心性指標は多数提案されている。その中でも、代表的な中心性指標は以下である。
–次数中心性(Degree Centrality)
–近接中心性(Closeness Centrality)
–媒介中心性(Betweeness Centrality)
– PageRank
– HITS
2012/10/10 ビックデータとスマートな社会(第4回) 23
次数中心性次数中心性次数中心性次数中心性(Degree Centrality)
• ネットワークの次数(�)
–ネットワークの規模最大値であるため �で割ることで正規化
• �: ノード数
• 次数の高さ=リンクを生成する行為・関係性への積極的な参加
2012/10/10 ビックデータとスマートな社会(第4回) 24
近接中心性近接中心性近接中心性近接中心性(Closeness Centrality)
• 特定のノードからネットワーク全体へのアクセスしやすさを示す指標– 経路長平均 = ∑ �� ∈�,��
• �� はノード�, �の経路長
– ネットワークの規模ならびにネットワークの連結性に影響を受ける• �で割ることで規模への正規化• それを逆数にすることで連結性への正規化
• アルゴリズム– ノードを選択– ノードからすべてのノードへの距離(経路
長)を求める• 深さ優先探索などで
– その距離の総和が経路長平均
2012/10/10 ビックデータとスマートな社会(第4回) 25
媒介媒介媒介媒介中心性中心性中心性中心性(Betweeness Centrality)
• 任意のノード間の最短パスの経由ノードであるかを評価–情報が集約しやすいノードの評価
–ただし、情報はかならずしも最短パスだけを通るわけではない..
• アルゴリズム
– ����������� = ∑ ��(�)/��,�∈�,��,�
– ��: ノード j, k の最短パス本数
– ��(�): ��のうちノードiを通過する本数
2012/10/10 ビックデータとスマートな社会(第4回) 26
Page Rank
• リンク構造から重要ノードを算出する
• EigenVector(固有値)を計算する式に、任意のノードへの遷移を想定したアルゴリズム
• アルゴリズム
–初期値 ��� = 1
– ��� = 1 − � ∑ �
� !/"#$%∈&+ � ∑��
� !
– � = 0.15 (任意のノードへの遷移)
2012/10/10 ビックデータとスマートな社会(第4回) 27
HITS
• グラフ内のオーソリティ(情報提供)とハブ(情報収集)を抽出する手法– 有向グラフを前提
– 無向グラフである場合は、固有値の計算と同じ
• アルゴリズム– 初期値: *�
� = 1, +�� = 1
– オーソリティ: *�� = ∑ +
� !:#$%∈&
– ハブ: +�� = ∑ *
� !:#$%∈&
– 正規化: *��/∑(*
�)-, +��/∑(+
�)-などで正規化
2012/10/10 ビックデータとスマートな社会(第4回) 28
大規模なネットワークへの適応大規模なネットワークへの適応大規模なネットワークへの適応大規模なネットワークへの適応
• 計算量の問題– ノード数が10倍になるだけで、ほとんどの指標が10
倍以上の計算時間が必要となる– 指数的な計算時間がかかるものもある
• 媒介値中心性• クラスタリング係数:
– 次数が極端に大きなノードが存在する場合
• 解釈の問題– 平均とは?– 中心性とは?
– クラスタリング係数などは、次数平均が同じであれば規模が大きくなるほど小さな値になってしまう。
2012/10/10 ビックデータとスマートな社会(第4回) 29
4.ネットワークを記述するネットワークを記述するネットワークを記述するネットワークを記述する
2012/10/10 ビックデータとスマートな社会(第4回) 30
グラフ記述言語
• Edge List– ノードの対のみの記述方式
• Pajek NET– 解析ソフト Pajek で扱っている記述方式– ノード、エッジは別ファイルに記述する
• Graphviz DOT– 描画ツール Graphviz が定義した記述方式– ノード、エッジは1ファイルで記述。– ノード座標指定なども可能
• Graph ML– XMLベースの記述言語
2012/10/10 ビックデータとスマートな社会(第4回) 31
Pajek NET
• テキストベースのネットワークデータ表現
• ノードの宣言
– “*Vertices N”とノードの数を冒頭に宣言
• N はノード数
• エッジの宣言
– “*Edges”で以降エッジリスト
2012/10/10 ビックデータとスマートな社会(第4回) 32
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
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
5. データを解析するデータを解析するデータを解析するデータを解析する
図 http://www.cytoscape.org/ より2012/10/10 ビックデータとスマートな社会(第4回) 35
データ解析手法データ解析手法データ解析手法データ解析手法
• 分析ソフトを用いた解析
– 定型の解析は行える
– 100万ノードを歌うものもあ
るが、現実的には数万ノードの計算、数千ノードの描画が限界
• 代表的なソフトウェア– Gephi
– Cytoscape
– Pajak
– R: 統計解析・可視化ソフト
• ライブラリを用いた解析
– 独自の解析、大規模な解析も可能
– 実装が必要、描画をさせるにはさらに苦労が…
• 代表的なライブラリ– Boost/graph: C++
– RGL: Ruby
– Graphstream: Java
– Graphviz: C, C++
2012/10/10 ビックデータとスマートな社会(第4回) 36
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
Gephiデモデモデモデモ
2012/10/10 ビックデータとスマートな社会(第4回) 38
• 特長–主に Bio-informatics 分野にて利用されている
–データ統合/解析/可視化プラットフォーム
–比較的多数のデータ形式への対応• GML, XGMML, GraphML, CSV など
• サイト– http://www.cytoscape.org/
–日本語解説http://cydoc.sourceforge.jp/cydocwiki/
CytoscapeCytoscape: An Open Source Platform for Complex Network Analysis and Visualization
2012/10/10 ビックデータとスマートな社会(第4回) 39
Graphviz
2012/10/10 ビックデータとスマートな社会(第4回) 40
Boost/Graphを用いた実装を用いた実装を用いた実装を用いた実装
• Boost は C++用ライブラリ群
– Boost/Graph はそのなかの一つのグラフデータ処理用ライブラリ
– Boost 1.33.1 以降からは、ネットワーク分析用のメソッドが徐々に追加されている
–ネットワークの構造的特長や、ネットワーク中心性指標を計算するメソッドはほぼそろっている。
–計算速度という点では他のライブラリより利点
2012/10/10 ビックデータとスマートな社会(第4回) 41
Ruby Graph Library (RGL)
• Ruby 用グラフライブラリ
–グラフ構造を管理するためのライブラリ
–ネットワーク分析にも使えるメソッドは多少ある
–実装コンセプトは boost /graph と類似
• RGLの導入
– Ruby のライブラリ群の rubygems を用いてインストール
–サイト: http://rgl.rubyforge.org/rgl/
2012/10/10 ビックデータとスマートな社会(第4回) 42
GraphStream
• Java用グラフライブラリ– 主に、グラフの描画を重視している– グラフ分析用のメソッドも用意されている– グラフデータの形式が幅広い– 現在、積極的に開発が行われている
• 以前は JUNG がJavaのグラフライブラリとして利用されていたが、最近は開発が停止している様子
• GraphStream の導入– サイト: http://graphstream-project.org/
– jar ファイルにクラスパスを通せば(コンパイル、実行時だけでももちろん可)利用可能
2012/10/10 ビックデータとスマートな社会(第4回) 43
6. 大規模データのための並列化大規模データのための並列化大規模データのための並列化大規模データのための並列化
2012/10/10 ビックデータとスマートな社会(第4回) 44
Boost/Graph を用いた並列化を用いた並列化を用いた並列化を用いた並列化
• Boost で用意されている並列化
– MPIを用いる
– OpenMPを用いる
• 今回は OpenMP を紹介
2012/10/10 ビックデータとスマートな社会(第4回) 45
Boost/Graph with OpenMP
• OpenMP を利用するメリット– マルチコアCPUを活用できる– 既存のプログラムの拡張が容易
• スレッドなどをあまり意識する必要はない
– 主要コンパイラが対応• (gcc, Visutal C++, Intel コンパイラなど)
– そこそこ、速度向上が見込める• 速度をもとめるなら MPI のほうがよいみたいだが…
• OpenMP を利用するには– gcc で作成したプログラムであれば、並列実行可能な部
分を拡張するだけでよい– コンパイル時に –fopenmp を加えてコンパイルするだけ
• ただし、gcc 4.2 以降から正式サポート…
2012/10/10 ビックデータとスマートな社会(第4回) 46
OpenMPを用いたを用いたを用いたを用いた実装例実装例実装例実装例(1)
• closeness centrality の計算の場合1. 各ノードの経路長平均の配列を準備する2. ノードを一つ選択
1. ノードからすべてのノードへの距離を求める2. 自身を除くすべてのノード間の距離の総和を求める3. ノード数で正規化
3. 2 をすべてのノードに対して行う4. すべてのノードの経路長平均の平均を求める
• 上記の2は、他の計算の影響を受けないため並列化可能であるので、その部分をOpenMPで並列化する
2012/10/10 ビックデータとスマートな社会(第4回) 47
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の数の指定の数の指定の数の指定の数の指定
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;
以下略
参考文献など参考文献など参考文献など参考文献など
2012/10/10 ビックデータとスマートな社会(第4回) 50
EXT.参考参考参考参考資料資料資料資料
2012/10/10 ビックデータとスマートな社会(第4回) 51
隣接行列からグラフデータを生成
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
}
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
前の続き
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
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
endwordの値の代入
日本語を含む検索の場合はエンコードが必要
コマンドラインオプションの読み込み
実行環境% ruby getJSTAGE.rb キーワード
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形式)
←グラフの宣言
←描画
← ノードの出力
← エッジの追加← ノードの追加
JJJJ----STAGE STAGE STAGE STAGE 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
Twitter データの簡易な収集
• Tiny Tweet Crawler(TTC)/Tiny Tweet
Tracker(TTT)
–大阪大学松村准教授が提供するアプリ
• TTC: 検索キーワードを含むつぶやきを最大1500個取得可能
• TTT: 検索キーワードを含むつぶやきを30秒ごとに取得
– Windows/Macで動作
2012/10/10 ビックデータとスマートな社会(第4回) 58
GraphStream のサンプルのサンプルのサンプルのサンプル
2012/10/10 ビックデータとスマートな社会(第4回) 59