Google Colaboratory (Colab) のAIコード生成だけでGoogleトレンドを分析する

# はじめに
今年はColaboratoryとBigQueryを用いたデータ分析をする機会が多くあった年でした。
Colaboratoryに初めて触れましたが、BigQueryで分析したデータにグラフとメモを残しながら作業するのにあたって、とても便利だったので備忘録的に記事を書くことにしました。

ただ、それだけではつまらないのでColaboratoryのコード生成機能だけを利用して、分析してみることにしました。
対象としてはGoogleの公開データセットのトレンド履歴から、直近3週間程度のトレンドワードによく出てきた3つについて何日にどの順位だったのか折れ線グラフを作りました。

# Google Colaboratory (Colab) 
「Google Colaboratory (Colab)」とは、Google DriveのDocumentやSpreadSheetと同じように無料で利用できるPythonの記述・実行環境です。

Colab自体の紹介についても、以下のColabのドキュメントで作られているので見てみてください
https://colab.research.google.com/?hl=ja#scrollTo=5fCEDCU_qrC0
```
Colab（正式名称「Colaboratory」）では、ブラウザ上で Python を記述、実行できます。以下の機能を使用できます。

環境構築が不要
GPU に料金なしでアクセス
簡単に共有
Colab は、学生からデータ サイエンティスト、AI リサーチャーまで、皆さんの作業を効率化します。詳しくは、Colab の紹介動画をご覧ください。
```

## AIコード生成
Colabのエディタでは、テキストの記述やPythonコードを作成・実行できますが、コードを作成する際にAIにコードを作成させることができます。
コードブロックを作ろうとすると、こちらのようなメッセージで生成をクリックするとプロンプト入力の窓が現れます。
![スクリーンショット 2024-12-08 3.53.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/06a6e8a3-070a-5ba4-9a77-79c6ef1aa2a6.png)

1から100までの合計を計算するプログラムを生成させてみせました。せっかくなので、ちょっと複雑に途中の合計値も出力させてみました。
![スクリーンショット 2024-12-08 3.57.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/92c5ee90-86fc-f8ce-c96a-69a6b856f8e4.png)

こんな感じで、簡単にAIコード生成を利用しながらPythonを使うことができます。
一番上のフォームスペースが生成させたいプロンプトを書くスペースになります。
下のグレーのエリアがそのプロンプトによって生成されたコードが記載されるエリアです。
1行目に生成元としたプロンプトがコメントで記載されて、それ以降にコードが記載されています。
こちらのコードは生成されたものに直接自分で編集することも可能です。
コードの左にある▷の実行マークを押すことでコードが実行されて、コードの下に実行結果が表示されます。

また、ColabはBigQueryとの連携も強く、BigQueryのクエリも同じようにAIコード生成することが可能です。

# AIコード生成だけでGoogleトレンドを分析する
ここから本題のAIコード生成だけでGoogleトレンドを分析しようと思います。

