Slide 1

Slide 1 text

໺ٿΛՊֶ͢Δٕज़ ʙPythonΛ༻͍ͨ౷ܭϥΠϒϥϦ࡞੒ͱ෼ੳج൫ߏஙʙ Shinichi Nakagawa@shinyorke(໺ٿͷਓ) PyConJP 2017 Talk Session 2017/9/8

Slide 2

Slide 2 text

ਖ਼૷ = ໺ٿϢχϑΥʔϜʂ ※ࣸਅ෇͖ͰγΣΞ͓ئ͍͠·͢ʂ

Slide 3

Slide 3 text

Who am I ?(͓લ୭Α) • ໺ٿͷਓͰ͢(PythonΫϥελతʹ͸) • Shinichi Nakagawa(@shinyorke) • Retty.Inc Engineer/ڕྉཧ୲౰ • Baseball Scientist(ݸਓ׆ಈ) • Python΋͘΋ࣗ͘शࣨ #rettypy • #Python #SABRmetrics #໺ٿ౷ܭֶ #Agile #Scrum

Slide 4

Slide 4 text

Starting member(͓͠ͳ͕͖) • Զʑ΍͖͏෼ੳج൫ʮbradfordʯΛPythonͳͲͰ࡞ͬͨ • ෼ੳج൫ͷ͘͠Έ(Scrapy, Airflow, ౷ܭϥΠϒϥϦetc…) • ໺ٿΛՊֶ͢Δٕज़ • ໺ٿՊֶͷجૅ஌ࣝ(Liner Weights, ಘ఺ظ଴஋,ಘ఺Ձ஋) • ʮ࢛൪ଧऀ͕ফ͑ͨνʔϜʯͷͦͷޙΛ௥͏ • ·ͱΊ

Slide 5

Slide 5 text

ຊ୊ͷલʹ

Slide 6

Slide 6 text

PyConJPͱ΍͖͏ͷྺ࢙ • PyConJP 2014ʮPythonͰ͸͡ΊΔ໺ٿϓϩάϥϛϯάʯ
 Infra as a CodeͱWeb Application(Django),ΠϯϓϨʔଧ཰(BABIP) • PyConJP 2015ʮ໺ٿHack!ʙPythonΛ༻͍ͨσʔλ෼ੳͱՄࢹԽʯ
 PyDataͱԶʑ෼ੳج൫(Jupyter,matplotlib,Docker),ΞμϜɾμϯ཰ • PyConJP 2016ʮϏοΫσʔλͱPythonͰ͸͡ΊΔ໺ٿͷ౷ܭ෼ੳʯ
 εΫϨΠϐϯάͱύοέʔδԽ(Beautifulsoup4),WHIP,౤ٿ෼ੳ • PyConJP 2017ʮ໺ٿΛՊֶ͢Δٕज़ʯˡNew!(4೥࿈ଓ4ճ໨)
 Զʑ෼ੳج൫(Scrapy, Airflow, Docker, sabr, Redash), Liner Weights, wRAA

Slide 7

Slide 7 text

΍Γ͔ͨͬͨ͜ͱ (2೥લͷPyConJP 2015ΑΓ)

Slide 8

Slide 8 text

໺ٿHack!~PythonΛ༻͍ͨσʔλ෼ੳͱՄࢹԽ - The Art Of Programming A Baseball Game! - Shinichi Nakagawa@shinyorke PyCon JP 2015 Talk Session

Slide 9

Slide 9 text

͜Ε͔Βͷ໺ٿHack(ئ๬) • ʮσʔλυϦϒϯ໺ٿղઆʯΛ௨ͯ͡৽͍͠໺ٿͱεϙʔπͷՄೳੑΛઆ͍ͯੜ͖͍ͨʂʂ ˠ΍͖͏ΛΦʔϓϯͳ৘ใج൫ʹʂ • ౦ژޒྠʹ޲͚ͯɺ৽͍͠໺ٿɾεϙʔπͷָ͠ΈํΛ໛ࡧ&Ϧʔυ͍͖͍ͯͨ͠ʂʂʂ

Slide 10

Slide 10 text

ϫΠʮ΍͖͏෼ੳج൫Λ࡞ͬͨϯΰʯ #ࠓ೥ͷൃදςʔϚ

