Python探索金融数据进行时间序列分析和预测

大家好,时间序列分析是一种基于历史数据和趋势分析进行预测的统计技术。它在金融和经济领域非常普遍,因为它可以准确预测趋势并做出明智的决策。本文将使用Python来探索经济和金融数据,执行统计分析,并创建时间序列预测。

我们将在本教程中使用NumPy、Pandas和Matplotlib等不同的Python库,此外还将介绍yfinance库,并使用它来从Yahoo Finance下载金融数据。

安装库

在开始之前,安装必要的库,打开终端并运行以下命令:

pip install pandas numpy matplotlib yfinance

接下来,打开一个新的Jupyter Notebook或选择的任何Python环境,开始实现代码。

数据收集

为了演示如何使用Python进行时间序列分析和预测,将使用微软公司的每日调整收盘价,这些数据由Yahoo Finance提供。在下载数据之前,导入所需的库:

import pandas as pd
import numpy as np
import yfinance as yf
import matplotlib.pyplot as plt

# 设置可视化的样式。
plt.style.use('fivethirtyeight')

接下来,定义微软公司的代码、开始和结束日期。

# 定义代码并下载数据。
MSFT = yf.download('MSFT', start='2010-01-01', end='2022-06-30')

yfinance库提供了一种简单的方法来下载特定代码的金融数据,开始和结束日期表示我们要下载的数据时间段,本文为2010年1月至2022年6月。

探索性数据分析

现在已经下载了数据,然后探索一下数据以更好地了解它的结构和特征,可以使用Pandas来分析数据。

# 显示数据的前5行。
print(MSFT.head())

# 显示数据的统计摘要。
print(MSFT.describe())

第一行代码将数据的前5行输出到控制台。它给我们一个快速查看数据的结构——显示日期、开盘价、最高价、最低价、收盘价和调整后的收盘价。

第二行代码提供了数据的统计摘要,显示计数、平均值、标准差、最小值、最大值和四分位数值。

接下来,让我们绘制每日调整后的收盘价,使数据可视化。

# 绘制微软公司的调整后收盘价。
plt.figure(figsize=(12,6))
plt.plot(MSFT['Adj Close'], label='Adjusted Close')
plt.title('Microsoft Adjusted Close Price')
plt.xlabel('Date')
plt.ylabel('Adjusted Close Price ($)')
plt.legend(loc='upper left')
plt.xticks(rotation=45)
plt.show()

 时间序列分析

接下来需要进行时间序列分析,以深入了解数据的时间行为。自相关函数(ACF)和偏自相关函数(PACF)用于识别连续观测值和预测值之间的关系,可以使用statsmodels库来计算ACF和PACF。

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# 绘制自相关和偏自相关函数
fig, ax = plt.subplots(2, figsize=(12,6))
plot_acf(MSFT['Adj Close'], lags=20, ax=ax[0])
plot_pacf(MSFT['Adj Close'], lags=20, ax=ax[1])
plt.show()

上面的代码绘制了微软公司调整后的收盘价的ACF和PACF,滞后期最长为20。

 从ACF图中,我们可以观察到自相关值在缓慢下降。PACF图表明只有在滞后1时期,才存在显著的自相关性,这表明第一个滞后期或时间段与当前观察值具有最强的相关性。

预测

现在我们已经分析了数据并了解了其结构和趋势,让我们使用Prophet库进行一些预测。

pip install prophet
from prophet import Prophet

首先,我们将创建一个新的DataFrame,仅捕获我们分析所需的列。

# 创建一个新的DataFrame
data = MSFT.loc[:, ['Adj Close']]
data.head()

接下来,我们将重命名列以适应Prophet的命名约定。

# 重命名列以适应Prophet的命名约定
data = data.reset_index()
data = data.rename(columns={'Date':'ds', 'Adj Close':'y'})
data.head()

上述代码将DataFrame中必要的列重命名以适应Prophet的命名约定,ds列表示日期,而y列表示我们要预测的值。

现在,我们将数据拆分为训练集和测试集,并使用Prophet库进行预测。

train_data = data[data['ds'] < '2021-07-01']
test_data = data[data['ds'] >= '2021-07-01']

# 创建模型并拟合训练数据
model = Prophet()
model.fit(train_data)

# 定义一个与预测范围一致的新的DataFrame
future = test_data[['ds']]
forecast = model.predict(future)

