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

Jupyter(Python)とBigQueryによるデータ分析基盤のDevOps #pyco...

yuzutas0
September 09, 2017

Jupyter(Python)とBigQueryによるデータ分析基盤のDevOps #pyconjp / 20170909

PyCon JP 2017 の発表資料です。ジャンルは「業務利用事例」となります。

追記1. PyCon JP 2017 ベストトークアワード優秀賞を受賞しました!
追記2. http://yuzutas0.hatenablog.com/entry/2017/09/12/203000 に補足を掲載しています!

yuzutas0

September 09, 2017
Tweet

More Decks by yuzutas0

Other Decks in Technology

Transcript

  1. Jupyter + BigQuery ʹΑΔ
 σʔλ෼ੳج൫ ͷ DevˍOps 2017-09-09 (Sat)
 4:15

    p.m. – 4:45 p.m. in Room 201
 PyCon JP 2017
 presented by @yuzutas0
 https://www.pexels.com/photo/close-up-of-computer-keyboard-257949/ɹhttps://www.pexels.com/photo/technology-computer-lines-board-50711/ɹhttps://www.pexels.com/photo/black-and-white-business-chart-computer-241544/
  2. ɹSho Yokoyamaɹ@yuzutas0 ɹɹ 
 
 • Recruit Technologies Co.,

    Ltd. 
 ɹɹάϧʔϓͷITࢪࡦશൠΛ୲͏ byʰϦΫϧʔτɺਐԽΛࢭΊͳ͍ITݱ৔ྗʱ • Site Reliability Engineering
 ɹɹج൫γεςϜͷӡ༻ɾվળ • Finance & Econometrics (Before)
 ɹɹRʹΑΔ౷ܭॲཧ - ͋ͷͱ͖Jupyter͕͋Ε͹Α͔ͬͨͷʹʂ
  3. ɹࣄۀ੒௕ → εςʔΫϗϧμʔͷଟ༷Խ σβΠϯ ηΩϡϦςΟ ๏຿ Πϯϑϥ SRE ΞϓϦج൫

    ू٬ ΧελϚʔ
 αϙʔτ σʔλ
 αΠΤϯε ػցֶश
 ΤϯδχΞ ։ൃӡ༻
 νʔϜA ։ൃӡ༻
 νʔϜB ։ൃӡ༻
 νʔϜC PO PO PO σΟϨΫγϣϯ ޿ใ
  4. ɹσʔλ׆༻ࣄྫ ɹ1. KPIϞχλϦϯάɹɹ
 ɹ2. ϢʔβʔߦಈͷՄࢹԽ
 ɹ3. ࢪࡦޮՌͷ༧ଌɾܭଌ Ϗδωε 4.

    ػցֶशʹΑΔϨίϝϯυ
 5. ۀऀɾεύϜͷࣗಈ൑ఆ ϓϩμΫτ ɹ6. ໰͍߹Θͤͷ܏޲෼ੳ
 ɹ7. ޿ࠂ഑৴ͷࣗಈ࠷దԽ
 ɹ8. ϓϨεϦϦʔε ΧελϚʔνϟωϧ ɹ9. γεςϜϞχλϦϯά
 ɹ10. ো֐ൃੜ࣌ͷӨڹௐࠪ γεςϜ ɹ11. νʔϜͷΩϟύγςΟ νʔϜ
  5. σβΠϯ ηΩϡϦςΟ ๏຿ Πϯϑϥ SRE ΞϓϦج൫ ू٬ ΧελϚʔ
 αϙʔτ σʔλ


    αΠΤϯε ػցֶश
 ΤϯδχΞ ։ൃӡ༻
 νʔϜA ։ൃӡ༻
 νʔϜB ։ൃӡ༻
 νʔϜC PO PO PO σΟϨΫγϣϯ ޿ใ ։ൃӡ༻
 νʔϜB PO ɹ͜ΕΒͷࢪࡦ : ֤෦ॺ͕ϘτϜΞοϓͰਪਐ
  6. σβΠϯ ηΩϡϦςΟ ๏຿ Πϯϑϥ SRE ΞϓϦج൫ ू٬ ΧελϚʔ
 αϙʔτ σʔλ


    αΠΤϯε ػցֶश
 ΤϯδχΞ ։ൃӡ༻
 νʔϜA ։ൃӡ༻
 νʔϜB ։ൃӡ༻
 νʔϜC PO PO PO σΟϨΫγϣϯ ޿ใ ։ൃӡ༻
 νʔϜB PO ɹ֤෦ॺʹΑΔੵۃతͳσʔλ׆༻
  7. ɹ୭͔ͷ൑அ͕ѱ͔ͬͨΘ͚Ͱ͸ͳ͍ εέʔϧ΍ຊ֨Քಇ࣌ʹ
 ໰୊͕ݦࡏԽ ɹɹ·ͣ͸খ͘͞ࢼ͢
 ɹ • ࠷খݶͷσʔλૄ௨
 ɹ •

    ࣗલͰσʔλՃ޻ ෦ॺ͝ͱʹ
 ৽πʔϧಋೖ΍ࢪࡦணख IUUQXXXJSBTVUPZBDPNCMPHQPTU@IUNM IUUQXXXJSBTVUPZBDPNCMPHQPTU@IUNM IUUQXXXJSBTVUPZBDPNCMPHQPTU@IUNM
  8. ɹ஫ҙɿ෦ॺ͝ͱʹ࠷దͳView͸ҟͳΔ Excel ؾܰʹ਺ࣈΛม͑ͯ
 γϛϡϨʔγϣϯ Ϗδωε෦໳ Tableau ߴՁ֨ɾߴػೳ
 ෼ੳཁٻʹରԠ Re:dash

    SQL͕ॻ͚Δͻͱ
 ͓खܰར༻ σΟϨΫλʔ Jupyter
 GitͰίʔυ؅ཧ
 ϓϩάϥϜͷԸܙ ΤϯδχΞ ෼ੳ෦໳
  9. ɹBQͷ࠾୒ཧ༝ɿ҆৺ GCPɾGsuiteͰݖݶ؅ཧ - ΈΜͳ͕࢖͑Δ SQLΠϯλʔϑΣʔε - ಺෦ॲཧɾอकӡ༻Λؾʹͤͣʹ࢖͑Δ ඪ४SQL
 ΫΤϦͷҠ২ੑ͕ߴ͍


    ֶशίετ͕খ͍͞
 ςετ͠΍͍͢ पลπʔϧ
 ओཁBIπʔϧͳΒେ఍ܨ͕Δ
 pandas.io.gbq → Jupyterσόοά͕༰қ
  10. ɹσʔλऩू ݸਓ৘ใ
 ϚεΫࡁΈView Recruit Ads Console Recruit Clash
 Report

    όον ετϦʔϛϯά WebAPI εΫϨΠϐϯά requests + beautiful soup
  11. ΤϯδχΞ͕෼ੳʹܞΘ͍ͬͯͳ͍ͱEventσʔλ͕ϩάཁ͔݅Βൈ͚࿙Ε͕ͪ
 ෆཁσʔλͷա৒஝ੵʹΑΔετϨʔδѹഭΛݒ೦ʢͦ͜ͰBQͰ͢Αʣ ɹσʔλੑ࣭ʹԠͨ͡ऩूํ๏ 4UBUFঢ়ଶσʔλ &WFOUཤྺσʔλ ྫ Ϣʔβʔͷ࠷ऴϩάΠϯ೔࣌ʢ্ॻ͖͞ΕΔʣ աڈͷϩάΠϯཤྺʢ஝ੵ͞ΕΔʣ ओͳ༻్

    ը໘දࣔ 
 ʮ͜ͷਓ͸೔લʹϩάΠϯ͠·ͨ͠Αʯ ෼ੳ 
 Ͳͷ͘Β͍ͷස౓ͰϩάΠϯ͢Δ͔ ڧΈɾಛ௃ ϓϩμΫτຊମͷύϑΥʔϚϯε޲্
 ͍͍ͪͪཤྺςʔϒϧͱ+PJOͯ͠
 ࠷৽ϨίʔυΛ୳͢ͷ͸%#ෛՙ σʔλ෼ੳͷ࠶ݱੑΛ୲อ
 
 ຖճϩάΠϯ೔࣌Λ্ॻ͖͞ΕͨΒ
 ෼ੳͰ͖ͳ͘ͳͬͯ͠·͏ ෼ੳج൫Ͱͷ
 σʔλऩू ೔࣍ͰҰׅஔ͖׵͑ 
 %#ϩάˠࠩ෼ه࿥ˠ׆༻͸ͻͱ޻෉ඞཁ ࠩ෼൓ө 
 લճҎ߱ͷϨίʔυ͚ͩΛநग़
  12. 3૚ߏ଄
 ࢀߟʰ10೥ઓ͑Δσʔλ෼ੳೖ໳ - SQLΛ෢ثʹσʔλ׆༻࣌୅Λੜ͖ൈ͘ʱ ɹσʔλ஝ੵ ɹɹɹɹɹɹBigQuery - Google Cloud

    Platform Source
 ݩσʔλͷίϐʔ Warehouse
 ओཁࢦඪɾසग़σʔλ
 தؒςʔϒϧ App
 ֤πʔϧ͔Β௚઀ࢀর
 ඇٕज़ऀ޲͚IF ஝ੵ
  13. ※ͨͩ͠Python2.7੍໿͕͋ΔͷͰҰ෦ॻ͖௚͕͠ඞཁ → ύλʔϯ͕ݟ͖͑ͯͨΒม׵εΫϦϓτ • Φʔτεέʔϧ → Dataflow
 ɹGKE͸෼ࢄ޲͚ͷઃܭ͕ඞཁ
 • σʔλྔ͕গͳ͚Ε͹Datalab


    ɹJupyterͷίʔυ͕··࢖͑Δ ɹGCPͷαʔόΛར༻ ɹ • Googleઐ༻ઢͰBQΞΫηε
 ɹ • ಉ͡ถࠃϦʔδϣϯʹཱͯΔ ɹBQͰ100ԯϨίʔυΛҠߦ͢Δ ϘτϧωοΫᶃ N/W ϘτϧωοΫᶄ ϝϞϦ
  14. 3૚ߏ଄
 ࢀߟʰ10೥ઓ͑Δσʔλ෼ੳೖ໳ - SQLΛ෢ثʹσʔλ׆༻࣌୅Λੜ͖ൈ͘ʱ ɹσʔλՃ޻ ɹɹɹɹɹɹBigQuery - Google Cloud

    Platform Source
 ݩσʔλͷίϐʔ Warehouse
 ओཁࢦඪɾසग़σʔλ
 தؒςʔϒϧ App
 ֤πʔϧ͔Β௚઀ࢀর
 ඇٕज़ऀ޲͚IF Ճ޻ Ճ޻
  15. ɹQuery • BigQueryͱͷR/WΛѻ͏SQL
 • ςΩετॲཧͷࢧԉػೳΛ׆༻
 ɹ → f-strings (3.6~)΍TypeHints

    (3.5~)
 • ϝιουͱͯ͠੾Γग़͠
 ɹ → ஋ͷҾ͖౉͠ʹΑΔείʔϓ੍ޚ
  16. ɹ୭ʹεΫϦϓτΛ༻ҙ͢Δ͔ Yes No ͦͷ࡞ۀ͸
 ܁Γฦ͢ʁ ϞχλϦϯά
 ఆظతͳॲཧ
 ʲPushܕʳʢҰ෦ྫ֎͋Γʣ εφοϓγϣοτ


    ΞυϗοΫͳ෼ੳɾௐࠪ
 ʲPullܕʳ SQLΘ͔Δ
 ͻͱɾ෦ॺʁ ELTɿૄ௨ˠՃ޻
 ʢྫʣػցֶशΤϯδχΞ
 ʲPullܕʳ ETLɿՃ޻ˠૄ௨
 SpreadsheetͰI/F
 ʲPushܕʳ ※Ճ޻ࡁΈσʔλʹରͯ͠γϯϓϧͳSELECTจΛൃߦ͢Δ͚ͩͰࡁΉέʔε͸ଟ͍
  17. ؅ཧπʔϧʹظ଴͢Δཁ݅ʢཧ૝ʣ 
 
 ɹσʔλύΠϓϥΠϯͷ؅ཧ 1. ίʔυͰόʔδϣϯ؅ཧ
 2. εέδϡʔϧࣗಈىಈ
 3.

    ηοτΞοϓ΍ϝϯςφϯεͷָ͞(DB಺แͳͲ)
 4. GUI/CUI྆ํͰϩάɾύϑΥʔϚϯεͷ؅ཧ
 5. GUI/CUI྆ํͰม਺ࢦఆͷ࠶࣮ߦ 6. ࣗಈϦτϥΠॲཧɾεΩοϓػೳ
 7. εΫϦϓτͷฒྻ࣮ߦ
 8. αʔόͷΦʔτεέʔϧ
 9. ༗޲ඇ८ճάϥϑͷࣗಈ࡞੒
 10. Python3.6~ରԠʢςΩετॲཧ͕֨ஈʹָʣ
  18. ͳΜ͔ͩΜͩͰ࠷ॳʹ͓खܰߏஙͨ͠ jenkins Λ࢖͍ଓ͚͍ͯΔ
 
 ɹɹɹɹɹɹ• 2ܥ + BlueOcean + Pipeline

    of jenkinsfiles
 ɹɹɹɹɹɹ• ϦτϥΠػߏɾॲཧ࠷దԽ͸ଞʹྼΔ
 ɹɹɹɹɹɹ• jenkinsδϣϒ͔ΒγΣϧܦ༝Ͱ֤छॲཧΛίʔϧ ɹ҆ఆͷJenkins
  19. ɹλεΫͷ༏ઌॱҐ 1 σʔλ͕·͕͍ͪͬͯΔ
 ٙ࿭ͷௐࠪ ɹ1ͭؒҧ͍ͬͯΔͱશ෦৴༻Ͱ͖ͳ͘ͳΔͷͰ࠷༏ઌରԠɻ
 ɹ͙͢ௐࠪ͢Ε͹ؔ܎ऀͷ৴༻࢒ߴΛ૿΍ͤΔɻ 2 Modelվम ɹσʔλ߲໨௥ՃͳͲɻ


    ɹଟগݟʹͯ͘͘΋࢖͑Δঢ়ଶʹ͢Δ͜ͱ͕༏ઌɻ
 ɹ࠷ѱͷ৔߹Ͱ΋Ͳ͏ʹ͔࢖͏ଆͰ޻෉Ͱ͖ΔͷͰɻ 3 Viewվम ɹάϥϑͷݟӫ͑ͳͲɻ
 ɹҰ൪ʮมԽ͍ͯ͠ΔʯΠϯύΫτ → ؔ܎ߏஙʹ͸د༩ɻ
 ɹ࢖͍खʹͱͬͯ͸ॏཁͳͷͰՄೳͳൣғͰαϙʔτɻ 4 γεςϜͷอकੑͱ
 ύϑΥʔϚϯε ɹϘτϧωοΫʹͳͬͨΒରॲ͢Δɻ
 ɹ࠷ॳ͔ΒڽΔͱʮૣ͗͢Δ࠷దԽʯʹؕΓ͕ͪɻ
 ɹ࡞ۀνέοτʹ͢Δ·Ͱ΋ͳ͍ͭ͘Ͱʹ௚͢श׳Λ͚ͭΔɻ
  20. ɹTest • unittest ʹΑΔࣗಈςετΛ׆༻
 • Excel಺༰Λظ଴஋ʹ൓ө → GreenʹͳΕ͹࠶ݱ׬ྃ -

    ·͞ʹ “TDD”
 • SQLνϡʔχϯά΍ϦϑΝΫλ࣌ʹσάϨΛଈ࣌ݕ஌Ͱ͖ΔͷͰ૬ੑྑ͍
  21. ɹɹ1. Jupyter Notebook Ͱௐࠪ಺༰ͱ
 ɹɹɹσʔλΛ࠶ݱՄೳͳܗͰอଘ͢Δ 
 
 ɹɹ2. Github Preview

    Λͦͷ··
 ɹɹɹઆ໌ࢿྉͱͯ͠ར༻͢Δ ɹطଘͷܭࢉϛε΍σʔλෆ੔߹Λൃݟ
  22. ͱʹ͔͘਺ࣈ͕߹Θͳ͍ ɹ޷॥؀Λࢧ͑Δ೜଱ γεςϜ࿈ܞͷ్தͰ࢛ࣺޒೖ͕ੵΈॏͳΔ Excel͕طʹ 4 x 1990 = 7959

    ͱͳ͍ͬͯΔ ࣮ߦλΠϛϯάͰूܭ݁Ռ͕มΘΔ
 → طଘͷ਺஋͸୭΋࠶ݱͰ͖ͳ͍
  23. ɹ͜Ε·ͰɿϏδωε෦໳ͷϝΠϯExcel • σʔλͷ஝ੵ → ॏ͍ϑΝΠϧ
 
 • ؔ਺/ηϧͷଟॏࢀর →

    ௐࠪ/ղऍ͕ࠔ೉
 
 • macOSͰ։͘ͱͳΜ͔յΕΔ ։͘ͷʹ3෼ɻಈ͔ͦ͏ͱ͢Δͱ·ͨࢭ·Δɻ ΤϯδχΞ͕ؾܰʹݟΒΕͳ͍ঢ়گ
  24. ɹɹɹɹɹ ʴ ɹ͜Ε͔ΒɿTech + Culture = Value ςΫϊϩδʔ
 จԽɾϓϩηε

    σʔλΛ׆༻ͨ͠
 ੡඼։ൃ ੈͷதʹ ސ٬Ձ஋Λఏڙ Done
  25. ɹɹɹɹɹ ʴ ɹ͜Ε͔ΒɿTech + Culture = Value ςΫϊϩδʔ
 จԽɾϓϩηε

    σʔλΛ׆༻ͨ͠
 ੡඼։ൃ ੈͷதʹ ސ٬Ձ஋Λఏڙ Done Todo
  26. ɹ͜Μͳײ͡Ͱ΍Γ·ͨ͠ 1. ϗϫΠτϘʔυʹ෼ੳཁ݅
 ɹɹΧελϚʔߦಈભҠΛϕʔεͱͨ͠ࢦඪπϦʔ
 ɹɹϩάΠϯ཰͕޲্ → ΞΫγϣϯ͕… → ച্׵ࢉ

    
 ɹɹɹɹ2. JupyterͰ෼ੳ
 ɹɹɹɹɹίʔυ͸શͯίϛοτཤྺͰ؅ཧ
 
 ɹɹɹɹɹɹɹɹ3. ෼ੳ݁ՌΛؔ܎ऀʹڞ༗
 ɹɹɹɹɹɹɹɹɹGithubͷϓϨϏϡʔը໘Λ׆༻
  27. ɹProblemɹνʔϜͷվળ༨஍͕ݦࡏԽ ɹɹϝϯόʔ͕ࣗ෼ͷཧղෆ଍ʹڻ͘
 
 ɹɹɹ • ੡඼࢓༷ - ͜ͷέʔεͩͱσʔλͷத਎͸Ͳ͏ͳΔʁ
 ɹɹɹ •

    ϑϩϯτدΓϝϯόʔ͕ෳࡶͳSQLʹखؒऔΔ
 ɹɹɹ • ͦ΋ͦ΋ϏδωεKPIΛ೺Ѳ͍ͯ͠Δ͔
 ɹɹɹ • ͖ͪΜͱ෼ੳ͢ΔͨΊʹຊ౰͸ඞཁͩͬͨϩάཁ݅ͷ࿙Ε

  28. 1ͭͷϞχλʔΛғΜͰશһͰ࡞ۀ͢Δ ɹɹ • पғ͕ௐ΂ͨΓΞυόΠε͠ͳ͕ΒਐΊΔ
 ɹɹɹ → ϋϚΒͳ͍ / ࠳ંΛ๷͙ɺTips΍ίπΛڞ༗͋͠͏
 ɹɹ

    • օ͕΍ΔͳΒࣗ෼΋΍Δ͔ʂͷޙԡ͠
 ɹɹɹ → ʮ΍ͬͯΈͨΒࢥͬͨҎ্ʹྑ͔ͬͨʯͷମݧ ɹϞϒ ϓϩάϥϛϯά σʔλ෼ੳ
  29. 
 σʔλ࢓༷ʹৄ͍͠ʢগͳ͘ͱ΋ௐࠪ͢ΔεΩϧ͸΋͍ͬͯΔʣΤϯδχΞ͕
 ୲౰ྖҬΛ޿͛Δ͜ͱͰલޙ޻ఔͷϦʔυλΠϜΛ୹ॖ
 ɹϓϩηε૷ண - ։ൃ޻ఔʹ૊ΈࠐΉ ੡଄ ઃܭ ࢼݧ

    ϦϦʔε ޮՌ
 ଌఆ ཁ݅
 ఆٛ ཁٻ
 ੔ཧ ੡଄ ઃܭ ࢼݧ ϦϦʔε ޮՌ
 ଌఆ ཁ݅
 ఆٛ ཁٻ
 ੔ཧ طʹ΍͍ͬͯΔ ෼ੳཁٻ ϩάཁ݅ ܭଌ ΞΠσΞ
  30. ɹϦΫϧʔτͷྺ࢙ Ӧۀ͕௚઀ళฮʹग़޲͍ͯ
 σʔλΛऩू͍ͯͨ͠ σʔλʢࣄ࣮ʣΛ࣋ͪدͬͯ
 ෦ॺؒͰҙݟΛͿ͚ͭ߹͏ ࢢ৔ͷ࠶ఆٛ
 ৽͍͠ϏδωεՁ஋ͷߏங
 ྫɿঁੑ޲͚ब৬ϝσΟΞ →

    ࣾձਐग़ͷࢧԉ
 ྫɿΫʔϙϯࡶࢽ → ༧໿αΠτ ΁ͷస׵ IUUQXXXJSBTVUPZBDPNCMPHQPTU@IUNM IUUQXXXJSBTVUPZBDPNCMPHQPTU@IUNM IUUQXXXJSBTVUPZBDPNOFXQPQIUNM
  31. 4&$*Ϟσϧ ɹσʔλ͕ࢧ͑Δ஌ࣝ૑଄ ސ٬Ձ஋ উͪےɾUVP ΤϯδχΞ ू٬ σβΠϯ ηΩϡϦςΟ ๏຿

    ΧελϚʔαϙʔτ ޿ใ ࢧԉऀɾ։୓ऀͱͯ͠ͷ
 σʔλαΠΤϯςΟετ σʔλ
  32. ϦΫϧʔτʹݶͬͨ࿩Ͱ͸ͳ͍
 
 ͜Ε͔ΒͷੈքΛ࡞Δͷ͸ɺ
 ୭ΑΓ΋ ੡඼ ͱ ސ٬ ʹਫ਼௨ͨ͠
 ΤϯδχΞͷ໾ׂ

    Ͱ͢
 ͍·͜ͷ৔ʹ͍Δ ࢲͨͪࣗ਎ Ͱ͢ 
 σʔλ׆༻͸ɺͦͷୈҰาͩͱࢥ͍ͬͯ·͢
  33. σʔλ׆༻ͷਪਐʢ୅දͱͯ͠ൃද͠·͕࣮ͨ͠ࡍʹ͸൴Βͷޭ੷ʹΑΔͱ͜Ζ͕େ͖͍Ͱ͢ʣ ɹNaoya OsugiɹLee HeesungɹTatsuya IshibeɹTakuya BeppuɹTakahiro Kato
 ɹKohei AotaɹRyo InoueɹHiroki

    SakamotoɹShinryo UchidaɹShinsaku Kouno
 ɹShin KanouchiɹGeeWook KimɹKoh Fujiwara
 ٕज़ΞυόΠεɾ૊৫ࢧԉ ɹSho ItoɹShinya NishinakaɹNaoki Ainoya
 ɹKeisuke SoneɹSatoshi UejimaɹNorihisa Miyakawa ൃදαϙʔτ ɹShun OnoɹYusaku TokunagaɹKazutaka SakuraiɹSaki Kato ※ࢿྉɾ಺༰ʹޡΓ΍ෆద੾ͳදݱ͕͋Ε͹ൃදऀͷϛεͰ͢ɻ@yuzutas0 ʹ͝࿈བྷ͍͚ͨͩΔͱ޾͍Ͱ͢ɻ ɹSpecial Thanks - ج൫ͷಓ͸1ਓʹͯ͠੒Βͣ