独家 | 手把手教你用Python进行时间序列分解和预测

本文详述了使用Python进行时间序列数据的分解和预测,包括时间序列的基本概念、如何绘制时间序列图、时间序列的四个要素以及移动平均等预测方法。通过对航空旅客数据的分析,展示了如何进行季节性调整和趋势分析,提供了实用的Python代码示例。
摘要由CSDN通过智能技术生成

作者:Mohit Sharma

翻译:王闯(Chuck)

校对:王可汗

本文约4100字,建议阅读10+分钟

本文介绍了用Python进行时间序列分解的不同方法,以及如何在Python中进行时间序列预测的一些基本方法和示例。 

预测是一件复杂的事情,在这方面做得好的企业会在同行业中出类拔萃。时间序列预测的需求不仅存在于各类业务场景当中,而且通常需要对未来几年甚至几分钟之后的时间序列进行预测。如果你正要着手进行时间序列预测,那么本文将带你快速掌握一些必不可少的概念。

目录

  • 什么是时间序列?

  • 如何在Python中绘制时间序列数据?

  • 时间序列的要素是什么?

  • 如何分解时间序列?

  • 经典分解法

  • 如何获得季节性调整值?

  • STL分解法

  • 时间序列预测的基本方法:

  • Python中的简单移动平均(SMA)

  • 为什么使用简单移动平均?

  • Python中的加权移动平均(WMA)

  • Python中的指数移动平均(EMA)


什么是时间序列?

顾名思义,时间序列是按照固定时间间隔记录的数据集。换句话说,以时间为索引的一组数据是一个时间序列。请注意,此处的固定时间间隔(例如每小时,每天,每周,每月,每季度)是至关重要的,意味着时间单位不应改变。别把它与序列中的缺失值混为一谈。我们有相应的方法来填充时间序列中的缺失值。

在开始使用时间序列数据预测未来值之前,思考一下我们需要提前多久给出预测是尤其重要的。你是否应该提前一天,一周,六个月或十年来预测(我们用“界限”来表述这个技术术语)?需要进行预测的频率是什么?在开始预测未来值的详细工作之前,与将要使用你的预测结果的人谈一谈也不失为一个好主意。

如何在PYTHON中绘制时间序列数据?

可视化时间序列数据是数据科学家了解数据模式,时变性,异常值,离群值以及查看不同变量之间的关系所要做的第一件事。从绘图查看中获得的分析和见解不仅将有助于建立更好的预测,而且还将引导我们找到最合适的建模方法。这里我们将首先绘制折线图。折线图也许是时间序列数据可视化最通用的工具。

这里我们用到的是AirPassengers数据集。该数据集是从1949年到1960年之间的每月航空旅客人数的集合。下面是一个示例数据,以便你对数据信息有个大概了解。

#Reading Time Series Data
Airpassenger = pd.read_csv("AirPassengers.csv")
Airpassenger.head(3)

现在,我们使用折线图绘制数据。在下面的示例中,我们使用set_index()将date列转换为索引。这样就会自动在x轴上显示时间。接下来,我们使用rcParams设置图形大小,最后使用plot()函数绘制图表。

Airpassenger = Airpassenger.set_index('date')
pyplot.rcParams["figure.figsize"] = (12,6)
Airpassenger.plot()
pyplot.show()

航空旅客人数

 

1949-1960年间,乘飞机旅行的乘客人数稳定增长。规律性间隔的峰值表明增长似乎在有规律的时间间隔内重

好的,我了解了。关于 apriori 算法,它是一种经典的频繁项集挖掘算法,能够从大规模数据中发现物品之间的关联性。下面是 apriori 算法的原理和 Python 代码实现: ### 原理 apriori 算法的核心思想是利用频繁项集的性质,从候选项集中生成所有频繁项集。频繁项集指的是在数据集中出现频率超过预设阈值的项集。这里的阈值可以是支持度、置信度等度量指标。 算法流程: 1. 对数据集进行扫描,找出所有单个物品组成的候选项集; 2. 计算候选项集的支持度,剔除不满足最小支持度的项集; 3. 根据频繁项集的性质,使用候选项集生成下一级候选项集; 4. 重复步骤2和步骤3,直到无法生成更多的频繁项集。 ### 代码实现 下面是一个简单的 Python 实现,假设我们有一个包含多个交易记录的列表,每个交易记录是一个物品集合。我们要找出频繁项集,其中最小支持度为 0.5。 ```python def load_data(): """ 加载数据集 """ dataset = [ ['I1', 'I2', 'I5'], ['I2', 'I4'], ['I2', 'I3'], ['I1', 'I2', 'I4'], ['I1', 'I3'], ['I2', 'I3'], ['I1', 'I3'], ['I1', 'I2', 'I3', 'I5'], ['I1', 'I2', 'I3'] ] return dataset def create_c1(dataset): """ 生成所有单项候选集 """ c1 = set() for transaction in dataset: for item in transaction: c1.add(frozenset([item])) return c1 def calc_support(dataset, c, min_support): """ 计算候选集的支持度,并剔除不满足最小支持度的项集 """ count = {} for transaction in dataset: for item in c: if item.issubset(transaction): count[item] = count.get(item, 0) + 1 num_items = float(len(dataset)) ret_list = [] support_data = {} for item in count: support = count[item] / num_items if support >= min_support: ret_list.append(item) support_data[item] = support return ret_list, support_data def apriori_gen(lk, k): """ 生成下一级候选集 """ ret_list = [] len_lk = len(lk) for i in range(len_lk): for j in range(i + 1, len_lk): l1 = list(lk[i])[:k - 2] l2 = list(lk[j])[:k - 2] l1.sort() l2.sort() if l1 == l2: ret_list.append(lk[i] | lk[j]) return ret_list def apriori(dataset, min_support=0.5): """ apriori算法主函数 """ c1 = create_c1(dataset) d = list(map(set, dataset)) l1, support_data = calc_support(d, c1, min_support) l = [l1] k = 2 while len(l[k - 2]) > 0: ck = apriori_gen(l[k - 2], k) lk, sup_k = calc_support(d, ck, min_support) support_data.update(sup_k) l.append(lk) k += 1 return l, support_data ``` 我们可以调用 `apriori` 函数来计算频繁项集: ```python dataset = load_data() min_support = 0.5 frequent_itemsets, support_data = apriori(dataset, min_support) ``` `frequent_itemsets` 是一个列表,包含所有的频繁项集。`support_data` 是一个字典,记录每个项集的支持度。 以上就是 apriori 算法的原理和 Python 代码实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值