Как создать график функции плотности вероятности, используя CSV dictreader, matplotlib и numpy? - PullRequest
4 голосов
/ 25 августа 2009

Я пытаюсь создать простой график функции плотности вероятности (pdf), используя данные из одного столбца файла csv, используя csv dictreader, matplotlib и numpy ...

Есть ли простой способ использовать CSV DictReader в сочетании с массивами? Ниже приведен код, который не работает. Сообщение об ошибке - TypeError: len () объекта без размера, который, я предполагаю, связан с тем фактом, что мои данные не имеют формат массива? Также мои данные имеют отрицательные и положительные числа. Заранее спасибо!

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 ]

4 голосов
/ 25 августа 2009

Линия

a=scipy.stats.pdf_moments(x)

"Вернуть [s] расширенную гауссову функцию pdf, учитывая список центральных моментов (первый - средний)."

То есть a - это функция, и вы должны как-то принять ее значение.

Итак, я изменил строку:

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

И создал этот график с моими выборочными данными.

Теперь моя статистика довольно ржавая, и я не уверен, что вы обычно берете PDF больше 0-1, но вы можете понять это оттуда.

Если вам нужно пересечь диапазон с плавающей точкой, range и xrange не производят числа с плавающей запятой, поэтому один простой способ - генерировать большие числа и делить их на части; следовательно a(i/100.0) вместо a(i) for i in xrange(0, 1, 0.01).

sample

0 голосов
/ 26 августа 2009

Спасибо за помощь !! Следующий код создает график функции плотности вероятности: у меня все еще есть некоторые проблемы с форматированием, но я думаю, что это хорошее начало.

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...