はじめに
業務データはしばしば複数のシステムやフォーマットに散在しています。Excel、CSV、データベース、Web APIなど、データソースが異なると集計や分析は一気に複雑になります。
本記事では、Python と Pandas を使い、SQL データベースも活用しながら、異なるデータソースをまとめて効率的に集計する方法を解説します。
1. データソースの準備
今回は以下の3つのデータを例にします。
- CSVファイル:売上データ(
sales.csv
) - Excelファイル:商品情報(
products.xlsx
) - SQLデータベース:顧客情報(SQLiteを例に使用)
CSVデータ例 (sales.csv)
order_id | product_id | quantity | date |
---|---|---|---|
1 | 101 | 2 | 2025-08-01 |
2 | 102 | 1 | 2025-08-02 |
Excelデータ例 (products.xlsx)
product_id | product_name | price |
---|---|---|
101 | ペン | 100 |
102 | ノート | 200 |
SQLデータ例 (customers.db)
CREATE TABLE customers (
customer_id INTEGER PRIMARY KEY,
name TEXT,
order_id INTEGER
);
2. Pythonでデータを読み込む
まずは Pandas と SQLite3 をインポートしてデータを読み込みます。
import pandas as pd
import sqlite3
# CSV読み込み
sales_df = pd.read_csv("sales.csv")
# Excel読み込み
products_df = pd.read_excel("products.xlsx")
# SQLiteデータベース接続
conn = sqlite3.connect("customers.db")
customers_df = pd.read_sql_query("SELECT * FROM customers", conn)
3. データの結合
Pandas の merge
を使うことで異なるデータソースでも結合可能です。
# 売上データと商品情報を結合
sales_products_df = pd.merge(sales_df, products_df, on="product_id", how="left")
# 顧客情報を結合
full_df = pd.merge(sales_products_df, customers_df, on="order_id", how="left")
print(full_df)
結合後のイメージ
order_id | product_id | quantity | date | product_name | price | customer_id | name |
---|---|---|---|---|---|---|---|
1 | 101 | 2 | 2025-08-01 | ペン | 100 | 1 | 佐藤 |
2 | 102 | 1 | 2025-08-02 | ノート | 200 | 2 | 鈴木 |
4. 集計処理
例えば、「顧客別の総購入金額」を求める場合は以下のように計算できます。
# 総購入金額カラムを追加
full_df["total_amount"] = full_df["quantity"] * full_df["price"]
# 顧客別集計
customer_summary = full_df.groupby("name")["total_amount"].sum().reset_index()
print(customer_summary)
出力例:
name | total_amount |
---|---|
佐藤 | 200 |
鈴木 | 200 |
5. SQLを活用した集計
Pandas だけでなく、SQL クエリでも集計可能です。
query = """
SELECT c.name, SUM(s.quantity * p.price) as total_amount
FROM sales s
JOIN products p ON s.product_id = p.product_id
JOIN customers c ON s.order_id = c.order_id
GROUP BY c.name
"""
sql_summary = pd.read_sql_query(query, conn)
print(sql_summary)
6. 実務での応用ポイント
- データ型の統一:日付や文字列型の不一致に注意
- 結合方法の選択:
inner
/left
/right
/outer
を状況に応じて使い分け - パフォーマンス改善:大規模データはSQLで集計してからPandasで処理すると効率的
まとめ
Python × Pandas × SQL を活用すれば、複数データソースをまとめて集計することが容易になります。
業務データが散在していても、統合・集計・分析まで一気通貫で処理できるのが大きなメリットです。
次のステップとして、自動化スクリプト化や BIツールとの連携 を組み合わせれば、さらに効率的な業務フローを構築できます。