【DAY7】
·
【复习日】:针对心脏病项目的数据集来完成数据的预处理
# 读取数据
import pandas as pd
data = pd.read_csv('day7_heart.csv')
# 查看数据
data.columns
# 打印所有的离散变量名
for discrete_features in data.columns:
if data[discrete_features].dtype == 'object':
print(discrete_features)
未打印出结果
#如果离散变量不仅限于 object 类型,你可以扩大判断范围。
# 打印所有的离散变量名
for discrete_features in data.columns:
if pd.api.types.is_object_dtype(data[discrete_features]) or pd.api.types.is_integer_dtype(data[discrete_features]):
print(discrete_features)
# 一次性对所有离散特征独热编码
# 重新读取数据
data = pd.read_csv("day7_heart.csv")
# 找到离散变量
discrete_lists = [] # 新建一个空列表,用于存放离散变量名
for discrete_features in data.columns:
if data[discrete_features].dtype == 'object':
discrete_lists.append(discrete_features)
# 离散变量独热编码
data = pd.get_dummies(data, columns=discrete_lists, drop_first=True)
data.columns
# 接着之前的,对bool特征进行类型转换 转换为int类型
for i in list_final:
data[i] = data[i].astype(int) # 这里的i就是独热编码后的特征名
data.head()
补全缺失值
# 查看数据框 data 中每一列的数据类型
data.dtypes
# 统计每一列的缺失值个数
data.isnull().sum()
# 用均值填补
# 循环遍历这个列表中的每一列
for i in data.columns:
if data[i].isnull().sum() > 0: # 找到存在缺失值的列
#计算该列的均值
mean_value = data[i].mean()
#用均值填充缺失值
data[i].fillna(mean_value, inplace=True)
data.isnull().sum()
可视化分析
# 首先查看都有什么特征
import pandas as pd
data = pd.read_csv('day7_heart.csv')
data.head()
# 找到所有的连续特征(直观,好理解)
continuous_features = []
for i in data.columns:
if data[i].dtype != 'object':
continuous_features.append(i)
continuous_features
# 找到所有的离散特征
discrete_features = []
# 定义一个阈值,用于判断数值类型的列是否为离散特征
# 该阈值表示列中唯一值的最大数量,可根据实际数据情况进行调整
unique_value_threshold = 10
for i in data.columns:
if data[i].dtype == 'object': # 在 Pandas 中,object 类型通常用于存储字符串或分类数据,一般属于离散特征
discrete_features.append(i)
# 如果当前列的数据类型不是 object 类型,并且该列的唯一值数量小于等于设定的阈值
# 说明该数值类型的列可能也是离散特征
elif data[i].dtype != 'object' and data[i].nunique() <= unique_value_threshold:
discrete_features.append(i)
print("离散特征:", discrete_features)
# 连续变量画箱线图
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
sns.boxplot(x=data['age'])
plt.title('age 的箱线图')
plt.xlabel('age')
plt.show()
# 换成中文
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 设置全局字体为支持中文的字体 (例如 SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
sns.boxplot(x=data['age'])
plt.title('年龄 箱线图') # 使用中文标题
plt.xlabel('年龄') # 使用中文标签
plt.show()
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 设置全局字体为支持中文的字体 (例如 SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
# 修改为绘制直方图
sns.histplot(x=data['age'], kde=True) # kde=True 表示添加核密度估计曲线
# 修改标题和标签以适应直方图
plt.title('年龄 直方图')
plt.xlabel('年龄')
plt.ylabel('频次') # 添加 y 轴标签,直方图 y 轴通常表示频次
plt.show()
后续还需改进...
更多推荐

所有评论(0)