展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

seaborn基本使用(一)

  • 查看

  • 案例1

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

data = pd.read_csv("./german_credit_data.csv")

# 数据预览及数据处理,德国信用数据集
# 查看数据维度
print(data.shape)
# 查看数据信息
print(data.info())
# 查看各列缺失值
print("查看各列缺失值", data.isna().sum())
# 查看重复值
print("查看重复值", data.duplicated().sum())

# 处理Saving accounts和Checking account中缺失值。
# 考虑到缺失值占比比较大,不建议直接删除,同样的,也不建议用众数填充,这样可能会改变数据情况,这里先用unknown填充。
data['Saving accounts'].fillna('unknown', inplace=True)
data['Checking account'].fillna('unknown', inplace=True)
print("填充后查看各列缺失值", data.isna().sum())

# 查看分类特征的唯一值
characteristic = ['Sex','Job','Housing','Saving accounts','Checking account','Purpose']
for i in characteristic:
    print(f'{i}:')
    print("查看分类特征的唯一值",data[i].unique())
    print('-'*50)

# 数据探索
# 客户基本情况分析

# 设置绘图风格
sns.set(style="whitegrid")
# 2*2的表格,figsize窗口尺寸
fig, axs = plt.subplots(2, 2, figsize=(15,15))
# 年龄分布
# sns.distplot 是 seaborn 库中用于绘制直方图和拟合内核密度估计的函数。这个函数的目的是通过可视化展示数据的分布情况,同时也可以通过核密度估计(Kernel Density Estimation,简称 KDE)了解概率密度函数
# kde是否绘制高斯核密度估计图,bins直方图bins(柱)的数目
sns.distplot(data['Age'], kde=True, bins=30, ax=axs[0, 0])
axs[0, 0].set_title('Age Distribution')
axs[0, 0].set_xlabel('Age')
axs[0, 0].set_ylabel('Frequency')

# 性别分布 Set2  调色板 包含了8种颜色
sns.countplot(x='Sex', data=data, palette='Set2', ax=axs[0, 1])
axs[0, 1].set_title('Sex Distribution')
axs[0, 1].set_xlabel('Sex')
axs[0, 1].set_ylabel('Count')

# 职业技能分布
sns.countplot(x='Job', data=data, palette='Set3', ax=axs[1, 0])
axs[1, 0].set_title('Job Distribution')
axs[1, 0].set_xlabel('Job')
axs[1, 0].set_ylabel('Count')

# 住房类型分布
sns.countplot(x='Housing', data=data, palette='Set1', ax=axs[1, 1])
axs[1, 1].set_title('Housing Type Distribution')
axs[1, 1].set_xlabel('Housing Type')
axs[1, 1].set_ylabel('Count')

# 自动调整子图参数,使之填充整个图像区域
plt.tight_layout()
plt.show()
查看详情
  • 控制台打印
(1000, 10)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 10 columns):
 #   Column            Non-Null Count  Dtype 
---  ------            --------------  ----- 
 0   Id                1000 non-null   int64 
 1   Age               1000 non-null   int64 
 2   Sex               1000 non-null   object
 3   Job               1000 non-null   int64 
 4   Housing           1000 non-null   object
 5   Saving accounts   817 non-null    object
 6   Checking account  606 non-null    object
 7   Credit amount     1000 non-null   int64 
 8   Duration          1000 non-null   int64 
 9   Purpose           1000 non-null   object
