昨年からTwitter 始めて、割とツイートも溜まってきたのでそろそろTwitter分析的なことができるかなと思って、やってみました。 ただ、泥沼にハマりました。
思いの外、めんどくさかったので記念に残しておきます。
word cloud
word cloudはこういうのです。
自然言語処理界隈の方々は、それなりによく見かけるのではないでしょうか?
Tweetを使ってword cloud
こちらも、もはや何番煎じだよ!ってくらい、やり尽くされてます。 先人の記録もたくさん出てきます。
クラウドを使って自動定期実行したい
Twitterなんて継続する人はずっと継続していくものなので、一回word cloudを作ってもすぐに古くなってしまいます。 そのため、定期的に自動生成して、最新の状況を維持したくなります。 ここで一つポイントになるのは、貧乏人の私的にはなるべくコストを抑えたいのでサーバーレスでやりたかったわけです。
ここまで来てちょっと困りました。
- なるべくお金はかけたくないから、サーバーレスがいい
- 常時生成するわけではないので、使ってないときはインスタンスを消去したい
- サーバーレス環境で日本語フォントをどうやって導入したらいいかわからん
- これはおそらくストレージサービス(GCPではCloud Storage)で日本語フォントを管理する必要あり
- => めんどくさそう
この結果、最終的に
- クラウドでバッチ処理でTweetに含まれる単語のカウントを行い、そのデータを配信
- こうするとサーバー側でフォントを気にしなくて良くなる
- wordcloudのレンダリングはフロントエンドで行う
- wordcloudの描画処理をクライアントサイドで実施することで、クライアントサイドで日本語フォントの問題を解決
というのが収まりが良さそうでした。 ということで、ローカルでやればアホほど簡単な処理を、縛りプ○イでやっていきます。
Twitter API
Tweetの取得にはTwitter社からAPIが提供されているので、そちらを使います。
使い方
使用にあたり、英語でDevelopper登録が必要になります。登録の仕方はこちらを参考にやってみました。
英語で使用用途を書かないといけないですが、そのへんはgoogle 翻訳先生に頑張って貰えば余裕です!!←
作る
ここから本題です。実際にクラウドを使って作ってみます。 Cloud Storageのバケットを"for_twitter"と作成して、やってみました。
構成
こんな感じにしようと思います。
多分こんな感じにすれば行けるかと思います。
Cloud Functions + Cloud Storage
Cloud SchedulerでCron設定して上げれば時間が来ると勝手に最新のTweetを取得して集計結果をCloud Storageに保存するようにします。
自分のTweetの取得 -> 形態素解析・単語数のカウント -> 保存
Cloud Functionsで上記の処理をすべて実行して、Cloud Storageに配置します。
上で登録が済んでいるので、次はtwitterのデータを実際に取得します。 下の4つの値をcloud functionsの環境変数に登録します。
- API_key
- API_secret_key
- access_token
- access_token_secret
コード本体はこんな感じにしてます。
App Engine
集計結果の配信
作ったファイルを配信するエンドポイントを作ります。
単語数が多すぎると表示がうまくいかなかったり、遅延がひどくなったりするので、単語数は程々に。 (今の所300までは表示できました)
フロントエンド
こんな感じですかね。
動かしてみた感じ
こんな感じでしょうか。
参考
こちらの記事を参考にさせていただきました。
謝辞
お恥ずかしい限りですが、こんな感じに嘆いていたらいくつか書籍やリンクを紹介いただきました。 こんなくだらないことのために、なんだか本当に申し訳ないです。。。 せっかく紹介いただいた文献を備忘録として残しておきます。
GCPに限らずだけど、逆引き辞典ほしい。普通はどんなサービス使って、どういうふうに組み合わせるのか、それがわかるとだいぶ進みが違うのに。。。
— 野川の側 (@nogawanogawa) 2020年2月16日
GCPでデータサイエンスをやるという切り口で見た、GCPの使い方に関する書籍でした。
スケーラブルデータサイエンス データエンジニアのための実践Google Cloud Platform
- 作者:Valliappa Lakshmanan
- 発売日: 2019/06/05
- メディア: 単行本(ソフトカバー)
GCPのデザインパターンの例です。
GCPのアイコン集です。
AWSのクラウドデザインパターンだとこんな感じのものも紹介いただきました。
この手のクラウドでのデザインパターンについては全然知識がなかったで、勉強になりました。 ありがとうございました。
感想
ローカル環境でwordcloud作るだけなら、先人の記事をなぞればそのままできます。 何を血迷ったか、サーバーレスで自動運用しようとか考えたら、めちゃくちゃ泥沼にハマりました。 結局、GCPのサービスについて調べる方が時間かかりました。トホホ。。。
今回はこんな感じで、簡単な(?)お遊びでした。