Slide 11

Slide 11 text

ʮԶʑ෼ੳج൫ʯߏஙϧʔϧ • ʮؾܰʹ࡞ͬͯյͯ͠·ͨ࡞Δʯ։ൃ
 ओཁՕॴ͸ςετॻ͘,ϛυϧ΢ΣΞ͸DockerͰ࠶ݱੑ୲อ. • ࢖͍͍ͨɾࢼ͍ͨ͠ϥΠϒϥϦ͸ੵۃ׆༻
 ࣗ෼ͰϑϧεΫϥον։ൃ͸μϧ͍ͷͰۃྗճආ.
 
 ੈͷதͰ࢖͑ͦ͏ͳϞϊ͸OSSԽͯ͠ެ։
 ໺ٿϥΠϒϥϦΛPyPIʹ,Airflow ServerΛDocker Imageʹ.

Slide 12

Slide 12 text

Զʑ΍͖͏෼ੳج൫ʮbradfordʯ ηΠόʔϝτϦΫε͕ݟ͚ͭͨαϒϚϦφʔʮνϟυɾϒϥουϑΥʔυʯ͕༝དྷ. ৄ͍͠Τϐιʔυ͸໊ஶʮϚωʔɾϘʔϧʯΛνΣοΫʂ

Slide 13

Slide 13 text

Զʑ΍͖͏෼ੳج൫(શମ૾)

Slide 14

Slide 14 text

͜͜ʹ໺ٿσʔλΛूΊΔ Զʑ΍͖͏෼ੳج൫(શମ૾)

Slide 15

Slide 15 text

ᶃ4DSBQZ εΫϨΠϐϯά બख੒੷Λ୳ͯ͠อଘ ͜͜ʹ໺ٿσʔλΛूΊΔ Զʑ΍͖͏෼ੳج൫(શମ૾)

Slide 16

Slide 16 text

ᶃ4DSBQZ εΫϨΠϐϯά બख੒੷Λ୳ͯ͠อଘ ͜͜ʹ໺ٿσʔλΛूΊΔ ᶄલॲཧ 4"#3NFUSJDT ࢦඪ஋ܭࢉσʔλߋ৽ Զʑ΍͖͏෼ੳج൫(શମ૾)

Slide 17

Slide 17 text

ᶃ4DSBQZ εΫϨΠϐϯά બख੒੷Λ୳ͯ͠อଘ ͜͜ʹ໺ٿσʔλΛूΊΔ ᶄલॲཧ 4"#3NFUSJDT ࢦඪ஋ܭࢉσʔλߋ৽ ᶅ"JSqPX +0#؅ཧ 4DSBQZ ᶃ ͱલॲཧ ᶄ Λఆظ࣮ߦ Զʑ΍͖͏෼ੳج൫(શମ૾)

Slide 18

Slide 18 text

ᶃ4DSBQZ εΫϨΠϐϯά બख੒੷Λ୳ͯ͠อଘ ͜͜ʹ໺ٿσʔλΛूΊΔ ᶄલॲཧ 4"#3NFUSJDT ࢦඪ஋ܭࢉσʔλߋ৽ ᶅ"JSqPX +0#؅ཧ 4DSBQZ ᶃ ͱલॲཧ ᶄ Λఆظ࣮ߦ ᶆ෼ੳՄࢹԽ 3FEBTI ܾ·ͬͨϝτϦΫεΛݟΔ Զʑ΍͖͏෼ੳج൫(શମ૾)

Slide 19

Slide 19 text

ᶃ4DSBQZ εΫϨΠϐϯά બख੒੷Λ୳ͯ͠อଘ ͜͜ʹ໺ٿσʔλΛूΊΔ ᶄલॲཧ 4"#3NFUSJDT ࢦඪ஋ܭࢉσʔλߋ৽ ᶅ"JSqPX +0#؅ཧ 4DSBQZ ᶃ ͱલॲཧ ᶄ Λఆظ࣮ߦ ᶇ෼ੳՄࢹԽ +VQZUFS ԾઆΛܾΊ࣮ͯݧతͳ෼ੳ Զʑ΍͖͏෼ੳج൫(શମ૾) ᶆ෼ੳՄࢹԽ 3FEBTI ܾ·ͬͨϝτϦΫεΛݟΔ

