2017-04-03 6 views
1

Python、Pandas、データ解析はこちら。パンダを使用しています。DateOffsetでのローリング

私がしようとしているのは、大量のApacheサーバーログセットから60分の最も長い時間間隔を特定することです。ログからタイムスタンプを抽出しました。

time_recievedは、私の目標は、タイムスタンプのリストに沿って、私はそれらの点のいずれかで始まる60分間隔の数を取得することができますということです。この

[ 
1995-07-01T00:01:18-04:00, 
1995-07-01T00:01:19-04:00, 
1995-07-01T00:01:19-04:00, 
1995-07-01T00:01:19-04:00, 
1995-07-01T00:01:19-04:00, 
1995-07-01T00:01:19-04:00, 
1995-07-01T00:01:19-04:00, 
1995-07-01T00:11:45-04:00, 
1995-07-01T00:11:45-04:00, 
1995-07-01T00:11:45-04:00, 
1995-07-01T00:13:43-04:00, 
1995-07-01T00:13:43-04:00, 
1995-07-01T00:13:43-04:00, 
1995-07-01T00:13:43-04:00, 
1995-07-01T00:13:43-04:00, 
1995-07-01T00:13:46-04:00, 
1995-07-01T00:13:47-04:00, 
1995-07-01T00:13:48-04:00, 
1995-07-01T00:13:48-04:00, 
1995-07-01T00:13:48-04:00, 
1995-07-01T00:13:48-04:00, 
1995-07-01T00:13:48-04:00, 
1995-07-01T00:13:48-04:00, 
1995-07-01T00:13:50-04:00, 
1995-07-01T00:13:53-04:00, 
1995-07-01T00:13:53-04:00, 
1995-07-01T00:13:53-04:00, 
1995-07-01T00:13:53-04:00, 
1995-07-01T00:13:53-04:00, 
1995-07-01T00:13:53-04:00, 
1995-07-01T00:14:11-04:00, 
1995-07-01T00:14:17-04:00, 
1995-07-01T00:14:17-04:00, 
1995-07-01T00:14:17-04:00, 
1995-07-01T00:14:17-04:00, 
1995-07-01T00:14:17-04:00, 
1995-07-01T00:14:17-04:00, 
1995-07-01T00:14:18-04:00, 
1995-07-01T00:14:20-04:00, 
1995-07-01T00:14:20-04:00, 
1995-07-01T00:14:20-04:00, 
1995-07-01T00:14:20-04:00, 
1995-07-01T00:14:20-04:00, 
1995-07-01T00:14:20-04:00, 
1995-07-01T00:14:21-04:00, 
1995-07-01T00:14:21-04:00, 
1995-07-01T00:14:21-04:00, 
1995-07-01T00:14:21-04:00, 
1995-07-01T00:14:21-04:00, 
1995-07-01T00:14:21-04:00, 
1995-07-01T00:14:22-04:00, 
1995-07-01T00:14:22-04:00, 
1995-07-01T00:14:23-04:00, 
1995-07-01T00:14:24-04:00, 
1995-07-01T00:14:24-04:00, 
1995-07-01T00:14:24-04:00, 
1995-07-01T00:14:24-04:00, 
1995-07-01T00:14:24-04:00, 
1995-07-01T00:14:26-04:00, 
1995-07-01T00:14:27-04:00, 
1995-07-01T00:14:30-04:00, 
1995-07-01T00:14:30-04:00, 
1995-07-01T00:14:30-04:00, 
1995-07-01T00:14:30-04:00, 
1995-07-01T00:14:30-04:00, 
1995-07-01T00:14:30-04:00, 
1995-07-01T00:14:31-04:00, 
1995-07-01T00:14:32-04:00, 
1995-07-01T00:14:32-04:00, 
1995-07-01T00:14:32-04:00, 
1995-07-01T00:14:32-04:00, 
1995-07-01T00:14:32-04:00, 
1995-07-01T00:14:36-04:00, 
] 

のような値を持つリストであります。ローリングウインドウが出たら、私はそれを処理できると思う。パンダマニュアルの

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.rolling.html 私は、ウィンドウ引数 」 ウィンドウに関する次のエントリが見つかりました:int型、または移動ウィンドウの サイズのオフセットこれは統計値を計算するために使用される観測数で、それぞれ。ウィンドウは固定サイズになります オフセットの場合、これは各ウィンドウの期間になります。各ウィンドウは、期間に含まれる観測値に基づいてサイズが変更されます。これはdatetimikkeのインデックスにのみ有効です。新しいです0.19.0 "

私はパンダを使用しています19.2オプションo時間の観測値に基づいて可変サイズのウィンドウを使用することは、正確に私が望むように聞こえる。だから私はそれを実装しようとした:

import pandas as pd 
from pandas.tseries.offsets import DateOffset 
def busiest_timeframe(data,timeframe = 60):  
    time_window = DateOffset(minutes = 60) 
    print (type(time_window)) 
    series = pd.Series(data) 
    series.rolling(time_window).count() 
    return series 

busiest_tf = busiest_timeframe(time_received)  

私は次のエラーを取得: 昇給とValueErrorを私は使用していますいくつかの他のオフセットオブジェクトがある

ValueError: window must be an integer 

(「ウィンドウは整数でなければなりませんか」)?このパンダの機能は動作しませんか?私はドキュメントを誤解しましたか?

ご協力いただきありがとうございます。

+1

'series.rolling'は_time_ window_ではなく_number_個の観測値を処理します。したがって、最初のパラメータは整数でなければなりません。 – DyZ

