2015-01-07 3 views
0

주어진 csv 파일의 특정 열에 대한 히스토그램과 산점도를 플로팅하려고합니다. 나는 프로그래밍에 익숙하지 않고 친구로부터이 코드를 얻었지만 분명히 작동하지만 어떻게 든이 오류가 발생합니다. 코드는 다음과 같습니다파이썬에서 CSV 파일의 열에 대한 히스토그램 그리기

import csv 
import numpy as np 
import matplotlib.pyplot as plt 
f = open('Data for question 13.csv') 
data = csv.reader(f) 
Area = []; MajorAxisLength = []; MinorAxisLength = []; Perimeter = [] 
MinIntensity = []; MeanIntensity = []; MaxIntensity = [] 
header = [Area, MajorAxisLength, MinorAxisLength,Perimeter,MinIntensity,MeanIntensity,MaxIntensity] 
for row in data: 
    i = 1 
    for name in header: 
     name.append(row[i]) 
     i = i + 1 
plt.figure() 
plt.hist(Area, bins=50) # error follows after this 

오류 :

Traceback (most recent call last): 
    File "<pyshell#11>", line 1, in <module> 
    plt.hist(Area, bins=50, alpha=0.5) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/pyplot.py", line 2827, in hist 
    stacked=stacked, **kwargs) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/axes.py", line 8312, in hist 
    xmin = min(xmin, xi.min()) 
    File "/Library/Python/2.7/site-packages/numpy-1.9.0-py2.7-macosx-10.9-intel.egg/numpy/core/_methods.py", line 29, in _amin 
    return umr_minimum(a, axis, None, out, keepdims) 
TypeError: cannot perform reduce with flexible type 

내가이 오류를 제거 할 수 없습니다입니다. 대답은 간단해야하지만 나는 새로운 것이므로 어떻게 대처해야할지 전혀 모른다.

+1

. 데이터 파일은 어떻게 생겼습니까? – matsjoyce

+0

데이터를 공유하거나 업로드하여 데이터가 어떻게 보이는지 확인할 수있는 방법이 있습니까? 이것은 당신에게 어떤 아이디어가 주어지면 도움이 될지 모르겠다. 약 400 행까지 헤더와 수치 데이터가있는 9 개의 열이있다. –

+0

처음 몇 줄을 질문에 붙여 넣거나 (예 : ~ 10), 예를 들어 사용하십시오. [pastebin] (http://pastebin.com) 및 questtion에 링크를 넣어 – hitzg

답변

0

귀하의 데이터 파일을 사용할 수 없어 100 % 확실하지 않습니다. 하지만 row[i]은 문자열 (정수 또는 부동 소수점이 아님)이라고 생각합니다. 그리고 enumerate을 사용하여 첫 번째 행을 건너 뛸 수 있습니다. HIST 숫자 데이터를 필요로하는 동안 입력 데이터는 CSV 파서 문자열로 해석되기 때문에 당신은 오류가

for n,row in enumerate(data): 
    if n > 0: 
     i = 1 
     for name in header: 
      name.append(float(row[i])) 
      i = i + 1 
+0

나는 이것을 시도했지만 여전히 오류가 발생합니다 : ValueError : 문자열을 부동으로 변환 할 수 없습니다 : Area –

+1

파일의 첫 번째 줄 당신이 그것을 건너 뛰어야 헤더를 포함합니다. 함께 작업하는 파일 없이는 당신을 도울 수 없습니다. 그리고 저는 @James의 대답이 당신이 더 직접적으로 원하는 것을하고 있다고 생각합니다. 그가 연계 한 문서를 읽어야합니다. – hitzg

+0

설명서를 읽은 후 머리글을 건너 뛰고 다시 시도했지만 제대로 작동했습니다. 도와 주셔서 감사합니다. –

1

: 그래서이 문제를 해결해야한다. 추가하기 전에 각 row[i]을 명시 적으로 변환해야합니다.

1

당신이 당신 CSV 파일에 일부 수치 데이터를 플롯 할 가정하면, 여기에 언급 한 바와 같이 데이터 (텍스트가 아닌) 숫자는 것을 당신은 아마 같은 방법을 사용할 수 있습니다 How to read csv into record array in numpy? 따라서

, 코드가 보일 수 있습니다 다음과 같이 다음 genfromtxt 기능에

import csv 
import numpy as np 
import matplotlib.pyplot as plt 

data = np.genfromtxt('Data for question 13.csv') # add more parameter info if neccessary like skipping header lines 
plt.figure() 
plt.hist(data[:,0], bins=50) # Area, from OP, is column 0 

정보는 여기에서 찾을 수 있습니다 :이 재현 할 수없는 http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html

+0

이봐 요, 이것 역시 시도했지만 너무 많은 지표에 대해 오류가 발생했습니다. IndexError : 배열의 인덱스가 너무 많음 –

+0

파일이 비어있는 것 같습니다. 'print (data.shape)'(또는 Py2에서'print data.shape')를 실행하고'(0,0)'이면 파일에 문제가 있습니다. 당신은 또한 당신이 찾고있는 것을 알기 위해 그것을 Excel에 플롯 할 수 있습니다. 광산과 @ hitzg의 답을 통해 문제를 해결할 수 있다는 충분한 단서가 있습니다. 'IndexError'? 데이터가 충분하지 않거나 충분히 크지 않습니다. 'ValueError'? 문자열을 봐. 뭐야? 변환 가능합니까? – James

관련 문제