# 绘制预测图
model.plot(forecast)
plt.title('Microsoft Adjusted Close Price: Actual vs. Forecast')
plt.xlabel('Date')
plt.ylabel('Adjusted Close Price ($)')
plt.show()

上述代码创建了一个Prophet模型并拟合训练数据,未来的DataFrame用ds列表示我们的预测日期。然后我们进行预测,并将结果保存在forecast DataFrame中,最后使用模型的plot()函数绘制预测图。

 总结

时间序列分析和预测是获得不同领域数据洞察力的重要统计技术。本文从雅虎金融收集数据,并使用Python进行数据分析,包括探索性数据分析和预测。

本文演示了各种可视化技术,例如绘制移动平均线、ACF和PACF图,同时还进行了时间序列预测,这在金融和经济中是做出明智的投资决策所必需的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/40292.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

55. 跳跃游戏

题目链接&#xff1a;力扣 解题思路&#xff1a; 贪心&#xff0c;因为题目只需要判断能够到达最后一个下标&#xff0c;所以可以从前往后遍历&#xff0c;使用maxEnd保存已经遍历过的位置能够跳跃达到的最大下标&#xff0c;如果maxEnd大于等于nums.length-1&#xff0c;则返回…

系统学习Linux-Rsync远程数据同步服务(三)

一、概述 rsync是linux 下一个远程数据同步工具 他可通过LAN/WAN快速同步多台主机间的文件和目录&#xff0c;并适当利用rsync 算法减少数据的传输 会对比两个文件的不同部分&#xff0c;传输差异部分&#xff0c;因此传输速度相当快 rsync可拷贝、显示目录属性&#xff0c…

ChatGPT:利用人工智能助推教育创新

当前&#xff0c;世界正需要一个更加开放的、更加个性化的学习空间&#xff0c;学生的个性发展和生存发展应该被关注和尊重&#xff0c;课程应该引导学生掌握有用的东西&#xff0c;学生之间的差距应该被正视&#xff0c;教育成功的标准也要被重新定义。过去&#xff0c;我们总…

N天爆肝数据库——MySQL(5)

本文主要对索引进行了讲解 这里写目录标题 本文主要对索引进行了讲解索引概述介绍优缺点索引结构二叉树红黑树B-Tree(多路平衡查找树)BTreeBTree与B-Tree区别: HashHash索引特点 为什么InnoDB存储引擎选择使用BTree索引结构&#xff1f;索引分类在InnoDB存储引擎中&#xff0c;…

基于微信小程序的求职招聘系统设计与实现(Java+spring boot+MySQL+微信小程序)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于微信小程序的求职招聘系统设计与实现&#xff08;Javaspring bootMySQL微信小程序&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java s…

(五)「消息队列」之 RabbitMQ 主题(使用 .NET 客户端)

0、引言 先决条件 本教程假设 RabbitMQ 已安装并且正在 本地主机 的标准端口&#xff08;5672&#xff09;上运行。如果您使用了不同的主机、端口或凭证&#xff0c;则要求调整连接设置。 获取帮助 如果您在阅读本教程时遇到问题&#xff0c;可以通过邮件列表或者 RabbitMQ 社区…

【C++】list的使用及底层实现原理

本篇文章对list的使用进行了举例讲解。同时也对底层实现进行了讲解。底层的实现关键在于迭代器的实现。希望本篇文章会对你有所帮助。 文章目录 一、list的使用 1、1 list的介绍 1、2 list的使用 1、2、1 list的常规使用 1、2、2 list的sort讲解 二、list的底层实现 2、1 初构…

windows环境hadoop报错‘D:\Program‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

Hadoop版本为2.7.3&#xff0c;在环境配置好后&#xff0c;检查hadoop安装版本&#xff0c;报如标题所示错误&#xff0c;尝试网上主流的几种方法均无效。 错误&#xff1a;windows环境hadoop报错’D:\Program’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 错误方…

perl输出中文乱码【win10】

perl输出中文乱码 运行的时候输出的内容变成了中文乱码&#xff0c;原因首先来查找一下自己的perl的模块里面是否有Encode-CN。请运行打开你的cmd并输入perldoc -l Encode::CN 如果出现了地址 则就是有&#xff0c;如果没有需要进行该模块的安装。 安装方式有很多种&#xff0…

