You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于州/城市分组的房价数据集离群值检测方法咨询

按州/城市分组检测并对比房价离群值的解决方案

完全理解你的痛点——全局箱线图因为州之间房价差异太大,离群值的判断完全失真了。咱们针对州(甚至城市)的局部分布来处理,这样离群值的检测才更贴合实际情况,具体可以分这几步来做:

1. 按州(或城市)分组计算离群值标记

首先用dplyr按州分组,基于每个州自身的房价分布计算四分位距(IQR),然后标记出该州内的离群值。这样每个州的离群值阈值是贴合本地房价水平的,不会被其他州的极端值干扰:

library(dplyr)

# 按州分组,计算每个州的离群值阈值并标记
new_america_with_outliers <- new_america %>%
  group_by(STATE) %>%
  mutate(
    Q1 = quantile(PRICE, 0.25, na.rm = TRUE),
    Q3 = quantile(PRICE, 0.75, na.rm = TRUE),
    IQR_val = IQR(PRICE, na.rm = TRUE),
    # 经典的1.5*IQR阈值,你也可以根据需求调整为3*IQR(极端离群值)
    lower_bound = Q1 - 1.5 * IQR_val,
    upper_bound = Q3 + 1.5 * IQR_val,
    is_outlier = ifelse(PRICE < lower_bound | PRICE > upper_bound, TRUE, FALSE)
  ) %>%
  ungroup()

如果要细化到城市级别,只需要把group_by(STATE)改成group_by(CITY, STATE)(避免不同州的同名城市混淆),其他逻辑完全一致。

2. 可视化:分面展示+标记离群值

用ggplot2的分面功能,把每个州(或城市)的箱线图单独展示,同时手动标记离群值,这样能清晰对比每个区域的离群值情况:

按州分面的可视化

library(ggplot2)

ggplot(new_america_with_outliers, aes(x = STATE, y = PRICE, fill = STATE)) +
  geom_boxplot(outlier.shape = NA) +  # 隐藏默认的离群点,避免重复
  geom_point(aes(color = is_outlier), alpha = 0.6) +  # 红色标记离群值
  facet_wrap(~STATE, scales = "free_y") +  # 每个州单独面板,Y轴自适应
  scale_color_manual(values = c("black", "red")) +
  labs(title = "Housing Prices by State (Outliers Highlighted)",
       y = "Property Price", x = "State") +
  theme(axis.text.x = element_blank())  # 分面后X轴不需要重复显示州名

按城市分面(嵌套州)的可视化

如果要看城市级别的离群值,可以按州分面,每个面内展示该州的城市:

ggplot(new_america_with_outliers, aes(x = CITY, y = PRICE, fill = CITY)) +
  geom_boxplot(outlier.shape = NA) +
  geom_point(aes(color = is_outlier), alpha = 0.6) +
  facet_wrap(~STATE, scales = "free") +  # 每个州一个面板,X/Y轴都自适应
  scale_color_manual(values = c("black", "red")) +
  labs(title = "Housing Prices by City (Grouped by State) with Outliers",
       y = "Property Price", x = "City") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # 旋转城市名避免重叠

3. 提取离群值做进一步分析

标记完离群值后,你可以筛选出这些记录,统计每个区域的离群值数量,或者查看这些房子的其他特征(如果数据集有更多字段的话):

# 提取所有离群值记录
outlier_details <- new_america_with_outliers %>%
  filter(is_outlier == TRUE)

# 统计每个州的离群值数量
outlier_count_by_state <- outlier_details %>%
  count(STATE, name = "outlier_count") %>%
  arrange(desc(outlier_count))

print(outlier_count_by_state)

这样就能精准定位哪些州/城市的房价离群值更多,方便后续深入分析原因~

内容的提问来源于stack exchange,提问作者Bartholomew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:52:39