はじめに
Neo4jは、オープンソースのグラフデータベースで、人気のグラフデータベースの一つです。
様々な業界や企業で導入されており、ソーシャルグラフや顧客管理グラフ、資産管理グラフなどの用途で利用されています。
Javaで実装されており、githubにソースが公開されています。
https://github.com/neo4j
Microsoft Azure で簡単に利用できるので、実際に試してみました。
導入
MarketplaceにCognosys社の「Hardened Neo4j on Ubuntu 14.04 LTS」があるのでこちら利用します。
Azure Portalにログインし、「NEW」を選択し、「neo4j」と検索します。
すると「Hardened Neo4j on Ubuntu 14.04 LTS」があるのでこちらを選択します。この説明に書かれているPasswordはNeo4jにログインする際に必要なので覚えておきます。
パスワード情報や仮想マシンのサイズを選択して、どんどん進みます。
数分かかりましたが、無事デプロイされました。
ローカルのブラウザから仮想マシンにアクセスします。
https://PublicIP/neo4j
UserとPasswordを入力します。ここでのPasswordは「Hardened Neo4j on Ubuntu 14.04 LTS」の説明部分に記載されています。
ログインしたら試しにグラフを作成してみましょう。
画面上部のEditerに:play movie graph
と入力します。
するとMovie Graphのtutorialが表示されるのでこれに従って試してます。
→を押して次に進みます。
グラフの作成
画面右側にNeo4jのクエリが表示されます。このクエリをNeo4jではCypher QL(Cypher Query Language)と呼び、とても複雑な関係のデータ処理のために開発されたクエリ言語です。
このクエリをクリックすると、上部のEditerにそのままコピー&ペーストされます。
Editer右側の△をクリックします。
俳優と映画、監督に関するグラフが作成されました。
検索
グラフを作成できました。次はデータを抽出してみます。
Cypher QLのMatch構文を利用します。
例えば、俳優の名前がTom Hanksであるデータを検索するには
MATCH (tom {name: "Tom Hanks"}) RETURN tom
とEditorに入力します。
80年代生まれの人を検索してみます。
MATCH (eighties:Person) WHERE eighties.born > 1980 AND eighties.born < 1990 RETURN eighties.name
Natalie Portmanさんら3名がヒットしました。
グラフからパターン検索をしてみます。
先程80年代生まれので検索結果に表示されたNatalie Portmanさんが出ている映画を検索してます。
MATCH (tom:Person {name: "Natalie Portman"})-[:ACTED_IN]->(nataliePortmanMovies) RETURN tom,nataliePortmanMovies
一つヒットしました。V for Vendettaに出演していらっしゃるようです。
もう少し複雑な検索もしてみます。
V for Vendetta に出演している人を検索してみます。以下のクエリで検索できます。
MATCH (people:Person)-[relatedTo]-(:Movie {title: "V for Vendetta"}) RETURN people.name, Type(relatedTo), relatedTo
9名ヒットしました。
映画と出演者の関係性がシンプルに表示されていて、とてもわかり易いです。
面白いのでもう一つやってみます。
shortestPath
を使うと最短経路を検索することができます。
では、これを使ってNatalie PortmanさんとTom Hanksさんの関係性を調べて見ましょう。
MATCH p=shortestPath( (bacon:Person {name:"Natalie Portman"})-[*]-(meg:Person {name:"Tom Hanks"}) ) RETURN p
この図からNatalie PortmanさんはAndy WachowskiさんがプロデュースしたV for Vendettaに出演しており、Tom HanksさんはAndy Wachowskiさんがディレクターの作品であるCloud Atlasに出演しているのが簡単にわかります。
つまり、Natalie PortmanさんとTom Hanksさんの共通の知人はAndy Wachowskiさんということですね。
終わりに
今回はMicrosoft Azure上でNeo4jを簡単に試してみました。
Neo4jのようなGraphDBを初めて触りましたが、クエリなど、直感的で分かりやすかったです。
また、使いどころも色々ありそうなので、今後もっと普及して、効果的かつ効率的にデータ分析を行えれば良いですね。
公式ドキュメント : https://neo4j.com/docs/
Neo4j の詳細については下記をご覧ください!
https://sios.jp/products/oss-integration/service/oss_on_cloud/neo4j.html