🐍
(学習ログ)Python010:複数CSVの結合と売上集計グラフ化
1. はじめに
-
この記事の目的
本記事では、複数のCSVファイルを読み込み、データを結合・加工し、最後に売上をグラフ化する一連の流れを学びます。 -
この記事の概要
- CSVファイルを
pandasで読み込む方法 -
mergeを使ったデータ結合の方法 - 列の計算や日付処理の基本
- ピボットテーブルとグラフ描画の実装
- CSVファイルを
2. サンプルコード
from ast import increment_lineno
import pandas as pd
# --- トランザクションデータを結合 ---
sample_transaction1 = pd.read_csv('001_サンプル/sample_transaction_data1.csv')
sample_transaction2 = pd.read_csv('001_サンプル/sample_transaction_data2.csv')
sample_transaction = pd.concat([sample_transaction1, sample_transaction2], ignore_index=True)
# --- トランザクション詳細を結合 ---
sample_transaction_detail1 = pd.read_csv('001_サンプル/sample_transaction_detail1.csv')
sample_transaction_detail2 = pd.read_csv('001_サンプル/sample_transaction_detail2.csv')
sample_transaction_detail = pd.concat([sample_transaction_detail1, sample_transaction_detail2], ignore_index=True)
# --- トランザクションと詳細を結合 ---
sample_join_data = pd.merge(
sample_transaction_detail,
sample_transaction[["transaction_id", "payment_date", "customer_id"]],
on='transaction_id', how="left"
)
# --- 顧客情報を結合 ---
sample_file = pd.read_csv('001_サンプル/sample_file.csv')
sample_join_data = pd.merge(sample_join_data, sample_file, on="customer_id", how="left")
# --- 商品情報を結合 ---
sample_item_list = pd.read_csv('001_サンプル/sample_item_list.csv')
sample_join_data = pd.merge(sample_join_data, sample_item_list, on="item_id", how="left")
# --- 売上計算 ---
sample_join_data["price"] = sample_join_data["quantity"] * sample_join_data["item_price"]
# --- 日付を加工 ---
sample_join_data["payment_date"] = pd.to_datetime(sample_join_data["payment_date"])
sample_join_data["payment_month"] = sample_join_data["payment_date"].dt.strftime("%Y%m")
# --- ピボットテーブルで集計 ---
sample_graph_data = pd.pivot_table(
sample_join_data,
index='payment_month',
columns='item_name',
values='price',
aggfunc='sum'
)
# --- グラフ描画 ---
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(list(sample_graph_data.index), sample_graph_data['PC-A'], label='PC-A')
plt.plot(list(sample_graph_data.index), sample_graph_data['PC-B'], label='PC-B')
plt.plot(list(sample_graph_data.index), sample_graph_data['PC-C'], label='PC-C')
plt.plot(list(sample_graph_data.index), sample_graph_data['PC-D'], label='PC-D')
plt.plot(list(sample_graph_data.index), sample_graph_data['PC-E'], label='PC-E')
plt.legend()
行ごとの解説
-
pd.read_csv(...): CSVファイルを読み込み、DataFrameを作成します。 -
pd.concat([...]): 複数ファイルを縦方向に結合します。 -
pd.merge(...): 共通キー(例:transaction_id)でテーブルを結合します。 -
["price"] = quantity * item_price: 新しい列を計算して追加します。 -
pd.to_datetime: 文字列を日付型に変換します。 -
.dt.strftime("%Y%m"): 年月の形に整形します。 -
pd.pivot_table: クロス集計(売上×商品×月)を作成します。 -
plt.plot(...): 折れ線グラフを描画します。
実行結果例
ピボットテーブル例:
| payment_month | PC-A | PC-B | PC-C | PC-D | PC-E |
|---|---|---|---|---|---|
| 202401 | 300000 | 150000 | 120000 | 90000 | 110000 |
| 202402 | 250000 | 180000 | 130000 | 95000 | 120000 |
| 202403 | 320000 | 160000 | 140000 | 97000 | 100000 |
グラフ例:
| ■PC-A
売 | ■PC-B
上 | ■PC-C
| ■PC-D
額 | ■PC-E
+---------------------------------
202401 202402 202403
月
3. エラーと確認のポイント
代表的なエラー文
-
FileNotFoundError: [Errno 2] No such file or directory
→ パスが間違っているか、ファイルが存在しません。 -
KeyError: 'item_name'
→ 結合後のDataFrameに指定した列が存在しないときに出ます。
よく使う確認メソッドや出力例
sample_join_data.shape
# 出力例: (1200, 10) → 行数と列数を確認できる
sample_join_data.columns
# 出力例: Index(['transaction_id','payment_date','customer_id','item_id','quantity','item_price','price'], dtype='object')
sample_join_data.head()
# 出力例: 先頭5行のデータを確認
4. まとめ
- 複数のCSVファイルを
pandasで結合し、1つのデータにまとめる方法を学んだ。 -
mergeとconcatの違い、日付処理や新しい列の追加方法を理解した。 -
pivot_tableとmatplotlibを組み合わせて、売上の推移を可視化できるようになった。
Discussion