news 2026/10/19 15:49:13

区县逐月房价数据解析:从Excel清洗到GIS专题图实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
区县逐月房价数据解析:从Excel清洗到GIS专题图实战

做房产数据分析的人,应该都经历过这种尴尬:想研究某个板块的房价走势,翻遍公开数据,要么只有整个城市的平均值,要么只有季度甚至年度的颗粒度,根本没法看清“哪个区在涨、哪个区在横盘”。我这些年折腾各类数据源,最深的一个体会是——把数据从市级下沉到区县级,把时间刻度从季度切到逐月,能解锁的分析思路完全不一样。最近看到这份2019-2025年我国区县逐月新房房价数据,发现它正好同时满足这两个关键条件,还贴心地提供了Excel和Shp两种格式,所以想好好拆一拆它到底怎么用、能做什么、有什么坑。

这份数据覆盖全国区县维度,以月份为时间刻度,记录了新房住宅价格的长期序列。对做宏观趋势判断、板块对比、GIS空间可视化的朋友来说,它解决的是“区域冷热不均”和“趋势跟踪滞后”这两个核心痛点。我打算先从数据结构讲起,再聊数据清洗的细节,最后给出一套从Excel分析和Python出图到QGIS专题图的可落地方案。

1. 这份数据到底装了什么:先看结构和字段

1.1 区县级加上逐月,这个组合为什么稀缺

经常研究房地产数据的朋友都知道,数据源很多,但真正好用的少。宏观层面的指数到处都是,但那不是给你做片区研究用的;到了城市层面,数据开始变得粗糙,一年四个季度就算不错的粒度了;再往下走到区县,公开数据就非常零散。

区县级和逐月这两个属性凑在一起,稀缺性是加倍的。先说逐月。年度数据太“钝”,季度数据滞后明显,而月度几乎是捕捉行情拐点的最小可用刻度。一份从2019年1月开始的逐月数据,意味着你能复现六年多时间里每一个短期波动节点,比如年初数据惯性、年中供应放量带来的价格结构变化、年末成交节奏变化对均价的影响。这些细节在季度数据里会被直接抹平,根本看不出来。

再说区县级。市级均价是最容易骗人的指标,因为同一个城市内部,核心区和远郊完全是两种市场。把上涨板块和横盘板块混在一起求平均,得到的结果谁都不代表。只有到区县这个颗粒度,才能回答“这个城市里到底是哪里在领涨、哪里最抗跌、哪里还在阴跌”。对投拓、研究和普通购房者来说,这个颗粒度的信息量完全不一样。

1.2 同一份数据为什么要同时出Excel和Shp两个版本

我先说结论:这两个格式解决的是完全不同的问题。Excel版解决的是“算”的问题,Shp版解决的是“画”的问题。很多数据产品只给表格,给Shp的很少,因为整理边界数据、做好属性绑定、保证代码能对上,需要额外花不少功夫。

格式核心用途典型场景
Excel筛选、透视、制表、建模拉出某个区县的时间序列,算环比同比,做常规图表
Shp空间关联、地图渲染、空间统计给区县多边形上色生成专题地图,做空间自相关分析

如果你只是做价格序列对比、涨幅排名,Excel完全够用,没必要把问题复杂化。但一旦涉及空间视角,比如想看看“高价区县在地图上是不是成片聚集”“某个板块向外传导的路径是什么”,Shp格式就变得不可或缺。这份数据把“区县行政边界”和“房价属性”绑定在了一起,省去了你到处找带行政区划代码的边界文件再手工关联的麻烦。

1.3 上手第一步:先认全这些核心字段

不管打开Excel还是Shp的属性表,字段逻辑是统一的。常见的字段大概有下面这些:

  • 行政区划代码:6位数字,县级标准代码,这是贯穿所有数据关联操作的主键
  • 省份、城市、区县名称:用于快速筛选和理解层级关系
  • 年月:记录数据所属月份,格式可能是“2019-01”或“2019年1月”
  • 新房均价:当月纳入统计的新房住宅均价
  • 环比涨跌幅:与上一个月比较的价格变化百分比
  • 同比涨跌幅:与上一年同月比较的价格变化百分比
  • 样本量:纳入统计的楼盘数量或成交记录条数

这里我要特别强调样本量字段,很多人会忽略它,但它是判断数据可靠性的命门。举个例子:某个区县本月均价从1万跳到1.3万,看着像是暴涨,结果你把样本量一打开,发现本月只有1个高端楼盘开盘,其他楼盘零成交,那么这个涨幅根本不是真实的市场信号,而是样本结构变化造成的假波动。没有样本量字段,你连判断的基础都没有。

