首页 > 解决方案 > Matplotlib - 时间序列分析 Python

问题描述

我正在尝试使用此数据(https://gist.github.com/datomnurdin/33961755b306bc67e4121052ae87cfbc)创建两种类型的时间序列。首先每天计数多少。每天第二总情绪。

每天第二总情绪的代码。

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('data_filtered.csv', parse_dates=['date'], index_col='date')

def plot_df(df, x, y, title="", xlabel='Date', ylabel='Value', dpi=100):
    plt.figure(figsize=(16,5), dpi=dpi)
    plt.plot(x, y, color='tab:red')
    plt.gca().set(title=title, xlabel=xlabel, ylabel=ylabel)
    plt.show()

plot_df(df, x=df.index, y=df.sentiment, title='Sentiment Over Time')

第二个时间序列图对我来说似乎没有任何意义。也可以保存该图以供将来参考。

在此处输入图像描述

标签: pythonpython-3.xpandasmatplotlibtime-series

解决方案


尝试检查源数据。


日期

如果我尝试date使用以下代码绘制分布:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('data_filtered.csv', parse_dates = ['date'])

df['date'].hist()
plt.show()

我得到:

在此处输入图像描述

如您所见,大多数date值都集中在2020-05-19or附近2020-05-30,两者之间没有。因此,仅在图表的左侧和右侧而不是在中间查看点是有意义的。


情绪

如果我尝试sentiment使用以下代码绘制分布:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('data_filtered.csv', parse_dates = ['date'])

df['sentiment'].hist()
plt.show()

我得到:

在此处输入图像描述

如您所见,这些sentiment值集中在三组中-101; 没有其他价值。因此,仅在图形的底部、中心和顶部查看点是有意义的,而不是其他任何地方。


散点图

最后,我尝试在散点图中组合date和:sentiment

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('data_filtered.csv', parse_dates = ['date'])

fig, ax = plt.subplots(1, 1, figsize = (16, 5))

ax.plot(df['date'], df['sentiment'], 'o', markersize = 15)
ax.set_title('Sentiment Over Time')
ax.set_xlabel('Date')
ax.set_ylabel('Value')

plt.show()

我得到:

在此处输入图像描述

这正是您的图表,但这些点没有通过线连接。您可以看到这些值是如何集中在特定区域而不是分散的。


累积

如果要按 聚合sentimentdate,请检查以下代码:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('data_filtered.csv', parse_dates = ['date'])

df_cumulate = df.groupby(['date']).sum()

def plot_df(df, x, y, title="", xlabel='Date', ylabel='Value', dpi=100):
    plt.figure(figsize=(16,5), dpi=dpi)
    plt.plot(x, y, color='tab:red')
    plt.gca().set(title=title, xlabel=xlabel, ylabel=ylabel)
    plt.savefig('graph.png')
    plt.show()

plot_df(df_cumulate, x=df_cumulate.index, y=df_cumulate.sentiment, title='Sentiment Over Time')

我通过这条线汇总数据df = pd.read_csv('data.csv', parse_dates = ['date'])sentiment这里是随时间累积的图:

在此处输入图像描述


推荐阅读