【解説】四分位点を学ぶ | データサイエンス100本ノック【問55 回答】
当ページのリンクには広告が含まれています。
目次
この記事の対象者
・ Pythonで分位点を抽出する方法を知りたい人
以降はデータサイエンス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 | arr = np.array([1, 3, 5, 7, 9, 10, 20, 32, 41]) |
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)毎に合計することを考えましょう。そのうえで合計金額の四分位点を求めていこうと思います。
グループごとの合計を求めるにはgroupby
とsum
を用いればよかったですね。
忘れてしまった方は以下の記事を参照ください。
1 | df_sales_amount = df_receipt[['customer_id', 'amount']].groupby('customer_id').sum().reset_index() |
1 | customer_id amount |
ここで四分位点を求めていきます。それぞれ、pct
に代入していきます。
1 | pct25 = np.quantile(df_sales_amount['amount'], 0.25) |
次に顧客ごとの売上合計金額が、
もし最小値以上第一四分位未満
→1
もし第一四分位以上第二四分位未満
→2
もし第二四分位以上第三四分位未満
→3
もし第三四分位以上
→4
という処理を施していければと思います。
この処理を実施する関数pct_group
を作成します。
1 | def pct_group(x): |
最終的に顧客ID、売上金額の合計とともに、カテゴリ値を表示させていきます。
カテゴリ値はpct_group
というカラムに含めることとします。
pct_group
に含める値はlambda関数を用いてデータを適用していきます。
1 | df_sales_amount['pct_group'] = df_sales_amount['amount'].apply(lambda x: pct_group(x)) |
1 | customer_id amount pct_group |
これで完成です。
まとめ: pandas.DataFrame.quantileを用いた四分位数の算出方法を学びました
本記事は、「【Python】四分位点を学ぶ | データサイエンス100本ノック【問55 回答】」というテーマでまとめました。
本記事で紹介した方法を元に、データサイエンティストとしての知見を深めていただければと思います。
なお、データサイエンティストに必要な知識は、TechAcademyのデータサイエンスコースでの学習がおすすめです。