SQLとPythonを組み合わせたデータ分析【BigQuery・PostgreSQLへの接続方法】

SQLとPythonを組み合わせたデータ分析【BigQuery・PostgreSQLへの接続方法】 AIツール・レビュー

はじめに

データサイエンティスト・MLエンジニアの実務では、データの多くはデータベースに格納されています。CSVファイルだけ扱えれば良い時代は終わり、SQLでDBからデータを取得してPythonで分析するスキルが必須です。

SQLの基礎(データ分析で使う頻出パターン)

-- 基本的なSELECT
SELECT user_id, SUM(amount) as total_amount
FROM orders
WHERE order_date >= '2026-01-01'
GROUP BY user_id
HAVING SUM(amount) > 10000
ORDER BY total_amount DESC
LIMIT 100;

-- ウィンドウ関数(ランキング・移動平均)
SELECT 
    date,
    amount,
    AVG(amount) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as moving_avg_7d,
    RANK() OVER (PARTITION BY category ORDER BY amount DESC) as rank_in_category
FROM sales;

-- CTEで複雑なクエリを整理
WITH monthly_sales AS (
    SELECT DATE_TRUNC('month', order_date) as month,
           SUM(amount) as total
    FROM orders
    GROUP BY 1
),
growth AS (
    SELECT month,
           total,
           LAG(total) OVER (ORDER BY month) as prev_month,
           (total - LAG(total) OVER (ORDER BY month)) / LAG(total) OVER (ORDER BY month) * 100 as growth_rate
    FROM monthly_sales
)
SELECT * FROM growth WHERE month >= '2026-01-01';

PythonからPostgreSQLに接続する

pip install psycopg2-binary sqlalchemy pandas
import pandas as pd
from sqlalchemy import create_engine

# 接続設定
engine = create_engine(
    'postgresql://username:password@localhost:5432/dbname'
)

# SQLをpandasで直接読む
query = """
    SELECT user_id, SUM(amount) as total
    FROM orders
    WHERE order_date >= '2026-01-01'
    GROUP BY user_id
    ORDER BY total DESC
    LIMIT 1000
"""
df = pd.read_sql(query, engine)
print(df.head())

# pandasをDBに書き込む
result_df.to_sql('analysis_results', engine, if_exists='replace', index=False)

BigQueryへの接続(Google Cloud)

pip install google-cloud-bigquery pandas-gbq
from google.cloud import bigquery
import pandas as pd

# BigQueryクライアントの初期化
client = bigquery.Client(project='your-project-id')

# クエリを実行してDataFrameに変換
query = """
    SELECT date, SUM(revenue) as daily_revenue
    FROM `your-project.dataset.sales`
    WHERE date BETWEEN '2026-01-01' AND '2026-04-30'
    GROUP BY date
    ORDER BY date
"""
df = client.query(query).to_dataframe()
print(df.head())

# pandas-gbqを使うとよりシンプル
df = pd.read_gbq(query, project_id='your-project-id')

まとめ

データエンジニアリングスキルとしてSQL+Pythonの組み合わせは必須です。特にウィンドウ関数・CTEを使いこなせると複雑な集計が効率的にできます。DS検定でもSQLは出題範囲に含まれており、実務でも直結するスキルです。まずはSQLiteかPostgreSQLのローカル環境で練習して、BigQueryなどのクラウドDBへと発展させましょう。

💼 ITエンジニア転職特化

自分らしく働けるエンジニア転職を目指すなら【strategy career】

年収1000万・残業月30時間以下・リモート可の求人多数

💼 無料で転職相談する →

※アフィリエイト広告を含みます

※本記事にはアフィリエイトリンクが含まれます。

コメント

タイトルとURLをコピーしました