目录

一、比特币分析与预测

1.前置准备

2.比特币价格变化趋势分析

3.稳定性检测与时间序列检测

4.数据变化

5.模型分析

6.残留物分析

7.预测

二、参考资料

总结


梗概

本篇博客主要通过几个实例(不断更新,欢迎关注!)实践各种数据分析与机器学习处理方法(内附数据集与python代码)


一、货币分析与预测

1.前置准备

下载数据库(包含各时段价格、时间等因素),下载地址为Bitcoin Historical Data | Kaggle,本站笔者已上传资源,在主页内资源可找到分析数据集python-统计分析文档类资源-CSDN文库,导入相关包与数据如下:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
from scipy import stats
import statsmodels.api as sm
import warnings
from itertools import product
from datetime import datetime
warnings.filterwarnings('ignore')
plt.style.use('seaborn-poster')
df = pd.read_csv('../input/workshop1/BTCUSD.csv')

2.货币价格变化趋势分析

通过对数据库中四种因素来分别分析其对货币价格变化的影响并绘图,代码如下:

# 时间戳转化为日常时间格式
df.Timestamp = pd.to_datetime(df.Timestamp, unit='s')# 对样本在不同时间频率上进行采样
df.index = df.Timestamp
df = df.resample('D').mean()df_month = df.resample('M').mean()df_year = df.resample('A-DEC').mean()df_Q = df.resample('Q-DEC').mean()# 中文乱码处理
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False# 绘图
fig = plt.figure(figsize=[15, 8])
plt.suptitle("比特币价格变化趋势, 单位 美元", fontsize=22)plt.subplot(221)
plt.plot(df.Weighted_Price, '-', label='By Days')
plt.legend()plt.subplot(222)
plt.plot(df_month.Weighted_Price, '-', label='By Months')
plt.legend()plt.subplot(223)
plt.plot(df_Q.Weighted_Price, '-', label='By Quarters')
plt.legend()plt.subplot(224)
plt.plot(df_year.Weighted_Price, '-', label='By Years')
plt.legend()plt.show()

效果如图所示:

3.稳定性检测与时间序列检测

对上述四种影响货币价格走向的四种因素分别进行稳定性与时间序列检测,代码如下:

plt.figure (figsize=[15, 7])
sm.tsa.seasonal_decompose(df_month.Weighted_Price).plot()
print("Dickey–Fuller test: p=%f" % sm.tsa.stattools.adfuller(df_month.Weighted_Price)[1])
plt.show()

效果如图所示:

4.数据变化

由于连续的响应变量不满足正态分布,所以数据需要进行Box-Cox变换,代码如下:

df_month['Weighted_Price_box'], lmbda = stats.boxcox(df_month.Weighted_Price)
print("Dickey–Fuller test: p=%f" % sm.tsa.stattools.adfuller(df_month.Weighted_Price)[1])

由于时间序列季节对数据的影响,所以季节差异化需要考虑,代码如下:

df_month['prices_box_diff'] = df_month.Weighted_Price_box - df_month.Weighted_Price_box.shift(12)
print("Dickey–Fuller test: p=%f" % sm.tsa.stattools.adfuller(df_month.prices_box_diff[12:])[1])

为减少数据的随机性与波动性,需要进行数据规律化分布,代码如下:

# Regular differentiation
df_month['prices_box_diff2'] = df_month.prices_box_diff - df_month.prices_box_diff.shift(1)
plt.figure(figsize=(15,7))# STL-decomposition
sm.tsa.seasonal_decompose(df_month.prices_box_diff2[13:]).plot()
print("Dickey–Fuller test: p=%f" % sm.tsa.stattools.adfuller(df_month.prices_box_diff2[13:])[1])plt.show()

效果如图:

三种数据变化后的test效果如图12所示。

5.模型分析

将处理完的数据导入对应的模型中,使用自相关和部分自相关图对参数进行初始近似处理代码如下:

