自由分析
このレッスンでできるようになること。マイショップ以外のデータにも、これまでの手順をそのまま当てはめられるようになります。
ここまでずっと同じ売上CSVを扱ってきました。同じデータだからこそ手順に集中できたわけですが、実務で出会うのは初めて見るデータです。列名も違えば、粒度も違います。それでも、やることは変わりません。
手順を思い出してください。読み込む、形を見る、掃除する、集計する、図にする、示唆を出す。この6段は、家計簿でも、アクセスログでも、部活の記録でも同じです。変わるのは列の名前だけです。
たとえば Python 入門で作った家計簿のCSVを持ってきたとします。列は 日付 と 費目 と 金額 かもしれません。マイショップの 売上日 が 日付 に、カテゴリ が 費目 に対応します。店舗にあたる軸が無ければ、その分の集計は省きます。逆に 支払い方法 のような列があれば、それが新しい軸になります。
Python
df = pd.read_csv(StringIO(csv_text))
print(df.columns.tolist())
print(df.dtypes)初めてのデータで最初にやるのは、この2行です。どんな列があり、それぞれが何型で読まれたか。金額のはずの列が object 型なら、3章でやったように「1,200円」のような文字が混ざっています。日付のはずの列が object なら to_datetime が要ります。この確認を飛ばして集計に進むと、必ずどこかで詰まります。
自由分析でやりがちな失敗が1つあります。データを見る前に「こういう結果が出るはずだ」と決めてしまうことです。自分のデータほど思い込みが強いので、期待した結論に合う切り口だけを探してしまいます。防ぐには、集計する前に問いを1つ書き、その問いに対して「はい」でも「いいえ」でも受け入れると決めておくことです。
この演習では、列名が違うデータを受け取って、指定された軸で集計する関数を書きます。列名を引数で受け取る形にしておくと、同じ関数がどのデータにも使えます。この汎用化の感覚が、次のレッスンの清書につながります。
要件
- 列名は sorted() で昇順に並べる
- group_column と value_column が両方あるときだけ集計する
- 集計は groupby(group_column)[value_column].sum() で行う
- 合計は int に直す
- 指定された列が無いときは totals を空、top を空文字にする