python - 如何绘制时间序列中事件的频率?

标签 python python-3.x pandas matplotlib time-series

我有一个包含日期和质量虚拟值(0 或 1)的数据框:

      unixTimestamp         date     quality
 0       1370131200   06 2, 2013           1
 1       1290643200  11 25, 2010           1
 2       1283990400   09 9, 2010           1
 3       1290556800  11 24, 2010           1
 4       1317254400  09 29, 2011           1
 5       1388707200   01 3, 2014           1
 6       1398556800  04 27, 2014           1
 7       1399161600   05 4, 2014           0
 8       1405036800  07 11, 2014           1
 9       1390176000  01 20, 2014           1
 10      1397606400  04 16, 2014           1

我想要做的:绘制随着时间的推移 quality 中 yes (1) 的频率。

我尝试过:绘制这样的直方图:

plt.hist(x=df.loc[df['quality'] == 1].unixTimestamp, bins=78)
plt.show()

我选择了 78,因为 quality 等于 1 的最新日期是 1405123200,最早的日期是 1203379200。这分别转换为 07/12/2014 和 02/19/2008。两者相差78个月。 结果输出相当困惑:

enter image description here

有人可以告诉我如何在散点图上绘制这种趋势吗?我仅使用 unixTimestamp 。非常欢迎有关处理时间序列数据的更好方法的建议。

此外,这是在 df 的 170 行上运行的。实际数据有约 10M 行。有人还可以建议表示数据的最佳方式吗?提前致谢!

最佳答案

您似乎希望按日期对观察结果进行分组,然后按质量等于 1 的每个时间段(日、月……)内的行数进行分组。

这项工作是为 pandas 中的 .groupby 方法而剪掉的。在进行分组之前,让我们确保 python 也能识别日期。

import pandas as pd

df['alt_date'] = pd.to_datetime(df['unixTimestamp'], unit='s')
daily_quality = df.groupby('alt_date')['quality'].sum()

现在,您可以使用 pd.DataFrame.plot() 绘制结果,它使用 matplotlib 轻松地从 pandas 数据帧绘制绘图:

import matplotlib.pyplot as plt

daily_quality.plot(kind='bar')
plt.show()

如果您希望按月对日期进行分组,则可以使用 pd.Grouper(),其工作原理如下:

monthly_quality = df.groupby(pd.Grouper(key='alt_date', freq='M'))['quality']
                    .sum()
                    .fillna(0)   # in case you have missing months

monthly_quality.plot(kind='bar')
plt.show()

关于python - 如何绘制时间序列中事件的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53945708/

相关文章:

python - Selenium 查看一个类并确定该类中有多少元素,最后对找到的所有元素执行操作

python - 当 MySQL Select 语句时,Flask 出现 Python 错误

python-3.x - 如何将pytesseract部署到Heroku

python - Pandas 将 cumsum 拆分为上限,然后在不同的列中继续使用余数

python - pytest-html 自定义

python - 如何在 Mac OS Sierra 上使用 Virtualenv 安装 PyGreSQL

python-3.x - 如何从 python 脚本调用 *.jsl 脚本

python-3.x - docker 错误 : FileNotFoundError: [Errno 2]

Python类声明 "positional argument"错误

python - 计算 Pandas DataFrame 列中字符串中某个位置的字符频率