当前位置: 首页 > 科技观察

简单的Python时间序列可视化实现

时间:2023-03-19 18:43:12 科技观察

时间序列数据在数据科学领域无处不在,在量化金融领域也很常见。它可以用来分析价格趋势、预测价格、探索价格行为等。学习将时间序列数据可视化,可以帮助我们更直观地探索时间序列数据,找到其潜在规律。本文将使用Python中的matplotlib[1]库并举例说明。matplotlib库是一个桌面绘图包(二维绘图库),用于创建出版质量的图表,是Python中最基本的可视化工具。【工具】Python3【数据】Tushare【注意】例子侧重于方法的讲解,请灵活运用。1、单一时间序列首先,我们从tushare.pro获取指数日行情数据,查看数据类型。importtushareastsimportpandasasspdpd.set_option('expand_frame_repr',False)#显示所有列ts.set_token('yourtoken')pro=ts.pro_api()df=pro.index_daily(ts_code='399300.SZ')[['trade_date','close']]df.sort_values('trade_date',inplace=True)df.reset_index(inplace=True,drop=True)print(df.head())trade_dateclose020050104982.794120050105992.564220050106983.174320050107983.958420050110993.879print(df.dtypes)trade_dateobjectclosefloat64dtype:对象交易时间列'trade_date'不是时间类型,也不是索引,所以需要先进行转换。df['trade_date']=pd.to_datetime(df['trade_date'])df.set_index('trade_date',inplace=True)print(df.head())closetrade_date2005-01-04982.7942005-01-05992.5642005-01-06983.1742005-01-07983.9582005-01-10993.879接下来就可以开始绘图了,我们需要导入matplotlib.pyplot【2】,然后通过设置set_xlabel()和set_xlabel()为x轴和y轴添加标签。importmatplotlib.pyplotaspltax=df.plot(color='')ax.set_xlabel('trade_date')ax.set_ylabel('399300.SZclose')plt.show()matplotlib库中有很多内置的图表样式可以选择from,通过打印plt.style.available查看具体选项,应用时直接调用plt.style.use('fivethirtyeight')。打印(plt.style.available)['bmh','经典','dark_background','快速','fivethirtyeight','ggplot','灰度','seaborn-bright','seaborn-colorblind','seaborn-dark-palette','seaborn-dark','seaborn-darkgrid','seaborn-deep','seaborn-muted','seaborn-notebook','seaborn-paper','seaborn-pastel','seaborn-poster','seaborn-talk','seaborn-ticks','seaborn-white','seaborn-whitegrid','seaborn','Solarize_Light2','tableau-colorblind10','_classic_test']plt.style.use('fivethirtyeight')ax1=df.plot()ax1.set_title('FiveThirtyEightStyle')plt.show()2.设置更多细节上面画的是一个很简单的折线图,其实可以用在plot()通过设置不同参数的值来为图形添加更多细节,使其更加美观和清晰。figsize(width,height)设置图形的大小,linewidth设置线的宽度,fontsize设置字体大小。然后,调用set_title()方法设置标题。ax=df.plot(color='blue',figsize=(8,3),linewidth=2,fontsize=6)ax.set_title('399300.SZclosefrom2005-01-04to2019-07-04',fontsize=8)plt.show()如果想看折线在某个子时间段的变化,可以直接截取时间段然后画图,如df['2018-01-01':'2019-01-01']dfdf_subset_1=df['2018-01-01':'2019-01-01']ax=df_subset_1.plot(color='blue',fontsize=10)plt.show()如果你想要突出显示某个日期或观察,您可以调用.axvline()和.axhline()方法来添加垂直和水平参考线。ax=df.plot(color='blue',fontsize=6)ax.axvline('2019-01-01',color='red',linestyle='--')ax.axhline(3000,color='green',linestyle='--')plt.show()也可以调用axvspan()方法添加一段时间的阴影标注,其中alpha参数设置阴影的透明度,0表示完全透明,并且1表示全彩。ax=df.plot(color='blue',fontsize=6)ax.axvspan('2018-01-01','2019-01-01',color='red',alpha=0.3)ax.axhspan(2000,3000,color='green',alpha=0.7)plt.show()3.均线时间序列有时候,我们想观察某个窗口周期内均线的变化趋势,可以调用窗函数滚动履行。以下示例显示了窗口期为250天的移动平均收盘价,以及相对于移动标准差构建的上下通道线上下。ma=df.rolling(window=250).mean()mstd=df.rolling(window=250).std()ma['upper']=ma['close']+(mstd['close']*2)ma['lower']=ma['close']-(mstd['close']*2)ax=ma.plot(linewidth=0.8,fontsize=6)ax.set_xlabel('trade_date',fontsize=8)ax.set_ylabel('399300.SZclosefrom2005-01-04to2019-07-04',fontsize=8)ax.set_title('Rollingmeanandvarianceof399300.SZcloefrom2005-01-04to2019-07-04',fontsize=10)plt.show()4.多时间序列如果想可视化多时间序列数据,也可以直接调用plot()方法。例子中我们从tushare.pro中选取三只股票的每日行情数据进行分析。#获取数据code_list=['000001.SZ','000002.SZ','600000.SH']data_list=[]forcodeincode_list:print(code)df=pro.daily(ts_code=code,start_date='20180101',end_date='20190101')[['trade_date','close']]df.sort_values('trade_date',inplace=True)df.rename(columns={'close':code},inplace=True)df.set_index('trade_date',inplace=True)data_list.append(df)df=pd.concat(data_list,axis=1)print(df.head())000001.SZ000002.SZ600000.SH000001.SZ000002.SZ600000.SHtrade_date2018010215.61022.722018010313.3332.3312.662018010413.2533.2533.1212.662.662.662.662.662.662.662.662.3034.7612.6920180101812.9635.99912.68#)调用.plot.area()方法生成时间序列数据的面积图,显示累计总数。ax=df.plot.area(fontsize=12)ax.set_xlabel('trade_date')ax.legend(fontsize=15)plt.show()如果想在不同的子图中分别显示每个时间序列,可以通过Set参数subplots=True来实现。layout指定使用的行数和列数,sharex和sharey用于设置是否共享行列,colormap='viridis'为每行设置不同的颜色。df.plot(subplots=True,layout=(2,2),sharex=False,sharey=False,colormap='viridis',fontsize=7,legend=False,linewidth=0.3)plt.show()5.小结本文主要介绍如何使用Python中的matplotlib库对时间序列数据进行一些简单的可视化操作,包括单个时间序列的可视化并在图中设置细节,移动平均时间序列和多个时间序列的可视化。