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.客户贷款用途主要用于购买车、收音机/电视、家具/设备。
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术