LoginSignup
0
1

More than 1 year has passed since last update.

データサイエンス100本ノック 21~30

Posted at

データサイエンス100本ノック(構造化データ加工編)

GitHubにColaboratoryが用意されているので、自分のドライブにコピーするだけで簡単に始められます。

※協会が出している解答の書き方と異なる箇所もありますが、出力としては同じになっています。協会の解答はGitHubから確認してください。解説本も販売されています。

解答

P021

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

P021
len(df_receipt)

P022

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

P022
len(df_receipt['customer_id'].unique())

P023

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

P023
df_receipt.groupby('store_cd').agg({'amount':'sum','quantity':'sum'})

P024

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

P024
df_receipt.groupby('customer_id').agg({'sales_ymd':'max'}).head(10)

P025

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

P025
df_receipt.groupby('customer_id').agg({'sales_ymd':'min'}).head(10)

P026

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

P026
tmp = df_receipt.groupby('customer_id').agg({'sales_ymd':['max','min']}).reset_index()
tmp.columns.droplevel(1)
tmp.columns = ['customer_id', 'sales_ymd_max', 'sales_ymd_min']
tmp.query('sales_ymd_max != sales_ymd_min').head(10)

マルチインデックスのDataFrameで考えます。
DataFrame.droplevel(level, axis=0)で列名をいじれます。

P027

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

P027
df_receipt.groupby('store_cd').agg({'amount':'mean'}).reset_index().sort_values('amount',ascending = False).rename(columns ={'amount':'amount_mean'}).head()

P028

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

P028
df_receipt.groupby('store_cd').agg({'amount':'median'}).reset_index().sort_values('amount',ascending = False).rename(columns ={'amount':'amount_median'}).head()

P029

レシート明細データ(df_receipt)に対し、店舗コード(store_cd)ごとに商品コード(product_cd)の最頻値を求め、10件表示させよ。

P029
df_receipt.groupby('store_cd')['product_cd'].apply(lambda x:x.mode()).reset_index().head(10)

DataFrame.mode()を使おうとしたのですが、groupbyを使ってるとエラーになります。残念ながらmode()は使える組み込み関数一覧にありませんでしたが、mean()、count()あたりは使えます。

P030

レシート明細データ(df_receipt)に対し、店舗コード(store_cd)ごとに売上金額(amount)の分散を計算し、降順で5件表示せよ。

P030
df_receipt.groupby('store_cd').agg({'amount':'var'}).reset_index().sort_values('amount',ascending = False).rename(columns ={'amount':'amount_var'}).head()
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1