数据探索与分析 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的使用方法,读者可以为后续的数据分析和建模打下坚实的基础。希望本文能为您在数据探索与分析的旅程中提供帮助。