Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Who am I ? • @komo_fr (Tomoko FURUKI) • ͓͠͝ͱɿ • લɿҩྍ৘ใγεςϜͷઃܭɾ࣮૷ • ࠓɿPythonΛ࢖ͬͯσʔλΛݟͨΓ
 ɹɹπʔϧΛ࡞ͬͨΓ

Slide 3

Slide 3 text

1000 ϖʔδҎ্͋Δ ࢿྉΛಡΉͱ͖ Ͳ͏͠·͔͢ʁ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

େ·͔ʹશମ૾Λ೺Ѳ͢Δ • ྫ͑͹ɺ໨࣍΍ষݟग़͠ ͨͱ͑͹ɺPythonϥΠϒϥϦϦϑΝϨϯε͸1,000ϖʔδҎ্ ͋Γ·͢ɻ͜ΕΛશ෦ಡ΋͏ͱߟ͑Δͱɺେมա͗ͯ৺͕ંΕ ͦ͏Ͱ͢ɻ͔͠͠ɺ໨࣍͸6ϖʔδ͔͋͠Γ·ͤΜ͠ɺষݟग़͠ ͸ͨͬͨ34ߦ͔͋͠Γ·ͤΜɻ ॻ੶΍͜͏͍͏େن໛ͳࢿྉͰ͸ɺ๯಄ʹ໨࣍Λஔ͘͜ͱ͕Ұ ൠతͳ׳शͱͯ͠ߦΘΕ͍ͯ·͢ɻͦΕ͸શମ૾Λ೺Ѳ͠΍͢ ͘͢ΔͨΊͰ͢ɻ ʮΤϯδχΞͷ஌తੜ࢈ज़ ޮ཰తʹֶͼɺ੔ཧ͠ɺΞ΢τϓοτ͢Δʯʢ੢ඌହ࿨ [ஶ] / ٕज़ධ࿦ࣾʣp21

Slide 6

Slide 6 text

΋͠΋ࢿྉʹ ʮ໨࣍ʯ͕ ͳ͔ͬͨΒʁ

Slide 7

Slide 7 text

໨͕࣍ͳ͍ ࢿྉʁ

Slide 8

Slide 8 text

ྫ͑͹

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

ؔ܎

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

ωοτϫʔΫߏ଄ͷ ࢿྉͷશମ૾Λ Ͳ͏΍ͬͯ၆ᛌ͢Δʁ

Slide 14

Slide 14 text

NetworkX

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