# Initial approximation of parameters using Autocorrelation and Partial Autocorrelation Plots
plt.figure(figsize=(15, 7))
ax = plt.subplot(211)
sm.graphics.tsa.plot_acf(df_month.prices_box_diff2[13:].values.squeeze(), lags=28, ax=ax)
ax = plt.subplot(212)
sm.graphics.tsa.plot_pacf(df_month.prices_box_diff2[13:].values.squeeze(), lags=28, ax=ax)
plt.tight_layout()
plt.show()

效果如图:

参数初始化与模型选择代码如下:

# Initial approximation of parameters
Qs = range(0, 2)
qs = range(0, 3)
Ps = range(0, 3)
ps = range(0, 3)
D = 1
d = 1
parameters = product(ps, qs, Ps, Qs)
parameters_list = list(parameters)
len(parameters_list)# Model Selection
results = []
best_aic = float("inf")
warnings.filterwarnings('ignore')
for param in parameters_list:try:model = sm.tsa.statespace.SARIMAX(df_month.Weighted_Price_box, order=(param[0], d, param[1]),seasonal_order=(param[2], D, param[3], 12)).fit(disp=-1)except ValueError:print('wrong parameters:', param)continueaic = model.aicif aic < best_aic:best_model = modelbest_aic = aicbest_param = paramresults.append([param, model.aic])
result_table = pd.DataFrame(results)
result_table.columns = ['parameters', 'aic']
print(result_table.sort_values(by='aic', ascending=True).head())
print(best_model.summary())

参数与建模结果如所示:

6.残留物分析

使用STL分解法对残留物进行分析,代码如下:

# STL-decomposition
plt.figure(figsize=(15, 7))
plt.subplot(211)
best_model.resid[13:].plot()
plt.ylabel(u'Residuals')
ax = plt.subplot(212)
sm.graphics.tsa.plot_acf(best_model.resid[13:].values.squeeze(), lags=48, ax=ax)print("Dickey–Fuller test:: p=%f" % sm.tsa.stattools.adfuller(best_model.resid[13:])[1])plt.tight_layout()
plt.show()

效果如图所示:

7.预测

根据前六步得到的分析数据与模型结果,基于时间序列与四种因素对比特币价格进行预测,并与实际价格趋势曲线进行拟合对比,代码如下:

def invboxcox(y, lmbda):if lmbda == 0:return np.exp(y)else:return np.exp(np.log(lmbda * y + 1) / lmbda)# 预测
df_month2 = df_month[['Weighted_Price']]
date_list = [datetime(2017, 6, 30), datetime(2017, 7, 31), datetime(2017, 8, 31), datetime(2017, 9, 30),datetime(2017, 10, 31), datetime(2017, 11, 30), datetime(2017, 12, 31), datetime(2018, 1, 31),datetime(2018, 1, 28)]
future = pd.DataFrame(index=date_list, columns=df_month.columns)
df_month2 = pd.concat([df_month2, future])
df_month2['forecast'] = invboxcox(best_model.predict(start=0, end=75), lmbda)
plt.figure(figsize=(15, 7))
df_month2.Weighted_Price.plot()
df_month2.forecast.plot(color='r', ls='--', label='Predicted Weighted_Price')
plt.legend()
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('比特币涨势, 月份')
plt.ylabel('mean USD')
plt.show()

效果如图所示:

分析:由图可见,实际曲线与预测曲线拟合较好,说明模型的优越性,预测算法的准确性,有着较好的预测效果。

二、参考资料

1.Bitcoin Historical Data | Kaggle

2.价格预测 - Heywhale.com

3.十个Kaggle项目带你入门数据分析 - 知乎 (zhihu.com)


总结

一文搞懂数据分析那点事儿!!!实践出真知,跑起来吧~

