
- はじめに
- 問35 レシート明細データフレーム(df_receipt)に対し、顧客ID(customer_id)ごとに売上金額(amount)を合計して全顧客の平均を求め、平均以上に買い物をしている顧客を抽出せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。なお、データは10件だけ表示させれば良い。
- 問36 レシート明細データフレーム(df_receipt)と店舗データフレーム(df_store)を内部結合し、レシート明細データフレームの全項目と店舗データフレームの店舗名(store_name)を10件表示させよ。
- 問37 商品データフレーム(df_product)とカテゴリデータフレーム(df_category)を内部結合し、商品データフレームの全項目とカテゴリデータフレームの小区分名(category_small_name)を10件表示させよ。
- Pythonのコードやライブラリーについて知りたい場合
- 独学でデータ分析をしている方へ
はじめに
問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_productとdf_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のコードの打ち方・ライブラリーについてもっと知りたいと思った方は、以下のブログ記事をご覧ください。
データ分析入門・データサイエンス初心者・初学者向けにデータ分析でよく使うPythonをまとめました。
>>【データ分析初心者】Python構文~if文、format記法とf文字列~
>>【データ分析初心者】Python構文~for文、range関数、zip関数、enumerate関数~
>>【データ分析初心者】Python構文~無名関数lambda式、内包表記、map関数~
>>【データ分析初心者】Pandas~loc[]、iloc[]、スライス、drop()、isin()~
>>【データ分析初心者】Matplotlib、Seabornーscatter、hist、countplot 、barplot
独学でデータ分析をしている方へ
機械学習やデータサイエンス・データ分析を独学で学ぶには、どうしたらよいかをまとめてみましたので、興味がある方はこちらのブログ記事をご覧ください。
