LT: BPStudy#135 「NetworkXではじめる情報構造化 〜 たくさんあるドキュメントの全体像を俯瞰する」

98df8bb11748bb59fef1aa1e474e8e02?s=47 komo_fr
November 29, 2018

LT: BPStudy#135 「NetworkXではじめる情報構造化 〜 たくさんあるドキュメントの全体像を俯瞰する」

「BPStudy#135〜エンジニアの知的生産術」でのLT資料です。
イベントページ: https://bpstudy.connpass.com/event/104549/

98df8bb11748bb59fef1aa1e474e8e02?s=128

komo_fr

November 29, 2018
Tweet

Transcript

  1. NetworkXͰ͸͡ΊΔ ৘ใߏ଄Խ ͨ͘͞Μ͋ΔυΩϡϝϯτͷશମ૾Λ၆ᛌ͢Δ 2018.11.29 BPStudy#135ʙΤϯδχΞͷ஌తੜ࢈ज़

  2. Who am I ? • @komo_fr (Tomoko FURUKI) • ͓͠͝ͱɿ

    • લɿҩྍ৘ใγεςϜͷઃܭɾ࣮૷ • ࠓɿPythonΛ࢖ͬͯσʔλΛݟͨΓ
 ɹɹπʔϧΛ࡞ͬͨΓ
  3. 1000 ϖʔδҎ্͋Δ ࢿྉΛಡΉͱ͖ Ͳ͏͠·͔͢ʁ

  4. None
  5. େ·͔ʹશମ૾Λ೺Ѳ͢Δ • ྫ͑͹ɺ໨࣍΍ষݟग़͠ ͨͱ͑͹ɺPythonϥΠϒϥϦϦϑΝϨϯε͸1,000ϖʔδҎ্ ͋Γ·͢ɻ͜ΕΛશ෦ಡ΋͏ͱߟ͑Δͱɺେมա͗ͯ৺͕ંΕ ͦ͏Ͱ͢ɻ͔͠͠ɺ໨࣍͸6ϖʔδ͔͋͠Γ·ͤΜ͠ɺষݟग़͠ ͸ͨͬͨ34ߦ͔͋͠Γ·ͤΜɻ ॻ੶΍͜͏͍͏େن໛ͳࢿྉͰ͸ɺ๯಄ʹ໨࣍Λஔ͘͜ͱ͕Ұ ൠతͳ׳शͱͯ͠ߦΘΕ͍ͯ·͢ɻͦΕ͸શମ૾Λ೺Ѳ͠΍͢ ͘͢ΔͨΊͰ͢ɻ

    ʮΤϯδχΞͷ஌తੜ࢈ज़ ޮ཰తʹֶͼɺ੔ཧ͠ɺΞ΢τϓοτ͢Δʯʢ੢ඌହ࿨ [ஶ] / ٕज़ධ࿦ࣾʣp21
  6. ΋͠΋ࢿྉʹ ʮ໨࣍ʯ͕ ͳ͔ͬͨΒʁ

  7. ໨͕࣍ͳ͍ ࢿྉʁ

  8. ྫ͑͹

  9. ྫ1ʣͨ͘͞Μͷνέοτ • Redmineͷνέοτ΍GitHub Issue • ॻ੶ͱҧͬͯ໨࣍͸ͳ͍ • ͺΒͺΒͱνέοτʢ৘ใʣ͕͋Δ • ؔ܎͕͋Δνέοτಉ࢜ʹ͸


    ࣌ʑؔ࿈͚͕ͮઃఆ͞Ε͍ͯΔ
  10. ྫ2ʣͨ͘͞Μͷ࿦จ • ৽͘͠ڵຯ࣋ͬͨ෼໺ʹ͍ͭͯ
 ͬ͘͟Γ೺Ѳ͍ͨ͠ͱ͖ • ͻͱͭͷ࿦จ಺Ͱ͸ষཱ͕ͯ͋Δ͕ɻɻɻ • Ҿ༻ؔ܎͕͋Δෳ਺ͷ࿦จؒΛ·͍ͨͩ
 શମ૾͸ɺͲ͏΍ͬͯ೺Ѳ͢Δʁ

  11. ؔ܎

  12. πϦʔߏ଄ͱωοτϫʔΫߏ଄ Tree Network ࠎࢠͱͳΔTree͕͋Δ͕ɺޓ͍ʹNetworkʹͳ͍ͬͯΔ΋ͷ΋͋Δ • ୈ1ষ • 1.1અ • 1.1.1߲

    • 1.1.2߲ • 1.2અ • ୈ2ষ EPD EPD EPD EPD EPD
  13. ωοτϫʔΫߏ଄ͷ ࢿྉͷશମ૾Λ Ͳ͏΍ͬͯ၆ᛌ͢Δʁ

  14. NetworkX

  15. ωοτϫʔΫ෼ੳ • ʮԿ͔ʯͱʮԿ͔ʯͷͭͳ͕Γͷߏ଄Λ஌Δ ͨΊͷख๏ • υΩϡϝϯτͷҾ༻ؔ܎ʢdocͱdocͷͭͳ͕Γʣ • SNSͷϑΥϩʔؔ܎ʢਓͱਓͱͷͭͳ͕Γʣ ϊʔυ ϊʔυ

    Τοδ
  16. ख๏΋ಓ۩΋৭ʑ ख๏ ಓ۩ πʔϧɾϥΠϒϥϦ 1ZUIPO /FUXPSL9 QZUIPOJHSBQI 3 J(SBQI +BWB4DSJQU

    %KT ՄࢹԽͷΈ σεΫτοϓܥ (6*πʔϧ $ZUPTDBQF (FQIJ QBKFL ՄࢹԽ த৺ੑͳͲॾࢦඪͷࢉग़ ίϛϡχςΟݕग़ FUDʜ
  17. ֶΜͩ͜ͱΛ࿩͠·͢ ͋ͱͪΐͬͱσʔλݹ͍Ͱ͢

  18. NetworkXΛ࢖ͬͯ ωοτϫʔΫߏ଄ͷ υΩϡϝϯτΛ ݟͯΈΑ͏ʂ

  19. ԿΛ୊ࡐʹ ͢Δʁ

  20. PythonͷެࣜυΩϡϝϯτ w1&1 1ZUIPO&OIBODFNFOU1SPQPTBM  w 1ZUIPOͷػೳ΍ϓϩηεɾ؀ڥͳͲʹ͍ͭͯ
 େ͖ͳมߋ͕͋Δͱ͖ʹॻ͔ΕΔఏҊॻ w ྫ 1&14UZMF(VJEFGPS1ZUIPO$PEF

  21. PEPͷ਺͸470Ҏ্ • શͯWebͰެ։͞Ε͍ͯΔ • PEP 0: https://www.python.org/dev/peps/

  22. Ͱ΋PEPಉ࢜ʹ͸Ҿ༻ؔ܎͕͋Δ! ଞͷPEP΁ͷϦϯΫ https://www.python.org/dev/peps/pep-0008/ WebͰެ։͞Ε͍ͯΔ = htmlͰॻ͔Ε͍ͯΔ = <a>λάΛநग़͢Ε͹ɺPEPͷҾ༻ؔ܎ͷωοτϫʔΫߏ଄Λ࡞ΕΔʂ 1&1ΑΓ

  23. ྫʣ 1&1 1&1 1&1 Style Guide for Python Code The

    Zen of Python Docstring Conventions
  24.      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 ωοτϫʔΫߏ଄ͷσʔλදݱ
  25. 1&1 1&1 1&1 1&1    1&1  

     1&1   
  26. NetworkX

  27. ྡ઀ߦྻσʔλΛಡΈࠐΈม׵ 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)
  28. ωοτϫʔΫ ߏ଄શମΛ ՄࢹԽ nx.draw() https://networkx.github.io/documentation/stable/reference/drawing.html Drawing

  29. Ұ෦෼ 1&1 1&1 1&1 Style Guide for Python Code The

    Zen of Python Docstring Conventions
  30. શମ૾ *2018/02͘Β͍ͷ࣌఺ͷPEPͷσʔλ

  31. ͪΐͬͱΑ͘Θ͔Βͳ͍ໟۄ *2018/02͘Β͍ͷ࣌఺ͷPEPͷσʔλ

  32. ΋͏ͪΐͬͱ ৘ใΛ௥Ճ͠ ͯΈΔ

  33. ϊʔυͷ৭

  34. PEPͷυΩϡϝϯτʹ͸ϔομʔ ͕͋Δ https://www.python.org/dev/peps/pep-0008/

  35. ֤ϊʔυʹ৘ใΛ෇༩Ͱ͖Δ 5JUMF 4UZMF(VJEFGPS 1ZUIPO$PEF 4UBUVT "DUJWF 5ZQF 1SPDFTT $SFBUFE +VM

    5JUMF ʜ 4UBUVT ʜ 5ZQF ʜ $SFBUFE ʜ 5JUMF ʜ 4UBUVT ʜ 5ZQF ʜ $SFBUFE ʜ   
  36. StatusΛ ϊʔυͷ৭ʹ ൓өͤ͞Δ nx.set_node_attributes() G.nodes(data='Status')

  37. *2018/02͘Β͍ͷ࣌఺ͷPEPͷσʔλ

  38. ΋͏ͪΐ͍ ৘ใΛ௥Ճ ͯ͠ΈΔ

  39. ϊʔυͷ αΠζ

  40. ࣍਺ • ೖ࣍਺ • ͜͜Ͱ͸ɺଞͷPEP͔Βࢀর͞Ε͍ͯΔ਺ • ग़࣍਺ • ͜͜Ͱ͸ɺଞͷPEPΛࢀর͍ͯ͠Δ਺ •

    ࣍਺͡Όͳͯ͘த৺ੑΛ࢖͏͜ͱ΋͋ΔΑ
  41. ೖ࣍਺Λ αΠζʹ൓ө G.in_degree() * ೖ࣍਺ = 0ͷPEP͸1ͷPEPͷ1/10ͷ໘ੵͱ͢Δ https://networkx.github.io/documentation/stable/reference/classes/generated/networkx.DiGraph.in_degree.html

  42. *2018/02͘Β͍ͷ࣌఺ͷPEPͷσʔλ

  43. *2018/02͘Β͍ͷ࣌఺ͷPEPͷσʔλ

  44. *2018/02͘Β͍ͷ࣌఺ͷPEPͷσʔλ

  45. *2018/02͘Β͍ͷ࣌఺ͷPEPͷσʔλ

  46. Ұ൪ೖ࣍਺͕ଟ͍ͷ͸PEP 8 1ZUIPOͷίʔυΛॻ͘ͱ͖͸ɺ ͜ͷελΠϧͰॻ͍ͯͶ

  47. ΍ͬͺΓ ͍͖ͳΓશ෦Λ ѻ͓͏ͱ͢Δͱ ʮ͏͒ͬʯͱͻΔΉ

  48. ͲΜͳτϐοΫ͕ ͋Δͷ͔ ͬ͘͟Γ ΧςΰϦ෼͚͍ͨ͠

  49. খ෼͚ʹ ͯ͠ΈΑ͏ (αϒάϧʔϓ෼ׂ) nx.connected_component_subgraphs() https://networkx.github.io/documentation/stable/reference/algorithms/component.html

  50. 4ͭͷάϧʔϓʹ෼͚͍ͯͩ͘͞

  51. ͍ͬͭͯ͘Δ΋ͷʢ࿈݁੒෼ʣ ಉ࢜Ͱ෼͚Δ

  52. ͜ͷ෼͚ํΛ ద༻ͯ͠ΈΔ * PEPͷࢀরؔ܎͸༗޲ͳͷͰɺࠓճ͸ऑ࿈݁੒෼Λར༻ nx.weakly_connected_components() https://networkx.github.io/documentation/stable/reference/algorithms/component.html

  53. • ໿8ׂͷPEPจॻ͕1ͭͷେ͖ͳάϧʔϓʹॴ ଐ͍ͯ͠Δ *2018/6/20࣌఺ͷPEPͷσʔλ

  54. ڊେͳάϧʔϓ͕1͍ͭΔ • ໿8ׂͷPEPจॻ͕1ͭͷେ͖ͳάϧʔϓʹॴଐ ͍ͯ͠Δ • 65ݸͷαϒάϧʔϓʹ෼ׂͰ͖Δ • ͨͩ͠ɺͦͷ͏ͪ57άϧʔϓ͕ݽཱ఺ • Reject͞ΕͨఏҊ͸΅ͬͪʹͳΓ΍͍͢ʁ

    *2018/6/20࣌఺ͷPEPͷσʔλ
  55. • ݽཱ఺Ͱ΋ͳ͘ڊେάϧʔϓʹ΋ଐ͍ͯ͠ͳ͍
 ΍ͭͬͯԿͩΖ͏ʁ

  56. Reject͞ΕͨSwitch • [PEP 275] Switching on Multiple Values • [PEP

    3103] A Switch/Case Statement
  57. ڊେάϧʔϓΛখ෼͚ʹ͍ͨ͠

  58. ΫϥελϦϯά ͯ͠ΈΑ͏

  59. 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 ൃදޙͷ௥ه
  60. ͜͏͍͏ߏ଄͕͋ͬͨΒ

  61. ͜͏͡Όʂ

  62. ͜ͷ෼͚ํΛ ద༻ͯ͠ΈΔ community.best_partition() https://python-louvain.readthedocs.io/en/latest/api.html#community.best_partition

  63. ݁Ռ • ࣮ྫ: louvainͰαϒάϧʔϓԽ • https://bit.ly/2zGCrVu

  64. ײ૝

  65. ײ૝ • ❌ NetworkXͰ࢖͑͹όγοͱ໌֬ͳߏ଄͕Θ͔Δ! • ⭕ʮԿͰ͜͏͍͏݁ՌʹͳΔΜͩΖ͏ʁʯͱ୳ࡧ͍ͯ͠ ͘͏ͪʹɺ΅Μ΍Γ֓؍Λ௫ΜͰ͍͘ײ͡ • ϦϯΫషͬͯͳ͍͚Ͳ࣮͸͜Εؔ܎ͯ͠ΔΜ͡Όͳ͍ ͷʁ

    • ͦ΋ͦ΋ʮؔ܎ʯͷఆٛͬͯԿͩʁʁ
  66. ஍ਤͷΑ͏ͳײ֮ • ݁ہͷͱ͜Ζɺ࣮ࡍͲ͏ͳͷ͔͸ݱ஍ʹ଍ΛӡͿʢ= PEPͷத ਎ΛͪΌΜͱಡΉʣ͜ͱൈ͖Ͱ͸Θ͔Βͳ͍ • Ͱ΋ཱྀ׳Ε͍ͯ͠ͳ͍΍͕ͭ஍ਤແ͠Ͱา͘ͷ͸ͭΒ͍ • ͳΜͱͳ͋͘ͷลʹࢁ΍઒ʢಛ௃తͳPEPʣ͕͋Δ •

    ͋ͷล͸ཱྀͷ೉౓ߴͦ͏͔ͩΒࠓ͸ආ͚Α͏ʢඃࢀর਺ଟ͍ͷ ʹԘ௮͚ʹͳͬͨPEPͱ͔ʣ • ͬ͘͟Γ͜͏͍͏஍Ҭʢαϒάϧʔϓʣ͕͋ΔΜͩͳ͊ • ʢ೔ʑߋ৽͞Ε͍ͯΔͷͰʣͨ·ʹ஍ܗͷେن໛มԽ͕ى͜Δ
  67. ·ͱΊ

  68. ·ͱΊ • ໨͕࣍ͳ͍େྔͷυΩϡϝϯτͷʮେ·͔ͳߏ଄ʯͬͯͲ͏΍ͬ ͯ೺Ѳ͢ΔΜͩΖ͏ʁ • ࣮ࡍʹNetworkX & PythonͷެࣜυΩϡϝϯτΛ࢖ͬͯΈͯ ΍ͬͯΈͨ •

    ΍ͬͯΈΔͱ໘ന͍΋ͷ΋͋Δ൓໘ɺᡰʹམͪͳ͍΋ͷ΋͋Δ • ͋Δҙຯʮ໨తʯ͕Ͱ͖ͯ͘Δ • Next Step → ໨తΛ࣋ͬͯಡΉʁʁ • ಛఆͷPEPͷ1hop໨ɺ2hop໨ྡΛݟͯΈΔʁ
  69. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