実際のプロンプトや実行結果については、[こちらのドキュメント](https://colab.research.google.com/drive/1S09kR4jtPkj0hyz7mKu1dLV-bdXahjdT#scrollTo=rE0d39sIrIL9)で公開しているので、合わせてご覧ください。

## Google認証とBigQuery実行のためのプロジェクトID設定をする
ColabでBigQueryをつかうためのおまじないのようなものです。
![スクリーンショット 2024-12-08 13.14.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/3eb72027-61e8-38c1-eeac-d7b33c449997.png)

1つ目のコードブロックがColabの裏で動いているマシンに今操作しているGoogleアカウントの認証情報を渡す処理です。実行すると、裏でマシンが起動して、認証の確認ウィンドウがでてくるので権限を許可して認証してください。

2つ目のコードブロックがBigQueryのクエリを実行する際に使うGCPプロジェクトIDを変数に保存する処理です。
これ以降、この変数に格納したプロジェクトIDのGCPプロジェクトでBigQueryのクエリを実行することになります。



## Googleトレンドの一般公開データセットの中身を確認する
BigQueryには、多数の[一般公開データセット](https://cloud.google.com/bigquery/public-data?hl=ja)が存在します。
その中の1つに全世界のGoogleトレンドの情報を蓄積している[Google Trends - International](https://console.cloud.google.com/marketplace/product/bigquery-public-datasets/google-trends-intl?hl=ja)のデータセットがあります。
今回はこのデータセットの中の `international_top_terms` という日毎のトップ25トレンドを30日間保存しているテーブルを利用します。

BigQueryでテーブルを見てみるとテーブル全体で20GBもないので、雑に10件全カラム取得してプレビューしてみます
* 1つ目のコードブロックでテーブル名を指定してデータを取得させています。
  * BigQueryをColabから呼び出す際に、マジックコマンドと言う記述方法をすることで、Colab上でクエリを書くだけでPythonのデータとして格納できるので、先ほど変数格納したプロジェクトIDや変数保存先のデータフレーム名を指定するようなプロンプトになっています。
* 2つ目のコードブロックでデータフレームに保存した中身を出力してプレビューしています。
![スクリーンショット 2024-12-08 4.39.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/209079e6-d4c7-40eb-a9d6-ab340304d414.png)

## 直近21日間のトレンドデータを取得する
公開データセットのトレンドデータは最大で30日間分の日毎のトレンドデータが保存されています。
タイムゾーンや集計ラグを考慮して、直近21日間分の日本(Japan)の東京(Tokyo)のトレンドデータを日ごとにrank順にソートしてプレビューしてみます。
![スクリーンショット 2024-12-08 4.39.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/ff82388b-042a-942b-2dda-cfe2934c5fc9.png)
生成されるコードにはブレがあり、マジックコマンドを使わなかったり再認証のコードまで生成されてしまうことがあったので、プロンプトにはそのへんの指定も入っています。

## ランキングによく出現した単語を探す
いくつかの単語の日毎のトレンド変化をグラフ化しようと思います。
そのためまずは、取得したトレンドデータから各ワードの出現回数をカウントします。
BigQueryのクエリを改修して新しいデータフレームとして取得することでも可能ですが、今回は先程取得したデータフレームのデータをPython上で計算して取得するコードが生成されました。
![スクリーンショット 2024-12-08 4.46.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/47c74861-5cac-119c-9c32-c6c6c56d9376.png)

出現回数トップ3は PFAS, 横浜流星, 野球 でした。
（プレミア12は野球セットでトレンドに入っていたため除外

## トレンドの変化をグラフ化する
トップ3の PFAS, 横浜流星, 野球 について日毎のトレンド順位を折れ線グラフにプロットしてみます。

![スクリーンショット 2024-12-08 4.50.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/868173eb-830e-f961-e5d6-0d4011fbb45c.png)
![スクリーンショット 2024-12-08 4.51.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/47502c07-f3e9-78bb-cd15-a966e8a726e3.png)
このようなプロンプトからコードを生成して折れ線グラフを出力することができました。

グラフライブラリの都合で日本語出力ができずに凡例で文字化けが起きていますが、文字数から横浜流星と野球が推測つきます。この文字化けは、2枚の画像の間にフォントがないという警告のコンソール出力が出ていましたが、画像では省略しています。

## 補助線を引く
野球のプレミア12の終了日は 11/24 でした。この日はトレンドのどのあたりになるのか補助線を追加してみようと思います。
![スクリーンショット 2024-12-08 5.03.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/7178d939-4d84-4f2a-7abb-2bb069e90239.png)
![スクリーンショット 2024-12-08 5.03.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/98737004-ab08-5678-c1c5-6c80f4796439.png)
11/24に黄緑の破線の補助線を引くと、野球のトレンド入りは翌日が最後であることがわかります。
プレミア12がおわってトレンドに入らなくなっただろうことはイメージと一致します。

# おわりに
Colabを使ってGoogleトレンドを分析してみました。
BigQueryの自動生成については、かなり生成されるコードやクエリを意識してプロンプトを作ったところはありますが、Pythonのグラフ生成コードなどについてはかなり簡単にそれっぽいグラフを生成してくれます。

Colab上でのAIと協力しながらコード生成をするには、この他にGeminiAIとチャットしながらコードを書くことも可能です。

今年Colabを触ってみるまでBigQueryはよく使っていましたが、Colabについては縁遠いものと考えていました。
ですが、BigQueryでいろいろ試した結果をクエリと出力結果をセットで保存したり、そこにメモをつけていくのに非常に有用でした。グラフ出力についても、AIが簡単にコードを生成してくれて、非常にスムーズでした。

皆さんもぜひ一度試してはいかがでしょうか？

# おまけ（Gemini AIによるデバッグ）
本文では紹介していませんでしたが、Colab特化のGeminiAIをColab上で利用することもできます。
補助線のコードを生成させた際にエラーが出たのですが、そのエラー内容をGeminiAIに問い合わせることで、解決方法を教えてもらうことができました。

実行時にエラーが出ると、実行結果の下にエラーの説明というボタンがでてきます。
![スクリーンショット 2024-12-08 5.20.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/8a4d403c-f839-b0b4-a9ad-d763530d947f.png)

このボタンを押すと画面右側にチャットエリアが表示されてGamini AIからエラー内容の解説がもらえました。
![スクリーンショット 2024-12-08 5.26.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/e3e4b49a-bb96-dac9-f526-2003f36e2a9b.png)
日本語での回答し直しを求めると、日本語で回答してくれます。
![スクリーンショット 2024-12-08 5.27.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32726/d7215eb3-8a8f-a65e-0d90-1dc5282ac6b3.png)