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
900
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
800
Dash Cytoscape 〜 Pythonによるインタラクティブ・ネットワーク可視化入門 / StartPython#67
komofr
0
1.7k
Dash Cytoscapeで始めるネットワーク可視化 / plotly dash book
komofr
0
660
(修正版) NumPy/pandas使いのためのテスト自動化入門 / PyConJP2020
komofr
32
12k
[Python Charity Talks in Japan] LT: ネットワーク解析とテキスト解析で見るPEP / pycharity
komofr
0
1.4k
PyPI翻訳プロジェクト速報 / PyLadies Tokyo LT
komofr
1
510
pandasのStyling機能で強化するJupyter実験レポート / PyConJP 2019
komofr
15
28k
EuroPython 2019 LT / Let's Explore PEPs with NetworkX!
komofr
2
1k
LT「データまえしょりすとのためのpytest入門」@みんなのPython勉強会#46
komofr
5
3.1k
Other Decks in Programming
See All in Programming
rage against annotate_predecessor
junk0612
0
170
Updates on MLS on Ruby (and maybe more)
sylph01
1
180
複雑なドメインに挑む.pdf
yukisakai1225
5
1.2k
Navigating Dependency Injection with Metro
zacsweers
3
3.5k
もうちょっといいRubyプロファイラを作りたい (2025)
osyoyu
1
460
🔨 小さなビルドシステムを作る
momeemt
4
690
Kiroで始めるAI-DLC
kaonash
2
630
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
570
複雑なフォームに立ち向かう Next.js の技術選定
macchiitaka
2
240
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
7
2.5k
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
110
The Past, Present, and Future of Enterprise Java with ASF in the Middle
ivargrimstad
0
170
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
How STYLIGHT went responsive
nonsquared
100
5.8k
Into the Great Unknown - MozCon
thekraken
40
2k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
GitHub's CSS Performance
jonrohan
1032
460k
Gamification - CAS2011
davidbonilla
81
5.4k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Embracing the Ebb and Flow
colly
87
4.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Why Our Code Smells
bkeepers
PRO
339
57k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Typedesign – Prime Four
hannesfritz
42
2.8k
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ྡΛݟͯΈΔʁ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