私は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は、データセットを準備します。これはアクティビティの時間枠をマークします。
今、プロットのため...これは現在無用です。
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)
私はこれらの機能にはあまり精通していないので、テストしました。 DateTimeIndexまたはPeriodIndexが必要です。 – wishi