Python komma igång med dataanalys av CSV filer?

Permalänk
Medlem

Python komma igång med dataanalys av CSV filer?

Så jag har planerat lite dåligt och behöver bli klar med en dataanalys/behandling av CSV filer. Jag tänkte använda Python då jag hört att det ska vara bra till sådana här grejer men även för att kunna återanvända koden längre fram. Det är inget super avancerat jag vill göra, faktum är att det mesta gåra att göra i excell, men jag vill gärna lära mig Python då jag är grön på det(kan dock Java och C# ganska bra). Jag tänkte först och främst börja använda något färdig bibliotek, vid googlar så är det främst numpy och scipy jag får upp, så jag har fått uppfattningen att det är det man bör köra på, i alla fall från början. Tyvärr misslyckas jag med det enklaste möjliga exemplet jag hittade och vänder mig till Sweclockers för lite råd. I följande exempel itererar jag en CSV fil för att räkna ihop genomsnittet (mean), dock kraschar det när jag kallar på mean i numpuy.

RuntimeWarning: Mean of empty slice. out=out, **kwargs) RuntimeWarning: invalid value encountered in double_scalars ret = ret.dtype.type(ret / rcount) Mean - Question-1: nan Running... Process finished with exit code 0

Här är min kod:

import numpy as np import os import csv as csv script_dir = os.path.dirname(__file__) # <-- absolute dir the script is in rel_path = "data/P2_fixations.csv" abs_file_path = os.path.join(script_dir, rel_path) print('File path:', abs_file_path) read_data = csv.reader(open(abs_file_path, 'r')) data = [] for row in read_data: data.append(row) Header = data[0] data.pop(0) q1 = [] for i in range(len(data)): q1.append(int(data[i][1])) print('Mean - Question-1: ', (np.mean(q1))) print('Running...')

Rent spontant så känns det som att det är något fel med datatyperna och/eller decimalerna.

Såhär ser min CSV fil ut:

id,task,start_timestamp,duration,start_frame_index,end_frame_index,norm_pos_x,norm_pos_y,dispersion,confidence,method,gaze_point_3d_x,gaze_point_3d_y,gaze_point_3d_z,base_data 6,1,16861.858884,364.663000000291,1072,1082,0.783090099554006,-0.385829389879487,0.79932461815005,0.894177181185017,pupil,85.2935392341283,200.173451371376,470.809203692125,16861.858884 16861.948107 16862.040247 16862.135173 16862.223547

Permalänk
Medlem

@Baxtex:
Aldrig anänt mig av numpy så uträkningarna får du lista ut själv, men det här kanske hjälper dig hitta rätt.

data = [] header = [] value = [] for row in read_data: data.append(row) for title in data[0]: header.append(title) for num in data[1]: value.append(num) for i in range(len(header)): print(header[i], ":", value[i])

Permalänk
Medlem

använd pandas : )

Permalänk
Medlem

Ser ut som du har indenterat skapandet av q1, du kommer alltså inte ha någon referens till q1 när du kör mean på den. Sitter på mobilen, så kan eventuellt ha missat något men men

Edit, ser inte ut som du bör köra andra loopen heller då data bör ha längden 0 efter första loopen

Skickades från m.sweclockers.com

Permalänk
Medlem
Skrivet av trwl:

@Baxtex:
Aldrig anänt mig av numpy så uträkningarna får du lista ut själv, men det här kanske hjälper dig hitta rätt.

data = [] header = [] value = [] for row in read_data: data.append(row) for title in data[0]: header.append(title) for num in data[1]: value.append(num) for i in range(len(header)): print(header[i], ":", value[i])

Jojo basic uträkningar kan man ju göra manuellt, men när jag sedan ska ha t ex mean, dispersion, osv så blir det lite mer avancerat.

Skrivet av skyw00lker:

använd pandas : )

Oooh, detta var nog mer det jag letade efter. Något mer välkänt ramverk jag bör känna till?

Permalänk
Medlem

Något sånt här istället?
Jag jobbar med en lista med dicter istället för att lättare kunna hitta den nyckel/värde du vill jobba med istället för att jobba med list index, notera att jag inte populerade den hela vägen:

import numpy as np import os import csv as csv read_data = csv.reader(open('test.xls', 'r')) data = [] for x, row in enumerate(read_data): #first row if x == 0: pass else: thedict = { 'id': row[0], 'task': row[1], 'start_timestamp': row[2], 'duration': row[3] } data.append(thedict) q1 = [] for row in data: q1.append(int(row['id'])) print 'Mean - Question-1: {}'.format(np.mean(q1))