- データサイエンス100本ノックをやりきる会を作りました🎉
- こちらのSlack招待URLからご参加ください!!
- ぜひ一緒に励まし合いながら、データサイエンス100本ノックをやり切りたいと思っています!
Youtube
動画解説もしています。
問題
P-030: レシート明細データフレーム(df_receipt)に対し、店舗コード(store_cd)ごとに売上金額(amount)の標本分散を計算し、降順でTOP5を表示せよ。
解答
コード
df_receipt.groupby('store_cd').amount.var(ddof=0).reset_index().sort_values('amount', ascending=False).head(5)
出力
store_cd | amount | |
---|---|---|
28 | S13052 | 440088.7013 |
31 | S14011 | 306314.5582 |
42 | S14034 | 296920.081 |
5 | S13001 | 295431.9933 |
12 | S13015 | 295294.3611 |
解説
・PandasのDataFrame/Seriesです。
・同じ値を持つデータをまとめて処理し、同じ値を持つデータの合計や平均などを確認したい時に使用します。
・'groupby'は、同じ値や文字列を持つデータをまとめて、それぞれの同じ値や文字列に対して、共通の操作(合計や平均など)を行いたい時に使います。
・'.var'は、標本分散を算出するコードです。
・'<列名>.var(ddof=0)'は、標本分散を算出する際に'N-ddof(=0)'で割ることを指します。
・'ddof'は、'delta degrees of freedom'の略称です。詳細はWikipediaをご覧ください。
・'.reset_index()'は、'groupby'によってバラバラになったインデックス番号を0始まりの連番に振り直す操作を行いたい時に使います。
・'.sort_values('amount', ascending=False)'で'amount'を降順に表示しています。
※こちらのコードでも同じ結果を出力します。ddofはデフォルトで0なので、今回の場合は省略しても問題ありません。
コード
df_receipt.groupby('store_cd').agg({'amount':'var'}).reset_index().sort_values('amount', ascending=False).head(5)