请大家关注我,本文章粉丝可见,我会一直更新下去,完整代码进QQ群获取:323140750,大家一起进步、学习。
2. Numerical Variable(值变量)分析
"Numerical Variable" 是指在统计学和数据分析中,用于表示具有数值或数量意义的变量。这些变量通常代表度量或计数,可以进行数学上的各种运算,包括加法、减法、平均值计算等。数值变量可以是连续的,例如温度、身高、体重等,也可以是离散的,例如年龄、数量、计数等。
数值变量通常用于度量和描述数据的各种特性,它们提供了数据的数量信息,这使得在统计分析和建模中能够进行更多的数学运算和分析。与分类变量不同,数值变量的值是可排序的,并且可以用于建立数学模型,如回归模型、聚类分析、假设检验等。
(1)展示数据集中的三个数值变量:'ApplicantIncome'(申请人月收入)、'CoapplicantIncome'(共同申请人月收入)和'LoanAmount'(贷款金额)。具体实现代码如下所示。
df[['ApplicantIncome','CoapplicantIncome','LoanAmount']].describe()
函数describe()将为每个数值变量生成一些统计摘要信息,包括以下内容:
- count(计数):每个变量的非缺失值数量。
- mean(均值):每个变量的平均值。
- std(标准差):每个变量的标准差,表示数据的分散程度。
- min(最小值):每个变量的最小值。
- 25%、50%(中位数)、75%:每个变量的百分位数,它们表示数据的分布情况。中位数是数据的中间值,25% 和 75% 分位数分别表示数据的下四分位数和上四分位数。
- max(最大值):每个变量的最大值。
执行后会输出:
ApplicantIncome CoapplicantIncome LoanAmount
count 614.000000 614.000000 592.000000
mean 5403.459283 1621.245798 146.412162
std 6109.041673 2926.248369 85.587325
min 150.000000 0.000000 9.000000
25% 2877.500000 0.000000 100.000000
50% 3812.500000 1188.500000 128.000000
75% 5795.000000 2297.250000 168.000000
max 81000.000000 41667.000000 700.000000
这些统计信息有助于了解数值变量的分布、中心趋势和离散度,可以帮助数据分析人员更好地理解数据的特点,为后续的数据探索和建模提供重要的参考。
(2)使用Seaborn库创建3个直方图,以可视化数据集中的数值变量('ApplicantIncome'、'CoapplicantIncome'和'LoanAmount')的分布情况。具体实现代码如下所示。
sns.set(style="darkgrid")
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
sns.histplot(data=df, x="ApplicantIncome", kde=True, ax=axs[0, 0], color='green')
sns.histplot(data=df, x="CoapplicantIncome", kde=True, ax=axs[0, 1], color='skyblue')
sns.histplot(data=df, x="LoanAmount", kde=True, ax=axs[1, 0], color='orange');
执行效果如图10-9所示,这些直方图有助于理解数值变量的分布特征,包括其集中趋势和分散程度,以及是否存在异常值或离群点。
图10-9 数值变量的分布图
(3)使用Seaborn库创建3个小提琴图,以可视化数据集中的数值变量('ApplicantIncome'、'CoapplicantIncome'和'LoanAmount')的分布情况。具体实现代码如下所示。
sns.set(style="darkgrid")
fig, axs1 = plt.subplots(2, 2, figsize=(10, 10))
sns.violinplot(data=df, y="ApplicantIncome", ax=axs1[0, 0], color='green')
sns.violinplot(data=df, y="CoapplicantIncome", ax=axs1[0, 1], color='skyblue')
sns.violinplot(data=df, y="LoanAmount", ax=axs1[1, 0], color='orange');
执行效果如图10-10所示,这些小提琴图不仅展示了数值变量的分布,还可同时显示出分布的密度和可能存在的峰值,这有助于更全面地理解数值变量的性质。
图10-10 数值变量的小提琴图
3. 其他变量分析
接下来将展示数据集中每个变量的额外分析,包括双变量分析(分类与分类,分类与数值,数值与数值)和热图分析。
(1)使用库Seaborn中的sns.heatmap创建了一个热力图,用于可视化数据集中数值变量之间的相关性。具体实现代码如下所示。
plt.figure(figsize=(10,7))
sns.heatmap(df.corr(), annot=True, cmap='inferno');
执行效果如图10-11所示,以可视化方式表示了数据集中数值变量之间的相关性,带有注释数值以指示相关性的强度和方向。
图10-11 数据集中数值变量的热力图
(2)创建了一个堆叠条形图,用于可视化性别(Gender)与婚姻状况(Married)之间的关系。具体实现代码如下所示。
pd.crosstab(df.Gender,df.Married).plot(kind="bar", stacked=True, figsize=(5,5), color=['#f64f59','#12c2e9'])
plt.title('Gender vs Married')
plt.xlabel('Gender')
plt.ylabel('Frequency')
plt.xticks(rotation=0)
plt.show()
执行效果如图10-12所示,这个图可用于观察性别与婚姻状况之间的关系,以及每个组的频率分布。
图10-12 堆叠条形图
(3)创建了一个堆叠条形图,用于可视化自雇(Self Employed)与信用历史(Credit History)之间的关系。具体实现代码如下所示。
pd.crosstab(df.Self_Employed,df.Credit_History).plot(kind="bar", stacked=True, figsize=(5,5), color=['#544a7d','#ffd452'])
plt.title('Self Employed vs Credit History')
plt.xlabel('Self Employed')
plt.ylabel('Frequency')
plt.legend(["Bad Credit", "Good Credit"])
plt.xticks(rotation=0)
plt.show()
执行效果如图10-13所示。
图10-13 Self Employed与Credit History之间关系图
(4)创建了一个堆叠条形图,用于可视化展示财产地区(Property Area)与贷款状态(Loan Status)之间的关系。具体实现代码如下所示。
pd.crosstab(df.Property_Area,df.Loan_Status).plot(kind="bar", stacked=True, figsize=(5,5), color=['#333333','#dd1818'])
plt.title('Property Area vs Loan Status')
plt.xlabel('Property Area')
plt.ylabel('Frequency')
plt.xticks(rotation=0)
plt.show()
执行效果如图10-14所示,这个图可用于观察不同财产地区与贷款状态之间的关系,以及每个组的频率分布。在这里,"Property Area"表示不同的财产地区,"Loan Status"表示贷款状态(已批准或未批准)。
图10-14 Property Area与Loan Status之间的关系
(5)创建一个箱线图,用于比较贷款状态(Loan Status)与申请人收入(Applicant Income)之间的关系。具体实现代码如下所示。
sns.boxplot(x="Loan_Status", y="ApplicantIncome", data=df, palette="mako");
执行效果如图10-15所示,图中有两个箱子,分别对应于"Loan_Status"为"Y"(已批准)和"N"(未批准)的两个类别。箱子的上边界表示上四分位数,下边界表示下四分位数,箱子内部的线表示中位数。图中的"Y"和"N"表示贷款状态,可以看出不同状态下申请人收入的分布情况。
图10-15 Loan Status与Applicant Income箱线图
这个箱线图有助于比较不同贷款状态下申请人收入的分布情况,包括中位数、四分位数等统计信息,有助于了解贷款状态与申请人收入之间的关系。
(6)创建了一个箱线图,用于比较贷款状态(Loan Status)与共同申请人收入(Coapplicant Income)之间的关系。具体实现代码如下所示。
sns.boxplot(x="CoapplicantIncome", y="Loan_Status", data=df, palette="rocket");
执行效果如图10-16所示,这个箱线图有助于比较不同贷款状态下共同申请人收入的分布情况,包括中位数、四分位数等统计信息,有助于了解贷款状态与共同申请人收入之间的关系。
图10-16 Loan Status与Coapplicant Income箱线图
(7)创建一个箱线图,用于比较贷款状态(Loan Status)与贷款金额(Loan Amount)之间的关系。具体实现代码如下所示。
sns.boxplot(x="Loan_Status", y="LoanAmount", data=df, palette="YlOrBr");
执行效果如图10-17所示,这个箱线图有助于比较不同贷款状态下贷款金额的分布情况,包括中位数、四分位数等统计信息,有助于了解贷款状态与贷款金额之间的关系。
图10-17 Loan Status与Loan Amount箱线图
(8)可视化和分析 'ApplicantIncome' 和 'CoapplicantIncome' 列之间的关系,包括散点图的绘制、相关性的计算以及 t 检验的执行。具体实现代码如下所示。
df.plot(x='ApplicantIncome', y='CoapplicantIncome', style='o')
plt.title('Applicant Income - Co Applicant Income')
plt.xlabel('ApplicantIncome')
plt.ylabel('CoapplicantIncome')
plt.show()
print('Pearson correlation:', df['ApplicantIncome'].corr(df['CoapplicantIncome']))
print('T Test and P value: \n', stats.ttest_ind(df['ApplicantIncome'], df['CoapplicantIncome']))
执行效果如图10-18所示。
图10-18 可视化和分析 ApplicantIncome和CoapplicantIncome列之间的关系
4. 空值处理
(1)计算DataFrame df 中每一列的空值数量,具体来说,它会返回一个与DataFrame列相同长度的Series,其中包含每列的缺失值数量。具体实现代码如下所示。
df.isnull().sum()
执行后会输出:
Loan_ID 0
Gender 13
Married 3
Dependents 15
Education 0
Self_Employed 32
ApplicantIncome 0
CoapplicantIncome 0
LoanAmount 22
Loan_Amount_Term 14
Credit_History 50
Property_Area 0
Loan_Status 0
dtype: int64
通常情况下,数据分析师会使用这些信息来了解数据集中哪些列包含缺失值,以便进一步处理这些缺失值,例如填充它们或者删除包含缺失值的行或列。
(2)创建一个水平的条形图 (bar plot),用于可视化数据框 (DataFrame) df 中每一列的缺失值数量。具体实现代码如下所示。
plt.figure(figsize = (24, 5))
axz = plt.subplot(1,2,2)
mso.bar(df, ax = axz, fontsize = 12);
其中 plt.figure(figsize=(24, 5)) 用于设置图的大小,axz = plt.subplot(1,2,2) 创建了一个子图对象以及其位置,最后 mso.bar(df, ax=axz, fontsize=12) 用于绘制缺失值的条形图,其中 df 是数据框,ax=axz 是子图对象,fontsize=12 设置了字体大小。执行效果如图10-19所示,这个图有助于可视化哪些列具有缺失值,并且可以用于进一步分析数据中的缺失值情况。
图10-19 空值统计图