以前のStackOverflow質問(Map each list value to its corresponding percentile)で説明したように、データ配列内の各要素のパーセンタイルを計算できます。
import numpy as np
from scipy import stats
data = np.array([0.01, 0.02, 1, 1, 1, 2, 2, 8, 8, 4.5, 6.6])
方法1:scipy.stats.percentileofscoreを使用して:
data_percentile = np.array([stats.percentileofscore(data, a) for a in data])
data_percentile
Out[1]:
array([ 9.09090909, 18.18181818, 36.36363636, 36.36363636,
36.36363636, 59.09090909, 59.09090909, 95.45454545,
95.45454545, 72.72727273, 81.81818182])
方法2:(速い)100からscipy.stats.rankdataと正規化を使用して:あなたはパーセンタイルのリストを持っていることを今
ranked = stats.rankdata(data)
data_percentile = ranked/len(data)*100
data_percentile
Out[2]:
array([ 9.09090909, 18.18181818, 36.36363636, 36.36363636,
36.36363636, 59.09090909, 59.09090909, 95.45454545,
95.45454545, 72.72727273, 81.81818182])
、あなたを前と同じようにビンに入れることができますnumpy.digitize:
bins_percentile = [0,20,40,60,80,100]
data_binned_indices = np.digitize(data_percentile, bins_percentile, right=True)
data_binned_indices
Out[3]:
array([1, 1, 2, 2, 2, 3, 3, 5, 5, 4, 5], dtype=int64)
これは、選択したパーセンタイルリストのインデックスに従ってデータを格納します。必要に応じて、numpy.take:
を使用して、実際の