plt.boxplot(x=train_data.values,labels=train_data.columns) 3 plt.hlines([-7.5, 7.5], 0, 40, colors='r') 4 plt.show() 5 6 train_data = train_data[train_data['V9']>-7.5] 7 train_data.describe() 8 9 from sklearn import preprocessing 10 11 features_columns = [col for col in train_data.columns if col not in ['target']] 12 13 min_max_scaler = preprocessing.MinMaxScaler() 14 15 min_max_scaler = min_max_scaler.fit(train_data[features_columns]) 16 17 train_data_scaler = min_max_scaler.transform(train_data[features_columns]) 18 test_data_scaler = min_max_scaler.transform(test_data[features_columns]) 19 20 train_data_scaler = pd.DataFrame(train_data_scaler) 21 train_data_scaler.columns = features_columns 22 23 test_data_scaler = pd.DataFrame(test_data_scaler) 24 test_data_scaler.columns = features_columns 25 26 train_data_scaler['target'] = train_data['target'] 27 28 train_data 29 30 mcorr=mcorr.abs() 31 numerical_corr=mcorr[mcorr['target']>0.1]['target'] 32 print(numerical_corr.sort_values(ascending=False)) 33 34 index0 = numerical_corr.sort_values(ascending=False).index 35 print(train_data_scaler[index0].corr('spearman')) 36 37 new_numerical=['V0', 'V2', 'V3', 'V4', 'V5', 'V6', 'V10','V11', 38 'V13', 'V15', 'V16', 'V18', 'V19', 'V20', 'V22','V24','V30', 'V31', 'V37'] 39 X=np.matrix(train_data_scaler[new_numerical]) 40 VIF_list=[variance_inflation_factor(X, i) for i in range(X.shape[1])] 41 VIF_list 42 43 44 pca = PCA(n_components=0.9) 45 new_train_pca_90 = pca.fit_transform(train_data_scaler.iloc[:,0:-1]) 46 new_test_pca_90 = pca.transform(test_data_scaler) 47 new_train_pca_90 = pd.DataFrame(new_train_pca_90) 48 new_test_pca_90 = pd.DataFrame(new_test_pca_90) 49 new_train_pca_90['target'] = train_data_scaler['target'] 50 new_train_pca_90.describe()
时间: 2024-03-30 21:37:10 浏览: 55
这段代码涉及到数据预处理和特征工程的内容。具体来说,它做了以下几件事情:
1. 使用箱线图和阈值来去除异常值;
2. 对特征进行归一化处理;
3. 计算特征之间的相关性,并筛选出与目标变量相关性大于0.1的特征;
4. 使用方差膨胀因子(VIF)来检查特征之间的多重共线性;
5. 使用主成分分析(PCA)来降维,使得保留90%的方差。
相关问题
plt.boxplot(x=train_data.values,labels=train_data.columns) 3 plt.hlines([-7.5, 7.5], 0, 40, colors='r') 4 plt.show() 5 6 train_data = train_data[train_data['V9']>-7.5] 7 train_data.describe() 8 9 from sklearn import preprocessing 10 11 features_columns = [col for col in train_data.columns if col not in ['target']] 12 13 min_max_scaler = preprocessing.MinMaxScaler() 14 15 min_max_scaler = min_max_scaler.fit(train_data[features_columns]) 16 17 train_data_scaler = min_max_scaler.transform(train_data[features_columns]) 18 test_data_scaler = min_max_scaler.transform(test_data[features_columns]) 19 20 train_data_scaler = pd.DataFrame(train_data_scaler) 21 train_data_scaler.columns = features_columns 22 23 test_data_scaler = pd.DataFrame(test_data_scaler) 24 test_data_scaler.columns = features_columns 25 26 train_data_scaler['target'] = train_data['target'] 27 28 train_data 29 30 mcorr=mcorr.abs() 31 numerical_corr=mcorr[mcorr['target']>0.1]['target'] 32 print(numerical_corr.sort_values(ascending=False))解释每一行代码的意思
好的,我来解释每一行代码的意思:
1. `plt.boxplot(x=train_data.values,labels=train_data.columns)`: 绘制箱线图,用于检测是否存在异常值;
2. `plt.hlines([-7.5, 7.5], 0, 40, colors='r')`: 在箱线图上绘制两条水平线,用于标记异常值的阈值;
3. `train_data = train_data[train_data['V9']>-7.5]`: 去除训练数据中V9列中小于-7.5的异常值;
4. `train_data.describe()`: 输出训练数据的统计信息,包括均值、标准差、最小值、最大值等;
5. `from sklearn import preprocessing`: 导入preprocessing模块,用于数据预处理;
6. `features_columns = [col for col in train_data.columns if col not in ['target']]`: 提取除了目标变量之外的特征列,存储在features_columns变量中;
7. `min_max_scaler = preprocessing.MinMaxScaler()`: 创建MinMaxScaler对象,用于对特征数据进行归一化处理;
8. `min_max_scaler = min_max_scaler.fit(train_data[features_columns])`: 对MinMaxScaler对象进行拟合,计算出归一化所需的最大值和最小值;
9. `train_data_scaler = min_max_scaler.transform(train_data[features_columns])`: 对训练数据的特征列进行归一化处理;
10. `test_data_scaler = min_max_scaler.transform(test_data[features_columns])`: 对测试数据的特征列进行归一化处理;
11. `train_data_scaler = pd.DataFrame(train_data_scaler)`: 将归一化后的训练数据特征列转换成DataFrame格式;
12. `train_data_scaler.columns = features_columns`: 给训练数据的特征列添加列名;
13. `test_data_scaler = pd.DataFrame(test_data_scaler)`: 将归一化后的测试数据特征列转换成DataFrame格式;
14. `test_data_scaler.columns = features_columns`: 给测试数据的特征列添加列名;
15. `train_data_scaler['target'] = train_data['target']`: 将训练数据的目标变量添加到归一化后的训练数据中;
16. `train_data`: 输出训练数据的内容;
17. `mcorr=mcorr.abs()`: 计算特征之间的相关性矩阵,并对矩阵中的元素取绝对值;
18. `numerical_corr=mcorr[mcorr['target']>0.1]['target']`: 筛选出与目标变量相关性大于0.1的特征;
19. `print(numerical_corr.sort_values(ascending=False))`: 输出筛选后的特征相关性,按照相关性大小降序排列;
20. `index0 = numerical_corr.sort_values(ascending=False).index`: 获取筛选后的特征名字,并存储在index0变量中;
21. `print(train_data_scaler[index0].corr('spearman'))`: 计算筛选后的特征之间的Spearman相关系数;
22. `new_numerical=['V0', 'V2', 'V3', 'V4', 'V5', 'V6', 'V10','V11', 'V13', 'V15', 'V16', 'V18', 'V19', 'V20', 'V22','V24','V30', 'V31', 'V37']`: 将相关性较高的特征名字存储在new_numerical变量中;
23. `X=np.matrix(train_data_scaler[new_numerical])`: 将训练数据中的new_numerical列转换为矩阵格式,存储在X变量中;
24. `VIF_list=[variance_inflation_factor(X, i) for i in range(X.shape[1])]`: 计算new_numerical列之间的VIF值,存储在VIF_list变量中;
25. `VIF_list`: 输出VIF_list变量的值;
26. `pca = PCA(n_components=0.9)`: 创建PCA对象,并设置保留90%的方差;
27. `new_train_pca_90 = pca.fit_transform(train_data_scaler.iloc[:,0:-1])`: 对训练数据进行PCA降维,并保留90%的方差;
28. `new_test_pca_90 = pca.transform(test_data_scaler)`: 对测试数据进行PCA降维,并保留90%的方差;
29. `new_train_pca_90 = pd.DataFrame(new_train_pca_90)`: 将降维后的训练数据转换为DataFrame格式;
30. `new_test_pca_90 = pd.DataFrame(new_test_pca_90)`: 将降维后的测试数据转换为DataFrame格式;
31. `new_train_pca_90['target'] = train_data_scaler['target']`: 将训练数据的目标变量添加到降维后的训练数据中;
32. `new_train_pca_90.describe()`: 输出降维后的训练数据的统计信息,包括均值、标准差、最小值、最大值等。
D:\\python3\\毕业\\simsun.ttc', size=12) 'D:\\X17\\X17\\data.xlsx''标题', '标题链接', '价格', '评分', '评论', 'rowindex', 'area', '地址', '时间']生成7种不一样的图形
这个路径似乎是指的Python脚本中使用的两个文件路径和一个包含数据字典的数据结构。`simsun.ttc`看起来像是一个TrueType字体文件,而`data.xlsx`是一个Excel文件。您提到的`标题`, `'标题链接', '价格', '评分', '评论', 'rowindex', 'area', '地址', '时间'`可能是DataFrame或表格中的列名。
要从这样的数据生成七种不同的图形,可以考虑使用Python的数据可视化库,如matplotlib、seaborn或plotly等。以下是一些示例:
1. **柱状图**:比较价格或评分的分布。
```python
import matplotlib.pyplot as plt
plt.bar(data['价格'], data['评分'])
plt.title('价格与评分对比')
plt.xlabel('价格')
plt.ylabel('评分')
plt.show()
```
2. **折线图**:展示评论随时间的变化。
```python
plt.plot(data['时间'], data['评论'])
plt.title('评论数随时间变化')
plt.xlabel('时间')
plt.ylabel('评论数')
plt.show()
```
3. **饼图**:显示各类别的比例。
```python
df_grouped = data[['类别', '评论']].groupby('类别').sum()
plt.pie(df_grouped['评论'], labels=df_grouped.index)
plt.title('各类别评论占比')
plt.show()
```
(这里的"类别"需要替换为实际列名)
4. **散点图**:分析评分和地址之间的关系。
```python
plt.scatter(data['地址'], data['评分'])
plt.title('地址与评分关系')
plt.xlabel('地址')
plt.ylabel('评分')
plt.show()
```
5. **箱线图**:展示价格的分布和异常值。
```python
plt.boxplot(data['价格'])
plt.title('价格分布')
plt.ylabel('价格')
plt.show()
```
6. **直方图**:价格分布的可视化。
```python
plt.hist(data['价格'], bins=10)
plt.title('价格频率分布')
plt.xlabel('价格')
plt.ylabel('频数')
plt.show()
```
7. **热力图**:如果数据有地理位置信息,可以用行和列代表区域,颜色表示价格。
```python
import seaborn as sns
sns.heatmap(data.pivot_table(index='rowindex', columns='area', values='价格'))
plt.title('地区价格热度地图')
plt.show()
```
请注意,上述代码示例假设数据已经读入到名为"data"的DataFrame中,并且"类别"、"时间和地址"列存在。实际操作时,您需要先加载并处理Excel文件和调整列名。同时,图形的具体形式可能因数据特性而略有差异。
阅读全文