Getting Started with Graph Database with Python

4cb5b950cfd0eabf5d6b828c951d4549?s=47 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

4cb5b950cfd0eabf5d6b828c951d4549?s=128

loftkun

October 10, 2019
Tweet

Transcript

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

    @loftkun
  2. About Me • @loftkun • ヤフー株式会社 • サービスプラットフォーム本部 • 将棋(初段)

    / ピアノ(独学) / LIVE(スピッツetc) • Python歴 3年くらい • 週1参加・月1登壇
  3. IT Event Bot 福岡新着ITイベント @ITEventFukuoka

  4. Agenda Graph Database GitHub API Neo4J

  5. Graph Database

  6. Graph

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

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

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

    Post
  10. Graph User User User Tweet Tweet Tweet Tweet 線(Edge)は方向も持てる(有効グラフ) 点(Node)の関係を表せるのでRelationshipとも呼ばれる

    親子関係、所有、アクションなどを表せる Follow Post
  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!!
  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
  13. Case • ソーシャルグラフ • Web上での人間の相関関係 • Facebook グラフAPI ( https://developers.facebook.com/docs/graph-api

    ) • 最短経路問題 • 鉄道路線、カーナビ • 最短経路 = 各Edgeに付与した重み(距離)の合計が最も少ない経路
  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) を表示など
  15. GitHub API

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

  19. Authentication & Authorization • v3 (REST)では必須ではない • 認証しない場合はrate limit制限が厳しくなる •

    v4 (GraphQL) では必須 • Basic認証 • あまりパスワードは使いたくない・・・ • OAuth認証 • 権限設定できるのでおすすめ • OAuth用のtokenが必要となる • Settings --> Developer settings ( https://github.com/settings/apps ) で作成しておく • もしくはAuthorizations APIで作成できる
  20. Python Sample • 以下に置いています • https://github.com/loftkun/github-api-samples/blob/master/v4/demo.py • tokenを設定すると使えます • 以下を試しました

    1. ratelimit 2. user 3. repository 4. search
  21. Post Query

  22. 1. ratelimit

  23. 1. ratelimit

  24. 2. user

  25. 2. user

  26. 3. repository

  27. 3. repository

  28. 4. search

  29. 4. search

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

  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
  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
  33. https://neo4j.com/style-guide/

  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/
  35. sandbox https://neo4j.com

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

  37. favo ranking

  38. favo ranking

  39. Install • Docker • k8s ( Helm )

  40. :play movie-graph

  41. :play movie-graph

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

  43. Search all Nodes

  44. Search all Nodes

  45. Summary

  46. Summary • Pythonで GitHub GraphQL API v4 と Neo4J を操作してみた

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