2016-11-07 13 views
1

:明らかのように凝集体時系列データ

Date,Time,CPU_Utilization,Unit 
2016-10-17,09:25:00,22.5,Percent 
2016-10-17,09:30:00,6.534,Percent 
2016-10-17,09:35:00,19.256,Percent 
2016-10-17,09:40:00,43.032,Percent 
2016-10-17,09:45:00,58.954,Percent 
2016-10-17,09:50:00,56.628,Percent 
2016-10-17,09:55:00,25.866,Percent 
2016-10-17,10:00:00,17.742,Percent 
2016-10-17,10:05:00,34.22,Percent 
2016-10-17,10:10:00,26.07,Percent 
2016-10-17,10:15:00,20.066,Percent 
2016-10-17,10:20:00,15.466,Percent 
2016-10-17,10:25:00,16.2,Percent 
2016-10-17,10:30:00,14.27,Percent 
2016-10-17,10:35:00,5.666,Percent 
2016-10-17,10:40:00,4.534,Percent 
2016-10-17,10:45:00,4.6,Percent 
2016-10-17,10:50:00,4.266,Percent 
2016-10-17,10:55:00,4.2,Percent 
2016-10-17,11:00:00,4.334,Percent 
2016-10-17,11:05:00,4.334,Percent 
2016-10-17,11:10:00,4.532,Percent 
2016-10-17,11:15:00,4.266,Percent 
2016-10-17,11:20:00,4.266,Percent 
2016-10-17,11:25:00,4.334,Percent 

は、これは5分ごとに報告されます。私はaws-cliにアクセスできない。私はこれを処理し、視覚化のために平均利用率を15分ごとに報告する必要があります。つまり、1時間ごとに、最初の15分間、次の15分間などの平均値を見つける必要があります。だから、毎時間4つの値を報告します。

サンプル出力は次のようになります。それを行うには

Date,Time,CPU_Utilization,Unit 
2016-10-17,09:30:00,14.517,Percent 
2016-10-17,09:45:00,40.414,Percent 
2016-10-17,10:00:00,33.412,Percent 
2016-10-17,10:15:00,26.785,Percent 
... 

一つの方法は、ライン(10000 +を持っている)ファイル全体を読み込むことであろう、そして、日付ごと、一つのウィンドウに属している値を見つけます15分の平均を計算し、すべての値に対して繰り返します。これは最高で効率的なアプローチではないようです。それを行うより良い方法はありますか?ありがとうございました。あなたの入力データが、実際にはかなり小さいので

+0

ファイルが実際にはそれを完全に読み取るには大きすぎますか? 10000行は 'numpy'配列で読み取って処理するために大きくは出ません。私はこれが実際にファイルをループし、それを行ごとに読むよりもうまくいくはずだと思います。 – jotasi

+0

@jotasiいいえ、それは大きくありません。私は、ファイル全体をNumpy配列として読み込むアプローチについても考えました。どのように進めばいいですか?私は特定の日付に属する行を読んで、次に進むべきでしょうか?どんな助けもありがとう。 – theironhide

+0

パンダはこの種のことをするように作られています。 –

答えて

1

、私はnp.genfromtxtを使用することにより、一度にそれを読むことをお勧めしたいです。その後、1時間に4分の1に達したときをチェックし、残りの四半期の数を数えて、適切な範囲を見つけることができます。例えばnp.savetxtを使用して別のテキストファイルに保存するに

import numpy as np 

# Read in the data: 
data = np.genfromtxt("data.dat", skip_header=1, 
        dtype=[("date", "|S10"), 
          ("time", "|S8"), 
          ("cpu_usage", "f8")], 
        delimiter=',', usecols=(0, 1, 2)) 

# Find the first full quarter: 
firstQuarterHour = 0 
while not (int(data[firstQuarterHour]["time"][3:5]) % 15 == 0): 
    firstQuarterHour += 1 
noOfQuarterHours = data[firstQuarterHour:].shape[0]/3 

# Create a reshaped array 
reshaped = data[firstQuarterHour:firstQuarterHour+3*noOfQuarterHours+1].reshape(
    (noOfQuarterHours, 3)) 

# Average over cpu_usage and take the appropriate dates and times: 
cpu_usage = reshaped["cpu_usage"].mean(axis=1) 
dates = reshaped["date"][:, 0] 
times = reshaped["time"][:, 0] 

は今、あなたは、これらの配列を使用することができます。そして、あなたは、時間の4分の3の行とそれらの行の平均でフォームに配列を取得するためにnp.reshapeを使用することができます。