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 full-size slide

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

    View full-size slide

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

    View full-size slide

  4. Agenda
    Graph Database
    GitHub API
    Neo4J

    View full-size slide

  5. Graph Database

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  10. 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 full-size slide

  11. 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 full-size slide

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

    View full-size slide

  13. 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 full-size slide

  14. 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 full-size slide

  15. 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  19. 1. ratelimit

    View full-size slide

  20. 1. ratelimit

    View full-size slide

  21. 3. repository

    View full-size slide

  22. 3. repository

    View full-size slide

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

    View full-size slide

  24. 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 full-size slide

  25. 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 full-size slide

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

    View full-size slide

  27. 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 full-size slide

  28. sandbox
    https://neo4j.com

    View full-size slide

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

    View full-size slide

  30. favo ranking

    View full-size slide

  31. favo ranking

    View full-size slide

  32. Install
    • Docker
    • k8s ( Helm )

    View full-size slide

  33. :play movie-graph

    View full-size slide

  34. :play movie-graph

    View full-size slide

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

    View full-size slide

  36. Search all Nodes

    View full-size slide

  37. Search all Nodes

    View full-size slide

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

    View full-size slide

  39. Thank you for listening !

    View full-size slide