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




12年9月20日木曜日
現実のグラフデータ


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

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




12年9月20日木曜日
現実のグラフデータ

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

              平均的なツイート= 1KB
              1ノード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日木曜日
関数とデコレータ
       @cursored
       def add_node(self, node, attr_dict=None, cursor=None):


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




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日木曜日
NoSQL
                      OSS    DB種別    ライセンス元       言語

         BigTable      x      列       Google

          HBase        o      列         ASF       JAVA

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

        CouchDB        o    ドキュメント      ASF       Erlang

                                        Neo
              Neo4j    o     グラフ                  JAVA
                                     Technology


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 S3
              S3(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日木曜日

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

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