見出し画像

ツイートをTableauで可視化するデータ基盤の構築

Twitterで特定のキーワードやハッシュタグを含んだツイートを、取得&蓄積するデータ基盤をGoogleCloudPlatform上に構築しました。
BigQueryにデータを保管しているため、Tableauで可視化が可能です。

Tableau可視化画面


開発環境

GoogleCloudPlatform
・GoogleBigQuery
・GoogleCloudFunctions (python)

概要


Googleスプレッドシートに記載されているキーワードをもとに、Twitter APIからツイート内容を取得してネガポジスコアを算出し、GoogleCloudStorage(以下GCS)とBigQueryに保存します。BigQueryに保存したデータは、Tableauで表示&ダウンロード可能です。

GCSとBigQueryに保管するロジックは、Cloud Functions上にpythonで構築しています。

Cloud Schedulerで1日1回実行するように設定しているため、初期設定さえすれば後は毎日全自動で取得してきてくれます。
また、キーワードはいつでも他の人が変更&追加可能です。

解説

① TwitterAPIでツイートを取得

Standard Search APIを利用するためには、英語で申請が必要です。
申請に関してはこちらを参考にしました。
Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ

また、Standard Search APIによる取得は以下のような制限があります。
・1回で最大100ツイート
・15分で180回リクエスト
・取得できるツイートは過去7日間まで

15分間で最大18000ツイートまでしか取得できません。
15分経過すれば、リクエスト回数が180回に戻ります。
無償APIだと7日以上前のツイートは取得できません。
本格的に取得したい場合は、有償のAPIを利用することで取得することができます。

Twitter APIに関してはこちらのページを30回以上見ました。
500万件を超えるTwitter のリツイート データを取得・分析する方法

2023年3月現在、TwitterAPIが有料化する可能性があると報道されています。
一部無償のままのようですが、課金しないと本記事のTwitterAPIは利用できなくなる可能性があります。

② ツイートをCloud Storageに保管

Cloud FunctionsはJavaScriptやpythonをクラウド上で動作できるサービスです。

Googleドライブ上のスプレッドシートから、あらかじめ入力しておいたキーワードを取得して、Twitter APIをたたきます。
帰ってきたjsonをcsvに変換して、1日分のツイートをCloud Storageに保管します。

取得したツイート内容を直接BigQueryに保管しても良いのですが、一度データレイクとしてCloud Storageに保管しています。
データを限定して保管すると、あとから「あ、この項目も欲しかった!」なんてことになるかもしれないですしね。

データ基盤の概念についてはこちらを参考にしました。
データ基盤の3分類と進化的データモデリング


③ BigQueryに保管

ここでもCloud Functionsを利用しています。
pythonで感情分析を実施し、スコア化しています。
データフレームで処理しているためBigQueryへの保管はto_gbqを使っています。
pandas.DataFrame.to_gbq

to_gbqのtable_schemaでBigQueryのスキーマを指定しておかないと、ほとんどnullの項目(geo等)を保管する際に「スキーマが違う!」と怒られる場合があるので注意が必要です。

今回は感情分析がメインのため、BOTやリツイートを除外しています。
BOTに関しては、sourceに「twitter.com」が含まれているものだけを選定、
リツイートはツイート本文が「@ RT」で始まっているものを除外しています。

④ BigQueryに保管

キーワードごとにテーブルを作成しています。
ツイート内容の他に、ツイート日時、アカウント情報、いいね数、ネガポジスコア等を保管しています。


⑤ Tableauで可視化

Tableau DesktopでBigQueryを直接読み込み、可視化しています。
画像は取得していませんが、URLで表示したり保存も可能です。
BigQuery × Tableauでなくても、Microcms等のCMSを利用してNextやNuxtでまとめサイトの構築も可能です。

この記事が気に入ったらサポートをしてみませんか?