Python数据清洗与股票价格预测:实战案例与代码详解
Python数据清洗与股票价格预测:实战案例与代码详解/n/n在金融领域,股票价格预测一直是一个热门话题。而准确的预测离不开高质量的数据。本文将介绍如何使用Python对股票数据进行清洗,并结合机器学习模型进行价格预测。/n/n### 1. 数据清洗/n/n数据清洗是数据分析的第一步,也是至关重要的一步。原始数据往往存在缺失值、重复值、异常值等问题,需要进行清洗才能用于后续分析。/n/npython/nimport pandas as pd/n/n# 读取数据/ndata = pd.read_excel('E:/pythonProject5/深度学习/新建 XLS 工作表.xls')/n/n# 打印数据的列名/nprint(data.columns)/n/n# 删除缺失值/ndata.dropna(inplace=True)/n/n# 删除重复值/ndata.drop_duplicates(inplace=True)/n/n# 处理异常值/ndata = data[(data['涨跌幅'] >= -10) & (data['涨跌幅'] <= 10)]/n/n# 数据归一化/n# 最小-最大规范化/ndef min_max_scale(data):/n return (data - data.min()) / (data.max() - data.min())/n/n# 对数据进行归一化/ndata['涨跌幅'] = min_max_scale(data['涨跌幅'])/n/n/n# Z-score规范化/ndef z_score_scale(data):/n return (data - data.mean()) / data.std()/n/n# 对数据进行归一化/ndata['涨跌幅'] = z_score_scale(data['涨跌幅'])/n/n# 数据标准化/n/nfrom scipy.stats import boxcox/n/n# Box-Cox变换/n# 需要保证数据为正数,如果数据中存在负数,则需要先进行平移操作/ndata['涨跌幅'] = data['涨跌幅'] - data['涨跌幅'].min() + 1/ndata['涨跌幅'], _ = boxcox(data['涨跌幅'])/n/n# 对数据进行标准化/ndata['涨跌幅'] = z_score_scale(data['涨跌幅'])/n/n/nfrom scipy.stats import yeojohnson/n/n/n# Yeo-Johnson变换/n# 需要保证数据为正数,如果数据中存在负数,则需要先进行平移操作/ndata['涨跌幅'] = data['涨跌幅'] - data['涨跌幅'].min() + 1/ndata['涨跌幅'], _ = yeojohnson(data['涨跌幅'])/n/n# 对数据进行标准化/ndata['涨跌幅'] = z_score_scale(data['涨跌幅'])/n/n/n### 2. 股票价格预测模型/n/n#### 2.1 CNN模型/n/npython/nimport pandas as pd/nimport numpy as np/nfrom tensorflow.keras.models import Sequential/nfrom tensorflow.keras.layers import Conv1D, MaxPooling1D, Flatten, Dense/n/n# 读取Excel数据/ndata = pd.read_excel('E:/pythonProject5/深度学习/新建 XLS 工作表.xls')/n/n# 提取股票价格列/nprices = data['收盘'].values/n/n# 数据归一化/nfrom sklearn.preprocessing import MinMaxScaler/nscaler = MinMaxScaler(feature_range=(0, 1))/nscaled_prices = scaler.fit_transform(prices.reshape(-1, 1))/n/n# 创建训练集和测试集/ntrain_size = int(len(scaled_prices) * 0.8)/ntrain_data = scaled_prices[:train_size]/ntest_data = scaled_prices[train_size:]/n/n# 构建时间序列数据/ndef create_sequences(data, seq_length):/n X = []/n y = []/n for i in range(len(data)-seq_length):/n X.append(data[i:i+seq_length])/n y.append(data[i+seq_length])/n return np.array(X), np.array(y)/n/nseq_length = 10/nX_train, y_train = create_sequences(train_data, seq_length)/nX_test, y_test = create_sequences(test_data, seq_length)/n/n# 构建卷积神经网络模型/nmodel = Sequential()/nmodel.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(seq_length, 1)))/nmodel.add(MaxPooling1D(pool_size=2))/nmodel.add(Flatten())/nmodel.add(Dense(50, activation='relu'))/nmodel.add(Dense(1))/n/n# 编译模型/nmodel.compile(optimizer='adam', loss='mse')/n/n# 训练模型/nmodel.fit(X_train, y_train, epochs=50, batch_size=16)/n/n# 使用模型进行预测/npredicted_prices = model.predict(X_test)/n/n# 反归一化/npredicted_prices = scaler.inverse_transform(predicted_prices)/n/n# 打印预测结果/nfor i in range(len(predicted_prices)):/n print('Predicted:', predicted_prices[i], 'Actual:', test_data[i+seq_length])/n/n/n#### 2.2 线性回归模型/n/npython/nimport pandas as pd/nfrom sklearn.model_selection import train_test_split/nfrom sklearn.linear_model import LinearRegression/nfrom sklearn.metrics import mean_squared_error/n/n# 读取数据集/ndata = pd.read_excel('E:/pythonProject5/深度学习/新建 XLS 工作表.xls')/n/n# 选择特征和目标变量/nfeatures = data[['开盘', '涨跌额', '涨跌幅', '最低', '最高', '成交量', '成交金额']]/ntarget = data['收盘']/n/n# 划分训练集和测试集/nX_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)/n/n# 训练模型/nmodel = LinearRegression()/nmodel.fit(X_train, y_train)/n/n# 预测股票价格/npredictions = model.predict(X_test)/n/n# 对比实际价格进行验证/nmse = mean_squared_error(y_test, predictions)/nprint('均方误差(MSE):', mse)/n/n# 输出预测结果和实际价格/nresult = pd.DataFrame({'预测价格': predictions, '实际价格': y_test})/nprint(result)/n/nimport matplotlib.pyplot as plt/n/nplt.rcParams['font.sans-serif'] = ['SimHei'] # 指定使用SimHei字体/nplt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题/n/n# 绘制预测价格和实际价格的图像/nplt.plot(result.index, result['预测价格'], label='预测价格')/nplt.plot(result.index, result['实际价格'], label='实际价格')/nplt.xlabel('样本编号')/nplt.ylabel('股票价格')/nplt.title('预测价格 vs 实际价格')/nplt.legend()/nplt.show()/n/n/n### 3. 模型评估/n/n使用交叉验证方法对训练好的模型进行评估,并计算准确率、精度等指标:/n/npython/nfrom sklearn.datasets import load_iris/nfrom sklearn.linear_model import LogisticRegression/nfrom sklearn.model_selection import cross_val_score/n/n# 加载数据/niris = load_iris()/nX_train = iris.data/ny_train = iris.target/n/n# 定义模型/nmodel = LogisticRegression(max_iter=1000) # 增加最大迭代次数/n/n# 使用交叉验证方法对模型进行评估/nscores = cross_val_score(model, X_train, y_train, cv=5) # 5折交叉验证/n/n# 计算准确率、精度、召回率和F1分数的平均值/naccuracy = scores.mean()/nprecision = cross_val_score(model, X_train, y_train, cv=5, scoring='precision_macro').mean()/nrecall = cross_val_score(model, X_train, y_train, cv=5, scoring='recall_macro').mean()/nf1 = cross_val_score(model, X_train, y_train, cv=5, scoring='f1_macro').mean()/n/n# 打印评估结果/nprint('准确率:', accuracy)/nprint('精度:', precision)/nprint('召回率:', recall)/nprint('F1分数:', f1)/n/n/n### 4. 总结/n/n本文介绍了如何使用Python进行数据清洗和股票价格预测。数据清洗是数据分析的关键步骤,而模型的选择需要根据具体问题和数据特点来决定。/n/n需要注意的是,股票价格预测是一个复杂的问题,影响因素众多。/n/n希望本文能帮助读者了解如何使用Python进行数据清洗和股票价格预测,并为实际应用提供参考。
原文地址: https://www.cveoy.top/t/topic/f4ep 著作权归作者所有。请勿转载和采集!