还有一点要注意:字段命名在不同版本里可能不一致,比如均价在Excel里可能叫“均价”,到Shp属性表里就简写成“avg_price”或者“JZ”。所以拿到数据的第一件事,是把所有列名过一遍,确认每个字段的含义,再开始动手分析。

2. 别急着分析:数据清洗的五个关键动作

2.1 一致性检查:代码、时间、名称一个都不能少

很多朋友拿到别人整理好的数据,感觉挺干净,就直接透视出图,结果跑起来全是问题。我踩过太多坑,按出现频率排序,第一个坑几乎总是行政区划代码。

这几年县级行政区划调整并不少见,有的县改了区,有的市辖区合并,有的新区启用了新代码。如果你拿2025年的数据关联一份旧版区划边界,很多区县会对应不上。处理方法是统一以最新行政区划代码为准,先建一张新旧名称映射表。第二个坑是时间字段格式不统一,有的写“2019-01”,有的写“2019.1”,有的写“2019年1月”,有的干脆是八位数“201901”。分析前务必统一成标准时间格式,否则排序会乱,透视表还会把同一个月拆成两个部分。第三个坑是名称和代码对不上,同名不同区、同区不同名在数据拼接时经常上演。我自己的铁律是:统一用6位行政区划代码做主键,名称只用来人肉核对,绝不拿名称做关联。

2.2 价格字段的三个口径陷阱,不懂要吃亏

房价数据最容易翻车的地方是口径。同样是“新房均价”,数据源不同,算法可能完全不同,放在一起比较等于把苹果和橘子相加。

第一种是网签口径,统计当月实际网签合同的价格。优点是样本量大、贴近市场成交,但缺点也很明显:有些签约为了各种原因做低或做高价格,极端值会直接影响均值。第二种是备案口径,来自预售许可的备案价格。这类价格的波动天然滞后于真实成交,因为调整备案价有流程有周期,看到的数据往往慢一拍。第三种是统计口径本身的范围差异:有的数据把保障房、安置房包含进去,有的只统计商品住宅,有的剔除别墅,有的不剔除。哪怕同一个区县,用不同口径算出来的均价能差出两成。

所以拿到数据后,我的习惯是先做一轮价格合理性扫描。把每个区县的月度序列拉出来,用折线图看有没有突兀的跳点,然后回看样本量和原始说明,判断跳变是真实行情还是口径变化。这十分钟的检查,能在后面省下几小时的返工。

2.3 一份可复用的Pandas清洗脚本,拿走不谢

整理这类数据,我建议直接用Python一把梭,效率比手工操作高太多。下面这段脚本是我处理同类数据的通用套路,可以直接抄:

import pandas as pd df = pd.read_excel("house_price.xlsx", dtype={"区划代码": str}) # 1. 统一时间格式 df["年月"] = pd.to_datetime(df["年月"], format="%Y-%m").dt.to_period("M") # 2. 区划代码补零,确保是6位字符串 df["区划代码"] = df["区划代码"].str.zfill(6) # 3. 缺失值规则:样本量为0或空值时,均价直接标记为缺失 df.loc[df["样本量"].isna() | (df["样本量"] == 0), "均价"] = pd.NA # 4. 去除同一区县同一月份的重复记录,保留样本量最大的一条 df = df.sort_values("样本量", na_position="last") df = df.drop_duplicates(subset=["区划代码", "年月"], keep="last") # 5. 计算环比涨幅 df = df.sort_values(["区划代码", "年月"]) df["环比涨幅"] = df.groupby("区划代码")["均价"].pct_change() * 100 # 6. 导出清洗结果 df.to_csv("house_price_clean.csv", index=False, encoding="utf-8-sig")

这段脚本里有几个细节值得展开说说。排序那行很多人会省略,但如果不去重前先按样本量排序,保留规则就是随机的,同一份数据分析三次可能得到三个不同结果。补零那步看着简单,实际非常关键,Excel读进来的行政区划代码会被当成数值,前导0丢失,和Shp属性表里的字符型代码对不上,后面所有关联都会失败。

3. 三大分析方向:从涨幅排行到空间洞察

3.1 方向一:五分钟建立一张区县涨幅排行表

日常分析中Excel依然是最顺手的工具。数据清洗完之后,直接插入数据透视表:行放区县名称,列放年月,值放均价,然后拉出环比或同比计算,一份当月涨跌榜就出来了。熟练的话,从打开文件到得到榜单,五分钟以内可以完成。

进阶玩法是条件格式。选中最右侧的涨幅列,用红绿双色色阶做渲染,哪个板块在启动、哪个板块在回落,一眼就能看出来。如果你要把这张表发给别人,建议把列宽锁定、数值格式统一,再进行筛选,成品会显得专业很多。这里有个小提醒:红色代表上涨、绿色代表下跌只是行业习惯,各团队可能相反,关键是内部统一,别搞混。

