在这篇文章中,我们将从头开始做一个关于黄金价格预测的项目。要构建任何数据科学项目,我们必须遵循某些步骤,这些步骤不需要以相同的顺序进行。在我们的项目中,我们将按顺序完成这些步骤。
1. 问题表述
问题表述是我们在开始任何项目之前所做的最重要的步骤之一。必须对我们的数据科学项目的目标有一个明确的想法。在我们的例子中,这个项目的目标是分析黄金的价格。黄金的价格是不稳定的,它们随着时间的推移而迅速变化。我们这个项目的主要目的是预测每单位黄金的价格。
导入库
我们将在一个地方导入本文中使用的所有库,这样就不必每次使用时都导入,这将保存我们的时间和精力。
- Pandas -一个构建在NumPy之上的Python库,用于有效的矩阵乘法和矩阵操作,它也用于数据清理,数据合并,数据整形和数据聚合
- Numpy -一个用于数值数学计算和处理多维ndarray的Python库,它也有一个非常大的数学函数集合来操作这个数组
- Matplotlib -它用于绘制2D和3D可视化图,它还支持各种输出格式,包括图形
- Seaborn - seaborn库是在Matplotlib之上创建的,用于绘制漂亮的图。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
sns.set_style("darkgrid", {
"grid.color": ".6",
"grid.linestyle": ":"})
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import Lasso
from sklearn.ensemble import RandomForestRegressor
from xgboost import XGBRegressor
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
加载数据集
# read dataset using pndas function
# use parse_dates argument to change datetime dtype
# 数据集链接: https://pan.baidu.com/s/1RiOzXhG4zzM6xeWqcmqY6g?pwd=htf4 提取码: htf4
dataset = pd.read_csv("gold_price_data.csv",
parse_dates=["Date"])
# information about the dataset
dataset.info()
输出
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2290 entries, 0 to 2289
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Date 2290 non-null datetime64[ns]
1 SPX 2290 non-null float64
2 GLD 2290 non-null float64
3 USO 2290 non-null float64
4 SLV 2290 non-null float64
5 EUR/USD 2290 non-null float64
dtypes: datetime64[ns](1), float64(5)
memory usage: 107.5 KB
2. 数据预处理
缺失值/重复值
缺失值对我们的模型训练有非常严重的影响。有些模型,如线性回归,不适合含有缺失值的数据集。然而,有一些模型即使在缺失数据集,如随机森林,也能很好地工作。但在处理数据集时,首先处理缺失值始终是一个好的做法。此外,需要注意的一点是,当我们使用pandas加载数据时,它会自动检测null值并将其替换为NAN。
# Missing Values/Null Values Count
dataset.isna().sum().sort_values(ascending=False)
输出
Date 0
SPX 0
GLD 0
USO 0
SLV 0
EUR/USD 0
dtype: int64
相关性
我们应该始终检查数据集的两列之间是否存在任何相关性。如果两个或多个列相互关联,并且它们都不是目标变量,那么我们必须使用一种方法来删除这种相关性。一些流行的方法是PCA(主成分分析)。我们还可以删除两个列中的一个,或者使用这两个列创建一个新列。
# Calculate correlation matrix
correlation = dataset.corr()
# Create heatmap
sns.heatmap(