はじめに
pandasで生徒の点数のデータフレームを作成しCSVファイルへ変換を行いGCSへアップロードします。
その後BigQueryからGCSのCSVファイルを読み込み平均点を算出してみます。
GCSへCSVファイルのアップロード
sampleデータを作成し、CSVファイルをGCSにアップロードします。
まず、GCSへ接続するために必要なPythonライブラリをインストールします。
pip3 install google-cloud-storage
pandasで生徒のテストの点数を作成します。
import pandas as pd
# サンプルデータの作成
data = {
'Student': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Math': [88, 92, 75, 90, 85],
'Science': [95, 85, 80, 70, 90],
'English': [78, 89, 85, 95, 92]
}
# データをDataFrameに変換
df = pd.DataFrame(data)
# CSVファイルに保存
df.to_csv('ファイル名.csv', index=False)
サービスアカウントキーのパスを指定します。
キーはIAMから作成しましょう。
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'サービスアカウントキー.json'
GCSへCSVファイルをアップロード
from google.cloud import storage
def upload_to_gcs(bucket_name, source_file_name):
# GCSクライアントを作成
storage_client = storage.Client()
# 指定したバケットを取得
bucket = storage_client.bucket(bucket_name)
# ローカルファイル名をそのままGCSのオブジェクト名として使用
destination_blob_name = os.path.basename(source_file_name)
# アップロードするファイルを指定
blob = bucket.blob(destination_blob_name)
# ファイルをGCSへアップロード
blob.upload_from_filename(source_file_name)
print(f"アップロードが完了しました!!")
bucket_name = 'GCSのバケット名'
source_file_name = 'アップロードするファイルパス'
upload_to_gcs(bucket_name, source_file_name)
ファイルがGCSに保存されていますね。
テスト用に3ファイル作成しています。
BigQueryで計算
GCSにデータができたのでBigQueryから生徒のテストの平均点を求めてみましょう。
BigQueryへ接続するために必要なPythonライブラリをインストールします。
pip3 install google-cloud-bigquery pandas
from google.cloud import bigquery
# BigQueryクライアントを作成
bigquery_client = bigquery.Client()
# クエリを定義
query = """
SELECT
Student,
ROUND(AVG(Math), 2) AS avg_math,
ROUND(AVG(Science), 2) AS avg_science,
ROUND(AVG(English), 2) AS avg_english
FROM
`tenacious-lore-401901.sample_data.test_point`
GROUP BY
Student
ORDER BY
Student
"""
# クエリを実行し、結果をDataFrameに保存
df = bigquery_client.query(query).to_dataframe()
クエリの結果が以下の通りとなります。
各教科の平均点数を求めることができました。