3.2 方向二:用“时间差”找出板块传导链

市级研究很难观察板块传导,但区县数据到位之后,这个概念就变得可操作了。把同一个都市圈里的区县拉出来,对比它们的月度曲线,你会发现市场启动往往不是所有地方同步,而是从某个核心区开始,顺着交通线路向外围扩散。用逐月数据,你可以做一个简单的领先滞后分析。

这个分析不需要高深的模型,把两条序列放到同一张折线图上,手动错位两到三个月对比,肉眼就能看出先后关系。比如某区县价格开始上涨两个多月后,相邻区县才开始跟进,这样的节奏感在市级数据里完全看不到。我建议每做一次这样的小对比,就做一个标注记在笔记里,积累几个周期之后,你对城市板块格局的理解会比只看地图深刻得多。

3.3 方向三:Shp带来的空间统计视角

一旦进入Shp格式,分析就打开了另一个维度。最常见的操作有三类。

第一类是专题图渲染,把均价或涨幅字段绑定到区县边界多边形上,用分级设色做成热力地图。这是最直观的成果展示方式,也是Shp格式最核心的价值。第二类是空间自相关分析,常用的是莫兰指数,用来判断房价在空间上是否存在聚集效应。实操中你会发现,高值区县和低值区县往往各自聚集,形成典型的空间分层结构。第三类是叠加分析,把房价和地铁站点密度、教育资源数量、商圈分布放在一起做协同分析。区县房价数据是整个分析链条的地基,没有它,后面所有叠加研究都无从谈起。

4. Shp格式实操:从边界文件到专题图

4.1 拿到Shp先检查,别急着拖进软件

Shp是GIS里的通用矢量格式,但它不是“一个文件”,而是一组文件。完整的一套至少包含.shp(几何坐标)、.shx(索引)、.dbf(属性表)、.prj(坐标参考信息)。如果缺了.prj,软件不知道坐标参考系统,图层可能会画到错误位置甚至画不出来。常见的还有.sbn和.sbx空间索引文件,以及.cpg字符编码文件,少了一两个通常不影响打开,但打包传输时最好整包带上。

我见过太多人只复制了一个“.shp”文件,拖进QGIS就报错“无法打开图层”,原因基本是.shx或.dbf没有跟着一起复制。记住,Shp是系列文件,必须成套使用。解压之后也先确认一下文件都在,再开始操作。

4.2 Python一条龙:读取、关联、出图

如果不想开GIS软件,用Python和geopandas就能完成全套工作流。示例代码:

import geopandas as gpd import matplotlib.pyplot as plt import pandas as pd # 读取边界与房价数据 boundary = gpd.read_file("county.shp") df = pd.read_csv("house_price_clean.csv", dtype={"区划代码": str}) # 按行政区划代码做属性连接 merged = boundary.merge(df, left_on="区划代码", right_on="区划代码", how="inner") # 筛选某一个月 target = merged[merged["年月"] == "2024-06"] # 分级设色出图 ax = target.plot(column="均价", cmap="RdYlGn_r", legend=True, scheme="Quantiles", k=6, figsize=(10, 8)) ax.set_title("2024-06 区县新房均价分布") ax.set_axis_off() plt.tight_layout() plt.savefig("house_price_map.png", dpi=200)

这段代码中最容易出问题的不是绘图,而是merge这一步。两边关联字段类型不一致时,比如一边是字符型“110102”,另一边是数值型110102,匹配结果会出现大量空值,地图上就是大片空白。所以我在读CSV时就强制指定区划代码为字符串类型,再从源头用zfill补位,把这个坑提前填平。

4.3 QGIS图形化操作:不写代码也能出正式图

不想碰代码的朋友,QGIS是最省心的选择。操作路径很固定:先把Shp拖进图层面�板,如果里面的属性表只有边界没有房价数据,就通过“图层”菜单里的“属性连接”,把Excel按行政区划代码关联进来。然后双击图层打开样式设置,选择“分级”渲染,字段选“均价”,模式选“分位数”,颜色带选红绿渐变,一张专题图雏形就出来了。最后用“布局管理器”新建布局,添加地图、图例、比例尺和指北针,导出PNG或PDF,就是一张可以直接发布的结果图。

整个过程熟练之后,十分钟足够完成。我每次做完都会检查一下属性表里的记录数,如果连接后记录数明显减少,八成是关联字段类型不匹配,这是QGIS里最经典的问题。

5. 常见问题与排坑实录:这些细节决定数据能不能用

5.1 区县数据缺失了,补全还是删除

区县级数据天然存在缺失,原因多种多样:有的区县当月确实没有新房成交,有的数据源覆盖不到,有的新区成立时间晚,只有最近几年的记录。我的经验是,处理方式取决于分析目的。

