2016-04-12 75 views
1

csvファイルに13分間隔で関数を持たないy値(約6000サンプルのデータ)を持つ時系列データがあります。 例: 2016-02-13 00:00:00; 0,353 2015-02-13 00:00:13; 0,362 ....scipyを使用して関数を持たない時系列データの積分を計算する

9時から14時の範囲で統合したい。 どのようにしてcsvからnp.array(データ)に値を読み取ることができますか?

Simpsonアプローチは、曲線全体をyの下に統合します。 私は文書を読みました。私のアプローチについてだった:

私は範囲の時間(9 am-2pm - 09:00:00-14:00:00)に統合することができますどのように

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

+0

データを読み込むためにnumpyの 'loadtxt'と' genfromtxt'をチェックしてください。 – roadrunner66

答えて

1

np.loadtxtでデータ内の余分なセミコロンを処理するのは苦労しました。データの手書きのインポートがここにあります。

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

は出力:

[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

回は現在、適切なDateTimeオブジェクトなので、比較することができます。 Python time comparison

+0

でもsimps(y、x)は例外を起こします。 yは値で、xはタイムスタンプです –

+0

時間を選択して選択できるように、タイムスタンプを正しく読み取る必要がありました。統合のために、最初のタイムスタンプを時間0に設定し、時間を秒単位でカウントします。したがって、積分に切り替えるベクトルはx軸上で「実」でなければなりません。次のように、 'datetime'を'秒 'に変換する方法について、たくさんの答えを見つけることができます:http://stackoverflow.com/questions/7852855/how-to-convert-a-python-datetime -object-to-seconds – roadrunner66

関連する問題