(11-4-2 )比特币价格预测系统:数据预处理

11.4.2  数据预处理

1)列出指定目录中的所有文件名,对于每个找到的文件,使用os.path.join将目录名和文件名组合成完整的文件路径,并打印出来。具体实现代码如下所示。

# 导入必要的库
import numpy as np  # 导入numpy库,用于处理数值数据
import pandas as pd  # 导入pandas库,用于数据处理和CSV文件的输入/输出

# 输入数据文件位于只读的 "../input/" 目录下
# 例如,运行此代码(通过点击运行或按Shift+Enter)将列出输入目录下的所有文件

import os  # 导入os库,用于操作文件和目录

# 使用os.walk遍历指定目录中的文件
for dirname, _, filenames in os.walk('input'):
    for filename in filenames:
        # 打印每个文件的完整路径
        print(os.path.join(dirname, filename))

执行后会输出:

input/bitcoin-historical-data/bitstampUSD_1-min_data_2012-01-01_to_2021-03-31.csv

(2)使用IPython中的HTML工具来插入自定义的HTML样式,以更改文本标题的样式。具体实现代码如下所示。

from IPython.display import HTML  # 导入IPython中的HTML工具,用于在Jupyter Notebook中插入HTML内容

# 使用HTML标签定义了一些自定义的样式,这些样式将应用于h1、h2和h3标题标签
HTML("""
<style>
h1,h2,h3 {
	margin: 1em 0 0.5em 0;
	font-weight: 600;
	font-family: 'Titillium Web', sans-serif;
	position: relative;  
	font-size: 36px;
	line-height: 40px;
	padding: 15px 15px 15px 2.5%;
	color: #13003A;
	box-shadow: 
		inset 0 0 0 1px rgba(53,86,129, 1), 
		inset 0 0 5px rgba(53,86,129, 1),
		inset -285px 0 35px white;
	border-radius: 0 10px 0 15px;
	background: #fff;
}
</style>
""")

上述代码演示了如何使用HTML和IPython来自定义文档的外观,这需要在Jupyter Notebook环境中运行,以便查看样式在文档中的效果。

3使用库Pandas对比特币历史数据进行预处理和聚合操作,最终,Price 包含了按日期聚合的每日平均加权价格,可以用于进一步的分析和可视化。这是数据预处理和聚合的一种示例,用于处理时间序列数据。具体实现代码如下所示。

import pandas as pd  # 导入pandas库,用于数据处理
import numpy as np  # 导入numpy库,用于数值计算
# 读取比特币历史数据的CSV文件
df = pd.read_csv('../input/bitcoin-historical-data/bitstampUSD_1-min_data_2012-01-01_to_2021-03-31.csv')
# 将时间戳列转换为日期列
df['date'] = pd.to_datetime(df['Timestamp'], unit='s').dt.date
# 根据日期进行分组
group = df.groupby('date')
# 计算每日加权平均价格(Weighted_Price)的均值
Price = group['Weighted_Price'].mean()

4对前面计算的每日平均加权价格数据进行了一系列操作,包括重塑数据框架、筛选数据和重新设置索引。具体实现代码如下所示。

# 将每日平均价格数据转换为DataFrame,并保留日期信息
df_price_zz = Price.to_frame()
df_price_zz['Timestamp'] = df_price_zz.index
df_price_zz['Timestamp'] = pd.to_datetime(df_price_zz['Timestamp'])

# 重置索引,删除原有索引列
df_price_zz.reset_index(drop=True, inplace=True)

# 过滤数据,仅保留从2017年及以后的数据
df_price_include_zz = df_price_zz[df_price_zz['Timestamp'].dt.year >= 2017]

# 再次重置索引,删除原有索引列
df_price_include_zz.reset_index(drop=True, inplace=True)

# 将Timestamp列设置为DataFrame的索引
df_price_include_zz.set_index("Timestamp", inplace=True)

最终的DataFrame df_price_include_zz 包含了从2017年开始的每日平均加权价格数据,执行后会输出:

Weighted_Price
Timestamp	
2017-01-01	981.637688
2017-01-02	1013.199484
2017-01-03	1019.992995
2017-01-04	1079.434027
2017-01-05	1039.655397
...	...
2021-03-27	55193.357260
2021-03-28	55832.958824
2021-03-29	56913.993819
2021-03-30	58346.912268
2021-03-31	58764.349363
1551 rows × 1 columns

5继续处理时间序列数据,包括将数据转换为 NumPy 数组、筛选数据以及划分训练集和测试集。具体实现代码如下所示。

# 将每日平均价格数据转换为 NumPy 数组
Price_array = Price.to_numpy()

# 将每日平均价格数据转换为DataFrame,并保留日期信息
df_price = Price.to_frame()
df_price['Timestamp'] = df_price.index
df_price['Timestamp'] = pd.to_datetime(df_price['Timestamp'])

# 重置索引,删除原有索引列
df_price.reset_index(drop=True, inplace=True)

# 过滤数据,仅保留从2017年及以后的数据
df_price_include = df_price[df_price['Timestamp'].dt.year >= 2017]

# 再次重置索引,删除原有索引列
df_price_include.reset_index(drop=True, inplace=True)

# 设置预测的天数
prediction_days = 50

# 划分训练集和测试集
# 训练集包含除了最后 prediction_days 天的数据
df_train = df_price_include[:len(df_price_include) - prediction_days]

# 测试集包含最后 prediction_days 天的数据
df_test = df_price_include[len(df_price_include) - prediction_days:]

这样将拥有一个用于训练和测试时间序列预测模型的数据集,其中训练集包含历史数据,而测试集包含将用于未来预测的数据。

未完待续,源码和数据在最后完结篇

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农三叔

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值