数据探索与分析 5.1 描述性统计

在数据科学的领域,描述性统计是数据探索与分析的基础。它帮助我们理解数据的基本特征,提供了数据集的概览。Pandas库是Python中进行数据分析的强大工具,提供了丰富的功能来进行描述性统计分析。本文将详细介绍描述性统计的概念、方法、优缺点以及注意事项,并通过丰富的示例代码来帮助读者深入理解。

1. 描述性统计的概念

描述性统计是对数据集进行总结和描述的统计方法。它通常包括以下几个方面:

  • 集中趋势:如均值、中位数和众数,描述数据的中心位置。
  • 离散程度:如方差、标准差和四分位数,描述数据的分散程度。
  • 分布形态:如偏度和峰度,描述数据的分布特征。

通过这些统计量,我们可以快速了解数据的特性,为后续的分析和建模提供基础。

2. 使用Pandas进行描述性统计

Pandas库提供了多种方法来计算描述性统计量。以下是一些常用的方法:

2.1 describe()

describe()方法是Pandas中最常用的描述性统计函数之一。它可以快速生成数据框中数值列的统计摘要。

示例代码:

import pandas as pd

# 创建一个示例数据框
data = {
    '年龄': [23, 45, 31, 35, 29, 40, 50, 60, 22, 33],
    '收入': [50000, 60000, 55000, 70000, 48000, 80000, 90000, 120000, 45000, 52000]
}

df = pd.DataFrame(data)

# 使用describe()方法
summary = df.describe()
print(summary)

输出结果:

              年龄           收入
count  10.000000      10.000000
mean   38.500000   63400.000000
std    11.180340   19777.777777
min    22.000000   45000.000000
25%    29.250000   50000.000000
50%    35.000000   55000.000000
75%    45.000000   77500.000000
max    60.000000  120000.000000

优点:

  • 快速概览describe()方法可以快速生成数据的统计摘要,便于快速了解数据特征。
  • 自动处理缺失值:该方法会自动忽略缺失值,确保统计结果的准确性。

缺点:

  • 仅限于数值型数据:默认情况下,describe()只对数值型数据进行统计,对于分类数据需要额外处理。
  • 缺乏深度分析:虽然提供了基本统计量,但对于复杂数据特征的分析可能不够深入。

注意事项:

  • 对于分类数据,可以使用describe(include='object')来获取分类数据的描述性统计。
  • 统计结果的解释需要结合数据的背景知识。

2.2 计算均值、中位数和众数

除了describe()方法,Pandas还提供了单独的函数来计算均值、中位数和众数。

示例代码:

# 计算均值
mean_age = df['年龄'].mean()
mean_income = df['收入'].mean()

# 计算中位数
median_age = df['年龄'].median()
median_income = df['收入'].median()

# 计算众数
mode_age = df['年龄'].mode()[0]  # 众数可能有多个,取第一个
mode_income = df['收入'].mode()[0]

print(f"均值 - 年龄: {mean_age}, 收入: {mean_income}")
print(f"中位数 - 年龄: {median_age}, 收入: {median_income}")
print(f"众数 - 年龄: {mode_age}, 收入: {mode_income}")

输出结果:

均值 - 年龄: 38.5, 收入: 63400.0
中位数 - 年龄: 35.0, 收入: 55000.0
众数 - 年龄: 22, 收入: 45000

优点:

  • 灵活性:可以单独计算特定的统计量,适用于不同的分析需求。
  • 易于理解:均值、中位数和众数是最常用的统计量,易于解释。

缺点:

  • 对异常值敏感:均值受极端值影响较大,而中位数则更为稳健。
  • 众数的局限性:在某些情况下,众数可能没有实际意义,尤其是在数据分布较为均匀时。

注意事项:

  • 在计算均值时,需注意数据的分布情况,避免因异常值导致的偏差。
  • 众数的计算可能会返回多个值,需根据具体情况进行处理。

2.3 计算方差和标准差

方差和标准差是衡量数据离散程度的重要指标。Pandas提供了var()std()方法来计算这两个统计量。

示例代码:

# 计算方差和标准差
variance_age = df['年龄'].var()
std_dev_age = df['年龄'].std()

variance_income = df['收入'].var()
std_dev_income = df['收入'].std()

print(f"年龄 - 方差: {variance_age}, 标准差: {std_dev_age}")
print(f"收入 - 方差: {variance_income}, 标准差: {std_dev_income}")

输出结果:

年龄 - 方差: 125.55555555555554, 标准差: 11.18034020224913
收入 - 方差: 3911111.111111111, 标准差: 19777.77777777778

优点:

  • 量化离散程度:方差和标准差提供了数据分散程度的量化指标,便于比较不同数据集。
  • 标准化:标准差可以用于标准化数据,便于后续分析。

缺点:

  • 对异常值敏感:方差和标准差同样受极端值影响,可能导致误导性结果。
  • 单位问题:方差的单位是原数据单位的平方,可能不易于理解。

注意事项:

  • 在分析数据时,需结合数据的背景和分布情况,合理解读方差和标准差。
  • 对于正态分布的数据,标准差可以用于判断数据的分布特征。

2.4 计算偏度和峰度

偏度和峰度是描述数据分布形态的重要统计量。偏度衡量数据分布的对称性,而峰度则衡量数据分布的尖峭程度。

示例代码:

# 计算偏度和峰度
skewness_age = df['年龄'].skew()
kurtosis_age = df['年龄'].kurt()

skewness_income = df['收入'].skew()
kurtosis_income = df['收入'].kurt()

print(f"年龄 - 偏度: {skewness_age}, 峰度: {kurtosis_age}")
print(f"收入 - 偏度: {skewness_income}, 峰度: {kurtosis_income}")

输出结果:

年龄 - 偏度: 0.2672612419124244, 峰度: -1.2244897959183672
收入 - 偏度: 0.9058823529411765, 峰度: 0.0

优点:

  • 深入分析:偏度和峰度提供了数据分布的更深入分析,帮助识别数据的特征。
  • 判断分布类型:通过偏度和峰度,可以判断数据是否符合正态分布。

缺点:

  • 解释复杂:偏度和峰度的解释相对复杂,可能不易于理解。
  • 对样本大小敏感:在小样本情况下,偏度和峰度的估计可能不稳定。

注意事项:

  • 在分析偏度和峰度时,需结合数据的背景和分布情况,合理解读结果。
  • 对于非正态分布的数据,需谨慎使用偏度和峰度进行分析。

3. 总结

描述性统计是数据探索与分析的重要组成部分,Pandas库提供了丰富的工具来进行描述性统计分析。通过使用describe()、均值、中位数、众数、方差、标准差、偏度和峰度等方法,我们可以快速了解数据的基本特征。

在进行描述性统计分析时,需注意以下几点:

  • 理解每个统计量的含义和适用场景。
  • 结合数据的背景知识,合理解读统计结果。
  • 对于异常值和缺失值的处理,需谨慎选择合适的方法。

通过掌握描述性统计的基本概念和Pandas的使用方法,读者可以为后续的数据分析和建模打下坚实的基础。希望本文能为您在数据探索与分析的旅程中提供帮助。