データサイエンス 100 本ノックとは

The-Japan-DataScientist-Society/100knocks-preprocess: データサイエンス 100 本ノック(構造化データ加工編)

Google Colab で データサイエンス 100 本ノックをするにあたって

以下の ipynb ファイルを使用させていただきました。

noguhiro2002/100knocks-preprocess_ForColab-AzureNotebook: データサイエンス 100 本ノック(構造化データ加工編)For Azure_Notebook/Google_Colabo

実行ファイル

データサイエンス 100 本ノック by tomowarkar

021

P-021: レシート明細データフレーム(df_receipt)に対し、件数をカウントせよ。

len(df_receipt) #> 104681

022

P-022: レシート明細データフレーム(df_receipt)の顧客 ID(customer_id)に対し、ユニーク件数をカウントせよ。

df_receipt.customer_id.nunique() #> 8307

pandas.Series.nunique を使います。

023

P-023: レシート明細データフレーム(df_receipt)に対し、店舗コード(store_cd)ごとに売上金額(amount)と売上数量(quantity)を合計せよ。

df_receipt[["store_cd", "amount", "quantity"]]\
  .groupby("store_cd").sum().head(10)
          amount  quantity
store_cd
S12007    638761      2099
S12013    787513      2425
S12014    725167      2358
S12029    794741      2555
S12030    684402      2403
S13001    811936      2347
S13002    727821      2340
S13003    764294      2197
S13004    779373      2390
S13005    629876      2004

024

P-024: レシート明細データフレーム(df_receipt)に対し、顧客 ID(customer_id)ごとに最も新しい売上日(sales_ymd)を求め、10 件表示せよ。

df_receipt[["customer_id", "sales_ymd"]]\
  .groupby("customer_id").max().head(10)
                sales_ymd
customer_id
CS001113000004   20190308
CS001114000005   20190731
CS001115000010   20190405
CS001205000004   20190625
CS001205000006   20190224
CS001211000025   20190322
CS001212000027   20170127
CS001212000031   20180906
CS001212000046   20170811
CS001212000070   20191018

025

P-025: レシート明細データフレーム(df_receipt)に対し、顧客 ID(customer_id)ごとに最も古い売上日(sales_ymd)を求め、10 件表示せよ。

df_receipt[["customer_id", "sales_ymd"]]\
  .groupby("customer_id").min().head(10)
                sales_ymd
customer_id
CS001113000004   20190308
CS001114000005   20180503
CS001115000010   20171228
CS001205000004   20170914
CS001205000006   20180207
CS001211000025   20190322
CS001212000027   20170127
CS001212000031   20180906
CS001212000046   20170811
CS001212000070   20191018

026

P-026: レシート明細データフレーム(df_receipt)に対し、顧客 ID(customer_id)ごとに最も新しい売上日(sales_ymd)と古い売上日を求め、両者が異なるデータを 10 件表示せよ。

df_receipt.groupby("customer_id")\
  .agg(sales_ymd_max=("sales_ymd", "max"), sales_ymd_min=("sales_ymd", "min"))\
  .query("sales_ymd_max != sales_ymd_min")\
  .head(10)
                sales_ymd_max  sales_ymd_min
customer_id
CS001114000005       20190731       20180503
CS001115000010       20190405       20171228
CS001205000004       20190625       20170914
CS001205000006       20190224       20180207
CS001214000009       20190902       20170306
CS001214000017       20191006       20180828
CS001214000048       20190929       20171109
CS001214000052       20190617       20180208
CS001215000005       20181021       20170206
CS001215000040       20171022       20170214

027

P-027: レシート明細データフレーム(df_receipt)に対し、店舗コード(store_cd)ごとに売上金額(amount)の平均を計算し、降順で TOP5 を表示せよ。

df_receipt.groupby("store_cd").agg({"amount":"mean"})\
  .sort_values("amount", ascending=False).head(5)
              amount
store_cd
S13052    402.867470
S13015    351.111960
S13003    350.915519
S14010    348.791262
S13001    348.470386

028

P-028: レシート明細データフレーム(df_receipt)に対し、店舗コード(store_cd)ごとに売上金額(amount)の中央値を計算し、降順で TOP5 を表示せよ。

df_receipt.groupby("store_cd").agg({"amount":"median"})\
  .sort_values("amount", ascending=False).head(5)
          amount
store_cd
S13052       190
S14010       188
S14050       185
S14040       180
S13003       180

029

P-029: レシート明細データフレーム(df_receipt)に対し、店舗コード(store_cd)ごとに商品コード(product_cd)の最頻値を求めよ。

df_receipt.groupby("store_cd")\
  .agg(product_cd_mode=("product_cd", lambda x: x.mode()[0])).head(10)
         product_cd_mode
store_cd
S12007        P060303001
S12013        P060303001
S12014        P060303001
S12029        P060303001
S12030        P060303001
S13001        P060303001
S13002        P060303001
S13003        P071401001
S13004        P060303001
S13005        P040503001

030

P-030: レシート明細データフレーム(df_receipt)に対し、店舗コード(store_cd)ごとに売上金額(amount)の標本分散を計算し、降順で TOP5 を表示せよ。

df_receipt.groupby("store_cd")\
  .agg(sample_var=("amount", lambda x: x.var(ddof=0)))\
  .sort_values("sample_var", ascending=False).head(5)
             sample_var
store_cd
S13052    440088.701311
S14011    306314.558164
S14034    296920.081011
S13001    295431.993329
S13015    295294.361116

Python pandas の算術演算 / 集約関数 / 統計関数まとめ - StatsFragments