Upgrade to Pro — share decks privately, control downloads, hide ads and more …

(修正版) NumPy/pandas使いのためのテスト自動化入門 / PyConJP2020

komo_fr
August 29, 2020

(修正版) NumPy/pandas使いのためのテスト自動化入門 / PyConJP2020

PyCon JP 2020での発表スライドです。
---------------------------
(2020/08/30) 誤字を修正しました。
場所: p15
誤: assert_array_close()
正: assert_allclose()
---------------------------
(2020/08/31) 誤字を修正しました。pandas.util.testingは動作しますが、pandas1.0以降ではdeprecatedになっており代替としてpandas.testingを使うことが推奨されています。

場所: p17
誤: pandas.util.testing
正: pandas.testing

なお、p18のサンプルコードは元々pandas.testingで説明していたため変更はありません。
---------------------------

トークの詳細:
https://pycon.jp/2020/timetable/?id=203957
Togetter:
https://togetter.com/li/1583782

Twitter:
@komo_fr ( https://twitter.com/komo_fr )

komo_fr

August 29, 2020
Tweet

More Decks by komo_fr

Other Decks in Programming

Transcript

  1. /VN1ZQBOEBT࢖͍ͷͨΊͷ
    ςετࣗಈԽೖ໳
    1Z$PO+1

    5PNPLP'VSVLJ
    5XJUUFS!LPNP@GS(JU)VC!LPNPGS

    View Slide

  2. !LPNP@GS
    8IPBN*
    !LPNP@GS
    2
    ॴଐ
    wגࣜձࣾϏʔϓϥ΢υ
    ʢ1ZUIPOͰσʔλղੳͷ͓࢓ࣄʣ
    w౦ژେֶઌ୺Պֶٕज़ݚڀηϯλʔ
    ʢݚڀऀ͕࢖͏ͨΊͷ1ZUIPOύοέʔδͷ։ൃʣ
    1Z$PO+1
    w1Z$PO+1ʮQBOEBTͷ4UZMJOHػೳͰڧԽ͢Δ+VQZUFS࣮ݧϨϙʔτʯ
    w1Z$PO+1ʮ*OUFSBDUJWF/FUXPSL7JTVBMJ[BUJPOVTJOH1ZUIPO
    ɹɹɹɹɹɹɹɹɹʙ/FUXPSL9#PLFIͰ1&1ͷࢀরؔ܎ΛՄࢹԽ͢Δʯ
    5PNPLP'VSVLJ

    LPNP G S
    ൃച༧ఆ
    w1ZUIPOΠϯλϥΫςΟϒɾσʔλϏδϡΞϥΠθʔγϣϯೖ໳
    ʕ1MPUMZ%BTIʹΑΔσʔλՄࢹԽͱ8FCΞϓϦߏஙʕʢே૔ॻళ!ESJMMFSɾখ઒ӳ޾ɾݹ໦༑ࢠஶ

    wIUUQXXXBTBLVSBDPKQCPPLTJTCO

    View Slide

  3. !LPNP@GS
    ࠓ೔࿩͢͜ͱ
    w ಺༰
    w 1ZUIPOΛ࢖ͬͯ਺஋࣮ݧ΍σʔλॲཧΛߦ͏ਓʹରͯ͠
    /VN1Z΍QBOEBTʹඋΘ͍ͬͯΔςετͷػೳʹ͍ͭͯ
    ঺հ͠·͢
    w ର৅
    w /VN1Z΍QBOEBTΛ࢖ͬͨܦݧ͕͋Δ͕
    ීஈςετΛॻ͘श׳͕ͳ͍ਓ
    w 4MJEF
    w 5XJUUFS্Ͱ63-Λެ։͠·͢
    3

    View Slide

  4. !LPNP@GS
    "HFOEB
    w ͳͥςετίʔυ͕ඞཁͳͷʁ
    w QZUFTUʹΑΔςετίʔυ
    w ։ൃʹ͓͚Δςετͱͷҧ͍ରԠ
    w ֬ೝ͍ͨ͠ର৅͕/VN1Z΍QBOEBTͷσʔλߏ଄
    w ظ଴஋Λఆٛ͢Δίετ͕ߴ͍
    w ύϑΥʔϚϯεΛνΣοΫ͍ͨ͠
    w ·ͱΊ
    4

    View Slide

  5. !LPNP@GS
    ͳͥςετίʔυ͕ඞཁͳͷʁ

    w Α͋͘Δ͓೰Έྫ
    w ʮ͜ͷσʔλΛ࢖ͬͯ˓˓ͳ͜ͱ͕Ͱ͖ͳ͍͔ʯͱ
    ະ੔උͷσʔλΛ͍ͨͩ͘
    w +VQZUFS/PUFCPPL্ͰQBOEBTͳͲͰσʔλ֬ೝɺ
    ΰϦΰϦલॲཧɺ࣮ݧ
    w ͱͯ΋టष͍ॲཧௐࠪ
    w ͜ͷ࣌఺Ͱ͸͜ͷίʔυ͕࠶ͼ࢖ΘΕΔ͔Ͳ͏͔͸
    Θ͔Βͳ͍ͷͰɺอकੑ͸ॏࢹ͞Εͳ͍͜ͱ͕ଟ͍
    w ࣮ݧ݁ՌΛݟͯɺ࣍ͷεςοϓʹਐΉ
    w อकੑΛॏࢹͤͣʹॻ͍ͨίʔυͱ޲͖߹͏͜ͱʹ
    5

    View Slide

  6. !LPNP@GS
    ͳͥςετίʔυ͕ඞཁͳͷʁ

    w ޙʑͭΒ͘ͳΔύλʔϯ
    w QSJOUจ΍+VQZUFS/PUFCPPLͷηϧ্Ͱ
    ग़ྗ݁ՌΛ໨ࢹνΣοΫ
    w +VQZUFS/PUFCPPLΛίϐϖͯͪ͠ΐͬͱͣͭม͑ͯ࢖͍ճ͢
    w ஈʑ+VQZUFS/PUFCPPL͕ංେԽͯ͘͠Δ
    w Կ͕ࠩ෼ͳͷ͔Θ͔Βͳ͍
    w ࣗ෼ͷίʔυ͕ਖ਼͘͠ಈ͍͍ͯΔ͜ͱΛอূͰ͖ͳ͍

    ࣮ݧ݁Ռ͕ਖ਼͍͜͠ͱΛอূͰ͖ͳ͍
    6

    View Slide

  7. !LPNP@GS
    +VQZUFS/PUFCPPL͔ΒQZ΁
    w +VQZUFS/PUFCPPL্ͷॲཧΛؔ਺ͱͯ͠੾Γग़͢
    w ੾Γग़ͨؔ͠਺ΛQZϑΝΠϧʹҠ͢
    w ੾Γग़ͨ͠ॲཧʹ͍ͭͯɺ
    ςεςΟϯάϑϨʔϜϫʔΫΛ࢖ͬͯςετίʔυΛॻ͘
    w QZUFTU
    w /VN1Z QBOEBTଞɺσʔλαΠΤϯεͰΑ͘࢖ΘΕΔ044
    Ͱ࠾༻͞Ε͍ͯΔͷͰɺςετίʔυΛࢀߟʹ͠΍͍͢
    w ʰςετۦಈ1ZUIPOʱʢᠳӭࣾʣ
    7

    View Slide

  8. !LPNP@GS
    QZUFTUʹ͓͚Δςετίʔυͷྫ
    8
    ςετର৅ͷίʔυ
    ࣮ࡍͷ஋ ظ଴͢Δ஋
    ςετίʔυ
    IUUQTEPDTQZUFTUPSHFOTUBCMF

    View Slide

  9. !LPNP@GS
    QZUFTUʹ͓͚Δςετίʔυͷྫ
    9
    IUUQTEPDTQZUFTUPSHFOTUBCMF

    View Slide

  10. !LPNP@GS
    QZUFTUʹ͓͚Δςετίʔυͷྫ
    10
    ςετର৅ͷίʔυ
    ࣮ࡍͷ஋ ظ଴͢Δ஋
    ςετίʔυ
    Yʹमਖ਼
    IUUQTEPDTQZUFTUPSHFOTUBCMF

    View Slide

  11. !LPNP@GS
    ςετͷೖ໳ʹ޲͍͍ͯΔίʔυ
    w ग़ྗ͕໌֬ͰɺԿճ΋मਖ਼͢Δػձ͕͋Δίʔυ
    w σʔλ੔ܗ΍ม׵ͷ෦෼
    w ྫ
    ϩʔΧϧʹ͋Δ)5.-ϑΝΠϧ͔ΒσʔλΛநग़ͯ͠
    DTWܗࣜʹม׵͢Δલॲཧ
    w ग़ྗ͕໌֬ͳͷͰɺςετΛॻ͖΍͍͢
    w ೖྗ͸ͨ·ʹ૝ఆ͠ͳ͍ܗࣜͷIUNM͕དྷΔमਖ਼ػձଟ
    w ਺ࣜΛ࣮૷͍ͯ͠Δ෦෼
    11

    View Slide

  12. ։ൃʹ͓͚Δςετͱͷҧ͍
    ରԠ

    View Slide

  13. !LPNP@GS
    ։ൃʹ͓͚Δςετͱͷҧ͍
    w ֬ೝ͍ͨ͠ର৅͕/VN1Z΍QBOEBTͷσʔλߏ଄
    w ޡࠩΛڐ༰ͯ͠ςετ͍ͨ͠
    w ߦ΍ྻͷฒͼ·ͰݫີʹνΣοΫ͍ͨ͠έʔεɺཁૉͷ஋͑͋ͬ͞
    ͍ͯΕ͹ྑ͍έʔεɺܕͷҧ͍ʢJOUͱqPBUͳͲʣ͸ڐ༰͍͍ͯ͠
    έʔε
    w ὎/VN1Z QBOEBT͕ఏڙ͍ͯ͠Δςετ༻ͷػೳΛ࢖͏
    w ظ଴஋Λఆٛ͢Δίετ͕ߴ͍
    w ὎લճ࣮ߦͨ࣌͠ͷ஋Λظ଴஋ʹ࢖͏
    w ύϑΥʔϚϯεΛνΣοΫ͍ͨ͠
    w ὎QZUFTUCFODINBSL
    13

    View Slide

  14. !LPNP@GS
    ։ൃʹ͓͚Δςετͱͷҧ͍
    w ֬ೝ͍ͨ͠ର৅͕/VN1Z΍QBOEBTͷσʔλߏ଄
    w ޡࠩΛڐ༰ͯ͠ςετ͍ͨ͠
    w ߦ΍ྻͷฒͼ·ͰݫີʹνΣοΫ͍ͨ͠έʔεɺཁૉͷ஋͑͋ͬ͞
    ͍ͯΕ͹ྑ͍έʔεɺܕͷҧ͍ʢJOUͱqPBUͳͲʣ͸ڐ༰͍͍ͯ͠
    έʔε
    w ὎/VN1Z QBOEBT͕ఏڙ͍ͯ͠Δςετ༻ͷػೳΛ࢖͏
    w ظ଴஋Λఆٛ͢Δίετ͕ߴ͍
    w ὎લճ࣮ߦͨ࣌͠ͷ஋Λظ଴஋ʹ࢖͏
    w ύϑΥʔϚϯεΛνΣοΫ͍ͨ͠
    w ὎QZUFTUCFODINBSL
    14

    View Slide

  15. !LPNP@GS
    /VN1ZͷͨΊͷςετ
    w OVNQZUFTUJOHϞδϡʔϧ
    w /VNQZͷςετͷαϙʔτʹಛԽͨ͠Ϟδϡʔϧ
    w IUUQTOVNQZPSHEPDTUBCMFSFGFSFODFSPVUJOFTUFTUJOHIUNM
    w OQUFTUJOHBTTFSU@BSSBZ@FRVBM

    w /VN1Z഑ྻΛൺֱͯ͠ɺ
    ෆҰகͩͱྫ֎"TTFSUJPO&SSPSΛग़ྗ͢Δ
    w ग़ྗ݁Ռ͕આ໌తͰɺ
    ҧ͏ͷ͕஋ͳͷ͔ܗঢ়ͳͷ͔ڭ͑ͯ͘ΕΔ
    w OQUFTUJOHBTTFSU@BMMDMPTF

    w ුಈখ਺఺Λ࣋ͭ/VN1Z഑ྻͷൺֱʹ࢖͏
    w ࠩ෼ͷڐ༰஋ΛύϥϝʔλͰࢦఆͰ͖Δ
    15

    View Slide

  16. !LPNP@GS
    OQUFTUJOHBTTFSU@BSSBZ@FRVBM

    16
    ࣮ߦ݁Ռ
    ࣮ߦ݁Ռ
    ஋͕ҟͳΔ৔߹
    ܗঢ়͕ҟͳΔ৔߹

    View Slide

  17. !LPNP@GS
    QBOEBTͷͨΊͷςετ
    w QBOEBTUFTUJOHϞδϡʔϧ
    w BTTFSU@GSBNF@FRVBM

    w QBOEBTͷσʔλϑϨʔϜΛൺֱ͠ɺ
    ෆҰகͩͱྫ֎"TTFSUJPO&SSPSΛൃੜͤ͞Δ
    w Ͳ͜·ͰݫີʹҰகੑΛݟΔͷ͔Ҿ਺ͰࢦఆͰ͖Δ
    ʢܕɺྻ΍ߦͷฒͼॱͳͲʣ
    w BTTFSU@TFSJFT@FRVBM

    w BTTFSU@JOEFY@FRVBM

    17

    View Slide

  18. !LPNP@GS
    BTTFSU@GSBNF@FRVBM

    18
    ࣮ߦ݁Ռ

    View Slide

  19. !LPNP@GS
    ։ൃʹ͓͚Δςετͱͷҧ͍
    w ֬ೝ͍ͨ͠ର৅͕/VN1Z΍QBOEBTͷσʔλߏ଄
    w ޡࠩΛڐ༰ͯ͠ςετ͍ͨ͠
    w ߦ΍ྻͷฒͼ·ͰݫີʹνΣοΫ͍ͨ͠έʔεɺཁૉͷ஋͑͋ͬ͞
    ͍ͯΕ͹ྑ͍έʔεɺܕͷҧ͍ʢJOUͱqPBUͳͲʣ͸ڐ༰͍͍ͯ͠
    έʔε
    w ὎/VN1Z QBOEBT͕ఏڙ͍ͯ͠Δςετ༻ͷػೳΛ࢖͏
    w ظ଴஋Λఆٛ͢Δίετ͕ߴ͍
    w ὎લճ࣮ߦͨ࣌͠ͷ஋Λظ଴஋ʹ࢖͏
    w ύϑΥʔϚϯεΛνΣοΫ͍ͨ͠
    w ὎QZUFTUCFODINBSL
    19

    View Slide

  20. !LPNP@GS
    લճ࣮ߦͨ࣌͠ͷ஋Λظ଴஋ͱͯ͠࢖͏
    w ίʔυͷมߋʹΑͬͯӨڹ͕ग़͍ͯͳ͍͜ͱ͚ͩΛ֬ೝ͢Δ
    ʢճؼςετʣ
    w Ұ౓+VQZUFS/PUFCPPL্Ͱ࣮ߦɾ֬ೝࡁͷίʔυͳΒɺ
    ͦͷ࣌ͷ݁ՌΛσʔλΛ$47ग़ྗͯ͠ظ଴஋ͱͯ͠࢖͏
    w TOBQTIPUUFTUύοέʔδΛ࢖͏
    w ಛఆͷ࣌఺ͷίʔυͷग़ྗΛه࿥͠ɺ
    ίʔυมߋ࣌ʹग़ྗʹมԽ͕ͳ͍͔νΣοΫͰ͖Δ
    20

    View Slide

  21. !LPNP@GS
    ։ൃʹ͓͚Δςετͱͷҧ͍
    w ֬ೝ͍ͨ͠ର৅͕/VN1Z΍QBOEBTͷσʔλߏ଄
    w ޡࠩΛڐ༰ͯ͠ςετ͍ͨ͠
    w ߦ΍ྻͷฒͼ·ͰݫີʹνΣοΫ͍ͨ͠έʔεɺཁૉͷ஋͑͋ͬ͞
    ͍ͯΕ͹ྑ͍έʔεɺܕͷҧ͍ʢJOUͱqPBUͳͲʣ͸ڐ༰͍͍ͯ͠
    έʔε
    w ὎/VN1Z QBOEBT͕ఏڙ͍ͯ͠Δςετ༻ͷػೳΛ࢖͏
    w ظ଴஋Λఆٛ͢Δίετ͕ߴ͍
    w ὎લճ࣮ߦͨ࣌͠ͷ஋Λظ଴஋ʹ࢖͏
    w ύϑΥʔϚϯεΛνΣοΫ͍ͨ͠
    w ὎QZUFTUCFODINBSL
    21

    View Slide

  22. !LPNP@GS
    QZUFTUCFODINBSL
    w QZUFTUͷϓϥάΠϯ
    w ϓϩάϥϜͷಛఆ෦෼ͷύϑΥʔϚϯεΛܭଌ͢ΔςετΛ࡞Ε
    Δ
    w ࣮ߦ࣌ؒͷཁ໿౷ܭྔ΍ώετάϥϜͷग़ྗ
    w աڈͷ݁ՌΑΓύϑΥʔϚϯε͕ѱԽ͍ͯͨ͠ΒΤϥʔʹ͢Δ
    ʢCFODINBSLDPNQBSFΦϓγϣϯʣ
    22

    View Slide

  23. ·ͱΊ

    View Slide

  24. !LPNP@GS
    ·ͱΊ
    w ਺஋࣮ݧ΍σʔλॲཧΛߦ͏ਓʹͱͬͯͷ
    ςετͷϝϦοτʹ͍ͭͯ঺հ͠·ͨ͠
    w ςετίʔυΛॻ͘ͱ҆৺࣮ͯ͠ݧ΍෼ੳ͕ߦ͑Δ
    w ։ൃͱҟͳΔ఺ͱରԠʹ͍ͭͯ঺հ͠·ͨ͠
    w ϝϦϋϦΛ͚ͭͯςετίʔυΛॻ͍ͯɺ
    ਫ਼ਆ͕҆ఆ࣮ͨ͠ݧΛ͠·͠ΐ͏
    24

    View Slide