Pythonで掲載コードを実行し、サンプルの出力結果を確認しました。
確認日:2026年10月19日(日本時間)
確認した内容と、確認していない範囲
確認した範囲
- 掲載全文を隔離した一時フォルダで実行
- 事前に記述した期待標準出力との完全一致
未確認・対象外
- GUI操作・実業務データ・大量データ・外部サービス
数式・コードの処理結果を確認した記録です。記事の全画面操作を確認したものではありません。Excel等のバージョンや検証方法の詳細は実行確認の記録(JSON)で参照できます。
できあがるもの
A 2026-10-15 4 2 300 B 2026-10-10 9 1 50。掲載の固定入力に対する標準出力です。
始める前に
- Python 3.11以降のローカル環境。標準ライブラリのみを使い、追加パッケージやネット接続は不要です。
- 架空の少量データを用いた作業です。本番のファイル・宛先・認証情報を入れず、入力と期待結果を見比べてから業務条件へ置き換えます。
入力例
A:10月1日100円、10月15日200円。B:10月10日50円。基準10月19日。
| 顧客 | 購入日 | 金額 |
|---|---|---|
| A | 10/01 | 100 |
| A | 10/15 | 200 |
| B | 10/10 | 50 |
掲載手順と同じ小さな入力例です。まずは、この値で試してください。
手順
- 新しい空の検証フォルダを作り、次のコードをUTF-8のrecipe.pyとして保存します。架空入力はコード内で固定しています。初回は値を変更せず、途中の型と並び順にも注目して読んでください。
- 掲載コード全文です。ネット送信・既存ファイルの編集は行わず、標準出力だけで結果を確認します。
from datetime import date from collections import defaultdict g=defaultdict(list) for u,d,v in [('A','2026-10-01',100),('A','2026-10-15',200),('B','2026-10-10',50)]: g[u].append((date.fromisoformat(d),v)) for u,rs in sorted(g.items()): last=max(d for d,_ in rs) print(u,last.isoformat(),(date(2026,10,19)-last).days,len(rs),sum(v for _,v in rs)) - 検証フォルダのターミナルでpython --versionを確認してから、python -X utf8 recipe.pyを実行します。エラーが出たら入力を上書きして隠さず、エラー箇所と条件を確かめます。
- 標準出力を次の期待値と照合します。境界条件を変える場合は検証用の別コピーにし、計算の単位・同値の場合の優先順位・欠損の扱いを先に決めてから使います。 A 2026-10-15 4 2 300 B 2026-10-10 9 1 50
できあがる結果を表で確認する できあがる結果 顧客 最終購入日 経過日 頻度 金額 A 2026-10-15 4 2 300 B 2026-10-10 9 1 50 顧客ごとの最終購入日、注文件数、合計金額、基準日までの経過日数を一つの行にします。ランク付け前のRFM元表を作る処理です。。図の表はこの記事の架空入力と処理結果を対応させています。
期待結果と照合する
A 2026-10-15 4 2 300 B 2026-10-10 9 1 50。掲載の固定入力に対する標準出力です。
まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。
うまくいかないとき
- 注文IDが重複した入力では頻度が増えます。キャンセルや返品を含めるかは集計前に決めてください。
- 例と違う値や欠損が来た場合の扱いは業務側で決めます。結果を原本へ自動で書き戻す構成にせず、確認用の出力として扱ってください。
止める・元に戻す
実行を終了して、今回新しく作った検証用プログラムまたは検証フローだけを片付けます。例は画面や実行履歴への出力のみで、既存データを変更せず外部へも送信しません。
公式資料・対応範囲
参照日:2026-10-19。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。