直方图是很有用的查看数据分布的一种可视化方法。如果一列数据有3个类别,我们想知道每个类别的概率分布,又想知道每个类别间的概率分布差异,那么就要用到分组直方图。话不多说,直接上代码上图。
import pandas as pd
import numpy as np
# 数据生成(随机生成一个符合正态分布的序列,并将序列分为3份,标记为A/B/C)
def createFunc():
values = np.random.normal(loc=0, scale=1, size=1000)
labels_A = np.repeat('A', 100)
labels_B = np.repeat('B', 300)
labels_C = np.repeat('C', 600)
labels = np.concatenate([labels_A, labels_B, labels_C])
np.random.shuffle(labels)
df = pd.DataFrame({'value': values, 'label': labels})
return df
df=createFunc()
# 绘制分组直方图
label_lst=list(set(df['label']))
for item in label_lst:
x=df['value'][df['label']==item]
plt.hist(x,bins=50,alpha=0.5,label=str(item)+': '+ str(len(x)))
plt.xlim(0,max(df['value']))
plt.legend(loc='upper right')
plt.show()