时间序列数据分析-02

一、日期范围、频率和移位

(1)日期范围

1.使用data_range函数可以创建指定长度的DatetimeIndex索引
import pandas as pd
index=pd.date_range('2021-9-12','2021-10-1')
index

结果:
DatetimeIndex(['2018-12-28', '2018-12-29', '2018-12-30', '2018-12-31',
               '2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
               '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',
               '2019-01-09', '2019-01-10'],
              dtype='datetime64[ns]', freq='D')

在默认情况下,产生的DatetimeIndex索引的间隔为天,如果只传递一个起始或结束日期,则必须传递一个用于生成范围的数字

2.在date_range中指定开始日期和长度
index=pd.date_range(start='2021-9-1',periods=6)
index

结果:
DatetimeIndex(['2021-09-01', '2021-09-02', '2021-09-03', '2021-09-04',
               '2021-09-05', '2021-09-06'],
              dtype='datetime64[ns]', freq='D')
3.在date_range中指定结束日期和长度
index=pd.date_range(end='2021-9-8',periods=4)
index

结果:
DatetimeIndex(['2021-09-05', '2021-09-06', '2021-09-07', '2021-09-08'], dtype='datetime64[ns]', freq='D')

(2)频率和移位

时间序列的频率由基础频率和日期偏置组成,可以通过freq参数使用其他频率,基础时间序列频率如下:

类型偏置类型描述
DDay日历中的每天
BBusinessDay工作日的每天
HHour每小时
T或minMinute每分钟
SSecond每秒
MMonthEnd每月最后一个工作日
BMBusinessMonthEnd工作日的月底日期
MSMonthBegin工作日的月初日期
A-JANBusinessYearEnd每月指定月份的最后一个日历日(A-接JAN\FEB等)
1.使用freq设置频率‘M’
import pandas as pd
index = pd.date_range('2021-3-10','2021-9-8',freq = 'M')
index

结果:
DatetimeIndex(['2021-03-31', '2021-04-30', '2021-05-31', '2021-06-30',
               '2021-07-31', '2021-08-31'],
              dtype='datetime64[ns]', freq='M')
2.使用freq设置频率‘2H’
index = pd.date_range(start =  '2021-9-8',periods = 4,freq = '2H')
index

结果:
DatetimeIndex(['2021-09-08 00:00:00', '2021-09-08 02:00:00',
               '2021-09-08 04:00:00', '2021-09-08 06:00:00'],
              dtype='datetime64[ns]', freq='2H')
3.设置频率字符串
index = pd.date_range(start = '2021-9-8',periods = 4,freq = '2H15T15S')
index

结果:
DatetimeIndex(['2021-09-08 00:00:00', '2021-09-08 02:15:15',
               '2021-09-08 04:30:30', '2021-09-08 06:45:45'],
              dtype='datetime64[ns]', freq='8115S')

“位移”是指将日期向前或向后移动,Series和DataFrame都有一个shift方法用于简单地前向或后向移位,而不改变索引。

4.时间数据的移位
wdate = pd.Series(np.random.randn(4),index = pd.date_range('2021/9/18',periods = 4,freq = 'M'))
print(wdate)
wdate.shift(2)

结果:
2021-09-30    1.353133
2021-10-31    2.249730
2021-11-30    0.772792
2021-12-31    1.400437
Freq: M, dtype: float64
2021-09-30         NaN
2021-10-31         NaN
2021-11-30    1.353133
2021-12-31    2.249730
Freq: M, dtype: float64

单纯的移动不会修改索引,而是使部分数据被丢弃,如果在shift方法中传入频率参数,这样就会修改索引了

5.在shift方法中传入频率参数修改索引
wdate.shift(2,freq='D')

结果:
2021-10-02    1.353133
2021-11-02    2.249730
2021-12-02    0.772792
2022-01-02    1.400437
dtype: float64

二、时期

时期表示的是时间区间,如数天、数月或数年等
Period可以创建时期型的数据,传入字符串、整数或频率即可

1.使用Period可以创建时期型数据
w = pd.Period(2021,freq = 'A-DEC')
print(w)
print(w+2)

结果:
2021
2023
2.PeriodIndex索引的用法
wdate = pd.period_range('2021/6/1','2021/11/1',freq = 'M')
pd.Series(np.arange(6),index = wdate)

结果:
2021-06    0
2021-07    1
2021-08    2
2021-09    3
2021-10    4
2021-11    5
Freq: M, dtype: int32
3.频率转换
p = pd.Period(2021,freq = 'A-FEB')
print(p.asfreq('M',how = 'start'))
print(p.asfreq('M',how = 'end'))

