Slide 1

Slide 1 text

Getting Started with Graph Database with Python 2019/10/10 PyFukuoka #7 @loftkun

Slide 2

Slide 2 text

About Me • @loftkun • ヤフー株式会社 • サービスプラットフォーム本部 • 将棋(初段) / ピアノ(独学) / LIVE(スピッツetc) • Python歴 3年くらい • 週1参加・月1登壇

Slide 3

Slide 3 text

IT Event Bot 福岡新着ITイベント @ITEventFukuoka

Slide 4

Slide 4 text

Agenda Graph Database GitHub API Neo4J

Slide 5

Slide 5 text

Graph Database

Slide 6

Slide 6 text

Graph

Slide 7

Slide 7 text

Graph 点(Node)と線(Edge)で表現されるデータ構造

Slide 8

Slide 8 text

Graph User User User Tweet Tweet Tweet Tweet 点(Node)の種別を定義できる

Slide 9

Slide 9 text

Graph User User User Tweet Tweet Tweet Tweet 線(Edge)の種別も定義できる Follow Post

Slide 10

Slide 10 text

Graph User User User Tweet Tweet Tweet Tweet 線(Edge)は方向も持てる(有効グラフ) 点(Node)の関係を表せるのでRelationshipとも呼ばれる 親子関係、所有、アクションなどを表せる Follow Post

Slide 11

Slide 11 text

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!!

Slide 12

Slide 12 text

Graph Database • Graph構造を扱えるデータベース • AWS • Amazon Neptune • Azure • Cosmos DB がグラフデータモデルをサポート • GCP • GKEにJanusGraphをデプロイ ( https://cloud.google.com/solutions/running- janusgraph-with-bigtable?hl=ja ) • OSS • Neo4J

Slide 13

Slide 13 text

Case • ソーシャルグラフ • Web上での人間の相関関係 • Facebook グラフAPI ( https://developers.facebook.com/docs/graph-api ) • 最短経路問題 • 鉄道路線、カーナビ • 最短経路 = 各Edgeに付与した重み(距離)の合計が最も少ない経路

Slide 14

Slide 14 text

Case • イレギュラーなパターンの発見 • クレジットカード等の不正利用検知 • 通常と異なる経路の検出 • https://neo4j.com/developer/ (Fraud Detection) • パナマ文書や銀行顧客情報のICIJ国際調査報道ジャーナリスト連合によ る解析 ( Neo4j + Linkrious ) • https://www.itmedia.co.jp/enterprise/articles/1605/25/news024.html • 前職でやっていたこと • IaaSの構成物( 物理マシン、VM、ストレージ、NW )をGraph構造で定義 &可視化 • Node(VM)を2つクリックしたら経路(Edge) を表示など

Slide 15

Slide 15 text

GitHub API

Slide 16

Slide 16 text

GitHub GraphQL API v4 • v3 は REST だが、v4 は GraphQL APIとなっている • Why GitHub is using GraphQL • GraphQL lets you replace multiple REST requests with a single call to fetch the data you specify => 複数のRESTリクエストを1回の呼び出しに置き換えられる • v3はPRやIssueなどエンドポイントが分かれている • v4 はエンドポイントは1つ https://developer.github.com/v4/

Slide 17

Slide 17 text

Explorer • 左ペインにGraphQLを書いて実行で きる • Tyr & Errorに便利 • Syntax Checkもやってくれる • マウスオーバーで型の説明も出る https://developer.github.com/v4/explorer/?variables=%7B%7D&query=query%20%7B%0A%20%20__ty pe%28name%3A%20%22Repository%22%29%20%7B%0A%20%20%20%20name%0A%20%20%20%20ki nd%0A%20%20%20%20description%0A%20%20%20%20fields%20%7B%0A%20%20%20%20%20%20na me%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D

Slide 18

Slide 18 text

Types 全ての型を調べる 特定の型について調べる https://developer.github.com/v4/guides/intro-to-graphql/#discovering-the-graphql-api

Slide 19

Slide 19 text

Authentication & Authorization • v3 (REST)では必須ではない • 認証しない場合はrate limit制限が厳しくなる • v4 (GraphQL) では必須 • Basic認証 • あまりパスワードは使いたくない・・・ • OAuth認証 • 権限設定できるのでおすすめ • OAuth用のtokenが必要となる • Settings --> Developer settings ( https://github.com/settings/apps ) で作成しておく • もしくはAuthorizations APIで作成できる

Slide 20

Slide 20 text

Python Sample • 以下に置いています • https://github.com/loftkun/github-api-samples/blob/master/v4/demo.py • tokenを設定すると使えます • 以下を試しました 1. ratelimit 2. user 3. repository 4. search

Slide 21

Slide 21 text

Post Query

Slide 22

Slide 22 text

1. ratelimit

Slide 23

Slide 23 text

1. ratelimit

Slide 24

Slide 24 text

2. user

Slide 25

Slide 25 text

2. user

Slide 26

Slide 26 text

3. repository

Slide 27

Slide 27 text

3. repository

Slide 28

Slide 28 text

4. search

Slide 29

Slide 29 text

4. search

Slide 30

Slide 30 text

Python スター数 ランキング発表!

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

https://neo4j.com/style-guide/

Slide 34

Slide 34 text

Neo4J • World's leading graph database • クエリ言語 • Cypher ( default ) • Gremlin • プロトコル • Bolt ( バイナリプロトコル ) • HTTP-API • ドライバ • Python / Go / JS / Java / .NET / Ruby / PHP / etc https://neo4j.com/developer/

Slide 35

Slide 35 text

sandbox https://neo4j.com

Slide 36

Slide 36 text

sandbox - Twitter Graph https://guides.neo4j.com/sandbox/twitter/index.html

Slide 37

Slide 37 text

favo ranking

Slide 38

Slide 38 text

favo ranking

Slide 39

Slide 39 text

Install • Docker • k8s ( Helm )

Slide 40

Slide 40 text

:play movie-graph

Slide 41

Slide 41 text

:play movie-graph

Slide 42

Slide 42 text

Python Sample • 以下に置いています • https://github.com/loftkun/neo4j-demo/blob/master/movie-graph/demo.py • :play movie-graphで生成した全Nodeを検索してみました

Slide 43

Slide 43 text

Search all Nodes

Slide 44

Slide 44 text

Search all Nodes

Slide 45

Slide 45 text

Summary

Slide 46

Slide 46 text

Summary • Pythonで GitHub GraphQL API v4 と Neo4J を操作してみた • それぞれWebUIがあり、クエリの組み立てに便利だった • 特にNeo4JのDashboardは可視化もしてくれるのが便利 • 採用されているクエリ言語が異なるためそれぞれ学習が必要だ • 世の中の事例も参考にし、Graph構造が適していそうなデータ を操作する際はGraph Databaseを活用していきたい

Slide 47

Slide 47 text

Thank you for listening !