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

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

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

Kazuya Sugimoto

January 23, 2019
Tweet

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)さん @井之上さん ありがとうございます!