描述性统计
描述性统计用于总结数据的基本特征,包括集中趋势、离散程度和分布形态。
集中趋势
均值
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()注意事项
- 数据类型: 确保数据类型适合计算(数值型数据)
- 异常值影响: 均值受异常值影响较大,可考虑使用中位数
- 样本量: 样本量较小时统计量可能不稳定
- 分布假设: 许多统计方法假设数据服从正态分布