数据分析实战——货币分析与预测相关推荐

  1. ‘数据分析实战’——STP分析案例(甲保险公司客户分类分析)

    第6章 STP分析案例解析--甲保险公司客户分类分析 6.1 研究目的:精准营销 对车险客户分类调研分析,开展精准营销,以期建立起自身的相对优势 6.2 研究内容:客户分类维度 客户分类的5种维度  ...

  2. 【python】数据分析实战:分析全国旅游景点数据,暑假还不知道去哪玩的看过来

    前言 暑假是学生老师们拥有的最长假期,这么长的假期,光待在家里太浪费了,何不选择一个好去处,欣赏欣赏夏季的美景?当然,并不是所有地方都适合这个时节去的,那么,暑假适合去国内那些地方旅游呢?现在我们学习 ...

  3. python数据分析实战之信用卡违约风险预测

    文章目录 1.明确需求和目的 2. 数据收集 3.数据预处理 3.1 数据整合 3.1.1 加载相关库和数据集 3.1.2 主要数据集概览 3.2 数据清洗 3.2.1 多余列的删除 3.2.2 数据 ...

  4. ‘数据分析实战’——战略分析案例(某购物商城分析案例)

    第4章 战略分析案例解析--购物中心商城战略分析 4.1 研究目的:战略选择 战略分析的目的:帮助企业进行战略选择 4.2 研究内容:环境分析 战略选择的分析内容:环境分析,包括宏观环境,市场环境和竞 ...

  5. 【数据分析与挖掘实战】电信用户流失分析与预测

    背景 关于用户留存有这样一个观点,如果将用户流失率降低5%,公司利润将提升25%-85%.如今高居不下的获客成本让电信运营商遭遇"天花板",甚至陷入获客难的窘境.随着市场饱和度上升 ...

  6. 数据分析与数据挖掘实战案例本地房价预测(716):

    数据分析与数据挖掘实战案例(7/16): 2022 年首届钉钉杯大学生大数据挑战赛练习题目 练习题 A:二手房房价分析与预测 要点: 1.机器学习 2.数据挖掘 3.数据清洗.分析.pyeahcrs可 ...

  7. 实战案例 :电信客户流失分析与预测

    本文所有代码都通过运行! 将从以下方面进行分析:1.背景 2.提出问题 3.理解数据 4.数据清洗 5.可视化分析 6.用户流失预测 7.结论和建议 本项目带你根据以上过程详细分析电信客户数据! 01 ...

  8. MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 摘要 近些年,随着计算机技术的不断发展,神 ...

  9. python建筑案例_Python数据分析实战-链家北京二手房价分析

    前言 最近在自学Python,通过学习大家的分享案例,看到使用Python进行较多的主要4个方面:爬虫,数据处理,数据可视化以及机器学习建模.对我来说目标就是: 熟练使用numpy pandas 进行 ...

最新文章

  1. asp.net文件上传下载的简单实现
  2. GO语言基础之reflect反射
  3. 【API】网络编程模型、多线程
  4. 物流运输系统设计浅谈
  5. 关于z-index的总结
  6. HDU 4864 Task(贪心或高斯消元)
  7. 【转载】#323 - A Generic Class is a Template for a Class
  8. Scala 入门1(变量、分支循环、函数)
  9. QQ注册时间查询非常准确源码程序
  10. php 修改多级菜单,用PHP实现多级树型菜单
  11. 计算机数控入门,数控基础知识课件
  12. 腾讯测试岗位的面试经历
  13. win10一直正在检查更新_受够了WIN10自动更新?阿虚教你一键禁止!
  14. 【洛谷P2967】【USACO 2009 Dec】电子游戏 Video Game Troubles
  15. 十个常见常用的麦克劳林公式
  16. replaceAll()如何同时替换多个不同的字符串(或多个符号)
  17. sstream和strstream的用法
  18. Python:基本语法看这一篇就够了
  19. js时间戳与标准时间的相互转换
  20. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

热门文章

  1. java锁屏_Java防锁屏小程序代码实例
  2. 国内外做单片机较有实力的公司
  3. Wireshark教程:检查Trickbot感染
  4. 软件项目常见风险及其预防措施
  5. 基于canvas使用粒子拼出你想要的文字[2]——粒子的动画效果
  6. 计算机新手必备知识,5分钟带你全面了解电脑,新手入门必备知识,值得收藏!...
  7. Redis该怎么学?其实很简单,这份学习路线+资料+书单我全部贡献出来了!
  8. 什么镜头最适合拍风景_【相机配件】谈谈佳能有哪些适合拍风景和人像的好镜头...
  9. JDK 1.8 64位 下载 安装 配置
  10. Qt网络编程之搭建Udp通信【单播、组播、广播】