2009-08-25 65 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()