Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
LT: BPStudy#135 「NetworkXではじめる情報構造化 〜 たくさんあるドキュメントの全体像を俯瞰する」
Search
komo_fr
November 29, 2018
Programming
3
800
LT: BPStudy#135 「NetworkXではじめる情報構造化 〜 たくさんあるドキュメントの全体像を俯瞰する」
「BPStudy#135〜エンジニアの知的生産術」でのLT資料です。
イベントページ:
https://bpstudy.connpass.com/event/104549/
komo_fr
November 29, 2018
Tweet
Share
More Decks by komo_fr
See All by komo_fr
Bokeh & Dash Cytoscape 〜 Pythonによるインタラクティブなネットワーク可視化ライブラリの比較 / PyConJP2021
komofr
0
590
Dash Cytoscape 〜 Pythonによるインタラクティブ・ネットワーク可視化入門 / StartPython#67
komofr
0
1.3k
Dash Cytoscapeで始めるネットワーク可視化 / plotly dash book
komofr
0
380
(修正版) NumPy/pandas使いのためのテスト自動化入門 / PyConJP2020
komofr
32
11k
[Python Charity Talks in Japan] LT: ネットワーク解析とテキスト解析で見るPEP / pycharity
komofr
0
1.3k
PyPI翻訳プロジェクト速報 / PyLadies Tokyo LT
komofr
1
390
pandasのStyling機能で強化するJupyter実験レポート / PyConJP 2019
komofr
15
21k
EuroPython 2019 LT / Let's Explore PEPs with NetworkX!
komofr
2
860
LT「データまえしょりすとのためのpytest入門」@みんなのPython勉強会#46
komofr
5
2.8k
Other Decks in Programming
See All in Programming
PostmanでAPIの動作確認が楽になった話
h455h1
0
110
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.2k
Milestoner
bkuhlmann
1
400
CircleCIを活用して AWSへの継続的デリバリーを 実践する
coconala_engineer
1
230
Elm Form Validation
bkuhlmann
0
500
プールにゆこう
irof
2
120
Rubyでたのしむクリエイティブコーディング/Enjoy Creative coding with Ruby
chobishiba
1
160
Front-end application development, Symfony-style(s)
dunglas
2
1.9k
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
3
560
#phpcon_odawara オープン・クローズドなテストフィクスチャを求めて / open closed test fixtures
77web
3
210
1BRC--Nerd Sniping the Java Community
gunnarmorling
0
300
コードレビューで学ぶ!Kotlinオブジェクト指向デザインパターン
akkie76
2
170
Featured
See All Featured
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
103
6.6k
Navigating Team Friction
lara
177
13k
The Mythical Team-Month
searls
214
42k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
6
990
The Power of CSS Pseudo Elements
geoffreycrofte
58
5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
5
1.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
20
1.6k
Principles of Awesome APIs and How to Build Them.
keavy
119
16k
Why You Should Never Use an ORM
jnunemaker
PRO
50
8.6k
Side Projects
sachag
451
41k
Adopting Sorbet at Scale
ufuk
67
8.6k
The Art of Programming - Codeland 2020
erikaheidi
41
12k
Transcript
NetworkXͰ͡ΊΔ ใߏԽ ͨ͘͞Μ͋ΔυΩϡϝϯτͷશମ૾Λ၆ᛌ͢Δ 2018.11.29 BPStudy#135ʙΤϯδχΞͷతੜ࢈ज़
Who am I ? • @komo_fr (Tomoko FURUKI) • ͓͠͝ͱɿ
• લɿҩྍใγεςϜͷઃܭɾ࣮ • ࠓɿPythonΛͬͯσʔλΛݟͨΓ ɹɹπʔϧΛ࡞ͬͨΓ
1000 ϖʔδҎ্͋Δ ࢿྉΛಡΉͱ͖ Ͳ͏͠·͔͢ʁ
None
େ·͔ʹશମ૾ΛѲ͢Δ • ྫ͑ɺ࣍ষݟग़͠ ͨͱ͑ɺPythonϥΠϒϥϦϦϑΝϨϯε1,000ϖʔδҎ্ ͋Γ·͢ɻ͜ΕΛશ෦ಡ͏ͱߟ͑Δͱɺେมա͗ͯ৺͕ંΕ ͦ͏Ͱ͢ɻ͔͠͠ɺ࣍6ϖʔδ͔͋͠Γ·ͤΜ͠ɺষݟग़͠ ͨͬͨ34ߦ͔͋͠Γ·ͤΜɻ ॻ੶͜͏͍͏େنͳࢿྉͰɺ಄ʹ࣍Λஔ͘͜ͱ͕Ұ ൠతͳ׳शͱͯ͠ߦΘΕ͍ͯ·͢ɻͦΕશମ૾ΛѲ͢͠ ͘͢ΔͨΊͰ͢ɻ
ʮΤϯδχΞͷతੜ࢈ज़ ޮతʹֶͼɺཧ͠ɺΞτϓοτ͢Δʯʢඌହ [ஶ] / ٕज़ධࣾʣp21
͠ࢿྉʹ ʮ࣍ʯ͕ ͳ͔ͬͨΒʁ
͕࣍ͳ͍ ࢿྉʁ
ྫ͑
ྫ1ʣͨ͘͞Μͷνέοτ • RedmineͷνέοτGitHub Issue • ॻ੶ͱҧͬͯ࣍ͳ͍ • ͺΒͺΒͱνέοτʢใʣ͕͋Δ • ͕ؔ͋Δνέοτಉ࢜ʹ
࣌ʑؔ࿈͚͕ͮઃఆ͞Ε͍ͯΔ
ྫ2ʣͨ͘͞Μͷจ • ৽͘͠ڵຯ࣋ͬͨʹ͍ͭͯ ͬ͘͟ΓѲ͍ͨ͠ͱ͖ • ͻͱͭͷจͰষཱ͕ͯ͋Δ͕ɻɻɻ • Ҿ༻͕ؔ͋ΔෳͷจؒΛ·͍ͨͩ શମ૾ɺͲ͏ͬͯѲ͢Δʁ
ؔ
πϦʔߏͱωοτϫʔΫߏ Tree Network ࠎࢠͱͳΔTree͕͋Δ͕ɺޓ͍ʹNetworkʹͳ͍ͬͯΔͷ͋Δ • ୈ1ষ • 1.1અ • 1.1.1߲
• 1.1.2߲ • 1.2અ • ୈ2ষ EPD EPD EPD EPD EPD
ωοτϫʔΫߏͷ ࢿྉͷશମ૾Λ Ͳ͏ͬͯ၆ᛌ͢Δʁ
NetworkX
ωοτϫʔΫੳ • ʮԿ͔ʯͱʮԿ͔ʯͷͭͳ͕ΓͷߏΛΔ ͨΊͷख๏ • υΩϡϝϯτͷҾ༻ؔʢdocͱdocͷͭͳ͕Γʣ • SNSͷϑΥϩʔؔʢਓͱਓͱͷͭͳ͕Γʣ ϊʔυ ϊʔυ
Τοδ
ख๏ಓ۩৭ʑ ख๏ ಓ۩ πʔϧɾϥΠϒϥϦ 1ZUIPO /FUXPSL9 QZUIPOJHSBQI 3 J(SBQI +BWB4DSJQU
%KT ՄࢹԽͷΈ σεΫτοϓܥ (6*πʔϧ $ZUPTDBQF (FQIJ QBKFL ՄࢹԽ த৺ੑͳͲॾࢦඪͷࢉग़ ίϛϡχςΟݕग़ FUDʜ
ֶΜͩ͜ͱΛ͠·͢ ͋ͱͪΐͬͱσʔλݹ͍Ͱ͢
NetworkXΛͬͯ ωοτϫʔΫߏͷ υΩϡϝϯτΛ ݟͯΈΑ͏ʂ
ԿΛࡐʹ ͢Δʁ
PythonͷެࣜυΩϡϝϯτ w1&1 1ZUIPO&OIBODFNFOU1SPQPTBM w 1ZUIPOͷػೳϓϩηεɾڥͳͲʹ͍ͭͯ େ͖ͳมߋ͕͋Δͱ͖ʹॻ͔ΕΔఏҊॻ w ྫ 1&14UZMF(VJEFGPS1ZUIPO$PEF
PEPͷ470Ҏ্ • શͯWebͰެ։͞Ε͍ͯΔ • PEP 0: https://www.python.org/dev/peps/
ͰPEPಉ࢜ʹҾ༻͕ؔ͋Δ! ଞͷPEPͷϦϯΫ https://www.python.org/dev/peps/pep-0008/ WebͰެ։͞Ε͍ͯΔ = htmlͰॻ͔Ε͍ͯΔ = <a>λάΛநग़͢ΕɺPEPͷҾ༻ؔͷωοτϫʔΫߏΛ࡞ΕΔʂ 1&1ΑΓ
ྫʣ 1&1 1&1 1&1 Style Guide for Python Code The
Zen of Python Docstring Conventions
Style Guide for Python Code
The Zen of Python Docstring Conventions 1&1 1&1 1&1 1&1 1&1 1&1 ྡߦྻ BEKBDFODZNBUSJY TUBSU FOE 1&1 1&1 1&1 1&1 1&1 1&1 ΤοδϦετ FEHFMJTU ωοτϫʔΫߏͷσʔλදݱ
1&1 1&1 1&1 1&1 1&1
1&1
NetworkX
ྡߦྻσʔλΛಡΈࠐΈม import pandas as pd import networkx as nx #
ྡߦྻͷcsvσʔλΛpandasͷσʔλϑϨʔϜʹಡΈࠐΉ df = pd.read_csv(‘ྡߦྻ.csv’) # NetworkX 2Ҏ߱ͳΒ͜ΕͰҰൃ G = nx.from_pandas_adjacency(df, create_using=nx.DiGraph)
ωοτϫʔΫ ߏશମΛ ՄࢹԽ nx.draw() https://networkx.github.io/documentation/stable/reference/drawing.html Drawing
Ұ෦ 1&1 1&1 1&1 Style Guide for Python Code The
Zen of Python Docstring Conventions
શମ૾ *2018/02͘Β͍ͷ࣌ͷPEPͷσʔλ
ͪΐͬͱΑ͘Θ͔Βͳ͍ໟۄ *2018/02͘Β͍ͷ࣌ͷPEPͷσʔλ
͏ͪΐͬͱ ใΛՃ͠ ͯΈΔ
ϊʔυͷ৭
PEPͷυΩϡϝϯτʹϔομʔ ͕͋Δ https://www.python.org/dev/peps/pep-0008/
֤ϊʔυʹใΛ༩Ͱ͖Δ 5JUMF 4UZMF(VJEFGPS 1ZUIPO$PEF 4UBUVT "DUJWF 5ZQF 1SPDFTT $SFBUFE +VM
5JUMF ʜ 4UBUVT ʜ 5ZQF ʜ $SFBUFE ʜ 5JUMF ʜ 4UBUVT ʜ 5ZQF ʜ $SFBUFE ʜ
StatusΛ ϊʔυͷ৭ʹ өͤ͞Δ nx.set_node_attributes() G.nodes(data='Status')
*2018/02͘Β͍ͷ࣌ͷPEPͷσʔλ
͏ͪΐ͍ ใΛՃ ͯ͠ΈΔ
ϊʔυͷ αΠζ
࣍ • ೖ࣍ • ͜͜ͰɺଞͷPEP͔Βࢀর͞Ε͍ͯΔ • ग़࣍ • ͜͜ͰɺଞͷPEPΛࢀর͍ͯ͠Δ •
࣍͡Όͳͯ͘த৺ੑΛ͏͜ͱ͋ΔΑ
ೖ࣍Λ αΠζʹө G.in_degree() * ೖ࣍ = 0ͷPEP1ͷPEPͷ1/10ͷ໘ੵͱ͢Δ https://networkx.github.io/documentation/stable/reference/classes/generated/networkx.DiGraph.in_degree.html
*2018/02͘Β͍ͷ࣌ͷPEPͷσʔλ
*2018/02͘Β͍ͷ࣌ͷPEPͷσʔλ
*2018/02͘Β͍ͷ࣌ͷPEPͷσʔλ
*2018/02͘Β͍ͷ࣌ͷPEPͷσʔλ
Ұ൪ೖ͕࣍ଟ͍ͷPEP 8 1ZUIPOͷίʔυΛॻ͘ͱ͖ɺ ͜ͷελΠϧͰॻ͍ͯͶ
ͬͺΓ ͍͖ͳΓશ෦Λ ѻ͓͏ͱ͢Δͱ ʮ͏͒ͬʯͱͻΔΉ
ͲΜͳτϐοΫ͕ ͋Δͷ͔ ͬ͘͟Γ ΧςΰϦ͚͍ͨ͠
খ͚ʹ ͯ͠ΈΑ͏ (αϒάϧʔϓׂ) nx.connected_component_subgraphs() https://networkx.github.io/documentation/stable/reference/algorithms/component.html
4ͭͷάϧʔϓʹ͚͍ͯͩ͘͞
͍ͬͭͯ͘Δͷʢ࿈݁ʣ ಉ࢜Ͱ͚Δ
͜ͷ͚ํΛ ద༻ͯ͠ΈΔ * PEPͷࢀরؔ༗ͳͷͰɺࠓճऑ࿈݁Λར༻ nx.weakly_connected_components() https://networkx.github.io/documentation/stable/reference/algorithms/component.html
• 8ׂͷPEPจॻ͕1ͭͷେ͖ͳάϧʔϓʹॴ ଐ͍ͯ͠Δ *2018/6/20࣌ͷPEPͷσʔλ
ڊେͳάϧʔϓ͕1͍ͭΔ • 8ׂͷPEPจॻ͕1ͭͷେ͖ͳάϧʔϓʹॴଐ ͍ͯ͠Δ • 65ݸͷαϒάϧʔϓʹׂͰ͖Δ • ͨͩ͠ɺͦͷ͏ͪ57άϧʔϓ͕ݽཱ • Reject͞ΕͨఏҊ΅ͬͪʹͳΓ͍͢ʁ
*2018/6/20࣌ͷPEPͷσʔλ
• ݽཱͰͳ͘ڊେάϧʔϓʹଐ͍ͯ͠ͳ͍ ͭͬͯԿͩΖ͏ʁ
Reject͞ΕͨSwitch • [PEP 275] Switching on Multiple Values • [PEP
3103] A Switch/Case Statement
ڊେάϧʔϓΛখ͚ʹ͍ͨ͠
ΫϥελϦϯά ͯ͠ΈΑ͏
louvainΞϧΰϦζϜΛ͏ • python-louvain • https://python-louvain.readthedocs.io/en/ latest/api.html • NetworkX͔Β͑Δ ൃද࣌ͷࢿྉʹʮNetworkX͔Β͑Δʯͱॻ͍͍ͯͨͷͰ͕͢ɺਖ਼͘͠ ʮNetworkXͷσʔλߏΛ͑ΔʯͰͨ͠ɻ
python-louvainࣗମɺݱࡏNetworkXͱผͷOSSͰ͢ɻ 2013ʹpython-louvainΛNetworkXຊମʹϚʔδ͠Α͏ͱ͍͏issueཱ͕ͬͯ ͍ΔͷͰ͕͢ɺݱࡏ࡞ۀ͕ࢭ·ͬͨ··Openʹͳ͍ͬͯΔΑ͏Ͱ͢ɻ https://github.com/networkx/networkx/issues/951 ൃදޙͷه
͜͏͍͏ߏ͕͋ͬͨΒ
͜͏͡Όʂ
͜ͷ͚ํΛ ద༻ͯ͠ΈΔ community.best_partition() https://python-louvain.readthedocs.io/en/latest/api.html#community.best_partition
݁Ռ • ࣮ྫ: louvainͰαϒάϧʔϓԽ • https://bit.ly/2zGCrVu
ײ
ײ • ❌ NetworkXͰ͑όγοͱ໌֬ͳߏ͕Θ͔Δ! • ⭕ʮԿͰ͜͏͍͏݁ՌʹͳΔΜͩΖ͏ʁʯͱ୳ࡧ͍ͯ͠ ͘͏ͪʹɺ΅ΜΓ֓؍Λ௫ΜͰ͍͘ײ͡ • ϦϯΫషͬͯͳ͍͚Ͳ࣮͜Εؔͯ͠ΔΜ͡Όͳ͍ ͷʁ
• ͦͦʮؔʯͷఆٛͬͯԿͩʁʁ
ਤͷΑ͏ͳײ֮ • ݁ہͷͱ͜Ζɺ࣮ࡍͲ͏ͳͷ͔ݱʹΛӡͿʢ= PEPͷத ΛͪΌΜͱಡΉʣ͜ͱൈ͖ͰΘ͔Βͳ͍ • Ͱཱྀ׳Ε͍ͯ͠ͳ͍͕ͭਤແ͠Ͱา͘ͷͭΒ͍ • ͳΜͱͳ͋͘ͷลʹࢁʢಛతͳPEPʣ͕͋Δ •
͋ͷลཱྀͷߴͦ͏͔ͩΒࠓආ͚Α͏ʢඃࢀরଟ͍ͷ ʹԘ௮͚ʹͳͬͨPEPͱ͔ʣ • ͬ͘͟Γ͜͏͍͏Ҭʢαϒάϧʔϓʣ͕͋ΔΜͩͳ͊ • ʢʑߋ৽͞Ε͍ͯΔͷͰʣͨ·ʹܗͷେنมԽ͕ى͜Δ
·ͱΊ
·ͱΊ • ͕࣍ͳ͍େྔͷυΩϡϝϯτͷʮେ·͔ͳߏʯͬͯͲ͏ͬ ͯѲ͢ΔΜͩΖ͏ʁ • ࣮ࡍʹNetworkX & PythonͷެࣜυΩϡϝϯτΛͬͯΈͯ ͬͯΈͨ •
ͬͯΈΔͱ໘ന͍ͷ͋Δ໘ɺᡰʹམͪͳ͍ͷ͋Δ • ͋Δҙຯʮతʯ͕Ͱ͖ͯ͘Δ • Next Step → తΛ࣋ͬͯಡΉʁʁ • ಛఆͷPEPͷ1hopɺ2hopྡΛݟͯΈΔʁ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