次のようなデータがあります。
timestamp, country_code, request_type, latency
2013-10-10-13:40:01, 1, get_account, 134
2013-10-10-13:40:63, 34, get_account, 256
2013-10-10-13:41:09, 230, modify_account, 589
2013-10-10-13:41:12, 230, get_account, 43
2013-10-10-13:53:12, 1, modify_account, 1003
タイムスタンプは秒単位であり、規則的ではありません。
次のようなパンダクエリで表現する方法:
- 10 分の解像度で country_code ごとのリクエスト数 ?
- 1 分の解像度で request_type ごとに 99% のパーセンタイル レイテンシ?
- 10 分単位での国コードとリクエスト タイプごとのリクエスト数
次に、すべてのグループを同じグラフにグラフ化し、それぞれを時間の経過とともに独自の線としてグラフ化します。
アップデート:
1の提案に基づいています。私は持っています:
bycc = df.groupby('country_code').reason.resample('10T', how='count')
bycc.plot() # BAD: uses (country_code, timestamp) on the x axis
bycc[1].plot() # properly graphs the time-series for country_code=1
しかし、各 country_code を、x 軸に適切なタイムスタンプを、y 軸に値を示す個別の行としてグラフ化する簡単な方法を見つけることができないようです。2つの問題があると思います(1)タイムスタンプはcountry_codeごとに同じではありません。同じ開始/終了に合わせる必要があり、(2)複数インデックスのTimeSeriesオブジェクトから移動するための正しいAPI /メソッドを見つける必要がありますマルチインデックスの最初の値ごとに 1 行の単一プロットに変換します。私のやり方で働いています...
更新 2
以下はそれを行うようです:
i = 0
max = 3
pylab.rcParams['figure.figsize'] = (20.0, 10.0) # get bigger graph
for cc in bycc.index.levels[0]:
i = i + 1
if (i <= max):
cclabel = "cc=%d" % (cc)
bycc[cc].plot(legend=True, label=cclabel)
ノイジーになるので、最大値までしか出力しません。次に、多くの時系列を含むプロットをより適切に表示する方法を考えてみましょう。