当前位置: 首页 > news >正文

比特币10年价格数据(2014-2024)分析(进阶2_时间序列分析)

数据入口:【每周挑战】比特币10年价格数据可视化和量化分析 - Heywhale.com

本数据集包含 2014 - 2024 的比特币美元价格数据,具体包含比特币每日的开盘价、最高价、最低价、收盘价以及成交量等关键信息。数据说明如下:

字段说明
Date日期,比特币的交易日期
Open (Open price per unit)开盘价,每天比特币交易开始时的价格
High (Highest price per unit)最高价,每天交易期间比特币的最高成交价格
Low最低价,每天交易期间比特币的最低成交价格
Close (Adj Close)收盘价,指当天交易结束时的价格,调整后的收盘价考虑了股息等因素
Volume成交量,每天比特币的交易量,通常以比特币的单位表示

在发布的基础与进阶一中,具体分析了价格波动与趋势分析、成交量与市场波动关系分析、价格异常波动检测和成交量异常值检测以及市场特征聚类分析等。在本文中,将从时间序列分析与预测角度入手。

首先读取处理过的数据:

import pandas as pd
file_path = 'data.csv'
data = pd.read_csv(file_path)data

一:检测平稳性

data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5))
plt.plot(data['Adj Close'], label='Adj Close')
plt.title('Time Series of Adjusted Closing Price')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.show()

我们绘制了“调整后的收盘价”的时间序列图,以便更好地了解数据的趋势和季节性:

从“调整后的收盘价”时间序列图中,我们可以看到数据呈现出一定的波动性,但没有明显的趋势或季节性模式。接下来,我们将使用ADF(Augmented Dickey-Fuller)测试来确定数据的平稳性。如果数据不是平稳的,我们可能需要进行差分以使其平稳。

from statsmodels.tsa.stattools import adfullerresult = adfuller(data['Adj Close'])adf_test_statistic = result[0]
p_value = result[1]adf_test_statistic, p_value

ADF测试的统计量为-1.332,p值为0.614。由于p值大于常用的显著性水平(例如0.05),我们不能拒绝原假设,即数据存在单位根,因此数据不是平稳的。

为了使数据平稳,我们可以对数据进行差分。首先,我们将尝试一阶差分,并再次进行ADF测试以检查平稳性。

data_diff = data['Adj Close'].diff().dropna()result_diff = adfuller(data_diff)adf_test_statistic_diff = result_diff[0]
p_value_diff = result_diff[1]adf_test_statistic_diff, p_value_diff

对数据进行一阶差分后,ADF测试的统计量为-8.964,p值接近0。由于p值远小于常用的显著性水平(例如0.05),我们可以拒绝原假设,即差分后的数据不存在单位根,因此数据是平稳的。

接下来,我们将绘制差分后数据的ACF和PACF图,以确定ARIMA模型的参数。

二:确定ARIMA模型的参数

from statsmodels.graphics.tsaplots import plot_acf, plot_pacfplt.figure(figsize=(12, 6))plt.subplot(1, 2, 1)
plot_acf(data_diff, lags=20, ax=plt.gca())
plt.title('ACF of First-Differenced Data')plt.subplot(1, 2, 2)
plot_pacf(data_diff, lags=20, ax=plt.gca())
plt.title('PACF of First-Differenced Data')plt.tight_layout()
plt.show()

从ACF和PACF图中,我们可以观察到:

  • ACF图显示滞后项逐渐减少,但没有明显的截尾。
  • PACF图在滞后1后迅速下降,表明ARIMA模型中的AR项的阶数可能为1。

基于这些观察结果,我们可以尝试构建ARIMA(1,1,0)模型,其中1,1,0分别代表ARIMA模型中的p,d,q参数。

接下来,我们将使用ARIMA(1,1,0)模型对数据进行拟合,并进行预测。

三:ARIMA模型建立与预测

from statsmodels.tsa.arima.model import ARIMAmodel = ARIMA(data['Adj Close'], order=(1, 1, 0))model_fit = model.fit()forecast = model_fit.forecast(steps=5)forecast_values = forecast.tolist()
forecast_values

ARIMA(1,1,0)模型预测的接下来五个时间步的“调整后的收盘价”如下:

  1. 41623.5449
  2. 41623.5492
  3. 41623.5491
  4. 41623.5491
  5. 41623.5491

这些预测值是可以与实际结果相比较,从而评价模型的优劣性。

附录:每日股票行情数据

想要探索多元化的数据分析视角,可以关注之前发布的相关内容。


http://www.mrgr.cn/news/29923.html

相关文章:

  • 【HAProxy06】企业级反向代理HAProxy调度算法之其他算法
  • 数学建模模型算法-Python实现
  • 《基于深度学习的车辆行驶三维环境双目感知方法研究》
  • 【支付行业-支付系统架构及总结】
  • fragment的动态调用方法
  • 利用huffman树实现对文件A先编码后解码
  • windows10下tomcat安装及配置教程
  • Linux系统性能调优技巧详解
  • 【Linux进程控制】进程程序替换
  • C#|.net core 基础 - 值传递 vs 引用传递
  • vue3打包配置 vite、router、nginx配置
  • C语言 | Leetcode C语言题解之第415题字符串相加
  • 0基础学习HTML(四)HTML基础
  • Java | Leetcode Java题解之第416题分割等和子集
  • charles抓包flutter
  • 【Binlog实战】:基于Spring监听Binlog日志
  • 情感计算领域可以投稿的期刊与会议
  • 【iOS】引用计数
  • Java创建教程!(*  ̄3)(ε ̄ *)
  • C++ | Leetcode C++题解之第415题字符串相加
  • 酒店布草洗涤-酒店分层管理编程实现--———未来之窗行业应用跨平台架构
  • NCU-机器学习-作业2:金鱼年龄预测
  • MySQL查询第M条到第N条数据(M<N)
  • 超大酒店司机收布草-酒店分层管理--酒店布草洗涤
  • 虚拟机vaware中cpu设置跑满大核
  • 算法训练——day16快乐数