Python | 標準ライブラリ(csv + pathlib + collections + datetime)だけ を使って、「商品ごとに売上トップの月を抽出」する実践例

Python
スポンサーリンク

ここでは 標準ライブラリ(csv + pathlib + collections + datetime)だけ を使って、
「商品ごとに売上トップの月を抽出」する実践例を紹介します。


想定データ(sales.csv)

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

コード例:商品ごとに売上トップの月を抽出

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

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

# 集計用: {商品: {月: 金額合計}}
summary = defaultdict(lambda: defaultdict(int))

with csv_path.open("r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        date = datetime.strptime(row["日付"], "%Y-%m-%d")
        month = date.strftime("%Y-%m")  # "2025-11" のように月単位にまとめる
        product = row["商品"]
        price = int(row["金額"])
        summary[product][month] += price

# 商品ごとに売上トップの月を抽出
for product, months in summary.items():
    # 最大金額の月を探す
    top_month, top_sales = max(months.items(), key=lambda x: x[1])
    print(f"{product}: 売上トップの月 = {top_month}, 金額 = {top_sales}")
Python

出力例

りんご: 売上トップの月 = 2025-11, 金額 = 3000
みかん: 売上トップの月 = 2025-12, 金額 = 4800
バナナ: 売上トップの月 = 2025-12, 金額 = 1200

応用例

  • 数量ベースでトップ月を抽出したい場合は price の代わりに 数量 を集計
  • 複数のトップ月(同額の場合)を抽出したい場合は max の代わりにループで比較
  • ランキング形式にして「各商品ごとの月別売上順位」を出力することも可能

まとめ

  • defaultdict で「商品 × 月」の売上を集計
  • max() を使って各商品のトップ月を抽出
  • 応用すれば数量ベースやランキング形式にも拡張可能

👉 次の発展としては、「月ごとに全商品の売上ランキングを出す」か、「商品ごとに売上推移グラフを描く」のどちらかをやってみるとさらに実務的になります。

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