Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
920
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
PyLadiesCon 2025: “Go Straight, Then Turn Right!”: How I Built a Voice-Controlled Toy Car Using Generative AI, Gradio, and Raspberry Pi Pico
komofr
0
26
PyCon mini 東海 2025「個人ではじめるマルチAIエージェント入門 〜LangChain × LangGraphでアイデアを形にするステップ〜」
komofr
3
1.9k
ポスターセッション: 「まっすぐ行って、右!」って言ってラズパイカーを動かしたい 〜生成AI × Raspberry Pi Pico × Gradioの試作メモ〜
komofr
1
1.6k
Bokeh & Dash Cytoscape 〜 Pythonによるインタラクティブなネットワーク可視化ライブラリの比較 / PyConJP2021
komofr
0
820
Dash Cytoscape 〜 Pythonによるインタラクティブ・ネットワーク可視化入門 / StartPython#67
komofr
0
1.7k
Dash Cytoscapeで始めるネットワーク可視化 / plotly dash book
komofr
0
710
(修正版) NumPy/pandas使いのためのテスト自動化入門 / PyConJP2020
komofr
32
12k
[Python Charity Talks in Japan] LT: ネットワーク解析とテキスト解析で見るPEP / pycharity
komofr
0
1.4k
PyPI翻訳プロジェクト速報 / PyLadies Tokyo LT
komofr
1
520
Other Decks in Programming
See All in Programming
TestingOsaka6_Ozono
o3
0
170
マスタデータ問題、マイクロサービスでどう解くか
kts
0
110
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
750
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
110
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
170
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
190
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
370
チームをチームにするEM
hitode909
0
340
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
730
GISエンジニアから見たLINKSデータ
nokonoko1203
0
150
Deno Tunnel を使ってみた話
kamekyame
0
140
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.9k
Featured
See All Featured
Practical Orchestrator
shlominoach
190
11k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Rails Girls Zürich Keynote
gr2m
95
14k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
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ྡΛݟͯΈΔʁ
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