Slide 20

Slide 20 text

΍͖͏෼ੳج൫Λࢧ͑Δٕज़ 1. Scrapy(εΫϨΠϐϯά) 2. લॲཧ(SABRmetrics) 3. Airflow(JOB؅ཧ) 4. ෼ੳ&ՄࢹԽ(Redash) 5. ෼ੳ&ՄࢹԽ(Jupyter)

Slide 21

Slide 21 text

ScrapyʙΫϩʔϥʔFW • WebαΠτͷΫϩʔϧͱεΫϨΠϐϯά,σʔλͷอଘͳ ͲΛҰؾ௨؏ʹߦ͑ΔΫϩʔϥʔFW • ΫϩʔϥʔքͷDjango/Ruby On RailsͱݺΜͰ͍͍ଘࡏ • εέδϡʔϥʔ,UserAgent,HTTP Header,μ΢ϯϩʔυͷ λΠϛϯά,Ωϟογϡetc…ඞཁʹͳΔ΋ͷ͕͋Β͔͡Ί ༻ҙ͞Ε͍ͯΔ&ύϥϝʔλͷઃఆͳͲͰ؆୯ʹઃఆՄೳ

Slide 22

Slide 22 text

Scrapyͷશମ૾ https://doc.scrapy.org/en/latest/topics/architecture.html

Slide 23

Slide 23 text

Scrapyͷશମ૾(໾ׂ) https://doc.scrapy.org/en/latest/topics/architecture.html ɾItemΛValidate ɾσʔλͱͯ͠อଘ ScrapyͷػೳΛ׆༻ ։ൃऀ͕ઃܭɾ࣮૷ ίϯϙʔωϯτؒΛ੍ޚ ɾεΫϨΠϐϯά ɾ݁ՌΛItemʹอଘ ΩϡʔʹஷΊΔ&࣮ߦ αΠτΛμ΢ϯϩʔυ

Slide 24

Slide 24 text

ScrapyͷΑ͍ͱ͜Ζ • εΫϨΠϐϯάͱσʔλอଘͷ࣮૷ʹूதͰ͖Δ
 ςϯϓϨ௨Γʹ࡞Δ,σʔλอଘ͸޷͖ͳํ๏Ͱ
 ˞σʔλ͸CSV,JSON,DBͳΜͰ΋OK • ൥Θ͍͠νϡʔχϯά͸͢΂ͯScrapy͕୅ߦ
 ϦΫΤετͷ࣮ߦִؒ,Ωϟογϡ੍ޚetc…
 settings.pyͷઃఆΛνϡʔχϯάͰࣄ͕଍ΓΔ

Slide 25

Slide 25 text

ScrapyͰͷ։ൃͰ஫ҙ͢Δ͜ͱ • settings.pyΛσϑΥϧτઃఆͰ࢖Θͳ͍
 σϑΥϧτ͸μ΢ϯϩʔυִؒθϩඵ,ฒߦϦΫΤετ ਺16,Ωϟογϡແޮͱ͔ͳΓϩοΫͳ࢓༷(਒͑੠)
 ͜ͷ··࢖͏ͱαΠτΛ౗ͪ͠Ό͏͔΋ͳͷͰΩέϯʂ • ϖʔδ͸߄ͯͣʮʹΜ͛ΜΒ͘͠ʯεΫϨΠϐϯά
 εΫϨΠϐϯά͢ΔωλͰϦΞϧλΠϜੑΛٻΊΔ͜ͱ ͸جຊແ͍ͱࢥ͏ͷͰ,αΠτʹ͸΍͘͞͠઀͢Δ.

Slide 26

Slide 26 text

΍͖͏෼ੳج൫Scrapyઃఆ(ൈਮ) • robots.txtʹै͏ • ROBOTSTXT_OBEY=True • ಉ࣌ϦΫΤετ਺ɿ4 • CONCURRENT_REQUESTS=4 • ϦΫΤετִؒɿ60ඵ • DOWNLOAD_DELAY=60 • Ωϟογϡɿ൒೔ؒอ࣋(΍Γ௚͕͠ޮ͘Α͏ʹ) • HTTPCACHE_ENABLED = True • HTTPCACHE_EXPIRATION_SECS = 60 * 60 * 12 • ࢓༷: https://doc.scrapy.org/en/latest/topics/settings.html?highlight=settings.py#settings

