見せる形に整える
このレッスンでできるようになること。手元で動いたコードを、人に渡せる状態まで清書できるようになります。
分析中のコードは、たいてい散らかっています。試した集計、消し忘れた print、途中で名前を変えた変数。自分では読めますが、他人には読めません。そして1ヶ月後の自分も他人です。清書は、見た目を整える作業ではなく、再現できる状態にする作業です。
清書でやることは4つあります。
1つめは、処理を関数に分けることです。読み込みと掃除、集計、図の作成、示唆の組み立て。この単位で関数にしておくと、どこを直せばよいかがすぐ分かります。1つの関数に全部詰め込むと、集計を1つ変えたいだけで全体を読み直すことになります。
2つめは、上から順に実行すれば結果が出る形にすることです。試行錯誤のあいだは順番が前後しますが、渡すときは必ず上から下へ一方向に流れるようにします。途中のセルを飛ばすと動かないコードは、渡された人が最初につまずきます。
3つめは、数字を1か所で計算することです。同じ合計を3か所で計算していると、片方だけ直したときに食い違います。1回計算して変数に入れ、その変数を参照します。
4つめは、判断をコメントに残すことです。何をしたかはコードを読めば分かりますが、なぜそうしたかは書かないと消えます。「金額が空欄の3件は返品と判断し除外」の一行が、後から見たときに最も価値を持ちます。
Python
def load(csv_text):
df = pd.read_csv(StringIO(csv_text))
# 金額が空欄の行は返品扱いのため除外する
return df.dropna(subset=["金額"])清書したら、最後に自分で通しで動かします。上から順に流して、エラーが出ず、レポートに書いた数字と一致することを確かめます。ここまでやって、初めて渡せる状態です。「私の環境では動きました」は、渡す側の言葉としては足りません。
この演習では、掃除から集計までを小さな関数に分け、それを呼び出すだけの本体を書きます。分けて書くと、それぞれが短くなって読みやすくなることを実感してください。
要件
- 金額が空欄(NaN)の行を除いてから集計する
- dropped は除いた行数、rows は残った行数
- by_store は掃除後の表から groupby で求める
- by_store の値の合計が掃除後の総売上と一致すること
- 数値はすべて int に直して返す
入出力例
polish_pipeline("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-01-06,横浜店,鉄のフライパン,調理器具,1,
2026-02-03,渋谷店,鋳物ホーロー鍋,調理器具,1,16800
") → {"by_store":{"渋谷店":20400},"dropped":1,"note":"金額が空欄の 1 件を除外しました","rows":2}
polish_pipeline("売上日,店舗,商品名,カテゴリ,数量,金額
2026-03-01,大宮店,積み重ね収納ボックス,収納,3,4500
2026-03-02,横浜店,布製収納バスケット,収納,2,3000
") → {"by_store":{"大宮店":4500,"横浜店":3000},"dropped":0,"note":"金額が空欄の 0 件を除外しました","rows":2}