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[month][product] += price

# 月ごとにランキングを表示
for month, products in sorted(summary.items()):
    print(f"=== {month} の売上ランキング ===")
    # 金額で降順ソート
    ranking = sorted(products.items(), key=lambda x: x[1], reverse=True)
    for rank, (product, total) in enumerate(ranking, start=1):
        print(f"{rank}位: {product} - {total}円")
    print()
Python

出力例

=== 2025-11 の売上ランキング ===
1位: りんご - 3000円
2位: みかん - 2000円

=== 2025-12 の売上ランキング ===
1位: みかん - 4800円
2位: りんご - 2100円
3位: バナナ - 1200円

=== 2026-01 の売上ランキング ===
1位: りんご - 900円

応用例

  • 数量ベースでランキングを出す場合は「金額」ではなく「数量」を集計
  • トップNだけ表示したい場合は ranking[:3] のようにスライス
  • CSVに保存してExcelでグラフ化することも可能

まとめ

  • defaultdict で「月 × 商品」の売上を集計
  • sorted(..., reverse=True) でランキングを作成
  • 応用すれば数量ベースやトップN抽出も簡単

👉 次の発展としては、「月ごとに売上推移グラフを描く」か、「年間トータルランキングを出す」のどちらかに進めるとさらに実務的になります。

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