2016-04-12 8 views
1

Ich habe Zeitreihendaten mit y-Werten (ca. 6000 Beispieldaten) ohne die Funktion in 13 Minuten Intervall in einer CSV-Datei. Zum Beispiel: 2016-02-13 00:00:00; 0,353 2015-02-13 00:00:13; 0,362 ....Mit scipy zur Berechnung von ganzzahligen Zeitreihendaten ohne Funktion

Ich möchte über den Bereich 9 und 14 Uhr integrieren. Wie kann ich die Werte von CSV zu einem np.array (Daten) lesen?

Der Simpson-Ansatz integriert die gesamte Kurve unter y. Ich habe im doc gelesen. über meinen Ansatz war:

from scipy.integrate import simps import numpy as np y = np.array(data) I = integrate.simps(y,dx=12) print(I)

Wie kann ich im Bereich Zeit integrieren (9.00 bis 02.00 Uhr - 09: 00: 00-14: 00: 00)?

+0

Prüfen Sie numpy 'loadtxt' und' genfromtxt', um Ihre Daten einzulesen. – roadrunner66

Antwort

1

Ich hatte Schwierigkeiten mit dem zusätzlichen Semikolon in Ihren Daten mit np.loadtxt, also hier ein handschriftlicher Import für Ihre Daten.

%matplotlib inline 
import numpy as np 
import matplotlib.pyplot as p 
from matplotlib.dates import strpdate2num, num2date 
fn="example_data.txt" 

#2016-02-13 00:00:00 ; 0,353 
#2015-02-13 00:00:13 ; 0,362 

def dateread(x): 
    return num2date(strpdate2num('%Y-%m-%d %H:%M:%S')(x)) 

tims, vals=[],[] 

f=open(fn,'r') 
for line in f.readlines(): 
    #print line 
    a=line.split() 
    #print a 
    time=dateread(a[0]+' '+a[1]) 
    value= float(a[3].replace(",",".")) 
    tims.append(time) 
    vals.append(value) 

print vals 
print tims 

p.plot(tims,vals) 

Ausgang:

[0.353, 0.362] 
[datetime.datetime(2016, 2, 13, 0, 0, tzinfo=<matplotlib.dates._UTC object at 0x000000000411B4E0>), datetime.datetime(2015, 2, 13, 0, 0, 13, tzinfo=<matplotlib.dates._UTC object at 0x000000000411B4E0>)] 

enter image description here

Die Zeiten sind jetzt richtige Datetime-Objekte, damit sie verglichen werden. Wählen Sie einfach die Zeiten, die Sie hier sehen möchten: Python time comparison

+0

ok aber simps (y, x) verursacht Ausnahme. y sind die Werte und x die Zeitstempel –

+0

Das richtige Lesen der Zeitstempel wurde benötigt, so dass Sie die Zeiten auswählen und auswählen können. Für die Integration würde ich den ersten Zeitstempel auf Zeit 0 setzen und die Zeiten in Sekunden zählen. Daher sollte der Vektor, den Sie an die Integration übergeben, auf der X-Achse "real" sein. Sie werden viele Antworten finden, wie Sie 'datetime' in' seconds' auf SO umwandeln, zB hier: http://stackoverflow.com/questions/7852855/how-to-convert-a-python-datetime -Objekt-zu-Sekunden – roadrunner66

Verwandte Themen