数据初步可视化
内容回顾:
- 单特征可视化:连续变量箱线图(还说了核密度直方图)、离散特征直方图
- 特征和标签关系可视化
- 箱线图美化--->直方图
作业:去针对其他特征绘制单特征图和特征和标签的关系图,并且试图观察出一些有意思的结论
找到连续特征
continuous_features = data.select_dtypes(include=['float64', 'int64']).columns.tolist()
continuous_features
结果
['Id',
'Annual Income',
'Tax Liens',
'Number of Open Accounts',
'Years of Credit History',
'Maximum Open Credit',
'Number of Credit Problems',
'Months since last delinquent',
'Bankruptcies',
'Current Loan Amount',
'Current Credit Balance',
'Monthly Debt',
'Credit Score',
'Credit Default']
利用matplotlib库
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
绘制箱型线
sns.boxplot(x=data['Annual Income'])
plt.title('Annual Income 的箱线图')
plt.xlabel('年收入')
plt.show()
得到
若出现:
1. 下方有莫名其妙的警告
2. 中文字符显示不全
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.boxplot(x=data['Annual Income'])
plt.title('Annual Income的箱线图')
plt.xlabel('年收入')
plt.show()
输出
绘制直方图
sns.histplot(data['Years in current job'])
plt.title('在当前工作年限 直方图')
plt.xlabel('在当前工作年限')
plt.ylabel('员工数量')
plt.show()
输出
X轴拥挤,进行调整,输入:
sns.histplot(x=data['Years in current job'])
plt.title('在当前工作年限 直方图')
plt.xlabel('在当前工作年限')
plt.ylabel('员工数量')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()
输出:
绘制连续特证与标签的关系
可以分别考虑违约和不违约情况下的连续特征,画2个箱线图,输入:
plt.figure(figsize=(8, 6))
sns.boxplot(x='Credit Default', y='Annual Income', data=data)
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='Credit Default', y='Annual Income', data=data)
plt.title('Annual Income vs. Credit Default')
plt.xlabel('Credit Default')
plt.ylabel('Annual Income')
plt.show()
但是实际上连续变量也可以绘制类似于直方图的图像,可以用核密度估计来完成边缘的柔和化,输入:
plt.figure(figsize=(8, 6))
sns.histplot(x='Annual Income', hue='Credit Default', data=data, kde=True, element="step")
plt.title('Annual Income vs. Credit Default')
plt.xlabel('Annual Income')
plt.ylabel('Count')
plt.show()
输出:
绘制离散变量和标签的关系
输入:
plt.figure(figsize=(8, 6))
sns.countplot(x='Number of Open Accounts', hue='Credit Default', data=data)
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()
输出: