如何使用csv的dictreader、matplotlib和numpy绘制概率密度函数图?
我正在尝试使用csv文件中一列的数据,利用csv的字典读取器、matplotlib和numpy来创建一个简单的概率密度函数(pdf)图表...
有没有简单的方法可以将CSV字典读取器和numpy数组结合起来使用?下面的代码无法运行。错误信息是TypeError: len() of unsized object,我猜这可能和我的数据不是numpy数组格式有关?另外,我的数据中有负数和正数。提前谢谢你们的帮助!
import easygui
import csv
import scipy.stats
from numpy import*
from pylab import*
filename= easygui.fileopenbox(msg='Altitude outlier graph', title='select file', filetypes=['*.csv'], default='X:\\')
alt_file=open(filename)
x=[]
for row in csv.DictReader(alt_file):
x.append(float(row['Dist_90m(nmi)']))
a=scipy.stats.pdf_moments(x)
prob, bins, patches= hist(a, 10,align='left',facecolor='green')
ylabel('probability density function')
show()
2 个回答
0
谢谢大家的帮助!!下面的代码可以生成一个概率密度函数的图表:我在格式上还有一些问题,但我觉得这是一个不错的开始。
import easygui
import csv
import scipy.stats
import numpy
from pylab import*
filename= easygui.fileopenbox(msg='Altitude outlier graph', title='select file', filetypes=['*.csv'], default='X:\\herring_schools\\')
alt_file=open(filename)
a=[]
for row in csv.DictReader(alt_file):
a.append(row['Dist_90m(nmi)'])
y= numpy.array(a, float)
pdf, bins, patches=hist(y, bins=6, align='left',range=None, normed=True)
ylabel('probability density function')
xlabel('Distance from 90m contour line(nm)')
ylim([0,1])
show()
4
这一行
a=scipy.stats.pdf_moments(x)
“返回给定中心矩列表的高斯扩展pdf函数(第一个是均值)。”
也就是说,a
是一个函数,你需要以某种方式获取它的值。
所以我修改了这一行:
prob, bins, patches= hist([a(i/100.0) for i in xrange(0,100,1)], 10, align='left', facecolor='green')
然后用我的样本数据生成了这个图。
现在我的统计学知识有点生疏,不太确定通常是否在0到1之间取pdf,但你可以从这里推断出来。
如果你确实需要在一系列浮点数上进行操作,range
和 xrange
生成的不是浮点数,所以一个简单的解决办法是生成大数字然后再除以,这样就可以用 a(i/100.0)
代替 a(i) for i in xrange(0, 1, 0.01)
。