使用 Python 的描述性统计数据解释数据

发布日期:2026-07-19 09:18:05  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-19 09:18:05  
0

介绍

描述性统计是数据科学的基石。如果不分析关键指标的描述性统计,高级分析通常就不完整。简单来说,描述性统计可以定义为总结给定数据的度量,这些度量可以进一步细分为集中趋势度量和离散度量。

集中趋势的测量指标包括平均值、中位数和众数,而变异性的测量指标包括标准差、方差和四分位距。在本指南中,您将学习如何计算这些描述性统计指标,并使用它们来解释数据。

我们将讨论以下主题:

  1. 意思是
  2. 中位数
  3. 模式
  4. 标准差
  5. 方差
  6. 四分位距
  7. 偏斜度

我们将首先加载本指南中要使用的数据集。

数据

在本指南中,我们将使用包含 600 个观测值和 10 个变量的贷款申请人的虚构数据,如下所述:

  1. Marital_status:申请人是否已婚(“是”)或未婚(“否”)。
  2. 受抚养人:申请人的受抚养人人数。
  3. Is_graduate:申请人是否是毕业生(“是”)或不是(“否”)。
  4. 收入:申请人的年收入(美元)。
  5. Loan_amount:提交申请的贷款金额(以美元计)。
  6. Term_months:贷款期限(以月为单位)。
  7. Credit_score:申请人的信用评分是良好(“满意”)还是不佳(“不满意”)。
  8. 年龄:申请人的年龄。
  9. 性别:申请人是女性(F)还是男性(M)。
  10. authorization_status:贷款申请是否被批准(“是”)或未被批准(“否”)。

让我们首先加载所需的库和数据。

      import pandas as pd
import numpy as np
import statistics as st 

# Load the data
df = pd.read_csv("data_desc.csv")
print(df.shape)
print(df.info())
    

输出:

      (600, 10)

 <class 'pandas.core.frame.DataFrame'>
 RangeIndex: 600 entries, 0 to 599
 Data columns (total 10 columns):
 Marital_status     600 non-null object
 Dependents         600 non-null int64
 Is_graduate        600 non-null object
 Income             600 non-null int64
 Loan_amount        600 non-null int64
 Term_months        600 non-null int64
 Credit_score       600 non-null object
 approval_status    600 non-null object
 Age                600 non-null int64
 Sex                600 non-null object
 dtypes: int64(5), object(5)
 memory usage: 47.0+ KB
 None
    

其中五个变量是分类变量(标记为“对象”),其余五个变量是数字变量(标记为“int”)。

集中趋势测量

集中趋势测量描述的是数据的中心,通常用平均值、中位数和众数来表示。

意思是

平均值表示数据的算术平均值。下面的代码行打印数据中数值变量的平均值。从输出中,我们可以推断出申请人的平均年龄为 49 岁,平均年收入为 705,541 美元,平均贷款期限为 183 个月。命令df.mean(axis = 0)也将给出相同的输出。

      df.mean()
    

输出:

      Dependents          0.748333
 Income         705541.333333
 Loan_amount    323793.666667
 Term_months       183.350000
 Age                49.450000
 dtype: float64
    

还可以计算数据中特定变量的平均值,如下所示,我们计算变量“年龄”和“收入”的平均值。

      print(df.loc[:,'Age'].mean())
print(df.loc[:,'Income'].mean())
    

输出:

      49.45
 705541.33
    

在前面的部分中,我们计算了列平均值。也可以通过指定(axis = 1)参数来计算行的平均值。下面的代码计算前五行的平均值。

      df.mean(axis = 1)[0:5]
    

输出:

      0     70096.0
 1    161274.0
 2    125113.4
 3    119853.8
 4    120653.8
 dtype: float64
    

中位数

简单来说,中位数代表第 50 个百分位数,即数据的中间值,将分布分成两半。下面的代码行打印数据中数值变量的中位数。命令df.median(axis = 0)也将给出相同的输出。

      df.median()
    

输出:

      Dependents          0.0
 Income         508350.0
 Loan_amount     76000.0
 Term_months       192.0
 Age                51.0
 dtype: float64
    

从输出结果中,我们可以推断出申请人的平均年龄为 51 岁,平均年收入为 508,350 美元,贷款平均期限为 192 个月。这些变量的平均值和中位数之间存在差异,这是由于数据的分布造成的。我们将在后续章节中对此进行更多了解。

