超长时间序列数据可视化的6个技巧

2022-11-11 17:04:15 浏览数 (2)

点击上方“Deephub Imba”,关注公众号,好文章不错过 !

时间序列是由表示时间的x轴和表示数据值的y轴组成,使用折线图在显示数据随时间推移的进展时很常见。它在提取诸如趋势和季节性影响等信息方面有一些好处。

但是在处理超长的时间轴时有一个问题。尽管使用数据可视化工具可以很容易地将长时间序列数据拟合到绘图区域中,但结果可能会很混乱。让我们比较一下下面的两个示例。

上图显示了2021年的每日温度数据

上图像显示了1990-2021年的每日温度数据

虽然我们可以在第一张图上看到细节,但第二张图由于包含了很长的时间序列数据,所以无法看到细节,一些有重要的数据点可能会被隐藏。

为了解决这个问题,本文将介绍6种简单的技巧,帮助更有效地呈现长时间序列数据。

获取数据

本文将使用都柏林机场每日数据,包含自1942年以来在都柏林机场测量的气象数据。数据集包含每日天气信息,如温度、风速、气压等。

导入必要的库

代码语言:javascript复制
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 
 import plotly.express as px
 import plotly.graph_objects as go
 %matplotlib inline

读取CSV文件

代码语言:javascript复制
 df = pd.read_csv('location/file name.csv')
 df['date'] = pd.to_datetime(df['date'])
 df.tail()
代码语言:javascript复制
 df.info()

一个好消息是数据集没有缺失值。

准备数据

这里使用最高和最低温度数据。所用的时间是从1990年到2021年,总共32年。如果想选择其他变量或范围,请随意修改下面的代码。

代码语言:javascript复制
 start = pd.Timestamp('1990-01-01')
 end = pd.Timestamp('2021-12-31')
 df_temp = df[(df['date']>=start)&(df['date']<=end)][['date','maxtp','mintp']]
 df_temp.reset_index(drop=True, inplace=True)
 
 #create an average temperature column
 df_temp['meantp'] = [(i j)/2 for i,j in zip(df_temp.maxtp, df_temp.mintp)]
 df_temp.head()

创建一些以后使用的日期特征。

代码语言:javascript复制
 df_temp['month'] = pd.DatetimeIndex(df_temp['date']).month
 df_temp['year'] = pd.DatetimeIndex(df_temp['date']).year
 df_temp['month_year'] = [str(i) '-' str(j) for i,j in zip(df_temp.year, df_temp.month)]
 df_temp.head()

绘制时间序列图

下面的代码展示了如何从DataFrame绘制一个基本的时间序列图。稍后可以将结果与本文中的其他可视化结果进行比较。

代码语言:javascript复制
 plt.figure(figsize=(16,9))
 sns.set_style('darkgrid')
 sns.lineplot(data=df_temp, y='meantp', x ='date')
 plt.show()

可以看到的图表过于密集,让我们看看如何处理这个问题。

处理超长时间序列数据的可视化

我们用6个简单的技巧来呈现一个长时间序列:

1、放大和缩小

我们可以创建一个交互式图表,结果可以放大或缩小以查看更多细节。所以Plotly是一个很有用的库,可以帮助我们创建交互式图表。

用一行代码直接绘制一个简单的交互式时间序列图。

代码语言:javascript复制
 px.line(df_temp, x='date', y='meantp')

从结果中,我们可以看到整体数据,同时能够放大我们想要扩展的区域,这可能是Plotly唯一一个比matplotlib强的地方

0 人点赞