内容回顾:数据初步可视化
1. 单特征可视化:连续变量箱线图(以及核密度直方图)、离散特征直方图
import pandas as pd
data = pd.read_csv('data.csv')
data.head(10)
#找到连续特征
continous_features = [] # 创建一个空列表,用于存储连续型特征(数值型)的列名
for i in data.columns: # 遍历DataFrame data 的所有列名
if data[i].dtype != 'object': # 检查当前列的数据类型是否为非对象类型(即非字符串类型)
continous_features.append(i) # 如果当前列是数值型,则将列名 i 添加到列表中
continous_features
连续特征使用箱线图
import seaborn as sns
import matplotlib.pyplot as plt
# 设置全局字体为支持中文的字体 (例如 SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
sns.boxplot(x=data['Years of Credit History'])
plt.title('信用历史年限 箱线图') # 使用中文标题
plt.xlabel('信用历史年限') # 使用中文标签
plt.show()
离散特征使用直方图
# 绘制直方图
sns.histplot(data['Home Ownership'])
plt.title('房屋所有权状态 直方图')
plt.xlabel('房屋所有权状态')
plt.ylabel('数量')
plt.show()
2. 特征和标签关系可视化
- 标签是离散的,特征是连续的:可以分别考虑违约和不违约情况下的连续特征,画2个箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(x='Credit Default', y='Years of Credit History', data=data)
plt.title('Years of Credit History vs. Credit Default')
plt.xlabel('Credit Default')
plt.ylabel('Years of Credit History')
plt.show()
# 另一种可视化方式:小提琴图
# 相较于箱线图,小提琴图更加美观
plt.figure(figsize=(8, 6))
sns.violinplot(x='Credit Default', y='Years of Credit History', data=data)
plt.title('Years of Credit History vs. Credit Default')
plt.xlabel('Credit Default')
plt.ylabel('Years of Credit History')
plt.show()
但是实际上连续变量也可以绘制类似于直方图的图像,可以用核密度估计来完成边缘的柔和化
# 绘制 Years of Credit History 和 Credit Default 的关系图
plt.figure(figsize=(8, 6))
# 使用seaborn绘制直方图:
# x='Years of Credit History' :指定x轴数据列
# hue='Credit Default' :按信用违约状态分组着色
# data=data :指定数据来源
# kde=True :添加核密度估计曲线
# element="step" :使用阶梯样式绘制直方图
sns.histplot(x='Years of Credit History', hue='Credit Default', data=data, kde=True, element="step")
plt.title('Years of Credit History vs. Credit Default')
plt.xlabel('Years of Credit History')
plt.ylabel('Count')
plt.show()
- 标签和特征均为离散的
# 绘制 Home Ownership 和 Credit Default 的关系图
plt.figure(figsize=(8, 6))
sns.countplot(x='Home Ownership', hue='Credit Default', data=data)
plt.title('Home Ownership vs. Credit Default')
plt.xlabel('Home Ownership')
plt.ylabel('Count')
plt.show()