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

ZOZO前澤社長お年玉リツイート企画のビッグデータに立ち向かう方法

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 ZOZO前澤社長お年玉リツイート企画のビッグデータに立ち向かう方法

Avatar for Kazuya Sugimoto

Kazuya Sugimoto

January 23, 2019

More Decks by Kazuya Sugimoto

Other Decks in Technology

Transcript

  1. © 2018 CData Software Japan, LLC | www.cdata.com/jp ZOZO 前澤社長お年玉リツイート企画のビッグデータに立ち向かう方法

    -Twitterのビッグデータを分析するために、実際にやってみてわかった嵌りポイントとその対策- 2019/01 CData Software Japan Kazuya Sugimoto -Lead Engineer
  2. See the World as a Database Speaker 杉本 和也:Kazuya Sugimoto

    • CData Software Japan, LLC Lead Engineer • Microsoft MVP for Business Solution(Dynamics CRM/365) Blog:Morning Girl http://kageura.hatenadiary.jp/ Twitter:@sugimomoto Facebook:sugimomoto
  3. © 2018 CData Software Japan, LLC | www.cdata.com/jp About CData

    Software Bi-directional Access to Live App, Database, & Web API Data Through Standard Drivers ・CData Software, Inc. / Started: 1994 (/nsoftware) ・Location: Chapel Hill, NC a spin-off of /n software ・CData Japan: 2016/6 (JV with Infoteria) ・20年以上にわたりデータ関連コンポーネントを提供 ・100+ 対応データソース ・「API を使いやすく」をミッションにクラウドデータ接続を標準化
  4. © 2018 CData Software Japan, LLC | www.cdata.com/jp [前澤 API]で

    Twitter 検索すると出てくる Twitter API ・抽選方法への懐疑的な声
  5. © 2018 CData Software Japan, LLC | www.cdata.com/jp 業界最多級のデータソース Drivers

    for NoSQL, Big Data, & SaaS Connectivity CRMおよびマーケティング自動化 会計システム コラボレーションおよびERP オンプレミスおよびクラウドDB ドキュメントおよびファイル形式 ソーシャルネットワーキング ネットワーキングおよび認証 電子商取引 その他
  6. © 2018 CData Software Japan, LLC | www.cdata.com/jp Power BI

    のデータソース拡張コネクターなどを作ってます Drivers for NoSQL, Big Data, & SaaS Connectivity
  7. © 2018 CData Software Japan, LLC | www.cdata.com/jp CData Software

    Japan に勤めていて、 日々APIと戯れる API 中毒な人間として、 黙ってられない!
  8. © 2018 CData Software Japan, LLC | www.cdata.com/jp 今日お話したいこと・伝えたいこと どうやって500万件におよぶ大量の

    Twitter データを取得したらいいのか? どうやれば、BIツールなどで分析できる状態に持っていけるのか? みなさんが 「1億円使って獲得した大量のリツイートを分析したい!」 と思ったときのために 実際に大量ツイートを取得した経験から 分析するまでのアプローチ・対応方法・API の仕様や制約をまとめてみました!
  9. © 2018 CData Software Japan, LLC | www.cdata.com/jp 分析するまでの過程で遭遇した4つの課題 Twitter

    API リミット対策 どうやって500万件の ツイートを取得するの? どうやって対象の ツイートを特定するの? Twitter Search API の仕様と制限 どうやって取得した データを構造化するの? Twitter データの 構造と解析 どうやって DB に データを流し込むの? Twitter データの DB移行方法
  10. © 2018 CData Software Japan, LLC | www.cdata.com/jp 仮に ZOZO前澤社長が本気で

    API を使って抽選 しようとした場合どうなるか? イベント期間 「1月5日 22:35 ~ 1月7日 24:00」 当選者発表 「1月8日 9:00」 もし、適切に当選者を全部取得して抽選するのであれば、 「約50時間(24時間 ☓ 2 + 9時間)」 で500万リツイート取得する必要があった
  11. © 2018 CData Software Japan, LLC | www.cdata.com/jp 通常通り Twitter

    API を使って取得した 場合どうなるの?
  12. © 2018 CData Software Japan, LLC | www.cdata.com/jp 「Premium /

    Enterprise Search API」を 使った場合、どうなるの? Standard Search API Premium Search API Enterprise Search API 取得対象期間 過去 7 日間 過去 30 日間 過去 30 日間 1リクエストで取得できる件数 100 ツイート count=100 500 ツイート maxResults=500 500 ツイート maxResults=500 リクエスト制限 15分 / 180 リクエスト 1分 / 60 リクエスト 1秒 / 20リクエスト 1時間あたりで取得できるツイート数 72,000 ツイート 180 * 4 * 100 1,800,000 ツイート 60 * 60 * 500 36,000,000 ツイート 20 * 60 * 60 * 500 1000万 ツイート取得にかかる時間 (500万ツイートの場合) 138 時間 (69時間) 5.5 時間 (2.75時間) 22 分 (11分) 1000万 ツイート取得にかかる費用 無償 5,000 ドル Twitter 社次第
  13. © 2018 CData Software Japan, LLC | www.cdata.com/jp ちなみに Premium

    API の利用料金 (Enterprise API は Twitter 社へ要相談)
  14. © 2018 CData Software Japan, LLC | www.cdata.com/jp Search API

    の「Query」を使うわけですが -Query Available operators-
  15. © 2018 CData Software Japan, LLC | www.cdata.com/jp やってみた 検索キーワードが

    ツイート内にある 検索キーワードが 引用・リツイート先にある ノーマルツイート 取得可能 - リプライ 取得可能 取得できない! ノーマルリツイート - 取得可能 引用リツイート 取得可能 取得できない!
  16. © 2018 CData Software Japan, LLC | www.cdata.com/jp 結論 「#月に行くならお年玉」の

    ハッシュタグが含まれていない引用リツイートも、 ハッシュタグツイートも取得するならどうするか?
  17. © 2018 CData Software Japan, LLC | www.cdata.com/jp 1.retweets_of:で前澤社長のリツイート・ 引用リツイートをすべて取得

    2. 「#月に行くならお年玉」検索でさらに取得 3.そして、重複データを削除!
  18. © 2018 CData Software Japan, LLC | www.cdata.com/jp なので、今回は泣く泣く「#月に行くならお年玉」で 取得できるものをシンプルに集めました。

    その数「430万ツイート」 それでも、27万円ほどかかりました (うち、2万7千円が私の財布、3万9千円がPayPalで募ったところご支援いただけました!) PS.もし、これならできるんじゃね? って人が居たら教えてください
  19. © 2018 CData Software Japan, LLC | www.cdata.com/jp { Name

    : “kazuya”, Age : 30, Location : [-73.856077, 40.848447] } 変換!? スキーマレス ネスト・配列ミックスな 階層構造 型はどうする? 配列はどうマッピングする? ネスト構造は分ける?分けない? RDBライクになれば、 BIツールに繋げやすい どうやってRDBライクにスキーマを定義し扱うのか?
  20. © 2018 CData Software Japan, LLC | www.cdata.com/jp もちろん、Power BI

    は JSON 読み込めます でも、何も挟まずに32GBものJSONを読むのは厳しい
  21. © 2018 CData Software Japan, LLC | www.cdata.com/jp しかも・・・ Twitter

    オブジェクトは結構フォーマットが多い
  22. © 2018 CData Software Japan, LLC | www.cdata.com/jp JSON ファイルの構造を自動解析して

    勝手にリレーショナル化してくれる { "documents": [ { "title": "SampleTitle1", "updated_at": "2018-09-10T05:22:26Z", “files": [ { "name": “SampleFile1-1", "language_code": “en" }, { "name": " SampleFile1-2", "language_code": "ja" } ] }, { "title": "SampleTitle2", "updated_at": "2018-09-05T05:22:26Z", “files": [ { "name": “SampleFile2-1, "language_code": "ja" }, { "name": “SampleFile2-2", "language_code": “en" } ] } ] } * title update_at 1 SampleTitle1 2018-09-10T05:22:26Z 2 SampleTitle2 2018-09-05T05:22:26Z * documents_id name language_code 1 1 SampleFile1-1 en 2 1 SampleFile1-2 ja 3 2 SampleFile2-1 ja 4 2 SampleFile2-2 en Files テーブル Documents テーブル 参考:http://bit.ly/CDataJson
  23. © 2018 CData Software Japan, LLC | www.cdata.com/jp 4.どうやって DB

    にデータを流し込むの? -Twitter データのDB移行方法-
  24. © 2018 CData Software Japan, LLC | www.cdata.com/jp とはいえ •

    テラバイト・ペタバイト級のデータでも無い • ワンポイントデータなのでストリーミング処理も要らない • 構文解析などまで手を染めるつもりはない 最終的にメンバーで分析することも考えて、 シンプルにクラウドRDBに送って、BI ツールで接続できるくらいがちょうどいい
  25. © 2018 CData Software Japan, LLC | www.cdata.com/jp .NET C#

    CData ADO.NET つまり、こんな感じのアーキテクチャにする .NET C# REST API HTTP JSON SQL RecordSet SQL Twitter Premium APIで ツイートデータを取得 フラット化したJSONデータを CData Sync で Azure SQL にレプリケート SQL 最終的にPower BIを使って リツイートを分析 { json } RecordSet CData JSON Driver で JSON をリレーショナル化
  26. © 2018 CData Software Japan, LLC | www.cdata.com/jp .NET C#

    CData ADO.NET ちなみに、もし Standard Search API を使うなら 138時間連続稼働させることを考えてこんな感じに REST API HTTP JSON SQL RecordSet SQL SQL { json } RecordSet { json } { json } { json } Azure Functions Azure Storage Azure Web Apps もしくは、DataFactory という手も Azure SQL もしくは Datawarehouse
  27. © 2018 CData Software Japan, LLC | www.cdata.com/jp まとめ •

    Premium API なら 大量ツイートも軽々さばける! • 検索アプローチは要注意。やりたいこととどこまで検索対象 にできるかは、事前に把握しておくこと。 • Twitter の JSON 構造は地味に複雑。 今後も変化する可能性あるので 柔軟に対応できる状態にしておくのがいい • 500万リツイートでも40GBほど、実はそこまでビッグでもない ちょうどいいRDB選択でも十分分析できる
  28. © 2018 CData Software Japan, LLC | www.cdata.com/jp CData Software

    Japan では メンバーを募集中! https://www.wantedly.com/projects/265684
  29. © 2018 CData Software Japan, LLC | www.cdata.com/jp Special Thanks

    Blog公開時からご支援頂いた @渡部 知記 さん @Shohei Oda さん @Takeshi Kagata さん @小林 竜也 さん @東 賢 (Ken Azuma)さん @井之上さん ありがとうございます!