Daten auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
lastesel
User
Beiträge: 22
Registriert: Freitag 13. Juni 2008, 11:39

Dienstag 17. Juni 2008, 12:40

Das Problem ist das ich die Daten als Matrix brauche, so das ich sie Später weiter verwenden kann.
Erstmal die Daten:
YYYYMMDD;Uhrzeit;ta_w;Ta (°C);Tf_w;Tf (°C);v (m/s);WR (°);Q (W/m²);N (mm);Vp (hPa);VPmax (hPa);RH (%);Pa (hPa);Vmax (m/s);Bat
01.05.2008;00:10:00;1.04;10.2;1.03;6.7;3.4;162;0;0;7.5;12.5;60;968;4.01;14.3
01.05.2008;00:20:00;1.04;10.3;1.03;6.7;3.9;160;0;0;7.4;12.5;59;968;4.97;14.3
01.05.2008;00:30:00;1.04;10.3;1.03;6.8;4.2;163;0;0;7.5;12.5;60;968.1;5.37;14.3
01.05.2008;00:40:00;1.04;10.1;1.03;6.7;5.1;167;0;0;7.5;12.4;61;968.2;6.04;14.3
01.05.2008;00:50:00;1.04;10.3;1.03;6.6;4.4;182;0;0;7.3;12.5;58;968.3;5.97;14.3
01.05.2008;01:00:00;1.04;10.4;1.03;6.6;4.1;181;0;0;7.2;12.6;57;968.3;4.58;14.3

Die muss ich jetzt auslesen, die Zeit auf stunden rduzieren, so das ich dann den Stundenmittelwert von den Messdaten bilden kann (und dann vieleicht auch ihrgendwann plotten).

Momentan sieht der Code so aus:

data = loadtxt("dateiname.csv", delimiter=';', skiprows = 1, converters={0,datestr2num})

skiprows brauche ich da oben die Namen stehen und ich noch nicht wieß wie ich die Spalten den Namen zuordnen kann.

So hoffe das reicht,
vielen danke,
ein waschechter Anfänger
lastesel
User
Beiträge: 22
Registriert: Freitag 13. Juni 2008, 11:39

Dienstag 17. Juni 2008, 12:50

Ach ja, das mit dem Splitbefehl habe ich auch Ausbrobiert. Problem hier ist das er mir das Dokument zwar Zeilenweise trennt und die getrennte Zeile dann ausspuckt, ich dies aber nicht in eine Matrik schreiben kann.
Das gnaze lief etwas so:
fobj = file('dateiname', 'r')
for line in fobj:
a = line.split(";")
fobj.close()

wenn ich es mit date, time, value = line.split(";") probiere dann spuckt er mir aus: ValueError: too many values to unpack
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Dienstag 17. Juni 2008, 12:59

auch ich bin ziemlicher Anfaenger :)

Ich kenn jetzt dieses loadtxt nicht. Aus welchem Modul ist denn das? Da wuerde es z.B. helfen wenn Du nicht mit "from xyz import *" arbeiten wuerdest sondern einfach nur mit "import xyz", dann steht in Deinem Codeschnipsel naemlich drin "data = xyz.loadtxt(...)" und wir koennten sehen aus welchem Modul das stammt.

Ansonsten ist das doch wunderbar ne Aufgabe fuer Listen und split. Schau Dir doch erstmal nochmal die ganzen Dokus zu normalen Listen an. Aus Listen laesst sich ja wunderbar ne Matrix machen, indem jede Zeile eine Liste ist und die wiederum alle in einer weiteren Liste stecken.

Beispiel (aus dem Buch "Learning Python"):

Code: Alles auswählen

M = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]
mit M[1][2] bekommst Du dann z.B. den Wert aus Reihe 2, Spalte 3.
lastesel
User
Beiträge: 22
Registriert: Freitag 13. Juni 2008, 11:39

Dienstag 17. Juni 2008, 13:17

das ist aus dem scipy packet
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 17. Juni 2008, 13:23

lastesel hat geschrieben:Ach ja, das mit dem Splitbefehl habe ich auch Ausbrobiert. Problem hier ist das er mir das Dokument zwar Zeilenweise trennt und die getrennte Zeile dann ausspuckt, ich dies aber nicht in eine Matrik schreiben kann.
Das gnaze lief etwas so:
fobj = file('dateiname', 'r')
for line in fobj:
a = line.split(";")
fobj.close()
Hast Du Dir mal a ausgeben lassen und angeguckt wie es aussieht? Wenn nein, tue das und voila, Du hast eine Zeile aus Deiner Matrix ;-)
wenn ich es mit date, time, value = line.split(";") probiere dann spuckt er mir aus: ValueError: too many values to unpack
Ist ja auch logisch, da in einer Zeile wesentlich mehr Einträge stehen, als Du atomare Variablen angegeben hast! Du speicherst nur drei Einträge, das split liefert Dir aber 11, wenn ich richtig gezählt habe.
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Dienstag 17. Juni 2008, 13:36

eben. Hier mal ein ganz einfaches Beispiel von mir, die anderen hier koennen das sicher noch viel besser:

Code: Alles auswählen

myfile = open('/pfad/zu/datei', 'rU')
lines = myfile.readlines()
myfile.close()

matrix = []
for line in lines:
    linelist = line.split(';')
    matrix.append(linelist)
Danach hast Du eine wunderschoene Matrix, die alle Reihen und Spalten enthaelt. Kann man sich dann z.B. so wunderbar anzeigen lassen:

Code: Alles auswählen

for i in matrix:
    print i
die erste Zeile laesst sich leicht entfernen und die Datums und Uhrzeit-Felder kannst Du dann direkt ansprechen und an Ort und Stelle manipulieren, wenn Du eben z.B. nur den Stundenwert als zweite Spalte haben magst statt der genauen Uhrzeit.

Auch ich hab musste mich erstmal an diesen Typ 'list' gewoehnen und versteh vermutlich bis heute nur nen verschwindend kleinen Teil von dem was die Listen so alles koennen. Es lohnt sich aber glaub total, sich damit erstmal intensiv zu beschaeftigen, da sie erstens ne zentrale Rolle spielen in Python und zweitens einfach viele tolle Moeglichkeiten bieten um mit Daten in Python umzugehen. Von daher wuerde ich erstmal versuchen, alles mit so Standardelementen zu bauen statt gleich ein Spezialmodul zu verwenden, einfach um erstmal zu verstehen wie so Sachen wie Listen ueberhaupt funktionieren und was man damit alles machen kann.
Zuletzt geändert von shakebox am Dienstag 17. Juni 2008, 14:10, insgesamt 1-mal geändert.
lastesel
User
Beiträge: 22
Registriert: Freitag 13. Juni 2008, 11:39

Dienstag 17. Juni 2008, 14:08

danke für eure hilfe, ich denke jetzt sollte ich alleine weiter kommen
Antworten