还可以计算数据中特定变量的中位数,如下面的前两行代码所示。我们还可以通过指定(axis = 1)参数来计算行的中位数。下面的第三行计算前五行的中位数。

      #to calculate a median of a particular column
print(df.loc[:,'Age'].median())
print(df.loc[:,'Income'].median())

df.median(axis = 1)[0:5]
    

输出:

      51.0
 508350.0

 0    102.0
 1    192.0
 2    192.0
 3    192.0
 4    192.0
 dtype: float64
    

模式

众数表示数据中变量出现频率最高的值。这是唯一可用于分类变量的集中趋势测量,不同于只能用于定量数据的平均值和中位数。

下面的代码行打印了数据中所有变量的模式。.mode ()函数返回变量的最常见值或重复次数最多的值。命令df.mode(axis = 0)也将给出相同的输出。

      df.mode()
    

输出:

      |   	| Marital_status 	| Dependents 	| Is_graduate 	| Income 	| Loan_amount 	| Term_months 	| Credit_score 	| approval_status 	| Age 	| Sex 	|
|---	|----------------	|------------	|-------------	|--------	|-------------	|-------------	|--------------	|-----------------	|-----	|-----	|
| 0 	| Yes            	| 0          	| Yes         	| 333300 	| 70000       	| 192.0       	| Satisfactory 	| Yes             	| 55  	| M   	|
    

众数的解释很简单。上面的输出显示,大多数申请人已婚,如“婚姻状况”值为“是”所示。其他分类变量如“性别”和“信用评分”也可以做类似的解释。对于数值变量,众数表示出现频率最高的值。例如,变量“年龄”的众数为 55,表示申请人的最高数量(或频率)为 55 岁。

离散度测量

在前面的部分中,我们讨论了各种集中趋势的度量。但是,正如我们在数据中看到的那样,这些度量的值对于许多变量是不同的。这是因为分布被拉伸或压缩的程度。在统计学中,这是通过离散度来衡量的,离散度也称为可变性、散布或扩散。最流行的离散度度量是标准差、方差和四分位数间距。

标准差

标准差是一种度量,用于量化一组数据值与其平均值之间的差异量。变量的标准差较低表示数据点趋向于接近其平均值,反之亦然。下面的代码行打印了数据中所有数值变量的标准差。

      df.std()
    

输出:

      Dependents          1.026362
 Income         711421.814154
 Loan_amount    724293.480782
 Term_months        31.933949
 Age                14.728511
 dtype: float64
    

在解释标准差值时,重要的是要结合平均值来理解它们。例如,在上面的输出中,变量“收入”的标准差远高于变量“家属”的标准差。然而,这两个变量的单位不同,因此,仅根据标准差来比较这两个变量的离散度是不正确的。这一点需要牢记。

也可以计算特定变量的标准差,如下面的前两行代码所示。第三行计算前五行的标准差。

      print(df.loc[:,'Age'].std())
print(df.loc[:,'Income'].std())

#calculate the standard deviation of the first five rows 
df.std(axis = 1)[0:5]
    

输出:

      14.728511412020659
 711421.814154101

 0    133651.842584
 1    305660.733951
 2    244137.726597
 3    233466.205060
 4    202769.786470
 dtype: float64
    

方差

方差是另一种离散度度量。它是标准差的平方和随机变​​量与自身的协方差。下面的代码行打印数据集中所有数值变量的方差。方差的解释与标准差的解释类似。

      df.var()
    

输出:

      Dependents     1.053420e+00
 Income         5.061210e+11
 Loan_amount    5.246010e+11
 Term_months    1.019777e+03
 Age            2.169290e+02
 dtype: float64
    

四分位距 (IQR)

四分位距 (IQR) 是统计离散度的度量,计算为上四分位数 (75 百分位数) 和下四分位数 (25 百分位数) 之间的差值。IQR 也是识别异常值的一个非常重要的度量,可以使用箱线图进行可视化。

可以使用iqr()函数计算 IQR 。下面的第一行代码从scipy.stats模块导入“iqr”函数,而第二行则打印变量“Age”的 IQR。

      from scipy.stats import iqr
iqr(df['Age'])
    

输出:

      25.0
    

偏斜度

另一个有用的统计数据是偏度,它是实值随机变量关于其均值的对称性(或缺乏对称性)的度量。偏度值可以是正值、负值或

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据