つくる:月次集計表
このレッスンでできるようになること。この章で覚えた集計だけを組み合わせて、マイショップ・チェーンの月次集計表を1つの関数で作れるようになります。新しい文法は出てきません。
月次集計表に必要なものは、たいてい次の4つです。全体の総売上、店舗別の合計、店舗×月のマトリクス、そして売れ筋カテゴリのランキングです。総売上は規模を伝え、店舗別は比較を作り、マトリクスは推移を見せ、ランキングは中身を説明します。この4点が揃って初めて、報告を受けた人が状況を理解できます。
作るときの順番は、粗いものから細かいものへ進めるのが安全です。まず全体の合計を出し、それが想像どおりの桁かを確かめます。次に店舗別に分け、合計が全体と一致するかを見ます。ここが合わないなら、掃除の段階に取りこぼしがあります。集計は必ず足し算が閉じているかを確認しながら進めてください。
たとえば学習記録なら、全体の時間と科目別の時間を同じ表から求められます。
Python
total_minutes = int(study["時間"].sum())
by_subject = study.groupby("科目")["時間"].sum()組み立てるうえでの約束を3つ確認します。1つめは、同じ表から何度も集計してよいということです。groupby は元の df を変えないので、軸を変えて何度でも掛けられます。2つめは、pivot_table には aggfunc="sum" と fill_value=0 を必ず渡すことです。片方でも忘れると、平均になったり NaN が残ったりします。3つめは、返す直前にすべての数値を素の型へ直すことです。int64 が1つでも混ざると、正しい数字を出していても受け渡しの段階で落ちます。
表が完成したら、必ず声に出して読んでみてください。「渋谷店が全体の半分を占めていて、2月に落ちている」というように、表から1文が出てくるかどうかが完成の基準です。数字が並んでいるだけで何も言えないなら、軸の選び方を見直す余地があります。この読む練習が、7章の示唆出しにそのままつながります。
この総合演習で自分で作るのは、店舗別の合計と店舗×月の表の2つです。全体合計、最多カテゴリ、月列は準備済みです。_int_dict は Series を整数の辞書にし、_matrix_dict は店舗を外側、文字列の月を内側にした辞書にします。集計結果をそれぞれ by_store と table に入れれば、返却コードが4項目をまとめます。
要件
- 日付変換、月列、total、top_category、返却辞書は準備済みのコードを使う
- by_store に groupby("店舗")["金額"].sum() の結果を入れる
- matrix の元になる table を pivot_table で作り、aggfunc="sum" と fill_value=0 を渡す
- top_category は明細の件数が最多のカテゴリ。数量や金額の最多ではない
- 辞書化と整数化は _int_dict と _matrix_dict が行う