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)
时间: 2024-01-19 07:02:17 浏览: 30
下面是对这段代码的优化建议:
1. 变量命名:建议使用有意义的变量名,避免使用无意义的变量名(如 `data___`)。
2. 代码注释:建议添加注释,解释代码的作用和实现方法。
3. 数据预处理:建议对分类变量进行 One-Hot 编码,避免使用 LabelEncoder。
4. 划分数据集:建议使用 StratifiedKFold 进行交叉验证,避免过拟合。
综上所述,优化后的代码如下所示:
```python
import pandas as pd
from sklearn.model_selection import train_test_split, StratifiedKFold
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import make_column_transformer
# 读取数据
df = pd.read_excel(file_name)
# 选取需要的列
df = df.loc[:, ['经验要求', '文凭要求', '薪资待遇_平均月薪']]
# 对分类变量进行 One-Hot 编码
column_transformer = make_column_transformer(
(OneHotEncoder(), ['经验要求', '文凭要求']),
remainder='passthrough'
)
X = column_transformer.fit_transform(df.drop('薪资待遇_平均月薪', axis=1))
y = df['薪资待遇_平均月薪']
# 划分数据集
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
for train_index, test_index in skf.split(X, y):
X_train, y_train = X[train_index], y[train_index]
X_test, y_test = X[test_index], y[test_index]
# 在这里进行模型训练和评估
```
在优化后的代码中,首先使用 Pandas 库读取数据,并选取需要的列。接着,使用 One-Hot 编码对分类变量进行处理。这里使用了 `make_column_transformer` 函数和 `OneHotEncoder` 类来实现 One-Hot 编码,可以避免使用 LabelEncoder。最后,使用 StratifiedKFold 进行交叉验证,避免过拟合。