如何截取DataFrame子集剔除离群值以绘制1980-2020年通胀率分布图
你可以按以下步骤完成离群值剔除和重绘图表的需求:
- 第一步:读取你的本地通胀数据集,定位到存储通胀值的字段
- 第二步:基于该字段的所有有效值计算99.5%分位数的阈值
- 第三步:保留所有通胀值小于等于该阈值的记录,完成数据过滤
- 第四步:用过滤后的数据集重新绘制分布图表即可
Python(pandas)实现示例
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 读取本地csv文件 df = pd.read_csv("替换为你的本地文件路径.csv") # 替换为你数据集里通胀率的实际列名 inflation_data = df["inflation_rate"] # 计算99.5%分位数阈值 threshold_995 = np.quantile(inflation_data, 0.995) # 过滤掉高于阈值的离群值 filtered_data = df[df["inflation_rate"] <= threshold_995] # 绘制分布直方图示例 plt.hist(filtered_data["inflation_rate"], bins=50, edgecolor="black") plt.xlabel("通胀率") plt.ylabel("出现频次") plt.title("1980-2020年各国通胀率分布(剔除99.5%分位以上极端值)") plt.show()
R语言实现示例
library(tidyverse) # 读取本地csv文件 df <- read_csv("替换为你的本地文件路径.csv") # 替换为实际的通胀率列名,计算99.5%分位数阈值 threshold_995 <- quantile(df$inflation_rate, 0.995) # 过滤数据 filtered_data <- df %>% filter(inflation_rate <= threshold_995) # 绘制分布直方图示例 ggplot(filtered_data, aes(x = inflation_rate)) + geom_histogram(bins = 50, color = "black") + labs(x = "通胀率", y = "出现频次", title = "1980-2020年各国通胀率分布(剔除99.5%分位以上极端值)")
补充注意事项
- 如果需要同时剔除极低的极端值,可以同时保留0.5%~99.5%分位数区间的数据,在过滤条件中补充
>= 0.5%分位数阈值即可 - 不同工具的分位数计算逻辑有细微差异,若需要对齐其他工具的结果,可以调整分位数计算函数的method参数
- 重绘图表时可以根据数据分布调整bins的数量,让展示效果更清晰
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