结果:
2020-03
2021-02
4.日期数据的转换
w = pd.date_range('2021/6/1','2021/11/1',freq = 'M')
y = pd.Series(np.arange(5),index = w)
print(y)
ps = y.to_period()
print(ps)

结果:
2021-06-30    0
2021-07-31    1
2021-08-31    2
2021-09-30    3
2021-10-31    4
Freq: M, dtype: int32
2021-06    0
2021-07    1
2021-08    2
2021-09    3
2021-10    4
Freq: M, dtype: int32

三、重采样、降采样和升采样

1.将间隔为天的频率转换为间隔为月的频率
w = pd.date_range(start = '2021/9/1',periods = 100,freq = 'D')
y = pd.Series(np.arange(100),index = w)
print(y.head(8))
ps = y.resample('M').mean()
print(ps)

结果:
2021-09-01    0
2021-09-02    1
2021-09-03    2
2021-09-04    3
2021-09-05    4
2021-09-06    5
2021-09-07    6
2021-09-08    7
Freq: D, dtype: int32
2021-09-30    14.5
2021-10-31    45.0
2021-11-30    75.5
2021-12-31    95.0
Freq: M, dtype: float64
resample方法的参数与描述
参数描述
freq转换频率
axies=0重采样的轴
closed=‘right’在降采样中,设置各时间段哪端是闭合的
label=‘right’在降采样中,如何设置聚合值的标签
loffset=None设置时间偏移
kind=None聚合到时期,默认为时间序列的索引类型
convention升采样采用的约定(start或end),默认为end
2.降采样
wdate = pd.date_range(start = '2021/9/1',periods = 10,freq = 'D')
w = pd.Series(np.arange(10),index = wdate)
print(w)
w.resample('3D',closed = 'right',label = 'right').sum()

结果:
2021-09-01    0
2021-09-02    1
2021-09-03    2
2021-09-04    3
2021-09-05    4
2021-09-06    5
2021-09-07    6
2021-09-08    7
2021-09-09    8
2021-09-10    9
Freq: D, dtype: int32
2021-09-01     0
2021-09-04     6
2021-09-07    15
2021-09-10    24
Freq: 3D, dtype: int32
3.升采样

在升采样中主要是数据的插值,即对缺失值进行填充

ydata = [datetime.datetime(2021,9,1),datetime.datetime(2021,9,6)]
y = pd.Series([1,6],index = ydata)
print(y)
y.resample('D').ffill()

结果:
2021-09-01    1
2021-09-06    6
dtype: int64
2021-09-01    1
2021-09-02    1
2021-09-03    1
2021-09-04    1
2021-09-05    1
2021-09-06    6
Freq: D, dtype: int64
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
时间序列分析是研究一系列按照时间先后顺序排列的数据的变化规律和趋势的统计方法。它广泛应用于经济学、金融学、气象学、交通运输等领域。 在应用R语言进行时间序列分析时,首先需要安装并加载相关的R包。其中,最常用的包包括“stats”、“forecast”和“xts”等。可以通过在R控制台中输入"install.packages('包名')"来下载和安装相应的R包。 下载完成后,可以通过如下步骤进行时间序列分析: 1. 读取数据:使用R语言提供的函数读取时间序列数据,如"read.csv()"函数用于读取CSV格式的数据文件。 2. 转换数据:将读取的数据转换为时间序列对象,可以利用“ts()”函数将数据转换为时间序列对象,或者使用“xts”包将数据转换为eXtensible Time Series(xts)对象。 3. 可视化数据:使用R语言中的绘图函数如“plot()”、"acf()"和"pacf()"等对时间序列数据进行可视化分析,观察数据的趋势、季节性和自相关性等特征。 4. 模型拟合:选择适当的时间序列模型,可以通过“auto.arima()”函数自动选择ARIMA模型,或者手动选择模型参数进行拟合。 5. 模型诊断和评估:通过观察残差图、自相关图和偏自相关图等对模型进行诊断,评估模型的拟合效果和预测能力。 6. 预测:使用拟合好的模型进行预测,可以通过“forecast()”函数获得未来一段时间的预测结果。 总之,通过学习和应用R语言进行时间序列分析,可以更好地理解数据的变化规律和趋势,并提供可靠的预测结果。同时,R语言作为一种开源的数据分析工具,拥有丰富的时间序列分析函数和包,为研究者提供了便捷和灵活的数据分析环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值