なぜ結合が要るか
このレッスンでできるようになること。売上明細に商品の情報が足りない理由を説明でき、足りない情報がどこにあるかをコードで確かめられるようになります。
マイショップ・チェーンの売上CSVには、売上日・店舗・商品名・カテゴリ・数量・金額しか入っていません。仕入原価も定価も入っていないので、このままでは利益を計算できません。分析する側からすると不便に見えますが、これは設計としては正しい形です。もし明細の1行ごとに定価を書いていたら、値上げのたびに過去の全明細を書き換えることになります。書き換え漏れがあれば、同じ商品が2つの定価を持つことになります。
だから商品の情報は商品マスタという別の表に1回だけ持ち、明細からは商品名で参照します。1つの事実を1か所にだけ置くこの考え方が正規化です。SQL入門やDB設計で扱った内容と同じで、pandas でも事情は変わりません。
Python
print(sales.columns.tolist())
print(products.columns.tolist())分析の最初にやるべきことは、手元の表にどの列があり、どの列が両方に共通しているかを確かめることです。共通している列が、2つの表をつなぐ鍵になります。今回の題材では商品名がそれにあたります。
もう1つ確かめておきたいのが、明細に出てくる商品名がマスタにすべて載っているかどうかです。載っていない商品名があると、あとで結合したときにその行が消えるか、定価が空になります。廃番になった商品や、表記ゆれが残っていると起こります。3章で表記ゆれを整えたのは、まさにこの場面のためでした。結合の前にこの照合をしておくと、あとで数字が合わない原因を探し回らずに済みます。
今回は結合そのものはまだ行いません。足りない情報が何で、どの鍵でつながるのかを、コードで確かめるところまでを扱います。次のレッスンで実際につなぎます。
要件
- 共通する列は両方の columns から求める
- 明細にあってマスタに無い商品名を探す
- リストはどちらも昇順に並べ、同じ商品名は1つにまとめる
- 行数は int で返す