2016-05-13 10 views
1

Ich habe ein data, die wie folgt aussieht:Python: Datenanalyse FFT

YYYY-MO-DD HH-MI-SS_SSS, ATMOSPHERIC PRESSURE (hPa) mean, ATMOSPHERIC PRESSURE (hPa) std 
2016-04-20 00:00:00,1006.0515000000001,0.029159119281803602 
2016-04-20 00:01:00,1006.039666666667,0.03565211699642609 
2016-04-20 00:02:00,1006.0148333333334,0.036891580347842706 
2016-04-20 00:03:00,1006.0058333333335,0.03351152934243721 
2016-04-20 00:04:00,1005.9714999999999,0.03155973620213212 
2016-04-20 00:05:00,1005.955666666667,0.027207094455343653 
............. 

Ich habe Interesse an dem Druck bedeuten, die jede Minute abgetastet wird. Mein Ziel ist es, nach periodischen Frequenzen innerhalb der Daten zu suchen.

Ich habe versucht, die folgenden:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from scipy.fftpack import fft 
    df3 = pd.read_csv('Pressure - Dates by Minute.csv', sep=",", skiprows=0) 
    Pressure = df3['ATMOSPHERIC PRESSURE (hPa) mean'] 
    frate = 1/60 
    Pfft = np.fft.fft(Pressure[0]) 
    freqs = fft.fftfreq(len(Pfft), 1/frate) 

Aber ich bin immer „Tupelindex out of range“ Fehler

Alle Ideen, wie die fft zu analysieren und die passenden Frequenzen gegen die plotten Rohdaten?

Die Rohdaten sieht wie folgt aus:

enter image description here

Dank!

+0

Haben Sie verifiziert, dass es gibt Daten in 'Druck'? Versuchen Sie, das 'len (Druck) auszudrucken' –

+0

Ja tat ich, es ist 28171 – ValientProcess

+0

ich nehme an, aber ist die letzte Linie, die Sie dem geben, der Ihnen die Fehler gibt? –

Antwort

2

Sie rufen nur das erste Element von Pressure ab, aber Sie sollten die Fourier-Analyse für alle Proben durchführen. Wenn Sie

ersetzen
Pfft = np.fft.fft(Pressure[0]) 

mit

Pfft = np.fft.fft(Pressure) 

es funktioniert:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

df3 = pd.read_csv('Pressure - Dates by Minute.csv', sep=",", skiprows=0) 
Pressure = df3['ATMOSPHERIC PRESSURE (hPa) mean'] 
frate = 1./60 
Pfft = np.fft.fft(Pressure) 
Pfft[0] = 0 # Set huge DC component to zero, equates to Pressure = Pressure - numpy.mean(Pressure) 

freqs = np.fft.fftfreq(len(Pfft), 1./frate) 
plt.plot(freqs, Pfft) 
plt.show() 
1

Ich nehme einen Stich an das, denke ich, dass das Problem ist, dass Pressure[0] ein Wert ist und Sie muss ein Array an np.fft.fft() übergeben, also versuchen Sie Pfft = np.fft.fft(Pressure)