数据分析实战——货币分析与预测

目录

一、比特币分析与预测

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)
        continue
    aic = model.aic
    if aic < best_aic:
        best_model = model
        best_aic = aic
        best_param = param
    results.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)


总结

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

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用\[1\]:在过去的两个月里,Databricks公司举办了一场会议,将数据团队聚集在一起,共召开220多个会议,有无数机会与同行交流——超过50,000名数据科学家、数据工程师、分析师、商业领袖和其他数据专业人士。 Spark + AI 峰会虚拟环境。 引用\[2\]:本书以数据智能为灵魂,以Spark 2.4.X版本为载体,以Spark+ AI商业案例实战和生产环境下几乎所有类型的性能调优为核心,对企业生产环境下的Spark+AI商业案例与性能调优抽丝剥茧地进行剖析。全书共分4篇,内核解密篇基于Spark源码,从一个实战案例入手,循序渐进地全面解析Spark 2.4.X版本的新特性及Spark内核源码;商业案例篇选取Spark开发中最具代表性的经典学习案例,在案例中综合介绍Spark的大数据技术;性能调优篇覆盖Spark在生产环境下的所有调优技术; Spark+ AI内幕解密篇讲解深度学习动手实践,通过整合Spark、PyTorch以及TensorFlow揭秘Spark上的深度学习内幕。本书适合所有大数据和人工智能学习者及从业人员使用。对于有丰富大数据和AI应用经验的人员,本书也可以作为大数据和AI高手修炼的参考用书。同时,本书也特别适合作为高等院校的大数据和人工智能教材。 问题:spark数据分析实战——奥运会 回答: Spark是一个强大的大数据处理框架,可以用于数据分析和处理。在奥运会数据分析实战中,Spark可以帮助我们处理大规模的奥运会数据,进行数据清洗、转换和分析。通过使用Spark的分布式计算能力和优化技术,我们可以高效地处理大量的奥运会数据,并从中提取有价值的信息。同时,Spark还提供了丰富的数据处理和机器学习库,可以帮助我们进行数据挖掘和建模,以便更好地理解和预测奥运会的趋势和结果。通过结合Spark和AI技术,我们可以实现更深入的奥运会数据分析,并为奥运会的组织者、运动员和观众提供更好的决策支持和用户体验。 #### 引用[.reference_title] - *1* *2* [免费参加全球最大的Spark+AI峰会(Databricks 2020年6月22-26日)!免费访问峰会主题演讲及分组会议!](https://blog.csdn.net/duan_zhihua/article/details/106729096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [热烈祝贺王家林大咖大数据经典传奇著作《Spark大数据商业实战三部曲》 畅销书籍第二版 清华大学出版社发行...](https://blog.csdn.net/duan_zhihua/article/details/106294896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@李忆如

感谢!!! 有什么问题欢迎交流

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值