2016-09-29 11 views
0

私はnetflow_dfという名前のDataFrameに15分のデータを持っています。私は1秒あたりのバイト数をプロットしたいが、1秒間の平均をとっている。 - プロットの1秒ごとに直線を描く。私はこのデータセット内の間隔を選択Pandas DataFrameの時系列から1秒間の平均値をプロットする

netflow_df["timestamp"] = pandas.to_datetime(netflow_df['timestamp']) 
netflow_df["bytes"] = netflow_df["bytes"].astype(int) 
netflow_df = netflow_df.sort_values(by='timestamp') 
netflow_df.timestamp.values 

print netflow_df[["timestamp", "bytes"]].tail(50) 

       timestamp bytes 
947636 2016-09-29 09:25:39 3782 
947637 2016-09-29 09:25:25 3180 
947638 2016-09-29 09:25:25 3180 
947639 2016-09-29 09:25:46 10068 
947640 2016-09-29 09:25:41 3072 
947641 2016-09-29 09:25:46 3480 
947642 2016-09-29 09:25:46 2382 
947643 2016-09-29 09:25:46 3678 
947644 2016-09-29 09:25:46 2382 
947645 2016-09-29 09:25:46 2966 
947646 2016-09-29 09:25:47  80 
947647 2016-09-29 09:25:46 4060 
947648 2016-09-29 09:25:40 3712 
947649 2016-09-29 09:25:46 4016 

Iは、データセットを準備します。これはアクティビティの時間枠をマークします。

今、プロットのため...これは現在無用です。

enter image description here

y軸は、私が探していますバイトのスループットを表していないので、これは無用です。実際には1キロバイトは1024バイトです。私はPandas/Matplotlibにユニットを認識させる方法を見つけていないので、それを変換することができます。

/opt/anaconda2/lib/python2.7/site-packages/ipykernel:私も私のコンテキストのためにこの警告を理解していない

);私は電卓なしでプロットを読み取ることはできません。この方法/ メイン .py:2: SettingWithCopyWarning:DataFrameの スライスのコピーに値を設定しようとしています。 1秒平均(各1秒間隔の直線)を得るために、私は1秒でグループにしようとした代わりに.LOC [row_indexer、col_indexer] = 値今

を、使用してみてください。ここで選択した期間はdf2です。 df3はグループ化されたDataFrameです。

# group in 1s intervals 
netflow_df3 = netflow_df2.groupby(netflow_df2["timestamp"].map(lambda t: t.second)) 
for index, one_sec_group in netflow_df3: 
    avg = one_sec_group["bytes"].mean() 
    print avg 
    for record in one_sec_group: 
     one_sec_group["avg_bytes"] = avg 

これは平均を出力しますが、それは計算時間の(恐ろしい!)がかかると私はプロットのためavg_bytesにアクセスする方法がわかりません。私の初期のテストの1つは、プロットを補間することでしたが、これも同様に悲惨に見えます。あなたが.resampleメソッドを使用することができます

netflow_df2["bytes"] = netflow_df2["bytes"].interpolate(method='cubic', inplace=True) 

答えて

1

:参考のためにあなたのユニットの問題については

>>> netflow_df2 = netflow_df2.set_index('timestamp') 
>>> netflow_df2.resample('1s').mean().plot() 

を、あなたは、単に(例えば)1024バイト列を分割することができます。

>>> netflow_df2['kilobytes'] = netflow_df2['bytes']/1024 
+0

私はこれらの機能にはあまり精通していないので、テストしました。 DateTimeIndexまたはPeriodIndexが必要です。 – wishi

関連する問題