Slide 27

Slide 27 text

αΠτ(ͱਓʹ)΍͘͞͠͠Α͏ʂ αΠτʹౖΒΕͳ͍Α͏ʹ͠Α͏(&έϯΧ͸΍Ίͯ)

Slide 28

Slide 28 text

લॲཧ(SABRmetrics) • औಘݩαΠτʹແ͍ηΠόʔϝτϦΫε(SABRmetrics)ࢦඪ • wOBA,wRAA(ޙ΄Ͳ঺հ) • ಘ఺૑ग़ೳྗ(Run Create,௨শRC) • xx/9(HR/9,BB/9,etc…౤खͷ҆ఆײɾ࣮ྗΛଌΔܥͷࢦඪ) • ScrapyͰItemอଘ࣌or͢΂ͯͷσʔλΛऔಘޙʹܭࢉͷඞཁ͕ • ʲ݁࿦ʳηΠόʔϝτϦΫεࢦඪܭࢉ༻ͷύοέʔδΛ࡞ͬͨ

Slide 29

Slide 29 text

SABR(໺ٿ౷ܭֶϥΠϒϥϦ) • GithubΛάάͬͯ΋ແ͔ͬͨͷͰࣗ࡞ͯ͠PyPIʹެ։ • OPS,RC,wOBA,wRAA,ΞμϜɾμϯ཰ͳͲΛܭࢉ͢Δ ΫϥεΛύοέʔδԽͨ͠ • https://github.com/Shinichi-Nakagawa/sabr • SABR͸΋ͪΖΜʮSABRmetricsʯͷ͜ͱ
 ୭΋࢖ͬͯͳ͔ͬͨͷͰಊʑͱొ࿥͠·ͨ͠w

Slide 30

Slide 30 text

SABR(Example) $ pip install sabr $ python >>> import sabr >>> from sabr.stats import Stats >>> Stats.hr9(26, 209.7) # Yu Darvish(2013) HR/9 1.1

Slide 31

Slide 31 text

Airflow(JOB؅ཧ)

Slide 32

Slide 32 text

AirflowʙJOB؅ཧ • ຖ೔ܾ·ͬͨ࣌ؒʹΫϩʔϦϯά&εΫϨΠϐϯά͍ͨ͠ • ͨ·ͬͨσʔλʹରͯ͠લॲཧ΋͍ͨ͠ • ͱ͍͏༁Ͱ,Airbnbۘ੡ͷʮAirflow(ؾྲྀ)ʯΛར༻
 https://airflow.incubator.apache.org/ • ݱࡏ͸ApacheͷϓϩδΣΫτʹ,࢖ͬͯΔॴ΋ଟ͍ • ͪͳΈʹRettyͰ΋Ұ෦ϓϩμΫτ(όοΫΤϯυ)ͰAirflowΛར༻

Slide 33

Slide 33 text

Airflowͷ௕ॴ • ͔ͳΓߴػೳ.
 scheduler,workerʹ؅ཧը໘GUI·Ͱॆ࣮ • ΄΅͢΂ͯPythonͰ࣮૷.
 PythonΛ஌͍ͬͯΕ͹อक&։ൃ΋ΠέΔ • ࠷ۙࣄྫ͕૿͍͑ͯΔ,ίϛϡχςΟ΋ݩؾͬΆ͍

Slide 34

Slide 34 text

