Постройте гистограмму на основе процентилей - PullRequest
1 голос
/ 15 мая 2019

У меня есть рамка со следующей структурой:

df = pd.DataFrame({'ID': np.random.randint(1, 13, size=1000),
                   'VALUE': np.random.randint(0, 300, size=1000)})

Как я могу построить график, где на оси X будут процентили (10%, 20%, .. 90%) и на оси Y должно быть количество значений, которое лежит между процентными тиками, например, 20% -30% И для каждого идентификатора должен быть отдельный график (а также различные значения процентилей)

Я нашел процентили и застрял q = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8] df.groupby('ID')['VALUE'].quantile(q)

Я полагаю, что график должен выглядеть как гистограмма для параметра VALUE, но с процентами по оси X вместо числовых значений

Ответы [ 2 ]

1 голос
/ 15 мая 2019
q = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]

for name, group in df.groupby('ID'):  # Groupy by ID column
    _, bins = pd.qcut(group.VALUE, q, retbins=True, grid=False)  # Splits data in defined quantiles
    plt.figure()
    group.VALUE.hist(bins=bins)  # Plots histogram of data with specified bins
    ax.set_xticks(q, [f'{str(x) * 100}%' for x in q])  # format ticks (NOT TESTED)   
    plt.show()

Не захватывает выходные графики здесь, потому что они много.Он создает график, который вы хотите, но вам также нужно будет адаптировать тики и форматирование.

Чтобы добиться нормализованного графика с осью Y в диапазоне 0-100%, вам нужно будет нормализовать ваши данные до того, какзаговор (возможно что-то вроде group.VALUE.count() / df.VALUE.count()

0 голосов
/ 15 мая 2019

Попробуйте:

df['Quantile'] = pd.qcut(df.VALUE, q=np.arange(0,1.1,0.1))
tmp_df = df.pivot_table(index='Quantile', columns='ID', aggfunc='count')
tmp_df.plot(kind='bar', subplots=True, figsize=(10,10))
plt.show()

Вывод, каждый субплот - это квантиль для каждого идентификатора.

enter image description here

...