【解説】四分位点を学ぶ | データサイエンス100本ノック【問55 回答】

【解説】四分位点を学ぶ | データサイエンス100本ノック【問55 回答】





目次

この記事の対象者



・ データサイエンティストを目指している人

・ Pythonで分位点を抽出する方法を知りたい人



以降はデータサイエンス100本ノックの問題を題材にしながら学んでいきます。


データサイエンス100本ノックの始め方は、以下の記事を参考にしていただければと思います。


>>データサイエンス100本ノックの始め方を確認する


第55問目: pandas.DataFrame.quantileを用いた四分位数の算出

P-055: レシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)ごとに合計し、その合計金額の四分位点を求めよ。その上で、顧客ごとの売上金額合計に対して以下の基準でカテゴリ値を作成し、顧客ID、売上金額と合計ともに表示せよ。カテゴリ値は上から順に1〜4とする。結果は10件表示させれば良い。

  • 最小値以上第一四分位未満
  • 第一四分位以上第二四分位未満
  • 第二四分位以上第三四分位未満
  • 第三四分位以上

四分位点とは、データを4分の1に分割する分位点です.

四分位数とも言います。

分位数を求める際は、numpy.quantile関数を使用します。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.quantile.html

例えば[1, 3, 5, 7, 9, 10, 20, 32, 41]という配列データが与えられた場合の四分位点を求めてみます。

第一四部位
1
2
arr = np.array([1, 3, 5, 7, 9, 10, 20, 32, 41])
np.quantile(arr, 0.25)
出力
1
5.0
第二四分位
1
np.quantile(arr, 0.5)
出力
1
9.0
第三四分位
1
np.quantile(arr, 0.75)
出力
1
20.0

四分位数の出力方法がわかったところで早速問題を解いていきたいと思います。

まずはレシート明細データフレーム(df_receipt)の売上金額(amount)を顧客ID(customer_id)毎に合計することを考えましょう。そのうえで合計金額の四分位点を求めていこうと思います。

グループごとの合計を求めるにはgroupbysumを用いればよかったですね。

忘れてしまった方は以下の記事を参照ください。

>> groupbyとsumの使い方を復習する

1
2
df_sales_amount = df_receipt[['customer_id', 'amount']].groupby('customer_id').sum().reset_index()
df_sales_amount
出力
1
2
3
4
5
6
7
8
9
10
11
12
13
	customer_id	amount
0 CS001113000004 1298
1 CS001114000005 626
2 CS001115000010 3044
3 CS001205000004 1988
4 CS001205000006 3337
... ... ...
8302 CS051513000004 551
8303 CS051515000002 265
8304 CS052212000002 192
8305 CS052514000001 178
8306 ZZ000000000000 12395003
8307 rows × 2 columns

ここで四分位点を求めていきます。それぞれ、pctに代入していきます。

1
2
3
pct25 = np.quantile(df_sales_amount['amount'], 0.25)
pct50 = np.quantile(df_sales_amount['amount'], 0.5)
pct75 = np.quantile(df_sales_amount['amount'], 0.75)

次に顧客ごとの売上合計金額が、

もし最小値以上第一四分位未満
 →1
もし第一四分位以上第二四分位未満
 →2
もし第二四分位以上第三四分位未満
 →3
もし第三四分位以上
 →4

という処理を施していければと思います。

この処理を実施する関数pct_groupを作成します。

1
2
3
4
5
6
7
8
9
def pct_group(x):
if x < pct25:
return 1
elif pct25 <= x < pct50:
return 2
elif pct50 <= x < pct75:
return 3
elif pct75 <= x:
return 4

最終的に顧客ID、売上金額の合計とともに、カテゴリ値を表示させていきます。

カテゴリ値はpct_groupというカラムに含めることとします。

pct_groupに含める値はlambda関数を用いてデータを適用していきます。

1
2
df_sales_amount['pct_group'] = df_sales_amount['amount'].apply(lambda x: pct_group(x))
df_sales_amount
出力
1
2
3
4
5
6
7
8
9
10
11
12
13
	customer_id	amount	pct_group
0 CS001113000004 1298 2
1 CS001114000005 626 2
2 CS001115000010 3044 3
3 CS001205000004 1988 3
4 CS001205000006 3337 3
... ... ... ...
8302 CS051513000004 551 2
8303 CS051515000002 265 1
8304 CS052212000002 192 1
8305 CS052514000001 178 1
8306 ZZ000000000000 12395003 4
8307 rows × 3 columns

これで完成です。

まとめ: pandas.DataFrame.quantileを用いた四分位数の算出方法を学びました

本記事は、「【Python】四分位点を学ぶ | データサイエンス100本ノック【問55 回答】」というテーマでまとめました。

本記事で紹介した方法を元に、データサイエンティストとしての知見を深めていただければと思います。

なお、データサイエンティストに必要な知識は、Udemyを活用した学習が効率的です。30日間の返金保証、および一流講師へのQ&Aシステムが整ったオンライン学習プラットフォームです。

世界で34万人が受講した以下の講座をご確認ください。

【世界で34万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜





>> 第56問〜57問の回答はこちら

コメント