我正在尝试重现the example given in this answer以适应我的实际数据的分布,例如df['Note']
是我的数据框的一列,其中包含每个学生的平均注释:
Index StudentName Note
0 Mark 3.7
1 Bryan 3.5
2 Nil 0.1
3 Amanda 2.045
4 Arthur 1.2
5 Helen 2.5
实际数据帧包含大约350000行,平均值= 2.17,如同这一行
我的代码是为了获得合适的分布
def fit(dataframe, path):
dataframe.set_index
size=len(dataframe.index)
x=dataframe.index
y=dataframe['Note']
plt.hist(y, bins=range(20))
dist_names = ['alpha', 'beta', 'norm', 'expon']
for dist_name in dist_names:
dist = getattr(scipy.stats, dist_name)
param = dist.fit(y)
pdf_fitted = dist.pdf(x, *param[:-2], loc=param[-2], scale=param[-1]) * size
plt.plot(pdf_fitted, label=dist_name)
plt.xlim(0, 19)
plt.legend(loc='upper left')
plt.show()
plt.savefig(path+'_fit.png', bbox_inches='tight', dpi=100)
def call_fit(pathname):
path_picture="%spicture//" %pathname
path="%data//" %pathname
path_s=sorted(os.listdir(path))
for i in path_s:
file_path=os.path.join(path, i)
picture=os.path.join(path_picture, i)
df=pd.read_csv(file_path, sep='\t')
fit(df, picture)
但输出很奇怪。我在这里放了两个函数,因为我不确定是什么导致了这个bug!毋庸置疑,这个分布有一个奇怪的外观,而且我的真实分布的直方图不是情节,但是每一次迭代都会发生一些奇怪的事情:看看并比较第一个情节和第10个情节:
您的帮助和建议将非常感谢!因为我不知道我哪里错了
答案 0 :(得分:1)
分布的奇怪外观可能是由于您的数据不适合分布(特别是alpha分布)。由于我没有您的数据,因此我无法进一步了解详情。使用您提供的样本看起来不错。
绘制了直方图,但是与1e29相比,条形图太小了,所以你无法看到它们。
图例和其他绘图元素正在累积,因为您总是在不清除它的情况下绘制在同一个子图中,因此在每次迭代中都会保留之前绘制的所有内容。