STM32F407-- DMA使用

目录 1. DMA结构体 STM32F103&#xff1a; STM32F407&#xff1a; 2. F4系列实现存储器到存储器数据传输 1&#xff09;结构体配置&初始化 2&#xff09;主函数 补充知识点&#xff1a;关于变量存储的位置&#xff0c;关于内部存储器一般存储什么内容 3. F4系列实现…

机器学习 day26(多标签分类,Adam算法,卷积层)

1. 多标签分类 多标签分类&#xff1a;对于单个输入特征&#xff0c;输出多个不同的标签y多类分类&#xff1a;对于单个输入特征&#xff0c;输出单个标签y&#xff0c;但y的可能结果有多个 2. 为多标签分类构建神经网络模型 我们可以构建三个不同的神经网络模型来分别预测…

C++第四讲

思维导图 仿照string类&#xff0c;实现myString类 /* ---------------------------------author&#xff1a;YoungZorncreated on 2023/7/19 19:20.--------------------------------- */ #include<iostream> #include<cstring>using namespace std;class myStri…

搜索引擎elasticsearch :安装elasticsearch (包含安装组件kibana、IK分词器、部署es集群)

文章目录 安装elasticsearch1.部署单点es1.1.创建网络1.2.加载镜像1.3.运行 2.部署kibana2.1.部署2.2.DevTools2.3 分词问题(中文不友好) 3.安装IK分词器3.1.在线安装ik插件&#xff08;较慢&#xff09;3.2.离线安装ik插件&#xff08;推荐&#xff09;1&#xff09;查看数据卷…

APP测试学习之Android模拟器Genymotion安装配置不上解决方法以及adb基本使用

Android模拟器Genymotion安装配置不上解决方法以及adb基本使用 Genymotion下载安装配置遇见的问题解决方法adb基本使用 Genymotion下载 1.首先进入官网 https://www.genymotion.com/ 2.在官网注册一个账号 https://www-v1.genymotion.com/account/login/ 3.下载 https://www.g…

Git源代码管理方案

背景 现阶段的Git源代码管理上有一些漏洞&#xff0c;导致在每次上线发布的时间长、出问题&#xff0c;对整体产品的进度有一定的影响。 作用 新的Git源代码管理方案有以下作用&#xff1a; 多功能并行开发时&#xff0c;测试人员可以根据需求任务分配测试自己的功能&#…

单片机第一季:零基础9——直流电机和步进电机

目录 1&#xff0c;直流电机 2&#xff0c;步进电机 1&#xff0c;直流电机 直流电机是指能将直流电能转换成机械能&#xff08;直流电动机&#xff09;或将机械能转换成直流电能&#xff08;直流发电机&#xff09;的旋转电机。它是能实现直流电能和机械能互相转换的电机。…

大模型开发(八):基于思维链(CoT)的进阶提示工程

全文共8000余字&#xff0c;预计阅读时间约16~27分钟 | 满满干货&#xff08;附复现代码&#xff09;&#xff0c;建议收藏&#xff01; 本文目标&#xff1a;介绍提示工程基础类方法、思维链提示方法和LtM的提示方法&#xff0c;并复现解决论文中四个经典推理问题。 代码下载…

Spring实现文件上传,文件上传

第一步&#xff1a;创建jsp文件 创建form表单 提交文件是post 文件上传的表单 服务端能不能获得数据&#xff0c;能 实现单文件上传的步骤&#xff1a; 导入相应的坐标&#xff1a;在pom.xml文件中进行导入 再导入这份&#xff1a; 第二步&#xff0c;在spring-MVC的上传中去配…

React中使用Redux

1.为什么要使用redux redux是一个专门用于状态管理的一个库&#xff0c;和vue中的vuex功能类似。其中核心点就是状态的管理。虽然我们无论在vue还是在react中我们组件间的通行都可以使用消息总线或者父子组件间的消息传递来进行操作。但是如果我们需要A组件的状态在其他十个或者…

mongodb,redis,mysql 区别

一、MySQL 关系型数据库。 在不同的引擎上有不同 的存储方式。 查询语句是使用传统的sql语句&#xff0c;拥有较为成熟的体系&#xff0c;成熟度很高。 开源数据库的份额在不断增加&#xff0c;mysql的份额页在持续增长。 缺点就是在海量数据处理的时候效率会显著变慢。 二、Mo…