理解统计直方图与QQ图,识别并剔除不可靠气象数据
气象数据统计校验问题解答
1. 统计图解读与常量列量化识别
统计图解读
- 带KDE的直方图:若数据符合正态分布,直方图会呈现对称钟形,KDE(核密度估计)曲线也会是对称的单峰形态;如果是常量列,直方图会是一根极窄的竖线(所有值集中在同一个点),KDE曲线会是一个尖锐的单峰。
- QQ图:若数据符合正态分布,样本点会紧密贴合图中的参考直线;常量列的QQ图则是一条水平直线(所有样本分位数相同)。
量化识别并剔除常量列
直接通过数值特征判断,无需依赖可视化:
- 方法1:计算列的标准差,标准差接近0说明值几乎无波动
# 保留标准差大于极小阈值的列(避免浮点精度问题) valid_cols = df.columns[df.std() > 1e-6] df = df[valid_cols] - 方法2:统计列的唯一值数量,唯一值极少则判定为常量列
# 剔除唯一值数量≤1的列 cols_to_drop = [col for col in df.columns if df[col].nunique() <= 1] df = df.drop(cols_to_drop, axis=1)
2. QQ图横纵轴定义
- 纵轴(样本分位数):将当前列的所有数据从小到大排序后,每个位置对应的实际观测值。比如排序后第10%位置的数值、第50%位置的中位数等。
- 横轴(理论分位数):假设数据完全符合正态分布时,对应分位的理论数值。比如标准正态分布中第10%分位的理论值、第50%分位的0值等。
如果数据符合正态分布,样本分位数和理论分位数会呈现线性关系,所有点会落在QQ图的参考直线上。
3. 调整子图高度显示x轴标签
用Matplotlib调整布局的几种实用方法:
- 增大整体图的高度,并自动调整布局
import matplotlib.pyplot as plt # 2行n列的子图,调大figsize的高度值 fig, axes = plt.subplots(nrows=2, ncols=len(df.columns), figsize=(12, 10)) # 自动调整子图间距 plt.tight_layout() plt.show() - 手动调整底部留白,给x轴标签预留空间
fig, axes = plt.subplots(nrows=2, ncols=len(df.columns), figsize=(12, 8)) # 调大bottom值增加底部留白 plt.subplots_adjust(bottom=0.2) plt.show() - 旋转x轴标签避免重叠
fig, axes = plt.subplots(nrows=2, ncols=len(df.columns), figsize=(12, 8)) # 遍历子图旋转x轴标签 for ax in axes.flat: ax.tick_params(axis='x', rotation=45, ha='right') plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Mainland
相关产品推荐
相关产品推荐

