Python | 標準ライブラリ(csv + pathlib + collections + datetime)だけ を使って、CSVファイルを「日付ごとに集計」する実践例

Python
スポンサーリンク

ここでは 標準ライブラリ(csv + pathlib + collections + datetime)だけ を使って、CSVファイルを「日付ごとに集計」する実践例を紹介します。


想定データ(sales.csv)

日付,商品,数量,金額
2025-11-01,りんご,10,3000
2025-11-01,みかん,5,2000
2025-11-02,りんご,7,2100
2025-11-02,バナナ,4,1200
2025-11-03,みかん,12,4800

コード例:日付ごとの売上集計

import csv
from pathlib import Path
from collections import defaultdict
from datetime import datetime

csv_path = Path.home() / "Documents" / "sales.csv"

# 日付ごとの集計用辞書
summary = defaultdict(lambda: {"数量": 0, "金額": 0})

with csv_path.open("r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        # 日付を正規化(datetimeに変換してからdateにする)
        date = datetime.strptime(row["日付"], "%Y-%m-%d").date()
        qty = int(row["数量"])
        price = int(row["金額"])
        summary[date]["数量"] += qty
        summary[date]["金額"] += price

# 結果を日付順に表示
for date, data in sorted(summary.items()):
    print(f"{date}: 数量={data['数量']}, 金額={data['金額']}")
Python

出力例

2025-11-01: 数量=15, 金額=5000
2025-11-02: 数量=11, 金額=3300
2025-11-03: 数量=12, 金額=4800

応用例1: 曜日ごとの集計

weekday_summary = defaultdict(int)

for date, data in summary.items():
    weekday = date.strftime("%A")  # Monday, Tuesday...
    weekday_summary[weekday] += data["金額"]

for wd, total in weekday_summary.items():
    print(f"{wd}: 売上合計={total}")
Python

応用例2: 集計結果をCSVに保存

output_path = csv_path.parent / "daily_summary.csv"

with output_path.open("w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["日付", "数量合計", "金額合計"])
    for date, data in sorted(summary.items()):
        writer.writerow([date.isoformat(), data["数量"], data["金額"]])

print("日付ごとの集計結果を保存しました:", output_path)
Python

まとめ

  • datetime.strptime で日付を正規化して扱うと便利
  • defaultdict で日付ごとの合計を簡単に集計
  • 応用すれば「曜日別」「月別」などの集計も可能

👉 次のステップとしては、「月ごとの売上推移を表形式にまとめる」か、「商品ごと×日付ごとのクロス集計」をやってみると、さらに実務的になります。

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました