BigQueryの一般公開データセットにはどんなデータがあるのか調べてみた

BigQueryの一般公開データセットってどんなものがあるのかな?という方向けです。
2023.05.24

クラスメソッド株式会社データアナリティクス事業本部所属のニューシロです。
今回はGoogle CloudのBigQueryについて、一般公開データセットにはどんなデータがあるのか調べてみました。その中で私が選んだデータセット4つと、付属のサンプルクエリまたは私が書いたクエリを実行した結果を紹介します。

BigQueryの一般公開データセットとは

以下公式ドキュメントからの引用です。

一般公開データセットは、BigQuery に保存され、Google Cloud 一般公開データセット プログラムを通じて一般提供されているデータセットです。この一般公開データセットは BigQuery でホストされ、ユーザーがアクセスして独自のアプリケーションに統合できます。Google では、これらのデータセットの保存費用を負担しており、プロジェクトを介してデータへの公開アクセスを提供しています。

上記の通り、一般公開データセットとは、ユーザーが簡単にアクセスすることができる、Googleが用意したデータセットです。多種多様なデータセットがあり、興味深いデータセットも数多くあります。

また、BigQueryを用いたSQL文の練習で、自作した簡単なテーブルを用いることはあるかと思いますが、テーブルの作成は結構手間がかかります。この一般公開データセットは特に準備も必要とせず操作できるので、少しだけBigQueryを触ってみたいという方にも良いのではないでしょうか。

そしてこれらのデータセットには、操作したらどのようなデータが得られるのかすぐわかるようにサンプルクエリが記載されているものが多くあります。データセットの説明では、そのサンプルクエリまたは私が作成したクエリを用いた実例も紹介していきます。  

注意

BigQueryの一般公開データセットは簡単にアクセスができますが、無料というわけではありません。 BigQueryでのクエリ実行については、毎月1TBまでは無料ですが、以降は料金が発生します。実行する際は気をつけましょう。


実行する前にクエリ実行画面の右上をチェックしましょう。処理バイト数の目安が表示されます。

データセットについて

トップバッターは、BigQueryのトップ画面でもおすすめしてくれている、Google Trendsです。
こちらは米国または世界のトレンドワードのランキングについてのデータセットです。自分の興味のあるワードがあるか調べると割と出てくるので、調べていても楽しいのではないでしょうか。

テーブルが4つあるので、違いを以下に記します。

テーブル名 内容
top_rising_terms 米国の急上昇トレンドワード
top_terms 米国のトレンドワード
international_top_rising_terms 世界の急上昇トレンドワード
international_top_terms 世界のトレンドワード

日本のトレンドワードを調べたい際は、international_top_rising_termsinternational_top_termsを用いて、WHERE句でcountry_name = "Japan"を入れます。

クエリを実行した結果

私が作成した以下のクエリを実行してみます。
直近1ヶ月で、"ゼルダ"が含まれているワードと、その日付、順位を調べるクエリです。

SELECT
  refresh_date,
  rank,
  term
FROM
  `bigquery-public-data.google_trends.international_top_rising_terms`
WHERE
  refresh_date >= DATE_SUB(CURRENT_DATE("Asia/Tokyo"), INTERVAL 1 MONTH)
  AND term LIKE "%ゼルダ%"
  AND country_name = "Japan"
GROUP BY
  refresh_date,
  rank,
  term
ORDER BY
  refresh_date DESC,
  rank

↓ 結果

| refresh_date | rank | term                                     | 
| ------------ | ---- | ---------------------------------------- | 
| 2023-05-14   | 6    | ゼルダ の 伝説 ティアーズ オブザ キングダム 攻略  | 
| 2023-05-14   | 20   | ゼルダ の 伝説 ティアーズ オブザ キングダム      | 
| 2023-05-13   | 24   | ゼルダ の 伝説 ティアーズ オブザ キングダム      |

こちらは前回の記事で用いたクエリを少しばかり変更したものです。
前回はトレンドワードが入ったテーブルinternational_top_termsを用いたので、今回は急上昇トレンドワードが入ったテーブルinternational_top_rising_termsを用いてみました。テーブルが違うことで結果も若干違うことがわかります。面白いですね。

また、このテーブルはパーティションが日付を基準として有効化されています。WHERE句で日付を指定すると処理バイト数が減るのでおすすめです(このクエリだと処理バイト数が結構かかってしまいます)。

No.2 NCAA Basketball

データセットについて

スポーツに関するデータは、実感が湧きやすくて良いのではないのでしょうか。
ということで、NCAA Basketballというデータセットを紹介します。NCAAバスケットボールの試合、チーム、選手に関するデータが含まれたデータセットです。

クエリを実行した結果

こちらは記載されているサンプルクエリが非常に良いので紹介させていただきます。
1試合40分中、最初の35分と最後の5分でスリーポイントシュートの割合はどのくらい変化するのか?ということを調べたクエリです。

