nakamura244 blog

所属団体とは関係なく、個人的なblog

Neo4j ユーザー勉強会 #7 に参加してきた

勉強会概要

jp-neo4j-usersgroup.connpass.com

はじめに

扱ってるデータが今話題のパナマ文書なだけに資料はアップされないし、この勉強会中の写真等のアップはお控えください。だったので自分も控えつつ、技術の内容を中心にまとめる事とする

発表

Graph Connect Europe (2016/4/26 於:ロンドン開催)イベント報告

パナマ文書の概要

  • もともとはパナマにある法律事務所のモサック・フォンセカから出た機密文章
  • ドイツの新聞社がはじめこの機密文書を解析を試みたが、莫大なデータ量(2.6TB)で解析できず、国際調査報道ジャーナリスト連合 (ICIJ)が協力してデータの解析することとなったらしい

詳しくはwiki

パナマ文書 - Wikipedia

ちなみにICIJは過去にもoffshore leaks,china leaksといったものも解析してみたらしいです。 で今回過去に例のない莫大なデータ量(2.6TB)のデータ解析にNeo4jを活用してる為に今回の勉強会のテーマになった様子

ICIJには結構人数はいるそうですが、今回解析したエンジニアは実質3人のエンジニアがやったらしいです。

じゃ3人でどのようにやったかでいうと

  • 元々データはEmail 41% database 26% 残り紙等の非データ化のデータ
    • 非文字データ化がまだまだ多いらしく、人力が必要でこれからまた新しい情報も出てくる可能性は高いらしい
    • 下記に詳しく載ってる panamapapers.sueddeutsche.de
  • 約40台ほどのawsインスタンス
  • Apache Tikaでメタデータを取得して
  • データベースからはtalendを使ってNeo4jに入れて
  • Solaを使って検索して
  • Linkuriousで可視化して

等々を駆使してやっているらしいです。このあたりで出てきてるワードで調べていけば何となくアプローチ方法はわかりそう。。。

ちなみにパナマ文書以前は

  • SQLサーバでSigma.jsでグラフにしてやってたらしい
  • 今回これだとデータ量的に全く追いつけないということでNeo4jを活用したという流れ

Neo4j v3.0の紹介

今回の紹介で気になったのをピックアップ

  • Improved Cost-based Optimizer
    • 以前 read = cost base,write = rule base
    • 今回 read = cost base,write = cost base
  • Official Language Drivers & Bolt
    • JavaJavaScript,Pythonなどの主要な言語でドライバが公式にサポートされた点
    • Boltというバイナリ通信プロトコルをサポート。全然知らない、、、勉強せねば
  • Java stored procedure
  • spatial function
    • 今後使い勝手が増すようなきがする
  • Neo4j Browser Sync
  • githubとかのアカウントでログインできる

パナマ文書分析アプリの開発過程の紹介(ドキュメント集取から分析可能なデータモデルの構築、アプリ開発まで)

データにある直接的な関連付け(relation)とデータから読み解いて間接的にわかる関連付け(relation)がある。 この後者の間接的な関連性が重要らしい

間接的な関連性とは

例えば、人というノードのプロパティに住所情報がある場合、同じ住所情報のあるノード=人は一緒に住んでいるので家族である可能性が高い等々

いずれにしてもまだまだデータを解析が終わってる段階ではなく、下記の3つの観点で解析を進めている様子

  • データ化されてないもののデータ化
  • 他の国の情報(国勢調査情報、警戒リスト)を参照してデータのつながりを作成
  • 企業活動(お金の流れ)データの取り込み

PDF等のデータ化されていないものはどうしても人力が必要らしく、今後数年をかけてデータ化して解析してくらしいです

Talendを使ったパナマ文書のETL処理

技術的な紹介はあまりなく、事例等々の紹介がメイン

5/9に公開されたパナマ文書データベースを使ったデモ

これ、ほぼ言える内容ではないですが、一番やはり面白かった?やばかった。

技術的な事でいうと

  • プロパティの値はdiskに乗っていて、ノード、ノード間のリレーション、インデックスはメモリに乗って稼動する
  • なのではじめに適当に下記のようなクエリーを投げるとメモリに乗って早くなる match(n)-[r]-() return count(*)
  • Neo4jの内部はLuceneを使われてるらしくwhere句に=~が活用できて便利

まとめ的なもの

  • Neo4j v3.0の紹介は下記あたりで一通り見れる neo4j.com
  • やはりデータとデータの関連付けが重要でこの部分をどうやるかで結果もだいぶ変わってくるなぁと感じた
  • 周辺技術(Apache Tika,Talend,Linkurious等々)も重要でこの当たりも見ていかないとな
  • ICIJのサイトからパナマ文書の一部をダウンロード可能らしい