↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习,不错过
Datawhale干货
作者:小雨姑娘,康涅狄格大学,Datawahle成员
最近在Kaggle发现了一个关于时间序列比较不错的kernal,决定翻译一下搬运过来,大家一起学习交流一下。如果预期不错的话准备写四章,分别是时间序列Python基本操作、统计分析、时间序列分解与随机游走、统计建模分析。
0 数据集
本教程包括两个数据集(后台回复“210321”可获取):
Google Stocks Data:提供了长达十三年的股票数据。时间粒度精确到天,提供了每个股票每天的最高价,最低价格以及开盘价格等信息。
Humidity in different world cities:提供了世界各地各个城市的大气湿度信息,时间粒度为分钟。
1. 基本操作(一)
1.1 读取数据
在使用pd.read_csv读取时间序列时,可以设置两个参数。使用parse_dates参数可以把指定的列从文本类型转化为Pandas内置时间类型,使用index_col可以把指定的列转化为数据集的索引。
google = pd.read_csv('../input/stock-time-series-20050101-to-20171231/GOOGL_2006-01-01_to_2018-01-01.csv',
index_col='Date', parse_dates=['Date'])
google.head()
另一个数据集也可以以同样的方法读入
1.2 数据预处理
股票数据并不存在缺失值,但是天气湿度数据却存在缺失值。使用参数为ffill的fillna()函数,用后一时刻的观测值进行填补。
humidity = humidity.iloc[1:]
humidity = humidity.fillna(method='ffill')
humidity.head()
1.3 数据可视化
使用pandas Series对象的asfreq[2]函数对时间序列数据以指定频率作图。其中M代表以月为基本单位。默认是使用时间窗的结尾作为结果,例如2019年12月这个月的结果实际是12月31号的数据。
humidity["Kansas City"].asfreq('M').plot()
plt.title('Humidity in Kansas City over time(Monthly frequency)')
plt.show()
google['2008':'2010'].plot(subplots=True, figsize=(10,12))
plt.title('Google stock attributes from 2008 to 2010')
plt.savefig('stocks.png')
plt.show()
1.4 时间戳与时间窗
时间戳(Timestamps)用来表示某个时间点,时间窗(Periods)用来表示某个时间区间。时间窗常常用来检测在某个时间段内是否发生了特殊事件。时间戳与时间窗之间也可以相互进行转换。
创建时间戳:
timestamp = pd.Timestamp(2017, 1, 1, 12)
timestamp
创建时间窗:
period = pd.Period('2017-01-01')
period
检测时间戳是否在特定时间窗内
period.start_time < timestamp < period.end_time
将时间戳转换为时间窗
new_period = timestamp.to_period(freq='H')
将时间窗转换为时间戳
new_timestamp = period.to_timestamp(freq='H', how='start')
1.5 使用date_range方法
date_range 是一个可以返回多个datetime对象组成的序列的方法。它经常被用于创建连续的时间序列(用法非常简单,不要再用for循环创建时间序列了!!)
dr1 = pd.date_range(start='1/1/18', end='1/9/18')
也可以指定频率
dr2 = pd.date_range(start='1/1/18', end='1/1/19', freq='M')
1.6 Datetime对象
pandas.to_datetime() [3]用来将参数转化为datetime对象。具体使用方法可以看官方文档
df = pd.DataFrame({'year': [2015, 2016], 'month': [2, 3], 'day': [4, 5]})
df = pd.to_datetime(df)