2009-08-25 30 views
4

我试图创建一个使用CSV dictreader,matplotlib和numpy的使用CSV文件中的一列数据的简单概率密度函数(pdf)图...如何使用csv dictreader,matplotlib和numpy创建概率密度函数图?

有一种简单的方式来使用CSV DictReader合并与numpy数组?以下是不起作用的代码。错误消息是未定义对象的TypeError:len(),我猜测这与我的数据不是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() 
+1

错误消息有一个回溯,它显示了确切的代码行。请提供完整的错误消息,包括回溯到失败的确切代码行。 – 2009-08-25 16:10:51

回答

4

线

a=scipy.stats.pdf_moments(x) 

"Return[s] the Gaussian expanded pdf function given the list of central moments (first one is mean)."

也就是说,a是一个函数,你必须以某种方式承担它的价值。

所以我修改了行:

prob, bins, patches= hist([a(i/100.0) for i in xrange(0,100,1)], 10, align='left', facecolor='green') 

并制作该图与我的样本数据。

现在我的统计数据非常生疏,我不确定您是否通常会以0-1以上的比例使用pdf,但您可以从中找出它。

如果你确实需要超过一定的浮点数,rangexrange不会产生浮点数,所以一个简单的方法是产生大量数字并分解;因此a(i/100.0)而不是a(i) for i in xrange(0, 1, 0.01)

sample

+1

不错,但是对于你提到的最后一个问题,使用numpy.arange - 它对浮点数也没问题! - – 2009-08-25 17:21:14

+0

你也可以使用'numpy.r_'例如'r_ [2:3:5j] - >'array([2.,2.25,2.5,2.75,3.])',所以在你的情况下'r _ [:1:100j]'。 – jfs 2009-08-25 20:56:14

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()