Vib*_*bhu 1 python time-series matplotlib python-3.x pandas
我有一个包含日期和质量虚拟值(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
Run Code Online (Sandbox Code Playgroud)
我想做的:绘制随着quality时间的推移“是”(1) 的频率。
我尝试过:绘制这样的直方图:
plt.hist(x=df.loc[df['quality'] == 1].unixTimestamp, bins=78)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我选择了 78,因为等于 1 的最新日期quality是 1405123200,最早的日期是 1203379200。这分别转换为 07/12/2014 和 02/19/2008。两者相差78个月。结果输出相当混乱:
有人可以告诉我如何在散点图上绘制这种趋势吗?我只与unixTimestamp. 非常欢迎有关处理时间序列数据的更好方法的建议。
此外,这是在 170 行上运行的df。实际数据有约 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()
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用 绘制结果pd.DataFrame.plot(),它使用 matplotlib 轻松地从 pandas 数据帧绘制绘图:
import matplotlib.pyplot as plt
daily_quality.plot(kind='bar')
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果您想按月对日期进行分组,则可以使用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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4855 次 |
| 最近记录: |