社会ネットワーク分析第7回

33
社会ネットワーク分析勉強会 その7 三上 悟 = @saicologic 12920日木曜日

Upload: satoru-mikami

Post on 01-Nov-2014

4 views

Category:

Technology


2 download

DESCRIPTION

オープンソースで学ぶ社会ネットワーク分析の第7回まとめ 社会ネットワーク分析勉強会の資料

TRANSCRIPT

Page 1: 社会ネットワーク分析第7回

社会ネットワーク分析勉強会 その7三上 悟 = @saicologic

12年9月20日木曜日

Page 2: 社会ネットワーク分析第7回

現実のグラフデータ

現実のデータはメモリーの中に格納できない

例えば接続されている1000ノードのグラフ属性の部分を無視しても100MBのメモリを使う

12年9月20日木曜日

Page 3: 社会ネットワーク分析第7回

現実のグラフデータ

Twitterで取得できるサンプルストリーム1日に1200万ツイート

平均的なツイート= 1KB1ノード1ツイートとして1,200万 × 1KB = 1.2GBくらい

12年9月20日木曜日

Page 4: 社会ネットワーク分析第7回

現実のグラフデータ

12年9月20日木曜日

Page 5: 社会ネットワーク分析第7回

記憶域 容量 計算機 頂点数

小規模データ メモリー 数GB 1台 数千~数万

中規模データメモリー/ディスク

数TB 1台~数台 数百万~数千万

大規模データ ディスク 数PB 数台~数万台 億~兆

12年9月20日木曜日

Page 6: 社会ネットワーク分析第7回

スモールデータEdgeList(*.edge)

.net(*.net)

GML(*.gml)

GraphML(*.graphml)

その他のXMLフォーマット(*.xml)

hファイル(*.h)

12年9月20日木曜日

Page 7: 社会ネットワーク分析第7回

拡張子 形式

EdgeList .edges TEXT

.net .net TEXT

GML .gml XML

GraphML .graphml XML

h .h バイナリ

12年9月20日木曜日

Page 8: 社会ネットワーク分析第7回

中規模データ

ディスクに格納するサイズのデータのこと

主にRDBMSやNoSQLなどのデータベース製品を使う

12年9月20日木曜日

Page 9: 社会ネットワーク分析第7回

スキーマ

12年9月20日木曜日

Page 10: 社会ネットワーク分析第7回

カーソル

テーブルを探索するためのデータベースオブジェクト

直接データを取得するのではなく、ポインタ情報のみを渡す。これをリザルトセットと呼ぶ

必要なときにポインタ情報から実際のデータを取得する。

12年9月20日木曜日

Page 11: 社会ネットワーク分析第7回

トランザクション

ノードの追加や削除などの一連の処理の一体として実行を保証する仕組みのこと

操作途中にエラーが起きればロールバックして、処理をなかったことにすることができる。

一連の操作が完了し、コミット命令を発行したときに初めてディスクにデータが書き込まれる。

12年9月20日木曜日

Page 12: 社会ネットワーク分析第7回

名前

一意にグラフが識別できる名前をつけよう

名前を一度Base64でエンコードして格納(おすすめはしない)base64.encodestring(name).replace('\n', '')

pythonのuuid()を使うと良い思います。

12年9月20日木曜日

Page 13: 社会ネットワーク分析第7回

属性

ノードはオブジェクト

エッジはオブジェクトの辞書

オブジェクトの属性はJSONにシリアライズして格納

12年9月20日木曜日

Page 14: 社会ネットワーク分析第7回

クラスSqlGraph

add_node(node, attr_dict, cursor) add_edge(fromnode, tonode, attr_dict, cursor) removed_node(node, cursor) remove_edge(fromnode, tonode, cursor) get_node_data(node, cursor) get_edge_data(fromnode, tonode, cursor) from_nx(G) to_nx

12年9月20日木曜日

Page 15: 社会ネットワーク分析第7回

関数とデコレータDecoratorパターン

関数定義の直前に@関数名を指定することで、その関数を別の関数でラップすることができる。主な用途として、データベースの接続処理(cursored) 1.カーソルの取得(@cursored)2. クエリーの実行(add_edge関数など)3.カーソルの終了(@cursored)

12年9月20日木曜日

Page 16: 社会ネットワーク分析第7回

関数とデコレータ

1.カーソルの取得(@cursored)2. クエリーの実行(add_edge関数など)3. コミット or ロールバック(@cursord)4.カーソルの終了(@cursored)

@cursoreddef add_node(self, node, attr_dict=None, cursor=None):

12年9月20日木曜日

Page 17: 社会ネットワーク分析第7回

アダプタNetworkXを操作するためのアダプタ関数を用意しましょう。

from_nx(G)

to_nx(G)

12年9月20日木曜日

Page 18: 社会ネットワーク分析第7回

2モードデータの操作

自己相関結合(self-join)を用いて2モードネットワークを表現することができる。自己相関結合とは、同じテーブル(edges)を別名で2つ定義し同じテーブル同士を結合すること。

edges.to_nodeとedges.from_nodeにインデックスを貼るとより高速になります。

