Skip to content

描述性统计

描述性统计用于总结数据的基本特征,包括集中趋势、离散程度和分布形态。

集中趋势

均值

python
import pandas as pd
import numpy as np

# 创建示例数据
data = {'value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)

# 计算均值
mean = df['value'].mean()
print(f"均值: {mean}")  # 30.0

中位数

python
# 计算中位数
median = df['value'].median()
print(f"中位数: {median}")  # 30.0

众数

python
# 计算众数
mode = df['value'].mode()
print(f"众数: {mode}")  # 10, 20, 30, 40, 50(每个值出现一次)

离散程度

方差

python
# 计算方差
variance = df['value'].var()
print(f"方差: {variance}")  # 250.0

标准差

python
# 计算标准差
std_dev = df['value'].std()
print(f"标准差: {std_dev}")  # 15.811...

极差

python
# 计算极差
range_val = df['value'].max() - df['value'].min()
print(f"极差: {range_val}")  # 40

四分位数

python
# 计算四分位数
Q1 = df['value'].quantile(0.25)
Q2 = df['value'].quantile(0.5)
Q3 = df['value'].quantile(0.75)
IQR = Q3 - Q1

print(f"Q1: {Q1}, Q2: {Q2}, Q3: {Q3}, IQR: {IQR}")  # Q1: 20.0, Q2: 30.0, Q3: 40.0, IQR: 20.0

分布形态

偏度

python
# 计算偏度
skewness = df['value'].skew()
print(f"偏度: {skewness}")  # 0.0(对称分布)

峰度

python
# 计算峰度
kurtosis = df['value'].kurt()
print(f"峰度: {kurtosis}")  # -1.2(扁平分布)

完整统计摘要

python
# 获取完整统计摘要
summary = df.describe()
print(summary)

分组统计

python
# 创建分组数据
data = {
    'category': ['A', 'A', 'B', 'B', 'A', 'B'],
    'value': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)

# 分组统计
grouped = df.groupby('category')['value'].agg([
    'count', 'mean', 'median', 'std', 'min', 'max'
])
print(grouped)

相关分析

python
# 创建相关数据
data = {
    'x': [1, 2, 3, 4, 5],
    'y': [2, 4, 5, 4, 5]
}
df = pd.DataFrame(data)

# 计算相关系数
correlation = df['x'].corr(df['y'])
print(f"相关系数: {correlation}")  # 0.707...

# 相关矩阵
corr_matrix = df.corr()
print(corr_matrix)

可视化

python
import matplotlib.pyplot as plt
import seaborn as sns

# 直方图
plt.figure(figsize=(10, 6))
sns.histplot(df['value'], kde=True)
plt.title('Histogram')
plt.show()

# 箱线图
plt.figure(figsize=(10, 6))
sns.boxplot(x=df['value'])
plt.title('Box Plot')
plt.show()

# 散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(data=df, x='x', y='y')
plt.title('Scatter Plot')
plt.show()

# 热力图
plt.figure(figsize=(10, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()

注意事项

  1. 数据类型: 确保数据类型适合计算(数值型数据)
  2. 异常值影响: 均值受异常值影响较大,可考虑使用中位数
  3. 样本量: 样本量较小时统计量可能不稳定
  4. 分布假设: 许多统计方法假设数据服从正态分布