首页 > 解决方案 > 随着时间的推移可视化速度数据

问题描述

我有一些看起来像这样的简单数据(持续时间以秒为单位):

[
  {
    "date": "2021-05-22T20:09:17.758952+00:00",
    "quantity": 300,
    "duration": 10800.0
  },
  {
    "date": "2021-05-22T20:09:17.758952+00:00",
    "quantity": 400,
    "duration": 5600.0
  },
  {
    "date": "2021-04-22T20:09:17.758952+00:00",
    "quantity": 1400,
    "duration": 3600.0
  },
  {
    "date": "2021-03-22T20:09:17.758952+00:00",
    "quantity": 100,
    "duration": 4300.0
  }
]

我设法弄清楚如何随着时间的推移绘制数量图,如果需要,可以选择将它们重新采样为每月/每周/每周间隔:

from datetime import datetime

import matplotlib.pyplot as plt
import pandas as pd

# `data` is the json above as a Python dict
df = pd.DataFrame(
    {"dt": datetime.fromisoformat(d["date"]), "chars": d["quantity"]} for d in data
)
df.set_index("dt", inplace=True)

df = df.resample("M").sum() # monthly
df = df.loc["2021-01-01":"2021-12-31"]

fig, ax = plt.subplots(figsize=(15, 5))
df.plot(kind="bar", ax=ax)

x_labels = df.index.strftime("%Y %b")
ax.set_xticklabels(x_labels)

plt.show()

但我不确定如何对平均速度(如每天或每周或每月的数量/持续时间)做同样的事情。我可以尝试使用 adhoc 函数来处理它,但我想知道这是否是一个优雅的解决方案。我也愿意改变数据的结构,如果它更容易的话。

标签: pythonpandasdataframematplotlib

解决方案


推荐阅读