12年9月20日木曜日

Page 19: 社会ネットワーク分析第7回

ソーシャルデータのビックデータ

バズワードビックデータクラウドコンピューティング=>人間の行動パターンの巨大な収集メカニズムに対応するための存在例えば、Twitter内のメッセージのトレンドが知りたい

12年9月20日木曜日

Page 20: 社会ネットワーク分析第7回

NoSQLOSS DB種別 ライセンス元 言語

BigTable x 列 Google

HBase o 列 ASF JAVA

MongoDB o ドキュメント 10gen C++

CouchDB o ドキュメント ASF Erlang

Neo4j o グラフ Neo Technology

JAVA

12年9月20日木曜日

Page 21: 社会ネットワーク分析第7回

関係データベース

Oracle, DB2, Sybase, MySQL, PostgreSQL etc..

データをテーブルの構造で管理され、複数のデータ郡を関係の構造で連結した構造のデータベース関係代数演算、関係論理演算をして結果を取り出す。行単位で操作する。OLTP(On-Line Transaction Processing)

12年9月20日木曜日

Page 22: 社会ネットワーク分析第7回

列指向データベース

BigTable, HBase

列のデータをひとまとめにして効率的に扱えるように設計されたデータベース。大量の集計処理に向いているOLAP(OnLine Analytical Processing)向き

12年9月20日木曜日

Page 23: 社会ネットワーク分析第7回

ドキュメントデータベース

MongoDB, CouchDB etc..

オブジェクトデータをひとまとめに格納したデータベース。主にJSONを主なフォーマットとして格納階層的な構造のデータに向いている。

12年9月20日木曜日

Page 24: 社会ネットワーク分析第7回

グラフデータベース

Neo4j, OrientDB, Titan etc..

グラフ(点と頂点)構造を格納するの適した設計のデータベース。2ホップ(友達の友達)以上のデータ探索が得意。集合演算が苦手

12年9月20日木曜日

Page 25: 社会ネットワーク分析第7回

実際のデータ構造

Tweetのデータ構造はJSONで取得できる。

RDBMSはスキーマを強制する。

NoSQLはデータ構造に非常に寛大である。JSON, CSV, XMLなど構造化されたテキストが操作しやすいように設計されている。

12年9月20日木曜日

Page 26: 社会ネットワーク分析第7回

実際のデータ構造RDBMS

1. データ構造を学び、それに合うスキーマを設計する。2. ストリームを読み込む。すべてのレコードについて、次のことを行う。 1. レコードをパースする。 2. レコードのフィールドをINSERTクエリーに変換する。 3. クエリーを実行し、一意制約違反を処理する。 4. オプションでほかの表をアップデートする。

NoSQLデータベース1. ストリームを読む。2. ファイルにレコードを書き込む。

12年9月20日木曜日

Page 27: 社会ネットワーク分析第7回

RDBMSよりNoSQLの良いところ

スキーマレスなのであとで最初の設計に縛られないデータ構造。複雑なデータ構造に対応。柔軟性がある。

水平分割しやすいので、スケールしやすい

(トランザクションの考えが異なるので、良い面ばかりでもない。詳しくはBASE, CAP定理を参照)

12年9月20日木曜日

Page 28: 社会ネットワーク分析第7回

実際のビックデータ

分散コンピューティング

複数の計算ノードから構成個々のノードは操作対象の一部の計算を受け取り計算結果を返す。計算結果を結合して、次の計算を行う。

12年9月20日木曜日

Page 29: 社会ネットワーク分析第7回

Amazon S3S3(Simple Storage Service)

オブジェクトストアオブジェクトは巨大なディスク、イメージファイルや、一部の計算ファイル、ソースコードなどなんにでも見れる。

HTTPを介してアクセスHDFSとしても利用できる。

12年9月20日木曜日

Page 30: 社会ネットワーク分析第7回

Apache Hadoop

分散ストレージ、分散処理の基礎を提供するJAVAソフトウェフレームワーク

HDFS(分散ファイルシステム)の上に、Map/Reduce計算フレームワークを用いて大規模計算を行う

12年9月20日木曜日

Page 31: 社会ネットワーク分析第7回

Map Reduce

Googleが開発

MapステップとReduceステップで構成された計算フレームワーク関数型プログラミングのMap/Reduceに似ている。主に、Hadoopがサポートしている。最近ではMongoDB, Riak, CoucbDBも

12年9月20日木曜日

Page 32: 社会ネットワーク分析第7回

Apache Hive

Apache Hiveはデータの集計、クエリ、および分析を提供するため、Hadoopの上に構築されたデータ·ウェアハウス·インフラストラクチャ。SQL Likeの言語でデータを取り出すことができる。同じソフトウェアにPigがある。2モードグラフも簡単に書ける。なによりもRDBMSに収まり切らない、遥かに巨大に対しても計算できる。

12年9月20日木曜日

Page 33: 社会ネットワーク分析第7回

SQLは依然として我らが友

分散NoSQLデータベースは重量級

計算結果をRDBMSにおいて、それをSQLで取得するのがお手軽。

12年9月20日木曜日