ख๏΋ಓ۩΋৭ʑ ख๏ ಓ۩ πʔϧɾϥΠϒϥϦ 1ZUIPO /FUXPSL9 QZUIPOJHSBQI 3 J(SBQI +BWB4DSJQU %KT ՄࢹԽͷΈ σεΫτοϓܥ (6*πʔϧ $ZUPTDBQF (FQIJ QBKFL ՄࢹԽ த৺ੑͳͲॾࢦඪͷࢉग़ ίϛϡχςΟݕग़ FUDʜ

Slide 17

Slide 17 text

ֶΜͩ͜ͱΛ࿩͠·͢ ͋ͱͪΐͬͱσʔλݹ͍Ͱ͢

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

ԿΛ୊ࡐʹ ͢Δʁ

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

ྫʣ 1&1 1&1 1&1 Style Guide for Python Code The Zen of Python Docstring Conventions

Slide 24

Slide 24 text

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 ωοτϫʔΫߏ଄ͷσʔλදݱ

Slide 25

Slide 25 text

1&1 1&1 1&1 1&1 1&1 1&1

Slide 26

Slide 26 text

NetworkX

Slide 27

Slide 27 text

ྡ઀ߦྻσʔλΛಡΈࠐΈม׵ 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)

Slide 28

Slide 28 text

ωοτϫʔΫ ߏ଄શମΛ ՄࢹԽ nx.draw() https://networkx.github.io/documentation/stable/reference/drawing.html Drawing

Slide 29

Slide 29 text

Ұ෦෼ 1&1 1&1 1&1 Style Guide for Python Code The Zen of Python Docstring Conventions

Slide 30

Slide 30 text

શମ૾ *2018/02͘Β͍ͷ࣌఺ͷPEPͷσʔλ

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

ϊʔυͷ৭

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

StatusΛ ϊʔυͷ৭ʹ ൓өͤ͞Δ nx.set_node_attributes() G.nodes(data='Status')

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

ϊʔυͷ αΠζ

Slide 40

Slide 40 text

࣍਺ • ೖ࣍਺ • ͜͜Ͱ͸ɺଞͷPEP͔Βࢀর͞Ε͍ͯΔ਺ • ग़࣍਺ • ͜͜Ͱ͸ɺଞͷPEPΛࢀর͍ͯ͠Δ਺ • ࣍਺͡Όͳͯ͘த৺ੑΛ࢖͏͜ͱ΋͋ΔΑ

Slide 41

Slide 41 text

ೖ࣍਺Λ αΠζʹ൓ө G.in_degree() * ೖ࣍਺ = 0ͷPEP͸1ͷPEPͷ1/10ͷ໘ੵͱ͢Δ https://networkx.github.io/documentation/stable/reference/classes/generated/networkx.DiGraph.in_degree.html

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

• ݽཱ఺Ͱ΋ͳ͘ڊେάϧʔϓʹ΋ଐ͍ͯ͠ͳ͍
 ΍ͭͬͯԿͩΖ͏ʁ

Slide 56

Slide 56 text

Reject͞ΕͨSwitch • [PEP 275] Switching on Multiple Values • [PEP 3103] A Switch/Case Statement

Slide 57

Slide 57 text

ڊେάϧʔϓΛখ෼͚ʹ͍ͨ͠

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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 ൃදޙͷ௥ه

Slide 60

Slide 60 text

͜͏͍͏ߏ଄͕͋ͬͨΒ

Slide 61

Slide 61 text

͜͏͡Όʂ

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

ײ૝

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

஍ਤͷΑ͏ͳײ֮ • ݁ہͷͱ͜Ζɺ࣮ࡍͲ͏ͳͷ͔͸ݱ஍ʹ଍ΛӡͿʢ= PEPͷத ਎ΛͪΌΜͱಡΉʣ͜ͱൈ͖Ͱ͸Θ͔Βͳ͍ • Ͱ΋ཱྀ׳Ε͍ͯ͠ͳ͍΍͕ͭ஍ਤແ͠Ͱา͘ͷ͸ͭΒ͍ • ͳΜͱͳ͋͘ͷลʹࢁ΍઒ʢಛ௃తͳPEPʣ͕͋Δ • ͋ͷล͸ཱྀͷ೉౓ߴͦ͏͔ͩΒࠓ͸ආ͚Α͏ʢඃࢀর਺ଟ͍ͷ ʹԘ௮͚ʹͳͬͨPEPͱ͔ʣ • ͬ͘͟Γ͜͏͍͏஍Ҭʢαϒάϧʔϓʣ͕͋ΔΜͩͳ͊ • ʢ೔ʑߋ৽͞Ε͍ͯΔͷͰʣͨ·ʹ஍ܗͷେن໛มԽ͕ى͜Δ

Slide 67

Slide 67 text

·ͱΊ

Slide 68

Slide 68 text

·ͱΊ • ໨͕࣍ͳ͍େྔͷυΩϡϝϯτͷʮେ·͔ͳߏ଄ʯͬͯͲ͏΍ͬ ͯ೺Ѳ͢ΔΜͩΖ͏ʁ • ࣮ࡍʹNetworkX & PythonͷެࣜυΩϡϝϯτΛ࢖ͬͯΈͯ ΍ͬͯΈͨ • ΍ͬͯΈΔͱ໘ന͍΋ͷ΋͋Δ൓໘ɺᡰʹམͪͳ͍΋ͷ΋͋Δ • ͋Δҙຯʮ໨తʯ͕Ͱ͖ͯ͘Δ • Next Step → ໨తΛ࣋ͬͯಡΉʁʁ • ಛఆͷPEPͷ1hop໨ɺ2hop໨ྡΛݟͯΈΔʁ

Slide 69

Slide 69 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