知识点复盘:
- 字典的简单介绍(增删查改)
- 标签编码(字典的映射)
- 对独热编码的深入理解----n个不相关变量只有n-1个自由的
- 连续特征的处理:归一化和标准化----一般选一个即可,谁好谁坏做了才知道,除非有先验知识。
至此,常见的预处理方式都说完了
作业:对心脏病数据集的特征用上述知识完成,一次性用所有的处理方式完成预处理,包括
- 缺失值的处理
- 离散特征的编码
- 连续特征的归一化or标准化
- 数据可视化(单特征、单特征与标签)
import pandas as pd data = pd.read_csv(r'D:\课程\课程文件1\pythonstudy\pythonx训练营\python-60days-challenge\heart.csv') data.head()输出
缺失值的处理
data.isnull()输出
data.head()输出
离散特征的编码
data.columns输出
print(data.dtypes)输出
for discrete_features in data.columns: if data[discrete_features].dtype == 'object': print(discrete_features)data['age']data['age'].value_counts()整合
连续特征的归一化or标准化
数据可视化(单特征、单特征与标签)
# 手动实现归一化 def manual_normalize(data): min_val = data.min() max_val = data.max() normalized_data = (data - min_val) / (max_val - min_val) return normalized_data data['sex'] = manual_normalize(data['sex']) data['sex'].head()输出
0 1.0 1 1.0 2 0.0 3 1.0 4 0.0 Name: sex, dtype: float64# 使用sklearn进行归一化处理 from sklearn.preprocessing import StandardScaler, MinMaxScaler data = pd.read_csv(r'D:\课程\课程文件1\pythonstudy\pythonx训练营\python-60days-challenge\heart.csv') min_max_scaler = MinMaxScaler() data['sex'] = min_max_scaler.fit_transform(data[['sex']]) data['sex'].head输出
<bound method NDFrame.head of 0 1.0 1 1.0 2 0.0 3 1.0 4 0.0 ... 298 0.0 299 1.0 300 1.0 301 1.0 302 0.0 Name: sex, Length: 303, dtype: float64># 使用sklearn进行标准化处理 data = pd.read_csv(r'D:\课程\课程文件1\pythonstudy\pythonx训练营\python-60days-challenge\heart.csv') scaler = StandardScaler() data['sex'] = scaler.fit_transform(data[['sex']]) data['sex'].head()输出
0 0.681005 1 0.681005 2 -1.468418 3 0.681005 4 -1.468418 Name: sex, dtype: float64数据可视化
单特征
单特征与标签的关系
plt.figure(figsize=(12, 6)) sns.violinplot(x='age', y='chol', data=data, scale='width', inner='quartile')#把年龄(age)当横轴分组,胆固醇(chol)当纵轴连续量,画“小提琴”——左右鼓包表示每个年龄组里 chol 的分布形状,宽度代表样本量。 plt.title('Cholesterol vs. age') plt.xlabel('Age (years)') plt.ylabel('Cholesterol (mg/dL)') plt.tight_layout() plt.show()输出
import seaborn as sns import matplotlib.pyplot as plt plt.figure(figsize=(8, 5)) # 1. 只画 KDE 轮廓,填不填都可以 sns.kdeplot(data=data, x='chol', hue='target', fill=True, # 填色更直观 bw_adjust=0.7, # 平滑度 common_norm=False,# 各自积分=1,方便比较形状 palette='Set2') # 2. 细节美化 plt.title('Cholesterol distribution by Heart Disease') plt.xlabel('Cholesterol (mg/dL)') plt.ylabel('Density') plt.legend(title='Heart Disease', labels=['No', 'Yes']) plt.tight_layout() plt.show()输出
@浙大疏锦行