如何使用csv的dictreader、matplotlib和numpy绘制概率密度函数图?

4 投票
2 回答
7551 浏览
提问于 2025-04-15 13:51

我正在尝试使用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,但你可以从这里推断出来。

如果你确实需要在一系列浮点数上进行操作,rangexrange 生成的不是浮点数,所以一个简单的解决办法是生成大数字然后再除以,这样就可以用 a(i/100.0) 代替 a(i) for i in xrange(0, 1, 0.01)

sample

撰写回答