これはデータサイエンティストの卵がわけもわからないまま100本ノックを行っていく奮闘録である。
完走できるか謎。途中で消えてもQiitaにあげてないだけと思ってください。
ネタバレも含みますのでやろうとされている方は注意
ココでグダグダ書いているのはネタバレ防止に1ページ分くらいの尺を稼いでいるからです()
途中で飽きたのでDockerの中身を掘り掘りしてました。
コレは見づらい!この書き方は危険!等ありましたら教えていただきたいです。心にダメージを負いながら糧とさせていただきます。
今回は23~28まで。
[前回]19~22
[目次付き初回]
#23本目
df=df_receipt
df=df.groupby('store_cd').agg({'amount':'sum','quantity':'sum'}).reset_index()
df.head(10)
はい、いきなり新しい書き方来ました。
参考ページを見るに、データの集計に使えるらしい。
Excelでも同じみなsum、min、maxはわかるが思わずaveと書いてしまう平均……
stdとか受験生の頃にお世話になって以降使ってないけどこれからお世話になるんだろうなぁ……
min':最小値
'max':最大値
'mean':平均値
'median':中央値
'std':標準偏差
あと、一見だとわかりにくいですが
df.groupby('A').agg({'B': ['min', 'max'], 'C': 'sum'})
の部分で「A」毎の「B」の最大と最小 という書き方が載っています。
ただ、この書き方をすると階層が出来てしまいます。参考書には便利とあるがコレがとても鬱陶しい
##余談
df=df_receipt
df=df.groupby('customer_id').agg({'sales_ymd':['max','min']})
df['sales_ymd']#'sales_ymd'のインデックスが消えて'max''min'の列が射影
df['sales_ymd'][['max']]#'max'列のみ射影
階層内を参照したいときこうしないといけないのがとてもめんどくさい
23~27で四苦八苦したので一応載せておきます
#24,25本目
df=df_receipt
df.groupby('customer_id').agg({'sales_ymd':'max'}).reset_index().head(10)
23のmaxバージョンですね(というか余談はコレを書き換えた)
'''模範解答'''
df_receipt.groupby('customer_id').agg({'sales_ymd':'min'}).head(10)
こっちは模範解答にしておきます。
最近カンニングしないと分からないか簡単なものが多かったので模範解答が静かだった。
#26本目
P-026: レシート明細データフレーム(df_receipt)に対し、顧客ID(customer_id)ごとに最も新しい売上日(sales_ymd)と古い売上日を求め、両者が異なるデータを10件表示せよ。
df=df_receipt
df=df.groupby('customer_id').agg({'sales_ymd':['max','min']}).reset_index()
df=df[df['sales_ymd']['max'] != df['sales_ymd']['min']]
df.head(10)
'''模範解答'''
df_tmp = df_receipt.groupby('customer_id').agg({'sales_ymd':['max','min']}).reset_index()
df_tmp.columns = ["_".join(pair) for pair in df_tmp.columns]
df_tmp.query('sales_ymd_max != sales_ymd_min').head(10)
なんだこの模範解答の2行目は……
階層を消してるのは分かるが。
これをした自分の出力結果が
customer_id | sales_ymd | |
---|---|---|
max | min |
こんな感じになるのに対して
customer_id_ | sales_ymd_max | sales_ymd_min |
---|
こうなってきれいに見えるのは分かるけどやっぱり階層が邪魔
#27,28本目
df=df_receipt
df=df.groupby('store_cd').agg({'amount':['mean']}).reset_index()
df.columns=['store_id','amount_mean']
df=df.sort_values('amount_mean',ascending= False)
df.head(5)
'''模範解答'''
df_receipt.groupby('store_cd').agg({'amount':'mean'}).reset_index().sort_values('amount', ascending=False).head(5)
df=df_receipt
df=df.groupby('store_cd').agg({'amount':['median']}).reset_index()
df.columns=['store_id','amount_median']
df=df.sort_values('amount_median',ascending= False)
df.head(5)
'''模範解答'''
df_receipt.groupby('store_cd').agg({'amount':'median'}).reset_index().sort_values('amount', ascending=False).head(5)
27と28は並び替えが入ったものですね。ave
と書いたのは内緒
ここまでは参考サイトに載っていたものなのである程度スムーズにいきました
問題は次回です。
#今回はここまで
次回、数ⅡBでコケた筆者に数学の暴力が襲う!
模試?プログラミングで点数稼いでたわ!