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

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

ファイル

はじめに

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

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

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

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

問24問25の複合問題です。

まず、「(df_receipt)に対し、顧客ID(customer_id)ごとに」表示する必要があるので、groupby()を使用します。

今回は、最も新しい売上日(sales_ymd)古い売上日両方を求める必要があるので、max()min()の両方を使用します。

また、インデックスが消えないように、最後に.reset_index()を使用し、これを10件

表示なので、.head(10)と打ちます。

df_tmp = df_receipt.groupby('customer_id').agg({'sales_ymd':['max','min']}).reset_index()
df_tmp

次に、sales_ymd_maxsales_ymd_minという2つのカラム名に変更します。

df_tmp.columns = ['customer_id','sales_ymd_max','sales_ymd_min']

最後に、「両者が異なるデータを表示」する必要があります。これには、.query()を使用します。

そして、「異なる」というのは、!=を使用します。!=の意味は、ノットイコールです。

そして、10件表示なので、.head(10)ですね。

df_tmp.query('sales_ymd_max != sales_ymd_min').head(10)

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

まず、「(df_receipt)に対し、店舗コード(store_cd)ごとに」表示する必要があるので、groupby()を使用します。

売上金額(amount)平均を計算するので、agg({‘カラム名’: ‘mean’})を使用します。

そして、降順で表示なので、問18で使用したように、.sort_values(‘カラム名’, ascending=False)とします。

これを5件表示なので、.head()と打ちます。なお、.head()何も数字を入れない場合にはがデフォルト値になります。

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

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

問27ほぼ同じ処理です。違うのは、中央値を計算するところですが、これは、medianを使用します。なお、中央値とは、分布の中央にくる値のことです

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

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

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

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

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

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