python数据分析及可视化(02)离散程度、标准化值、分布形态、描述性统计图表
·
一、离散程度度量
衡量数据分散程度的指标:
-
极差(Range):最大值与最小值之差
-
四分位差(IQR):Q3(75%)与Q1(25%)之差
-
方差(Variance):数据点与均值的平均平方差
-
标准差(Standard Deviation):方差的平方根
-
变异系数(CV):标准差与均值的比值(用于比较不同量纲数据)
import numpy as np
import pandas as pd
data = pd.Series([10, 12, 23, 23, 16, 23, 21, 16])
# 离散程度计算
statistics = {
"极差": data.max() - data.min(),
"四分位差": data.quantile(0.75) - data.quantile(0.25),
"方差": data.var(),
"标准差": data.std(),
"变异系数": data.std() / data.mean()
}
print(pd.DataFrame(statistics, index=["值"]))
二、标准化值(Z-Score)
将数据转换为均值为0、标准差为1的标准分布:

from scipy.stats import zscore
# 计算Z-Score
data_z = zscore(data)
print("标准化值:\n", data_z)
# 判断离群点(通常 |Z| > 3 为离群值)
outliers = data[np.abs(data_z) > 2]
print("离群点:\n", outliers)
三、分布形态分析
-
偏度(Skewness):
-
正偏(右偏):均值 > 中位数,长尾在右
-
负偏(左偏):均值 < 中位数,长尾在左
-
-
峰度(Kurtosis):
-
描述分布尖锐程度(与正态分布相比)
-
高峰厚尾(K>0)、低峰薄尾(K<0)
-
from scipy.stats import skew, kurtosis
print(f"偏度: {skew(data):.4f}") # >0 右偏,<0 左偏
print(f"峰度: {kurtosis(data):.4f}") # 正态分布峰度≈0
四、描述性统计图表
1. 箱线图(Boxplot) - 展示离散程度与离群点
import matplotlib.pyplot as plt
import seaborn as sns
sns.boxplot(data=data, orient='h')
plt.title("数据分布箱线图")
plt.show()
2. 直方图 + KDE(核密度估计) - 展示分布形态
sns.histplot(data, kde=True, color='skyblue')
plt.axvline(data.mean(), color='r', linestyle='--', label=f'均值={data.mean():.2f}')
plt.axvline(data.median(), color='g', linestyle='-', label=f'中位数={data.median():.2f}')
plt.title("直方图与密度估计")
plt.legend()
plt.show()
3. Q-Q图(Quantile-Quantile Plot) - 检验正态性
from scipy.stats import probplot
probplot(data, plot=plt)
plt.title("Q-Q 图")
plt.show()
4. 小提琴图(Violin Plot) - 箱线图与KDE的结合
sns.violinplot(data=data, inner="quartile")
plt.title("小提琴图")
plt.show()
五、综合案例:房价数据分析
# 加载示例数据集
df = sns.load_dataset('tips')
# 1. 离散程度分析
print("总账单离散指标:")
print(f"标准差: {df['total_bill'].std():.2f}")
print(f"四分位差: {df['total_bill'].quantile(0.75) - df['total_bill'].quantile(0.25):.2f}")
# 2. 标准化处理
df['total_bill_z'] = zscore(df['total_bill'])
# 3. 分布形态分析
print(f"偏度: {skew(df['total_bill']):.2f}")
print(f"峰度: {kurtosis(df['total_bill']):.2f}")
# 4. 多图表展示
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
sns.boxplot(data=df, x='total_bill', ax=axes[0])
sns.histplot(df['total_bill'], kde=True, ax=axes[1])
probplot(df['total_bill'], plot=axes[2])
plt.tight_layout()
plt.show()
关键输出解读:
-
箱线图:箱体代表IQR,须线延伸至1.5×IQR外的离群点
-
Q-Q图:数据点越接近对角线,越符合正态分布
-
偏度 > 0:数据右偏(均值被高值拉高)
-
峰度 > 0:分布比正态分布更尖峰(尾部更厚)
通过上述分析,可全面掌握数据分布特征,为后续统计分析(如假设检验、回归建模)奠定基础。
更多推荐
所有评论(0)