4

我正在尝试使用 csv dictreader、matplotlib 和 numpy 使用 csv 文件的一列中的数据创建一个简单的概率密度函数(pdf)图...

有没有一种简单的方法可以将 CSV DictReader 与 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()
4

2 回答 2

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

样本

于 2009-08-25T16:48:25.590 回答
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()
于 2009-08-25T22:29:56.180 回答