import pandas as pd df = pd.read_excel('./train.xls') df_test = pd.read_excel('./test.xls')
时间: 2024-02-09 17:29:43 浏览: 97
这段代码使用了 Pandas 库来读取 Excel 文件。
首先,通过 `pd.read_excel` 函数读取名为 `'train.xls'` 的 Excel 文件,并将其内容存储在名为 `df` 的 DataFrame 中。
接着,通过 `pd.read_excel` 函数读取名为 `'test.xls'` 的 Excel 文件,并将其内容存储在名为 `df_test` 的 DataFrame 中。
这段代码的作用是读取 Excel 文件的内容,并将其转换为 Pandas 的 DataFrame 格式,以便后续的数据处理和分析。请确保文件路径正确,并且已经安装了 Pandas 库。
相关问题
import numpy as np import pandas as pd import matplotlib.pyplot as plt import BPNN from sklearn import metrics from sklearn.metrics import mean_absolute_error from sklearn.metrics import mean_squared_error #导入必要的库 df1=pd.read_excel(r'D:\Users\Desktop\大数据\44.xls',0) df1=df1.iloc[:,:] #进行数据归一化 from sklearn import preprocessing min_max_scaler = preprocessing.MinMaxScaler() df0=min_max_scaler.fit_transform(df1) df = pd.DataFrame(df0, columns=df1.columns) x=df.iloc[:,:4] y=df.iloc[:,-1] #划分训练集测试集 cut=4#取最后cut=30天为测试集 x_train, x_test=x.iloc[4:],x.iloc[:4]#列表的切片操作,X.iloc[0:2400,0:7]即为1-2400行,1-7列 y_train, y_test=y.iloc[4:],y.iloc[:4] x_train, x_test=x_train.values, x_test.values y_train, y_test=y_train.values, y_test.values #神经网络搭建 bp1 = BPNN.BPNNRegression([4, 16, 1]) train_data=[[sx.reshape(4,1),sy.reshape(1,1)] for sx,sy in zip(x_train,y_train)] test_data = [np.reshape(sx,(4,1))for sx in x_test] #神经网络训练 bp1.MSGD(train_data, 1000, len(train_data), 0.2) #神经网络预测 y_predict=bp1.predict(test_data) y_pre = np.array(y_predict) # 列表转数组 y_pre=y_pre.reshape(4,1) y_pre=y_pre[:,0] #画图 #展示在测试集上的表现 draw=pd.concat([pd.DataFrame(y_test),pd.DataFrame(y_pre)],axis=1); draw.iloc[:,0].plot(figsize=(12,6)) draw.iloc[:,1].plot(figsize=(12,6)) plt.legend(('real', 'predict'),loc='upper right',fontsize='15') plt.title("Test Data",fontsize='30') #添加标题 #输出精度指标 print('测试集上的MAE/MSE') print(mean_absolute_error(y_pre, y_test)) print(mean_squared_error(y_pre, y_test) ) mape = np.mean(np.abs((y_pre-y_test)/(y_test)))*100 print('=============mape==============') print(mape,'%') # 画出真实数据和预测数据的对比曲线图 print("R2 = ",metrics.r2_score(y_test, y_pre)) # R2 运行上述程序。在下面这一步中draw=pd.concat([pd.DataFrame(y_test),pd.DataFrame(y_pre)],axis=1);我需要将归一化的数据变成真实值,输出对比图,该怎么修改程序
在将归一化的数据变回真实值的过程中,需要将归一化的因变量(即最后一列)逆转换回来,以得到真实的预测值和真实值。代码如下:
```
# 将预测结果和真实结果逆归一化
y_predict = min_max_scaler.inverse_transform(y_pre.reshape(-1, 1))
y_test = min_max_scaler.inverse_transform(y_test.reshape(-1, 1))
# 画图
draw=pd.concat([pd.DataFrame(y_test), pd.DataFrame(y_predict)], axis=1)
draw.iloc[:,0].plot(figsize=(12,6))
draw.iloc[:,1].plot(figsize=(12,6))
plt.legend(('real', 'predict'), loc='upper right', fontsize='15')
plt.title("Test Data", fontsize='30')
# 输出精度指标
print('测试集上的MAE/MSE')
print(mean_absolute_error(y_predict, y_test))
print(mean_squared_error(y_predict, y_test))
mape = np.mean(np.abs((y_predict-y_test)/(y_test)))*100
print('=============mape==============')
print(mape,'%')
# 输出R2分数
print("R2 = ", metrics.r2_score(y_test, y_predict))
```
在此代码中,我们使用了 MinMaxScaler 对象的 inverse_transform() 方法将归一化的结果转换回原始的数据范围。运行修改后的代码,即可得到真实值与预测值的对比图,以及各种精度指标的输出。
df = pd.read_excel(file_name) data___=pd.read_excel(file_name)#取了一个应该不会重复的名字 data__ = data___.loc[:, ['经验要求', '文凭要求', '薪资待遇_平均月薪']]#把这里改成df # 对于分类变量,使用LabelEncoder转换 le = LabelEncoder() # 用了这四个指标预测 data__['经验要求'] = le.fit_transform(data__['经验要求']) data__['文凭要求'] = le.fit_transform(data__['文凭要求']) # data['公司性质'] = le.fit_transform(data['公司性质']) # data['规模'] = le.fit_transform(data['规模']) # 将数据分为特征X和目标y X = data__.drop('薪资待遇_平均月薪', axis=1) y = data__['薪资待遇_平均月薪'] # 将数据分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练线性回归模型 reg = LinearRegression().fit(X_train, y_train) # 使用模型进行预测 y_pred = reg.predict(X_test) data___['预测薪资待遇_平均月薪'] = reg.predict(X) # 计算均方误差 mse = mean_squared_error(y_test, y_pred) # 这个改成文件夹路径 data___.to_excel('深圳2023年求职信息预测.xlsx') del df['Unnamed: 0'] del df['公司性质_规模'] print(df.info) mape=np.mean(np.abs((y_test - y_pred)/y_test))*100 print("MAPE:",mape) # 展示预测结果 predictions = pd.DataFrame({'经验要求': X['经验要求'], '文凭要求': X['文凭要求'], '薪资待遇_平均月薪': y, '预测薪资待遇_平均月薪': data___['预测薪资待遇_平均月薪']}) print(predictions)
在看完你提供的代码后,我发现其中存在一些可以优化的地方,具体如下:
1. 在读取Excel文件时,建议使用`pd.ExcelFile`和`with`语句,这样可以更好地管理文件句柄并避免内存泄漏。
2. 在使用`LabelEncoder`时,建议使用`fit_transform`方法,这样可以同时进行训练和转换操作。
3. 在计算MAPE时,建议使用绝对误差的平均值除以真实值的平均值,这样可以更好地反映预测误差的大小。
4. 在输出DataFrame时,可以使用`to_csv`方法将数据保存为CSV格式文件,这样可以更好地与其他程序和系统进行交互。
5. 在删除DataFrame的列时,建议使用`drop`方法,并将`axis`参数设置为1,这样可以避免使用多次`del`语句。
下面是优化后的代码:
```
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import numpy as np
# 使用pd.ExcelFile和with语句读取Excel文件
with pd.ExcelFile(file_name) as xls:
df = pd.read_excel(xls)
data = pd.read_excel(xls)
# 只选择需要的列
data = data.loc[:, ['经验要求', '文凭要求', '薪资待遇_平均月薪']]
# 对分类变量进行编码
le = LabelEncoder()
data['经验要求'] = le.fit_transform(data['经验要求'])
data['文凭要求'] = le.fit_transform(data['文凭要求'])
# 将数据分为特征X和目标y
X = data.drop('薪资待遇_平均月薪', axis=1)
y = data['薪资待遇_平均月薪']
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练线性回归模型
reg = LinearRegression().fit(X_train, y_train)
# 使用模型进行预测
y_pred = reg.predict(X_test)
data['预测薪资待遇_平均月薪'] = reg.predict(X)
# 计算MAPE
mape = np.mean(np.abs((y_test - y_pred) / y_test)) * 100
print("MAPE:", mape)
# 删除DataFrame的列
df = df.drop(['Unnamed: 0', '公司性质_规模'], axis=1)
# 保存预测结果为CSV文件
data.to_csv('深圳2023年求职信息预测.csv', index=False)
# 展示预测结果
predictions = pd.DataFrame({'经验要求': X['经验要求'], '文凭要求': X['文凭要求'], '薪资待遇_平均月薪': y, '预测薪资待遇_平均月薪': data['预测薪资待遇_平均月薪']})
print(predictions)
```
希望这些优化方案能够对你有所帮助!
阅读全文