AirflowͷਏΈ • ઃఆ͕͔ͳΓ൥ࡶ
 airflow.cfgʹू໿ͯ͠Δ΋ͷͷ,݁ߏΫη͋Δ • ґଘϥΠϒϥϦ͕େਿ಺
 ֦ுػೳΛશ෦ͷͤͰ100Λ௒͑Δ(ߴػೳͳ෼ͷ୅ঈ?) • ͪΐͬͱͨ͠ઃఆมߋͰ͙͢ಈ͔ͳ͘ͳΔ
 λεΫΛ௥Ճ,ઃఆมߋΛͪΐΖͬͱ͢Δ͚ͩͰ,
 ઃఆͷ࡞Γ௚͕͠ൃੜ&࠶౓migrationΛཁٻ͞ΕΔ(ਏΈ

Slide 35

Slide 35 text

ʲ൵ใʳAirflow(ؾྲྀ)͸ ͪΐͬͱͨ͠ΞϨͰෆػݏʹͳΔ Turbulence(ཚؾྲྀ)ͩͬͨ #ֶͼ

Slide 36

Slide 36 text

AirflowͷਏΈ͔ΒಀΕΔ • Docker Imageʹͯ͠ެ։ͨ͠(docker pull shinyorke/airflow)
 ܁Γฦ͠࡞ͬͯյ͢ͳΒDockerͰ͠ΐʂ
 ͱ͍͏͜ͱͰ৭ʑࢼͭͭ͠,҆ఆ൛ΛDocker ImageԽͨ͠
 https://hub.docker.com/r/shinyorke/airflow/ • ݁Ռ,ؾܰʹ࡞ͬͯյͤΔ,ߏ੒Λ࿔ΕΔ؀ڥʹ
 ཚؾྲྀʹΑΔཚΕ͸ଟগϚγʹͳͬͨ(Ұ෦όάͬΆ͍ͷ͸͋Δ͕) • ৄࡉ͸ϒϩάʹॻ͖·ͨ͠&Contribute͓଴͍ͪͯ͠·͢
 http://shinyorke.hatenablog.com/entry/airflow-docker

Slide 37

Slide 37 text

෼ੳͱՄࢹԽʹ͍ͭͯ ʙJupyterͱRedashΛ࢖͍෼͚Δʙ

Slide 38

Slide 38 text

෼ੳͱՄࢹԽͷצͲ͜Ζ • ʮఆظతʹݟΔʯ͔ʮԾઆʹج͖࣮ͮݧʯ͢Δ͔Ͱ,
 ࢖͏ಓ۩Λ੾Γସ͑Δʢ͔ͳΓॏཁʣ. • ఆظతʹSQLΛୟ͍ͯάϥϑΛඳ͘ͳΒRedash • ڽͬͨՄࢹԽ΍࣮ݧతͳωλͰ͋Ε͹Jupyter • ཁ͸దࡐదॴ,μϧ͍ͷͰָ͢Δ෦෼͸ָ͠·͠ΐ͏.

Slide 39

Slide 39 text

ࠓޙͷ΍͖͏ج൫։ൃܭը 1. Productionӡ༻(k8s+GCP,ࠓγʔζϯؒʹ߹Θͣ) 2. σʔληοτΛ૿΍͢(ࢼ߹,౤ٿ,ϝδϟʔϦʔά) 3. SABRͷpandas൛Λͭ͘Δ(ͩͬͯpandasศར͡ΌΜ?) 4. ෼ੳ݁ՌΛఆظతʹൃ৴͢ΔϝσΟΞ(ϒϩά)ެ։ 5. σʔλͷఏڙݩΛΈ͚ͭΔ(εΫϨΠϐϯάͭΒ͍)

Slide 40

Slide 40 text

(PythonͬΆ͍τʔΫ͸) ͜͜·Ͱʂ ͜ͷઌ͸օ͞Μ͓଴͔ͪͶ…

Slide 41

Slide 41 text

΍͖͏ͷ࣌ؒͩ͋͋͋ʂʂʂ

Slide 42

Slide 42 text

໺ٿΛՊֶ͢Δٕज़ • Liner Weights(LWTS) • ಘ఺ظ଴஋(Run Expectancy) • ಘ఺Ձ஋(Run Value) • ಘ఺Ձ஋Λݩʹͨ͠ηΠόʔϝτϦΫεࢦඪ • wOBA(Weighted On-Base Average, ॏΈ෇͖ग़ྥ཰) • wRAA(Weighted Runs Above Average, ଧܸߩݙ౓)

Slide 43

Slide 43 text

Liner Weights(LWTS) #ͱ͸ • ໺ٿͷϓϨʔΛಘ఺ʹஔ͖׵͑ͯධՁ͢ΔͨΊͷख๏ • ༷ʑͳঢ়گ(Ξ΢τΧ΢ϯτ,ϥϯφʔͷ਺etc…)ຖʹϓϨʔ Λه࿥,ฏۉԽͨ͠਺஋ΛݩʹʮϓϨʔͷՁ஋ʯΛଌΔ • ۩ମతͳ֓೦ͱͯ͠ʮಘ఺ظ଴஋ʯʮಘ఺Ձ஋ʯΛ༻͍Δ • ৄ͘͠஌Γ͍ͨํ͸WikipediaͷղઆΛͲ͏ͧ
 https://ja.wikipedia.org/wiki/Linear_Weights

Slide 44

Slide 44 text

ಘ఺ظ଴஋ͱಘ఺Ձ஋ • ϥϯφʔͷ਺(8௨Γ)×Ξ΢τΧ΢ϯτ(3௨Γ)=24௨Γͷ ঢ়گΛ෼ྨ,͔ͦ͜Β3Ξ΢τऔΒΕΔ·Ͱʹ֫ಘͰ͖Δ (ͱࢥΘΕΔ)ฏۉతͳಘ఺Λʮಘ఺ظ଴஋(Run Expectancy)ʯͱݺͿ. • ϓϨʔ(ώοτ,૸ྥ,etc…)ʹΑͬͯ,ಘ఺ظ଴஋Λ্͛ͨ ͔(·ͨ͸Լ͔͛ͨ)ΛੵΈॏͶͯબखΛධՁ͢Δ.
 ͜ΕΛʮಘ఺Ձ஋(Run Value)ʯͱݺͿ.

Slide 45

Slide 45 text

wOBA #ͱ͸ • ಘ఺Ձ஋Λݩʹࢉग़ͨ͠ग़ྥ཰(ಘ఺ʹد༩ͨ͠཰) • Weighted On-Base Average(ॏΈ෇͖ग़ྥ཰)ͷུ • ʮଧऀ͕1ଧ੮͋ͨΓʹͲΕ͚ͩνʔϜͷಘ఺૿Ճʹ ߩݙ͔ͨ͠ʯΛද͢ • MLB/NPBڞʹ࠷΋ϝδϟʔͳηΠόʔϝτϦΫεࢦඪ ͱͯ͠࢖ΘΕ͍ͯΔ

Slide 46

Slide 46 text

wOBAͷ਺ࣜͱ࣮૷(sabrΑΓ) def woba_npb(cls, bb, hbp, _1b, _2b, _3b, hr, ab, sf, ibb=0, e_bb=0): """ Weighted on-base average for NPB(wOBA) http://1point02.jp/ :param bb: base on ball :param hbp: hit by pitch :param _1b: single :param _2b: double :param _3b: triple :param hr: home run :param ab: at bat :param sf: sacrifice fly :param ibb: intentional base on balls(default:0) :param e_bb: base on ball for error(default:0) :return: (float) wOBA """ u_bb = round(0.692 * float(bb-ibb), 3) u_hbp = round(float(0.73 * hbp), 3) u_e_bb = round(0.966 * float(e_bb), 3) u_h = round(0.865 * float(_1b), 3) + round(1.334 * float(_2b), 3)\ + round(1.725 * (_3b), 3) + round(2.065 * float(hr), 3) u_pa = round(float(ab + bb - ibb + hbp + sf), 3) return round((u_bb + u_hbp + u_e_bb + u_h) / u_pa, 3)

Slide 47

Slide 47 text

wRAA #ͱ͸ • wOBAΛಘ఺ʹ߹Θͤͯscaleͨ͠ࢦඪ • Weighted Runs Above Average(ଧऀͷଧܸߩݙ౓)ͷུ • ʮฏۉతͳଧऀ͕ಉ͡ଧ੮਺ཱͬͨ৔߹ʹൺ΂ͯ૿΍͠ ͨಘ఺ʯΛΠϝʔδ • wRAA=(ଧऀͷwOBA-ϦʔάwOBA) / wOBAscale * ଧ ੮਺

Slide 48

Slide 48 text

wRAAͷ਺ࣜͱ࣮૷(sabrΑΓ) def wraa(cls, woba, lg_woba, pa, woba_scale=1.24): """ Weighted Runs Above Average(wRAA) http://1point02.jp/ :param woba: weighted on-base average :param lg_woba: weighted on-base average(league average) :param pa: plate appearance :param woba_scale: weighted on-base average scale(default:1.24) :return: (float) wRAA """ return round(((woba - lg_woba) / woba_scale) * float(pa), 1)

Slide 49

Slide 49 text

ʮ೉͗͢͠Δϯΰʂ͍͍͔͛Μʹ͠Ζʂʂʯ έϯΧμϝθολΠ(ຊ೔ೋճ໨)

Slide 50

Slide 50 text

͔ͨ͠ʹ೉͍͠ͷͰ ࠷ۙͷϓϩ໺ٿͷࣄ݅Λ έʔεελσΟͱͯ͠ղઆ

Slide 51

Slide 51 text

͋Δ೔(8/23)ͷ޿ౡελϝϯ

Slide 52

Slide 52 text

޿ౡ౦༸Χʔϓͷελϝϯ(8/23) 1.(༡)ాத 2.(ೋ)٠஑ 3.(த)ؙ 4.(ӈ)ླ໦ 5.(ࠨ)দࢁ 6.(ࡾ)੢઒ 7.(Ұ)҆෦ 8.(ั)။ᖒ 9.(౤)େ੉ྑ ରDeNAઓ https://baseball.yahoo.co.jp/npb/game/2017082302/stats

Slide 53

Slide 53 text

ϑΝʔʔʔʂʁʂʁ(਒͑) 1.(༡)ాத 2.(ೋ)٠஑ 3.(த)ؙ 4.(ӈ)ླ໦ →(ӈ)ؠຊ 5.(ࠨ)দࢁ 6.(ࡾ)੢઒ 7.(Ұ)҆෦ 8.(ั)။ᖒ 9.(౤)େ੉ྑ ରDeNAઓ https://baseball.yahoo.co.jp/npb/game/2017082302/stats

Slide 54

Slide 54 text

ʲ൵ใʳ࢛൪ླ໦,ফ͑Δ(ࠓقઈ๬) ޿ౡླ໦੣໵͕ӈ଍टࠎં൑໌ʂ௧͗͢Δ̐൪ͷ཭୤ https://www.nikkansports.com/baseball/news/1876605.html

Slide 55

Slide 55 text

࠷ۙ(9/3)ͷ޿ౡελϝϯ

Slide 56

Slide 56 text

޿ౡ౦༸Χʔϓͷελϝϯ(9/3) 1.(༡)ాத 2.(ೋ)٠஑ 3.(த)ؙ 4.(ࠨ)দࢁ 5.(ࡾ)੢઒ 6.(Ұ)҆෦ 7.(ั)။ᖒ 8.(ӈ)໺ؒ 9.(౤)Ԭా ରϠΫϧτઓ https://baseball.yahoo.co.jp/npb/game/2017090301/stats

Slide 57

Slide 57 text

ʮOUT:ླ໦ɹ, IN:໺ؒɹ ͕Ұिؒଓ͍ͨ৔߹, ಘ఺ྗ͸Ͳ͏มԽ͢Δ͔?ʯ …ͱ͍͏໰୊ΛwRAAͰղ͘
 
 ˞࣮ࡍ͸ϥΠτ೔ସΘΓͰ͢

Slide 58

Slide 58 text

ධՁํ๏ • ླ໦͕ൈ͚Δલ(8/17-8/23)ͷσʔλͱ
 ླ໦͕ൈ͚ͨޙ(8/28-9/3)ͷσʔλΛൺֱ • ླ໦͕ൈ͚ͨ݀Λ(ॹํతʹҰํతʹ)໺ؒͰ୅ೖ͢Δ
 #伱͋Β͹໺ؒ #ͳΜJ • ൺֱͷࢦඪ͸wRAAΛ࢖͏,200ଧ੮Ҏ্ग़৔ͷબखͰੵΈ্͛
 ͳ͓໺ؒ͸200ଧ੮ະຬ͕ͩಛผʹೖΕͨ #伱͖͋Β͹໺ؒ • खҧ͍Ͱ8/30ͷΈσʔλൈ͚·ͨྃ͠͝ঝΛm(_ _)m

Slide 59

Slide 59 text

RedashͰՄࢹԽ

Slide 60

Slide 60 text

RedashͰՄࢹԽ ླ໦੣໵཭୤લ X3""߹ܭɿ

Slide 61

Slide 61 text

RedashͰՄࢹԽ ླ໦੣໵཭୤લ X3""߹ܭɿ ໺ؒ*/ͨ͠ޙ X3""߹ܭɿͪΐ͍

Slide 62

Slide 62 text

ಉ͡ՄࢹԽΛJupyterͰ

Slide 63

Slide 63 text

Jupyter+holoviews

Slide 64

Slide 64 text

Jupyter+holoviews "ɿླ໦੣໵཭୤લ X3""߹ܭ஋͕͙Β͍

Slide 65

Slide 65 text

Jupyter+holoviews "ɿླ໦੣໵཭୤લ X3""߹ܭ஋͕͙Β͍ #ɿ཭୤ޙ X3""߹ܭͪΐͬͱ

Slide 66

Slide 66 text

݁࿦ • ૯߹ܭͰ໿30%νʔϜͷwRAA͕௿Լͨ͜͠ͱ͕൑໌ • ϚΠφεཁҼ • ࢛൪ଧऀ͕ফ͑ͨ #ͦΒͦ͏Α • ໺͕ؒॱௐʹwRAAͰϚΠφε #ͦΒͦ͏Α • ࠓճͷՄࢹԽ͸Redashͷํ͕΍Γ΍͔ͬͨ͢ • Jupyterͱ͍͏͔Holoviews࢖͍͜ͳ͍ͨ͠ #͓ؾ࣋ͪ

Slide 67

Slide 67 text

ʲ౴ʳ ླ໦੣໵཭୤Ͱ
 ಘ఺ྗ͕໿30%௿Լ͢Δ (ཧ࿦্͸)

Slide 68

Slide 68 text

࣮ࡍͷ޿ౡ͸... ※9/7࣌఺ • 8/23-9/7ͷ੒੷ • 9উ5ഊɹ˞6࿈উத • ಘࣦ఺ࠩ +20 ※70ಘ఺, 50ࣦ఺ • উ཰.642, ϐλΰϥεউ཰.662 • 30%ͷಘ఺ྗ௿ԼΛாফ͠ʹͨ͠ଧऀ͕͍ΔͬΆ͍

Slide 69

Slide 69 text

ʲਤʳ8/23-9/7ͷwOBAਪҠ

Slide 70

Slide 70 text

ʲਤʳ8/23-9/7ͷwOBAਪҠ ɾদࢁཽฏ ϨϑτɾϥΠτ ɾ҆෦༑༟ ϑΝʔετ ɾ။ᖒཌྷ Ωϟονϟʔ ͷX0#"͕վળˠಘ఺ྗ૿Ճ ॾʑͷϚΠφεΛվળ

Slide 71

Slide 71 text

݁ͼ

Slide 72

Slide 72 text

(੣໵͕ൈ͚ͨΒ)ͦΒͦ͏Α

Slide 73

Slide 73 text

݁ͼ • ͦΒ(ླ໦੣໵ൈ͚ͨΒಘ఺͕େ෯ʹݮΔʹ)
 ͦ͏Α(ܾ·ͬͯΔ͡Όͳ͍͔) • ໺ٿͷՊֶ(ηΠόʔϝτϦΫε)ͱ
 σʔλʹڧ͍PythonͰ٬؍త͔ͭࢹ֮తʹઆ໌Ͱ͖·͢Αͱ • 30%ͷಘ఺ྗ௿ԼΛແࢹͯ͠ϚδοΫΛݮΒ͠ଓ͚ΔΧʔϓͷා͞ • ΍͖͏෼ੳج൫Ͱ໘ന͍͜ͱ͕Ͱ͖ͦ͏ͳͷͰҾ͖ଓ͖։ൃ΍Δͧʂ • Python΋໺ٿ΋,͜ͷωλ͕ʮ͓΋Ζ͍ʂʯͱࢥͬͨΒਅࣅͯ͠΄͍͠

Slide 74

Slide 74 text

ʮਅࣅΛ͢Δ͜ͱʯ is OUTPUT & FOLLOW #ࢲͳΓͷ݁࿦

Slide 75

Slide 75 text

Special Thanks …ͱ,ձ৔ͷօ͞·ʂ ͝ڠྗ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂʂ

Slide 76

Slide 76 text

ήʔϜηοτʂʂʂ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠&Ҿ͖ଓ͖PyConJP 2017Λָ͠Έ·͠ΐ͏! Shinichi Nakagawa(Twitter/Facebook/etc… @shinyorke)