做时间序列分析时,我倾向于用前向填充或线性插值补缺失月份,但有一个前提:如果某个区县连续超过半年没有成交记录,说明市场活跃度极低,插补出来的数字没有统计意义,宁可直接剔除。做横截面排行时则反过来,用“最近一个有数据的月份”参与比较,并在报告里注明数据时点,避免拿不同月份的数值做横向对比。

5.2 行政区划调整导致的数据断档怎么解

这是区县数据分析最绕不开的现实问题。行政区划代码不是一成不变的,这几年撤县设区、乡镇合并、新区成立持续发生,最稳妥的做法是建立一张新旧名称对照表,把所有历史数据映射到当前区划口径下再分析。

具体操作上,我会先把数据里所有区县名称拉成清单,逐一核对最新代码。已经撤销或者合并的区县,要根据原始归属做拆分或合并计算,这个过程确实麻烦,但绝不能省。否则图上会冒出一堆“幽灵区县”,名字还在属性表里,到最新版边界上却找不到对应图形,最终做任何空间分析都会报错。

5.3 Shp中文乱码,不是玄学是编码问题

GIS新手遇到中文乱码,第一反应往往是数据坏了。其实原因很直接:Shp的dbf属性表里,字符串编码要么是UTF-8要么是GBK,软件默认的解码方式不对,就会显示一堆乱码。解决办法也简单,QGIS里加载图层时手动选择Encoding为UTF-8或GBK,试到正确为止。如果用Python处理,就在geopandas读取时明确指定encoding参数,比如encoding='utf-8'或encoding='gbk'。用代码控制编码,比在GUI里反复试错省心得多。

5.4 均价突然大涨大跌,到底信还是不信

这是最核心的判断题。任何区县只要出现单月均价大幅波动,先别急着下结论,按三步走:第一步查样本量,样本量很小就基本可以认定为结构性波动;第二步查当月新开楼盘,如果大量成交集中在某类产品上,说明是供应结构变化导致的,而非整体价格变化;第三步查相邻月份,假如前后几个月都很稳定,只有单月突变,大概率是数据口径或纳入项目调整造成的假信号。

做完这三步查证,你就有底气在报告里写“该区县本月均价变动主要受样本结构影响”,而不是被一个孤立跳点带偏整份研究的结论。

我个人的习惯是,拿到这类数据头一个星期只做一件事:摸清楚字段的“脾气”,而不是急着出图。数据是死的,但字段口径、代码规则、缺失形态这些“脾气”是活的,花半小时把区划代码和月份格式统一好,后面所有分析都会顺;要是跳过这步直接出图,你大概率会在后续环节被各种莫名其妙的问题连环折腾。还有个实用的小技巧:Excel透视表做好之后,把列宽锁定、数值格式统一再往外发,收到表格的人对专业度的判断,往往就来自这些细节。区县级逐月房价数据,本身就是一轮很好的行情样本,建议你用它练两次板块对比、出一张专题图,做完之后你对“数据颗粒度”这个词的理解,会比读十篇分析文章都深刻。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 15:46:55

Code Review最佳实践:为什么你的代码评审在走过场及改进指南

1. 为什么大多数Code Review都在走过场——价值与痛点的错位代码评审这件事,我见过两种极端的团队:一种干脆不做,代码合并靠吼,谁手快谁说了算,线上出了事故集体考古;另一种倒是天天开评审会,但…

作者头像 李华
网站建设 2026/10/19 15:46:16

AI生成PPT新升级:自定义模板、动画完整导出、单页精修实测

AI生成PPT的工具这几年我用了不少,说实话大多数都是“模板生成器”——选个风格、填个大纲、自动配图,效果确实快,但问题也很集中:生成的演示文稿风格千篇一律,想换成公司统一VI模板就得手动重做;动画效果导…

作者头像 李华
网站建设 2026/10/19 15:36:29

用MCP让AI直接读取YouTube字幕:从脚本到工具化

我处理视频字幕的老办法,用一个字形容就是“糊”。找到一部想分析的视频,把链接复制下来,再用本地脚本去抓字幕文本,抓到之后手动整理成 markdown 丢给模型做总结。这套流程看起来能跑,但视频一多、字幕一长&#xff0…

作者头像 李华
网站建设 2026/10/19 15:25:34

朴素贝叶斯在sklearn中的实战指南:选型、调参与排查

朴素贝叶斯这个东西,在sklearn里看起来就是几行代码的事,但真拿到项目里用,坑比想象中多。我最早接触它是在一个垃圾文本过滤的活儿里,当时图省事直接调了MultinomialNB,结果效果还行,但一到新数据上就露馅…

作者头像 李华