Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Getting Started with Graph Database with Python

loftkun
October 10, 2019

Getting Started with Graph Database with Python

2019/10/10 Thu

PyFukuoka #7 - connpass
https://fukuoka-python.connpass.com/event/147318/

- Graph Database
- GitHub GraphQL API v4
- Neo4J

loftkun

October 10, 2019
Tweet

More Decks by loftkun

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. Agenda
    Graph Database
    GitHub API
    Neo4J

    View Slide

  5. Graph Database

    View Slide

  6. Graph

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. 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

    View Slide

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

    View Slide

  14. 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) を表示など

    View Slide

  15. GitHub API

    View Slide

  16. 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/

    View Slide

  17. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. Post Query

    View Slide

  22. 1. ratelimit

    View Slide

  23. 1. ratelimit

    View Slide

  24. 2. user

    View Slide

  25. 2. user

    View Slide

  26. 3. repository

    View Slide

  27. 3. repository

    View Slide

  28. 4. search

    View Slide

  29. 4. search

    View Slide

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

    View Slide

  31. 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

    View Slide

  32. 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

    View Slide

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

    View Slide

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

    View Slide

  35. sandbox
    https://neo4j.com

    View Slide

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

    View Slide

  37. favo ranking

    View Slide

  38. favo ranking

    View Slide

  39. Install
    • Docker
    • k8s ( Helm )

    View Slide

  40. :play movie-graph

    View Slide

  41. :play movie-graph

    View Slide

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

    View Slide

  43. Search all Nodes

    View Slide

  44. Search all Nodes

    View Slide

  45. Summary

    View Slide

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

    View Slide

  47. Thank you for listening !

    View Slide