dtypes: int64(5), object(5)
memory usage: 78.2+ KB
None
查看各列缺失值 Id                    0
Age                   0
Sex                   0
Job                   0
Housing               0
Saving accounts     183
Checking account    394
Credit amount         0
Duration              0
Purpose               0
dtype: int64
查看重复值 0
填充后查看各列缺失值 Id                  0
Age                 0
Sex                 0
Job                 0
Housing             0
Saving accounts     0
Checking account    0
Credit amount       0
Duration            0
Purpose             0
dtype: int64
Sex:
查看分类特征的唯一值 ['male' 'female']
--------------------------------------------------
Job:
查看分类特征的唯一值 [2 1 3 0]
--------------------------------------------------
Housing:
查看分类特征的唯一值 ['own' 'free' 'rent']
--------------------------------------------------
Saving accounts:
查看分类特征的唯一值 ['unknown' 'little' 'quite rich' 'rich' 'moderate']
--------------------------------------------------
Checking account:
查看分类特征的唯一值 ['little' 'moderate' 'unknown' 'rich']
--------------------------------------------------
Purpose:
查看分类特征的唯一值 ['radio/TV' 'education' 'furniture/equipment' 'car' 'business'
 'domestic appliances' 'repairs' 'vacation/others']
--------------------------------------------------
  • 输出

  • 结论

1.客户年龄主要集中在较年轻的年龄段,可能表明年轻人更倾向于申请贷款。
2.男性客户数量高于女性客户数量。
3.工作位于2级的客户数量最多,0级的客户数量最少,可能是因为0级无技能且非常驻,银行不予贷款。
4.自有房产客户数量>租房客户数量>免租赁客户数量,这里免租赁客户指的是那些居住在无需支付租金的住所的人,比如住在政府提供的免费住宿或者亲戚朋友家里。
  • 案例2
# 客户经济情况分析
order_savings = ['unknown', 'little', 'moderate', 'quite rich', 'rich']
order_checking = ['unknown', 'little', 'moderate', 'rich']

fig, axs = plt.subplots(1, 2, figsize=(15,8))

# 储蓄账户状况分布
# order排序
sns.countplot(x='Saving accounts', data=data, order=order_savings, palette='Set2', ax=axs[0])
axs[0].set_title('Saving Accounts Distribution')
axs[0].set_xlabel('Saving Accounts')
axs[0].set_ylabel('Count')

# 支票账户分布
sns.countplot(x='Checking account', data=data, order=order_checking, palette='Set3', ax=axs[1])
axs[1].set_title('Checking Account Distribution')
axs[1].set_xlabel('Checking Account')
axs[1].set_ylabel('Count')

plt.tight_layout()
plt.show()
查看详情
  • 输出

  • 结论

1.越有钱的客户越不容易选择贷款。
2.储蓄账户状况为少量的客户,贷款人数最多。
3.支票账户状况为未知、少量、中等贷款人数比较多,尤其是未知的客户是最多的,表明放款的时候,支票账户可能不是一个主要的考虑因素,才会导致未知数据占多数。
  • 案例3
# 客户贷款情况分析
fig = plt.figure(figsize=(20,15))

# 创建2x2的图布局
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 1, 2)

# 贷款金额分布 1.客户贷款主要倾向于申请中低额度的贷款
sns.distplot(data['Credit amount'], kde=True, bins=30, ax=ax1)
ax1.set_title('Credit Amount Distribution')
ax1.set_xlabel('Credit Amount')
ax1.set_ylabel('Frequency')

# 贷款期限分布
sns.distplot(data['Duration'], kde=True, bins=20, color='green', ax=ax2)
ax2.set_title('Duration Distribution')
ax2.set_xlabel('Duration (Months)')
ax2.set_ylabel('Frequency')

# 贷款用途分布
sns.countplot(y='Purpose', data=data, palette='muted', ax=ax3)
ax3.set_title('Purpose of Credit')
ax3.set_xlabel('Count')
ax3.set_ylabel('Purpose')

plt.show()
查看详情
  • 输出

  • 结论

1.客户贷款主要倾向于申请中低额度的贷款,贷款期限也主要选择中短期。
2.客户贷款用途主要用于购买车、收音机/电视、家具/设备。
posted @ 2024-01-08 15:20  DogLeftover  阅读(28)  评论(0编辑  收藏  举报