Forumdelen sponsras av

Python komma igång med dataanalys av CSV filer?

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

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

Stationär:Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02
Laptop: Jumper ezbook 3 pro
Mobil: Xiaomi Redmi Note 3 pro SE

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Nov 2011

@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])

Trädvy Permalänk
Medlem
Plats
Varberg
Registrerad
Jan 2011

använd pandas : )

Trädvy Permalänk
Medlem
Registrerad
Sep 2014

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

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
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?

Stationär:Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02
Laptop: Jumper ezbook 3 pro
Mobil: Xiaomi Redmi Note 3 pro SE

Trädvy Permalänk
Medlem
Plats
KLAX
Registrerad
Jan 2004

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))