社会ネットワーク分析第7回
DESCRIPTION
オープンソースで学ぶ社会ネットワーク分析の第7回まとめ 社会ネットワーク分析勉強会の資料TRANSCRIPT
社会ネットワーク分析勉強会 その7三上 悟 = @saicologic
12年9月20日木曜日
現実のグラフデータ
現実のデータはメモリーの中に格納できない
例えば接続されている1000ノードのグラフ属性の部分を無視しても100MBのメモリを使う
12年9月20日木曜日
現実のグラフデータ
Twitterで取得できるサンプルストリーム1日に1200万ツイート
平均的なツイート= 1KB1ノード1ツイートとして1,200万 × 1KB = 1.2GBくらい
12年9月20日木曜日
現実のグラフデータ
12年9月20日木曜日
記憶域 容量 計算機 頂点数
小規模データ メモリー 数GB 1台 数千~数万
中規模データメモリー/ディスク
数TB 1台~数台 数百万~数千万
大規模データ ディスク 数PB 数台~数万台 億~兆
12年9月20日木曜日
スモールデータEdgeList(*.edge)
.net(*.net)
GML(*.gml)
GraphML(*.graphml)
その他のXMLフォーマット(*.xml)
hファイル(*.h)
12年9月20日木曜日
拡張子 形式
EdgeList .edges TEXT
.net .net TEXT
GML .gml XML
GraphML .graphml XML
h .h バイナリ
12年9月20日木曜日
中規模データ
ディスクに格納するサイズのデータのこと
主にRDBMSやNoSQLなどのデータベース製品を使う
12年9月20日木曜日
スキーマ
12年9月20日木曜日
カーソル
テーブルを探索するためのデータベースオブジェクト
直接データを取得するのではなく、ポインタ情報のみを渡す。これをリザルトセットと呼ぶ
必要なときにポインタ情報から実際のデータを取得する。
12年9月20日木曜日
トランザクション
ノードの追加や削除などの一連の処理の一体として実行を保証する仕組みのこと
操作途中にエラーが起きればロールバックして、処理をなかったことにすることができる。
一連の操作が完了し、コミット命令を発行したときに初めてディスクにデータが書き込まれる。
12年9月20日木曜日
名前
一意にグラフが識別できる名前をつけよう
名前を一度Base64でエンコードして格納(おすすめはしない)base64.encodestring(name).replace('\n', '')
pythonのuuid()を使うと良い思います。
12年9月20日木曜日
属性
ノードはオブジェクト
エッジはオブジェクトの辞書
オブジェクトの属性はJSONにシリアライズして格納
12年9月20日木曜日
クラス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日木曜日
関数とデコレータDecoratorパターン
関数定義の直前に@関数名を指定することで、その関数を別の関数でラップすることができる。主な用途として、データベースの接続処理(cursored) 1.カーソルの取得(@cursored)2. クエリーの実行(add_edge関数など)3.カーソルの終了(@cursored)
12年9月20日木曜日
関数とデコレータ
1.カーソルの取得(@cursored)2. クエリーの実行(add_edge関数など)3. コミット or ロールバック(@cursord)4.カーソルの終了(@cursored)
@cursoreddef add_node(self, node, attr_dict=None, cursor=None):
12年9月20日木曜日
アダプタNetworkXを操作するためのアダプタ関数を用意しましょう。
from_nx(G)
to_nx(G)
12年9月20日木曜日
2モードデータの操作
自己相関結合(self-join)を用いて2モードネットワークを表現することができる。自己相関結合とは、同じテーブル(edges)を別名で2つ定義し同じテーブル同士を結合すること。
edges.to_nodeとedges.from_nodeにインデックスを貼るとより高速になります。
12年9月20日木曜日
ソーシャルデータのビックデータ
バズワードビックデータクラウドコンピューティング=>人間の行動パターンの巨大な収集メカニズムに対応するための存在例えば、Twitter内のメッセージのトレンドが知りたい
12年9月20日木曜日
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日木曜日
関係データベース
Oracle, DB2, Sybase, MySQL, PostgreSQL etc..
データをテーブルの構造で管理され、複数のデータ郡を関係の構造で連結した構造のデータベース関係代数演算、関係論理演算をして結果を取り出す。行単位で操作する。OLTP(On-Line Transaction Processing)
12年9月20日木曜日
列指向データベース
BigTable, HBase
列のデータをひとまとめにして効率的に扱えるように設計されたデータベース。大量の集計処理に向いているOLAP(OnLine Analytical Processing)向き
12年9月20日木曜日
ドキュメントデータベース
MongoDB, CouchDB etc..
オブジェクトデータをひとまとめに格納したデータベース。主にJSONを主なフォーマットとして格納階層的な構造のデータに向いている。
12年9月20日木曜日
グラフデータベース
Neo4j, OrientDB, Titan etc..
グラフ(点と頂点)構造を格納するの適した設計のデータベース。2ホップ(友達の友達)以上のデータ探索が得意。集合演算が苦手
12年9月20日木曜日
実際のデータ構造
Tweetのデータ構造はJSONで取得できる。
RDBMSはスキーマを強制する。
NoSQLはデータ構造に非常に寛大である。JSON, CSV, XMLなど構造化されたテキストが操作しやすいように設計されている。
12年9月20日木曜日
実際のデータ構造RDBMS
1. データ構造を学び、それに合うスキーマを設計する。2. ストリームを読み込む。すべてのレコードについて、次のことを行う。 1. レコードをパースする。 2. レコードのフィールドをINSERTクエリーに変換する。 3. クエリーを実行し、一意制約違反を処理する。 4. オプションでほかの表をアップデートする。
NoSQLデータベース1. ストリームを読む。2. ファイルにレコードを書き込む。
12年9月20日木曜日
RDBMSよりNoSQLの良いところ
スキーマレスなのであとで最初の設計に縛られないデータ構造。複雑なデータ構造に対応。柔軟性がある。
水平分割しやすいので、スケールしやすい
(トランザクションの考えが異なるので、良い面ばかりでもない。詳しくはBASE, CAP定理を参照)
12年9月20日木曜日
実際のビックデータ
分散コンピューティング
複数の計算ノードから構成個々のノードは操作対象の一部の計算を受け取り計算結果を返す。計算結果を結合して、次の計算を行う。
12年9月20日木曜日
Amazon S3S3(Simple Storage Service)
オブジェクトストアオブジェクトは巨大なディスク、イメージファイルや、一部の計算ファイル、ソースコードなどなんにでも見れる。
HTTPを介してアクセスHDFSとしても利用できる。
12年9月20日木曜日
Apache Hadoop
分散ストレージ、分散処理の基礎を提供するJAVAソフトウェフレームワーク
HDFS(分散ファイルシステム)の上に、Map/Reduce計算フレームワークを用いて大規模計算を行う
12年9月20日木曜日
Map Reduce
Googleが開発
MapステップとReduceステップで構成された計算フレームワーク関数型プログラミングのMap/Reduceに似ている。主に、Hadoopがサポートしている。最近ではMongoDB, Riak, CoucbDBも
12年9月20日木曜日
Apache Hive
Apache Hiveはデータの集計、クエリ、および分析を提供するため、Hadoopの上に構築されたデータ·ウェアハウス·インフラストラクチャ。SQL Likeの言語でデータを取り出すことができる。同じソフトウェアにPigがある。2モードグラフも簡単に書ける。なによりもRDBMSに収まり切らない、遥かに巨大に対しても計算できる。
12年9月20日木曜日
SQLは依然として我らが友
分散NoSQLデータベースは重量級
計算結果をRDBMSにおいて、それをSQLで取得するのがお手軽。
12年9月20日木曜日