+0

ウィンドウではなく、リサンプラを探しているかもしれません: 'series.resample( '60M')。count()'。ただし、リサンプラはローリングしていないため、シリーズを60分のグループに分割するだけです。 – DyZ

+0

DYZ pandasのドキュメントによれば、「オフセットの場合、これは各ウィンドウの時間間隔になります。各ウィンドウはtime_period ' –

答えて

0

悲しいことに、私はseries.rollingの使い方を知らず、インデックスとして設定しなかったかのように見えます。しかし、それでも私にはエラーがあるので、別の方法(おそらく実際には醜い方法)があります。もし他の人がもっと良い方法を持っていれば、あなたが他の人の言葉を聞いたほうがいいでしょう。

だから、ブーリアンインデックスを使用します。コード(多くの印刷ステートメント)で遊んで、おそらく> =と< =に>と<を必要に応じて変更してください。

liste=[ 
"1995-07-01T00:01:18-04:00", 
"1995-07-01T00:01:19-04:00", 
"1995-07-01T00:01:19-04:00", 
"1995-07-01T00:01:19-04:00", 
"1995-07-01T00:01:19-04:00", 
"1995-07-01T00:01:19-04:00", 
"1995-07-01T00:01:19-04:00", 
"1995-07-01T00:11:45-04:00", 
"1995-07-01T00:11:45-04:00", 
"1995-07-01T00:11:45-04:00", 
"1995-07-01T00:13:43-04:00", 
"1995-07-01T00:13:43-04:00", 
"1995-07-01T00:13:43-04:00", 
"1995-07-01T00:13:43-04:00", 
"1995-07-01T00:13:43-04:00", 
"1995-07-01T00:13:46-04:00", 
"1995-07-01T00:13:47-04:00", 
"1995-07-01T00:13:48-04:00", 
"1995-07-01T00:13:48-04:00", 
"1995-07-01T00:13:48-04:00", 
"1995-07-01T00:13:48-04:00", 
"1995-07-01T00:13:48-04:00", 
"1995-07-01T00:13:48-04:00", 
"1995-07-01T00:13:50-04:00", 
"1995-07-01T00:13:53-04:00", 
"1995-07-01T00:13:53-04:00", 
"1995-07-01T00:13:53-04:00", 
"1995-07-01T00:13:53-04:00", 
"1995-07-01T00:13:53-04:00", 
"1995-07-01T00:13:53-04:00", 
"1995-07-01T00:14:11-04:00", 
"1995-07-01T00:14:17-04:00", 
"1995-07-01T00:14:17-04:00", 
"1995-07-01T00:14:17-04:00", 
"1995-07-01T00:14:17-04:00", 
"1995-07-01T00:14:17-04:00", 
"1995-07-01T00:14:17-04:00", 
"1995-07-01T00:14:18-04:00", 
"1995-07-01T00:14:20-04:00", 
"1995-07-01T00:14:20-04:00", 
"1995-07-01T00:14:20-04:00", 
"1995-07-01T00:14:20-04:00", 
"1995-07-01T00:14:20-04:00", 
"1995-07-01T00:14:20-04:00", 
"1995-07-01T00:14:21-04:00", 
"1995-07-01T00:14:21-04:00", 
"1995-07-01T00:14:21-04:00", 
"1995-07-01T00:14:21-04:00", 
"1995-07-01T00:14:21-04:00", 
"1995-07-01T00:14:21-04:00", 
"1995-07-01T00:14:22-04:00", 
"1995-07-01T00:14:22-04:00", 
"1995-07-01T00:14:23-04:00", 
"1995-07-01T00:14:24-04:00", 
"1995-07-01T00:14:24-04:00", 
"1995-07-01T00:14:24-04:00", 
"1995-07-01T00:14:24-04:00", 
"1995-07-01T00:14:24-04:00", 
"1995-07-01T00:14:26-04:00", 
"1995-07-01T00:14:27-04:00", 
"1995-07-01T00:14:30-04:00", 
"1995-07-01T00:14:30-04:00", 
"1995-07-01T00:14:30-04:00", 
"1995-07-01T00:14:30-04:00", 
"1995-07-01T00:14:30-04:00", 
"1995-07-01T00:14:30-04:00", 
"1995-07-01T00:14:31-04:00", 
"1995-07-01T00:14:32-04:00", 
"1995-07-01T00:14:32-04:00", 
"1995-07-01T00:14:32-04:00", 
"1995-07-01T00:14:32-04:00", 
"1995-07-01T00:14:32-04:00", 
"1995-07-01T00:14:36-04:00" 
] 
import pandas as pd 

from pandas.tseries.offsets import DateOffset 
def busiest_timeframe(data,timeframe = 1): 

    series = pd.to_datetime(pd.Series(data), format='%Y-%m-%dT%H:%M:%S') #maybe you dont need the to_datetime here. I did. 
    df=series.to_frame(name="time") 
    df["count"]=[df[(df["time"] >= x) & (df["time"] <= (x+pd.Timedelta(seconds=timeframe)))].size for x in df["time"].values] #change seconds to minutes or whatever you want 
    highest_index=df["count"].idxmax() 
    #print(df.ix[highest_index]["time"]) 
    df2=df[(df["time"] >= df.ix[highest_index]["time"]) & (df["time"] <= (df.ix[highest_index]["time"]+pd.Timedelta(seconds=timeframe)))] #change seconds here to th same as above 
    return df2 
print(busiest_timeframe(liste)) 
関連する問題