【問35~問37】データサイエンス100本ノック 解説

※アフィリエイト広告を利用しています。

ファイル

はじめに

問35~問37のコードの説明を初心者や初学者でもわかるような方法でまとめました。

データサイエンス100本ノックのはじめ方は、以下のブログ記事を参考にしてください。

>>【Google Colabはじめ方】データサイエンス100本ノックーデータサイエンティスト協会

問35 レシート明細データフレーム(df_receipt)に対し、顧客ID(customer_id)ごとに売上金額(amount)を合計して全顧客の平均を求め、平均以上に買い物をしている顧客を抽出せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。なお、データは10件だけ表示させれば良い。

レシート明細データフレーム(df_receipt)に対し、顧客ID(customer_idごとに売上金額(amount)合計して全顧客の平均を求めるには、問34の処理を使います。

#全顧客の平均
df_amount_mean = df_receipt.query('not customer_id.str.startswith("Z")',engine='python').groupby('customer_id').amount.sum().mean()

次に、顧客ID(customer_id)ごとに売上金額(amount)を合計した全顧客のデータを作ります。

金額(amount)を合計なので、sum()、インデックスがないので、.reset_index()

を用います。

#顧客ごとの購入金額
df_amount_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()

平均以上に買い物をしている顧客を抽出し、これを10件表示します。

df_amount_sum[df_amount_sum['amount']>=df_amount_mean].head(10)

なお、こちらでも同じ結果になります。

df_amount_mean = df_receipt.query('not customer_id.str.startswith("Z")',engine='python').groupby('customer_id').amount.sum().mean()
df_amount_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()
df_amount_sum[['customer_id','amount']].query('amount>=2547').head(10)

問36 レシート明細データフレーム(df_receipt)と店舗データフレーム(df_store)を内部結合し、レシート明細データフレームの全項目と店舗データフレームの店舗名(store_name)を10件表示させよ。

レシート明細データフレーム(df_receipt)と店舗データフレーム(df_store)を内部結合をする必要があります。

内部結合とは、2つのデータフレームに共通するカラムが存在した場合、そのカラムの値を軸に結合する方式で、pd.merge()を使用します。

以下のように、今回の共通するカラムは’store_cd’です。

レシート明細データフレームの全項目と店舗データフレームの店舗名(store_name)を10件表示するので、( )内の、第1引数はレシート明細データフレームの全項目であるdf_receipt第2引数には、店舗データフレームの店舗名’store_name’共通カラムである‘store_cd’とします。

第3引数には、内部結合なので、how=’inner’とし、第4引数には、共通するカラムである、store_cdを用いるので、on=’store_cd’とします。

これを10件表示なので、.head(10)を最後に書きます。

pd.merge(df_receipt,df_store[['store_name','store_cd']],how='inner',on='store_cd').head(10)

なお、短縮版としてこちらでも同じ結果になります。

pd.merge(df_receipt,df_store[['store_cd','store_name']]).head(10)

問37 商品データフレーム(df_product)とカテゴリデータフレーム(df_category)を内部結合し、商品データフレームの全項目とカテゴリデータフレームの小区分名(category_small_name)を10件表示させよ。

商品データフレーム(df_product)とカテゴリデータフレーム(df_category)を内部結合する必要があります。

問36でやったように内部結合するには共通するカラムを利用する必要がありますが、df_productdf_categoryには、下記のように複数共通するカラムがあります。

この数であれば、目視で確認できますが、カラムがたくさんある場合は、setを用いて共通するカラムを抽出することができます。

df_product_columns=df_product.columns
df_category_columns=df_category.columns
df_and=set(df_product_columns)&set(df_category_columns)
df_and

これで、共通するカラムが上記の3つであることがわかります。

あとは、問36と同じような処理です。

商品データフレームの全項目とカテゴリデータフレームの小区分名(category_small_name)10件表示するので、第1引数は商品データフレームの全項目であるdf_product第2引数には、カテゴリデータフレームの小区分名’category_small_name’共通カラムである‘category_major_cd’, ‘category_medium_cd’, ‘category_small_cd’とします。

第3引数には、内部結合なので、how=’inner’とし、第4引数には、on=’category_major_cd’, ‘category_medium_cd’, ‘category_small_cd’とします。

これを10件表示なので、.head(10)を最後に書きます。

pd.merge(df_product,df_category[['category_major_cd', 'category_medium_cd', 'category_small_cd','category_small_name']],how='inner',on=['category_major_cd', 'category_medium_cd', 'category_small_cd']).head(10)

Pythonのコードやライブラリーについて知りたい場合

Pythonデータ分析よく使われている言語です。

この機会にPythonコードの打ち方・ライブラリーについてもっと知りたいと思った方は、以下のブログ記事をご覧ください。

独学でデータ分析をしている方へ

機械学習データサイエンスデータ分析独学で学ぶには、どうしたらよいかをまとめてみましたので、興味がある方はこちらのブログ記事をご覧ください。