目录
一.单特征可视化
1.1 连续特征箱线图/核密度直方图
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
data = pd.read_csv(r'data.csv')
# 查看连续特征
continuous_features = []
for i in data.columns:
if data[i].dtype != 'object':
continuous_features.append(i)
print(data[continuous_features].head())
# 设置全局字体为支持中文的字体 (例如 SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
# 绘制箱线图
plt.figure(figsize=(10, 6))
sns.boxplot(x=data['Current Credit Balance'])
plt.title('当前信用余额 箱线图')
plt.xlabel('当前信用余额')
plt.show()
# 绘制核密度直方图
plt.figure(figsize=(10, 6))
sns.histplot(x=data['Current Credit Balance'] , kde=True , element='step')
plt.title('当前信用余额 箱线图')
plt.xlabel('当前信用余额')
plt.show()
笔记:
1.1.1 中文显示配置
plt.rcParams['font.sans-serif'] = ['SimHei']
这行代码将 matplotlib 的全局字体设置为支持中文的字体(例如SimHei)。
(1)plt.rcParams 是matplotlib的全局参数设置。
(2)'font.sans-serif' 指定无衬线字体。
plt.rcParams['axes.unicode_minus'] = False
这行代码解决负号'-'显示为方块的问题。
(1) 'axes.unicode_minus' 控制坐标轴上负号的显示方式。
(2) 设置为 False 后,负号将使用ASCII字符显示,而不是Unicode字符,从而避免显示为方块。
1.1.2. 箱线图绘制
-
可视化元素:
-
箱体:显示IQR(25%-75%分位数)
-
中线:中位数(50%分位数)
-
须线:1.5倍IQR范围内的正常值
-
离群点:超出须线的异常值
-
-
分析价值:
-
快速识别数据范围和异常值
-
比较不同组别的分布差异
-
1.1.3.核密度直方图
sns.histplot(x=data['Current Credit Balance'], kde=True, element='step')
-
参数解析:
-
kde=True
:叠加核密度估计曲线 -
element='step'
:生成阶梯状直方图
-
-
可视化对比:
-
1.2 离散特征柱状图
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
data = pd.read_csv(r'data.csv')
# 查看离散特征
discrete_features = []
for i in data.columns:
if data[i].dtype == 'object':
discrete_features.append(i)
print(data[discrete_features].head())
# 设置全局字体为支持中文的字体 (例如 SimHei)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
#离散特征绘制图--柱状图
sns.countplot(data['Years in current job'])
plt.title('工作时长 柱状图')
plt.xlabel('人数统计')
plt.ylabel('工作时长')
plt.show()
二. 特征和标签关系可视化
2.1 连续变量vs标签可视化方式:
箱线图 / 小提琴图 / 核密度估计直方图
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
data = pd.read_csv(r'data.csv')
# 连续变量vs标签可视化方式:箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(x=data['Credit Default'], y=data['Annual Income'])
plt.title('Annual Income vs. Credit Default')
plt.xlabel('Credit Default')
plt.ylabel('Annual Income')
plt.show()
# 另一种可视化方式:小提琴图更加美观
plt.figure(figsize=(8, 6))
sns.violinplot(x=data['Credit Default'], y=data['Annual Income'])
plt.title('Annual Income vs. Credit Default')
plt.xlabel('Credit Default')
plt.ylabel('Annual Income')
plt.show()
#核密度估计直方图
sns.histplot(x=data['Credit Default'], hue=data['Annual Income'], kde=True, element="step")
plt.title('Annual Income vs. Credit Default')
plt.xlabel('Annual Income')
plt.ylabel('Count')
plt.show()
2.2 离散变量vs标签可视化方式:柱状图
# 柱状图
plt.figure(figsize=(8, 6))
sns.countplot(x=data['Number of Open Accounts'], hue=data['Credit Default'])
plt.title('Number of Open Accounts vs. Credit Default')
plt.xlabel('Number of Open Accounts')
plt.ylabel('Count')
plt.show()
三、柱状图美化
# 将 "Number of Open Accounts" 分组
data['Open Accounts Group'] = pd.cut(data['Number of Open Accounts'], bins=[0, 5, 10, 15, 20, float('inf')], labels=['0-5', '6-10', '11-15', '16-20', '20+']) # 根据你的数据调整分组
plt.figure(figsize=(10, 6))
sns.countplot(x='Open Accounts Group', hue='Credit Default', data=data)
plt.title('Number of Open Accounts (Grouped) vs. Credit Default')
plt.xlabel('Number of Open Accounts Group')
plt.ylabel('Count')
plt.show()
笔记:
3.1. 数据分组(离散化)
data['Open Accounts Group'] = pd.cut(
data['Number of Open Accounts'],
bins=[0, 5, 10, 15, 20, float('inf')],
labels=['0-5', '6-10', '11-15', '16-20', '20+']
)
-
pd.cut()参数解析:
-
bins
:定义分组边界-
0-5
,6-10
, ...,20+
五个区间 -
float('inf')
表示无穷大,捕获所有大于20的值
-
-
labels
:自定义分组标签
-
-
意义:将连续的开户数量转换为有序分类变量
3.2. 计数柱状图绘制
sns.countplot(
x='Open Accounts Group',
hue='Credit Default',
data=data
)
-
可视化特性:
-
X轴:开户数量分组(离散有序)
-
Y轴:计数(频数)
-
颜色区分:信用违约状态(hue参数)
-
-
图表类型选择:
-
countplot
适合展示分类变量的频数分布 -
堆叠效果直观显示组内构成比例
-