SlideShare a Scribd company logo
Getting Started with Graph Database with
Python
2019/10/10 PyFukuoka #7
@loftkun
About Me
• @loftkun
• ヤフー株式会社
• サービスプラットフォーム本部
• 将棋(初段)/ ピアノ(独学)/ LIVE(スピッツetc)
• Python歴 3年くらい
• 週1参加・月1登壇
IT Event Bot
福岡新着ITイベント
@ITEventFukuoka
Agenda
Graph Database
GitHubAPI
Neo4J
Graph Database
Graph
Graph
点(Node)と線(Edge)で表現されるデータ構造
Graph
User
User
User
Tweet
Tweet
Tweet
Tweet
点(Node)の種別を定義できる
Graph
User
User
User
Tweet
Tweet
Tweet
Tweet
線(Edge)の種別も定義できる
Follow
Post
Graph
User
User
User
Tweet
Tweet
Tweet
Tweet
線(Edge)は方向も持てる(有効グラフ)
点(Node)の関係を表せるのでRelationshipとも呼ばれる
親子関係、所有、アクションなどを表せる
Follow
Post
Graph
User
User
User
Tweet
Tweet
Follow
Post
Tweet
Tweet
NodeにもEdgeにも
属性(Property, Label)を付与できる
name : ロフトくん
followers : 1
following : 2
name : hoge
followers : 1
following : 0 name : fuga
followers : 1
following : 1
text : hello
text : むくり
text :おやす
text :
python!!
Graph Database
• Graph構造を扱えるデータベース
• AWS
• AmazonNeptune
• Azure
• Cosmos DB がグラフデータモデルをサポート
• GCP
• GKEにJanusGraphをデプロイ ( https://cloud.google.com/solutions/running-janusgraph-with-
bigtable?hl=ja )
• OSS
• Neo4J
Case
• ソーシャルグラフ
• Web上での人間の相関関係
• Facebook グラフAPI( https://developers.facebook.com/docs/graph-api )
• 最短経路問題
• 鉄道路線、カーナビ
• 最短経路= 各Edgeに付与した重み(距離)の合計が最も少ない経路
Case
• イレギュラーなパターンの発見
• クレジットカード等の不正利用検知
• 通常と異なる経路の検出
• https://neo4j.com/developer/(FraudDetection)
• パナマ文書や銀行顧客情報のICIJ国際調査報道ジャーナリスト連合によ
る解析 ( Neo4j + Linkrious )
• https://www.itmedia.co.jp/enterprise/articles/1605/25/news024.html
• 前職でやっていたこと
• IaaSの構成物(物理マシン、VM、ストレージ、NW )をGraph構造で定義&可
視化
• Node(VM)を2つクリックしたら経路(Edge) を表示など
GitHub API
GitHub GraphQLAPI v4
• v3 は REST だが、v4 は GraphQL APIとなっている
• WhyGitHubisusingGraphQL
• GraphQLletsyoureplacemultipleRESTrequestswithasinglecalltofetchthedatayouspecify
=>複数のRESTリクエストを1回の呼び出しに置き換えられる
• v3はPRやIssueなどエンドポイントが分かれている
• v4 はエンドポイントは1つ
https://developer.github.com/v4/
Explorer
• 左ペインにGraphQLを書いて実行でき
る
• Tyr& Errorに便利
• Syntax Checkもやってくれる
• マウスオーバーで型の説明も出る
https://developer.github.com/v4/explorer/?variables=%7B%7D&query=query%20%7B%0A%20%20__type%28name%3A%20%22Repo
sitory%22%29%20%7B%0A%20%20%20%20name%0A%20%20%20%20kind%0A%20%20%20%20description%0A%20%20%20%20f
ields%20%7B%0A%20%20%20%20%20%20name%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D
Types
全ての型を調べる 特定の型について調べる
https://developer.github.com/v4/guides/intro-to-graphql/#discovering-the-graphql-api
Authentication & Authorization
• v3 (REST)では必須ではない
• 認証しない場合はrate limit制限が厳しくなる
• v4 (GraphQL) では必須
• Basic認証
• あまりパスワードは使いたくない・・・
• OAuth認証
• 権限設定できるのでおすすめ
• OAuth用のtokenが必要となる
• Settings -->Developer settings ( https://github.com/settings/apps ) で作成しておく
• もしくはAuthorizations APIで作成できる
Python Sample
• 以下に置いています
• https://github.com/loftkun/github-api-samples/blob/master/v4/demo.py
• tokenを設定すると使えます
• 以下を試しました
1. ratelimit
2. user
3. repository
4. search
Post Query
1. ratelimit
1. ratelimit
2. user
2. user
3. repository
3. repository
4. search
4. search
Python スター数 ランキング発表!
Python Star Ranking: 6 -10
rank stars name description
6 48441 nvbn/thefuck Magnificent app which corrects your previous console command.
7 46840 pallets/flask The Python micro framework for building web applications.
8 44585 keras-team/keras Deep Learning for humans
9 44494 django/django The Web framework for perfectionists with deadlines.
10 43363 jakubroztocil/httpie
As easy as HTTPie /aitch-tee-tee-pie/ 🥧 Modern command line
HTTP client
Python Star Ranking: 1 -5
rank stars name description
1 74412
donnemartin/system-
design-primer
Learn how to design large-scale systems. Prep for the
system design interview. Includes Anki flashcards.
2 73840 vinta/awesome-python
A curated list of awesome Python frameworks, libraries,
software and resources
3 63299 public-apis/public-apis
A collective list of free APIs for use in software and web
development.
4 58120 tensorflow/models Models and examples built with TensorFlow
5 56406 ytdl-org/youtube-dl
Command-line program to download videos from
YouTube.com and other video sites
https://neo4j.com/style-guide/
Neo4J
• World'sleading graphdatabase
• クエリ言語
• Cypher ( default )
• Gremlin
• プロトコル
• Bolt (バイナリプロトコル )
• HTTP-API
• ドライバ
• Python/ Go /JS /Java / .NET /Ruby / PHP / etc
https://neo4j.com/developer/
sandbox
https://neo4j.com
sandbox- TwitterGraph
https://guides.neo4j.com/sandbox/twitter/index.html
favoranking
favoranking
Install
• Docker
• k8s ( Helm )
:play movie-graph
:play movie-graph
Python Sample
• 以下に置いています
• https://github.com/loftkun/neo4j-demo/blob/master/movie-graph/demo.py
• :play movie-graphで生成した全Nodeを検索してみました
Searchall Nodes
Searchall Nodes
Summary
Summary
• Pythonで GitHub GraphQL API v4 と Neo4J を操作してみた
• それぞれWebUIがあり、クエリの組み立てに便利だった
• 特にNeo4JのDashboardは可視化もしてくれるのが便利
• 採用されているクエリ言語が異なるためそれぞれ学習が必要だ
• 世の中の事例も参考にし、Graph構造が適していそうなデータを
操作する際はGraphDatabaseを活用していきたい
Thank you for listening !

More Related Content

PPTX
Trat_sprint1
PPTX
Trat_sprint3
PPTX
Trat_sprint7
PPTX
Trat_sprint2
PDF
Trat sprint10
PDF
G検定傾向と対策_pythonguild#3LT
PDF
Django から各種チャットツールに通知するライブラリを作った話
PPTX
Trat_sprint5
Trat_sprint1
Trat_sprint3
Trat_sprint7
Trat_sprint2
Trat sprint10
G検定傾向と対策_pythonguild#3LT
Django から各種チャットツールに通知するライブラリを作った話
Trat_sprint5

What's hot (20)

PPTX
G検定傾向と対策2018
PDF
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
PDF
Py datameetup1
PDF
Python パッケージの影響を歴史から理解してみよう!
PDF
なぜ科学計算にはPythonか?
PDF
過去2回の登壇内容からのPython×ドローンの進化アップデート内容と今後について展望
PDF
ElectraとpQRNNについて
PPTX
Reactの全体像と新しい情報を収集する方法
PDF
日本のオープンデータプラットフォームをPythonでつくる
PDF
Pyconjp2016 pyftplib
PPTX
Why python
PDF
2020年10月29日 プロフェッショナルAI×Roboticsエンジニアへのロードマップ
PDF
Pythonはどうやってlen関数で長さを手にいれているの?
PPTX
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
PDF
みんなのPython勉強会#43 Pyladies x Stapy ジョイントミートアップ #2
PPTX
Python×ドローンについて過去のPyConJP登壇から今までの進化。
PPTX
Tensor flow勉強会3
PPTX
Pythonスタートアップ勉強会201109 python入門
PDF
みんなのPython勉強会#62
PDF
フラッター開発におけるシークレット情報取扱考察
G検定傾向と対策2018
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
Py datameetup1
Python パッケージの影響を歴史から理解してみよう!
なぜ科学計算にはPythonか?
過去2回の登壇内容からのPython×ドローンの進化アップデート内容と今後について展望
ElectraとpQRNNについて
Reactの全体像と新しい情報を収集する方法
日本のオープンデータプラットフォームをPythonでつくる
Pyconjp2016 pyftplib
Why python
2020年10月29日 プロフェッショナルAI×Roboticsエンジニアへのロードマップ
Pythonはどうやってlen関数で長さを手にいれているの?
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
みんなのPython勉強会#43 Pyladies x Stapy ジョイントミートアップ #2
Python×ドローンについて過去のPyConJP登壇から今までの進化。
Tensor flow勉強会3
Pythonスタートアップ勉強会201109 python入門
みんなのPython勉強会#62
フラッター開発におけるシークレット情報取扱考察
Ad

Similar to Getting Started with Graph Database with Python (20)

PPTX
Modeling Relational Data with Graph Convolutional Networks
PDF
GraphQLはどんな時に使うか
PPTX
Oracle Labs 発! Parallel Graph AnalytiX(PGX)
PDF
社会ネットワーク分析第7回
PDF
Python Data-Visualization Package Status
PPTX
【2017年】ディープラーニングのフレームワーク比較
PDF
Introduction to Chainer (LL Ring Recursive)
PDF
グラフデータ分析 入門編
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PDF
異次元のグラフデータベースNeo4j
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PDF
GraphQL超入門(座学).pdf
PPTX
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
PDF
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
PDF
PPTX
データサイエンティストが力を発揮できるアジャイルデータ活用基盤
PDF
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
PPT
Blueprintsについて
PPTX
StreamGraph
PDF
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
Modeling Relational Data with Graph Convolutional Networks
GraphQLはどんな時に使うか
Oracle Labs 発! Parallel Graph AnalytiX(PGX)
社会ネットワーク分析第7回
Python Data-Visualization Package Status
【2017年】ディープラーニングのフレームワーク比較
Introduction to Chainer (LL Ring Recursive)
グラフデータ分析 入門編
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
異次元のグラフデータベースNeo4j
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
GraphQL超入門(座学).pdf
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
データサイエンティストが力を発揮できるアジャイルデータ活用基盤
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
Blueprintsについて
StreamGraph
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
Ad

More from ロフト くん (10)

PPTX
OpenShiftのサポートを始めるぞ!高頻度で更新されるOSSを効果的にキャッチアップする仕組みを考えました!
PDF
Demo of write slides and books with VSCode + Markdown
PDF
Write slides and books in VSCode + Markdown
PPTX
OpenShift from Easy way to Hard ? Way
PPTX
Kubernetes The Hard Way をやってみた
PPTX
Operator reading and writing ( Operator SDK 編 )
PDF
Traffic Management with Istio ( with Demo )
PPTX
Traffic Management with Istio
PDF
AbemaTVのコメントビューアを作る話
PDF
Enjoying k8s cluster with Minikube and Helm
OpenShiftのサポートを始めるぞ!高頻度で更新されるOSSを効果的にキャッチアップする仕組みを考えました!
Demo of write slides and books with VSCode + Markdown
Write slides and books in VSCode + Markdown
OpenShift from Easy way to Hard ? Way
Kubernetes The Hard Way をやってみた
Operator reading and writing ( Operator SDK 編 )
Traffic Management with Istio ( with Demo )
Traffic Management with Istio
AbemaTVのコメントビューアを作る話
Enjoying k8s cluster with Minikube and Helm

Getting Started with Graph Database with Python

Editor's Notes

  • #2: [00:00] Getting Started with Graph Database with Python というタイトルで発表します、よろしくおねがいします
  • #3: [00:05] ロフトくんと申します、ヤフーで主にプラットフォーム・バックエンドを担当しています 趣味は将棋ピアノライブです、 Python歴は3年くらいです 勉強会は週1で参加、登壇は月1くらいでやっています。
  • #4: [00:25] 福岡の勉強会をつぶやくTwitterBotを動かしています、是非フォローおねがいします
  • #5: [00:30] アジェンダです、 グラフデータベース、GitHub API と Neo4Jを紹介します
  • #6: [00:35] まずグラフデータベースについて紹介します
  • #7: [00:40] グラフ構造の例を絵にしてみました
  • #8: [00:50] このように点 ノードと 線 エッジ で表現されるデータ構造です
  • #9: [01:00] ノードの種別を定義できます ここでは User と Tweet と定義してみました
  • #10: [01:10] エッジの種別も定義できます ここでは 緑のエッジをFollow、黄色のエッジをPost と定義してみました
  • #11: [01:20] エッジは方向も定義できます、Relationshipと呼ばれることもあります これによりFollowやTweetの方向を表せました
  • #12: [01:30] ノードやエッジにはプロパティとかラベルと呼ばれる属性を付与できます ユーザノードにはユーザ名、ツイートノードにはツイート本文などの属性を付与できそうでね
  • #13: [01:40] このようなグラフ構造を扱えるデータベースが、グラフデータベースです AWSはNeptuneというマネージドサービスを提供しています アズールはコスモスDBがグラフデータをサポートしている GCPはマネージドのサービスはなくてGKEにジェーナスグラフというOSSをデプロイする方法がドキュメントで紹介されていました そのほか、OSSとしてはNeo4Jが有名です
  • #14: [01:55] グラフデータベースが使われている事例を紹介します 先ほど紹介したデータ構造はソーシャルグラフになります。FacebookなどのSNSがAPIを提供しています。 他には、路線案内やカーナビなどで最短経路を求める用途にも使われています。 エッジに距離というプロパティを付与しておいて、その合計が最も小さい経路が最短経路になります
  • #15: [02:15] また、クレカの不正利用検知や、送金データの解析などで、通常とは異なるイレギュラーな関係性の検出にも使われています、 私は、前職で、IaaSの構成の可視化に使用していて、VMのノードを2つクリックしたらその間の経路を表示する、などをやってました。自分用メモ(JointJS, Graphviz)
  • #16: [02:30] つづいてGitHub APIについて紹介します
  • #17: [02:35] API v3 は REST ですが、 v4 が GraphQL API となっています。 なぜ、GraphQLを使うのかがドキュメントに乗っていて、 複数のRESTリクエストを1回の呼び出しに置き換えられるから、が理由のようです たしかにv3のエンドポイントは分かれていますが、v4のエンドポイントは1つとなっているので1回の呼び出しに置き換えられそうです
  • #18: [02:45] ExplorerというWebUIが提供されていて、GraphQLの実行を手軽に試せます シンタックスチェックしてれたり、型の説明も出るので便利です
  • #19: [02:55] どんなプロパティがあるかについて調べることが多いのですが、このようなクエリで型を調べることができます
  • #20: [03:05] APIを使用するための認証認可については v3では必須ではないですが、v4では必須となっています 方法はBasic認証とOauth認証があります Oauth認証の方がパスワードを使わなくて良く、権限設定もできるので安心感があります
  • #21: [03:15] PythonでGraphQL APIを叩いてみました。 サンプルはこちらにおいています。 今回は、ratelimit、user、リポジトリ情報の取得や、検索を試してみました。
  • #22: クエリを投げるのは普通にrequestsを使っています。 ヘッダに認証用のtokenを指定しています
  • #23: [03:30] ratelimit情報の取得クエリです GraphQLの文法としては、取得したいプロパティを書いていく文法になります
  • #24: [03:50] こちらが取得結果です。 APIを使用していくうちに remainingが4999、4998と減っていきます リセットされる日時も取得できています
  • #25: [04:00] ユーザ情報の取得です ピンしているリポジトリと、プルリクを取得するクエリです。 件数の指定や、取得したいプロパティを指定しています。
  • #26: [04:20] 取得結果です。 確かにピンしているリポジトリや、最近作成したPRが取得できていました。 この例では認証しているユーザj自身の情報を取得しているのでprivateなリポジトリの情報も取得できています
  • #27: [04:30] リポイトリ情報の取得クエリです。 お試しでpythonのドキュメントのリポジトリの PRやIssueを取得してみました
  • #28: [04:50] 結果はこのようになりました。 V3のREST APIだと、PRやIssueのAPIはエンドポイントが分かれているので複数回叩く必要があるのですが、 v4のGraphQL APIだとエンドポイントは同じなので1回の呼び出しで関連する情報が取得できています
  • #29: [05:00] リポジトリの検索クエリです
  • #30: [05:20] Pythonのスター数の多いリポジトリを調べてみました メモ エンドポイントは https://api.github.com/graphql クエリ https://developer.github.com/v4/query/ Searchのsyntax https://help.github.com/en/articles/understanding-the-search-syntax TODO: Why GitHub is using GraphQL を訳す
  • #31: [05:30] ということでスター数ランキングを発表します
  • #32: [05:40] まず、10位から6位までです Django と flaskは使ったことがありますが他はないです 機械学習関連のOSSがランキングしているようです 10位と6位は知っている方いらっしゃいましたら教えてください
  • #33: [06:00] 5位から1位です、全て使ったことがないです・・・勉強不足かもしれません 5 youtube-dlはYoutubeの動画ダウンロードできるらしいです 4 TensorFlow : 機械学習ライブラリがありますね 3 public-apis/public-apis は 世の中で公開されてるAPIのリストらしいです 2 awesome-python は pythonのライブラリのまとめらしいです 1system-design-primer は 大規模システムの設計方法 らしいです ということで、GitHub APIと、それを使って取得したPythonのスター数ランキングの紹介でした。
  • #34: [06:30] つづいてNeo4Jをしょうかいします
  • #35: [06:35] Neo4Jは World‘s leading graph database とうたっているようです クエリとしては CypherやGremlinに対応しています プロトコルはboltと呼ばれるバイナリプロトコルとHTTPがあります ドライバは各種言語向けに提供されています、Pythonももちろんあります
  • #36: [07:00] 公式サイトにすぐためせるサンドボックスが提供されています
  • #37: [07:15] あらかじめ様々なデータがセットされています。これはTwitterのグラフです。
  • #38: [07:30] Dashboardにクエリを入力すると、結果が可視化されます。 Cypherの文法では、かっこはノードで ハイフンや不等号でエッジを表します。 これはMeというノードからPostというエッジでつながっているTweetというノードを検索するCypherです また、Tweetについているいいねの数が多い順に取得するようにしています 実行するとDashboard上に可視化されます。 このスクショではTweetノードにTweet本文が表示されていますが、表示するプロパティは変えれるので、
  • #39: [07:45] このようにいいねの数を表示することもできます 私はいいね44が最高のようで、全然バズれてないです
  • #40: [08:00] サンドボックス以外にもインストールして使うこともできます コンテナイメージが提供されていて、 Kubernetesに簡単にデプロイできるチャートも公開されています。 コマンド一発でデプロイ可能です
  • #41: [08:15] チュートリアルも充実しています。 これは movie-graph という演習用のグラフのチュートリアルです 映画のタイトルと出演者などのデータを扱えます
  • #42: [08:30] チュートリアルに表示されるCypherをコピペして結果を見ることで学べます
  • #43: [08:45] Pythonで、Neo4Jに接続してCypherを投げるサンプルを書いてみました。 こちらにおいています。
  • #44: [09:00] Neo4Jへの接続はこのようになります。 Neo4j公式のPython用ドライバが使用できます。 これは全てのノードを検索するクエリです
  • #45: [09:15] この場合は映画のノードや人物のノードなど全て検索されます。 先ほどのチュートリアルに記載されているクエリを実行していくと理解を深められます。 ここまでで、Neo4Jの紹介でした。  
  • #46: [09:30] 最後にまとめです。
  • #47: [09:35] 読む。
  • #48: [09:55] ごせいちょうありがとうございました。