#standardSQL
SELECT
  #first 35 minutes of regulation
  COUNTIF(event_type = "threepointmade"
    AND elapsed_time_sec < 2100) AS threes_made_first35,
  COUNTIF((event_type = "threepointmade"
      OR event_type = "threepointmiss")
    AND elapsed_time_sec < 2100) AS threes_att_first35,
  COUNTIF(event_type = "threepointmade"
    AND elapsed_time_sec < 2100) / COUNTIF((event_type = "threepointmade"
      OR event_type = "threepointmiss")
    AND elapsed_time_sec < 2100) AS three_pt_pct_first35,
  #last five minutes of regulation
  COUNTIF(event_type = "threepointmade"
    AND elapsed_time_sec >= 2100) AS threes_made_last5,
  COUNTIF((event_type = "threepointmade"
      OR event_type = "threepointmiss")
    AND elapsed_time_sec >= 2100) AS threes_att_last5,
  COUNTIF(event_type = "threepointmade"
    AND elapsed_time_sec >= 2100) / COUNTIF((event_type = "threepointmade"
      OR event_type = "threepointmiss")
    AND elapsed_time_sec >= 2100) AS three_pt_pct_last5
FROM
  `bigquery-public-data.ncaa_basketball.mbb_pbp_sr`
WHERE
  home_division_alias = "D1"
  AND away_division_alias = "D1"

↓ 結果

| threes_made_first35 | threes_att_first35 | three_pt_pct_first35 | threes_made_last5 | threes_att_last5 | three_pt_pct_last5  | 
| ------------------- | ------------------ | -------------------- | ----------------- | ---------------- | ------------------- | 
| 132539              | 377798             | 0.3508197502368991   | 19775             | 63308            | 0.31236178681999116 |

スリーポイントシュートの成功率は前半35分は約35%、後半5分は約%31%ということがわかりました。バスケットボール好きにとって非常に興味深い結果となったのではないでしょうか。最後の5分では確率は下がるようですが、残り時間からくる焦りがあるのでしょうか。他のデータも気になるところです。

No.3 GitHub Activity Data

データセットについて

GitHubの情報をまとめたGitHub Activity Dataを紹介します。GitHubリポジトリの情報が含まれており、3TB以上の大容量データセットです。

クエリを実行した結果

こちらは私が作成したクエリです。commit文で最も使われている言葉トップ10を調べました。
注意!記事の初めにも書きましたが、実行前に使用する容量は確認しましょう!GitHub Activity Dataは3TB以上の大容量データセットのため、クエリの内容によっては結構な容量を使います。無料枠以上に使用すると料金が発生しますので注意しましょう。

SELECT文も実行する前に確認!SELECT *だとものすごく容量を使うので、必要な行だけ抽出しましょう!

SELECT
  COUNT(*) as message_count,
  message
FROM `bigquery-public-data.github_repos.commits` 
GROUP BY
  message
ORDER BY
  message_count DESC
LIMIT 10

↓ 結果

| message_count | message                                  | 
| ------------- | ---------------------------------------- | 
| 2485347       | Update README.md                         | 
| 1372500       | Initial commit.                          | 
| 633427        | update.                                  | 
| 614205        | Mirroring from Micro.blog.               | 
| 548574        | Update data.json                         | 
| 548318        | Update data.js                           | 
| 540480        | Initial commit                           | 
| 399726        | Add files via upload                     | 
| 381382        |                                          | 
| 286863        | Can't you see I'm updating the time?     |

commit文トップ10が取得できました!  

ちなみにこのGitHub Activity Dataには、元データからランダムにレコードを抽出したサンプルテーブルもあります。サンプルテーブルだとレコード数も抑えられてもっと気軽にクエリを実行できます。

No.4 NYC TLC Trips

データセットについて

最後に紹介するのはNYC TLC Tripsです。こちらはニューヨーク市のタクシー乗車に関する記録に関するデータセットです。

ものすごく個人的なのですが、昔ニューヨークに旅行に行きまして、サンプルクエリでの出力元データに私の乗車記録もあるかも!と思って選びました。

クエリを実行した結果

こちらは記載されていたサンプルクエリです。
このクエリは、2015年でのタクシーの曜日別平均速度を出力しています。
私は2015年にニューヨークへ行っていたので、私が乗ったタクシーも含まれているかも!?

#standardSQL
SELECT
  EXTRACT(DAYOFWEEK
  FROM
    pickup_datetime) DAYOFWEEK,
  ROUND(AVG(trip_distance / TIMESTAMP_DIFF(dropoff_datetime,
        pickup_datetime,
        SECOND))*3600, 1) speed
FROM
  `bigquery-public-data.new_york.tlc_yellow_trips_2015`
WHERE
  trip_distance > 0
  AND fare_amount/trip_distance BETWEEN 2
  AND 10
  AND dropoff_datetime > pickup_datetime
GROUP BY
  1
ORDER BY
  1

↓ 結果

| DAYOFWEEK | speed | 
| --------- | ----- | 
| 1         | 14.7  | 
| 2         | 13.4  | 
| 3         | 12.3  | 
| 4         | 12.2  | 
| 5         | 12.2  | 
| 6         | 12.3  | 
| 7         | 13.1  |

2015年でのタクシーの曜日別平均速度を出力できました!
1は日曜日を表しますので、日曜がダントツで速度が早いですね。ニューヨークの交通事情が日本と違いすぎて驚いた記憶があります。クラクションがとんでもない頻度で鳴らされていました。

また、このテーブルのようにフィールドに説明文が記載されているテーブルもあります。おかげでデータの概要がつかめて助かりました。  

最後に

一般公開データセットにどんなデータがあるのかつかめていただけていたら幸いです。公開データセットには他にも面白いデータセットがたくさんあったので、是非皆さんも調べてみてくださいね!

以上です。ここまでお読みいただきありがとうございました。

引用・参照まとめ