
做房产数据分析的人应该都经历过这种尴尬想研究某个板块的房价走势翻遍公开数据要么只有整个城市的平均值要么只有季度甚至年度的颗粒度根本没法看清“哪个区在涨、哪个区在横盘”。我这些年折腾各类数据源最深的一个体会是——把数据从市级下沉到区县级把时间刻度从季度切到逐月能解锁的分析思路完全不一样。最近看到这份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_positionlast) df df.drop_duplicates(subset[区划代码, 年月], keeplast) # 5. 计算环比涨幅 df df.sort_values([区划代码, 年月]) df[环比涨幅] df.groupby(区划代码)[均价].pct_change() * 100 # 6. 导出清洗结果 df.to_csv(house_price_clean.csv, indexFalse, encodingutf-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区划代码, howinner) # 筛选某一个月 target merged[merged[年月] 2024-06] # 分级设色出图 ax target.plot(column均价, cmapRdYlGn_r, legendTrue, schemeQuantiles, k6, figsize(10, 8)) ax.set_title(2024-06 区县新房均价分布) ax.set_axis_off() plt.tight_layout() plt.savefig(house_price_map.png, dpi200)这段代码中最容易出问题的不是绘图而是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参数比如encodingutf-8或encodinggbk。用代码控制编码比在GUI里反复试错省心得多。5.4 均价突然大涨大跌到底信还是不信这是最核心的判断题。任何区县只要出现单月均价大幅波动先别急着下结论按三步走第一步查样本量样本量很小就基本可以认定为结构性波动第二步查当月新开楼盘如果大量成交集中在某类产品上说明是供应结构变化导致的而非整体价格变化第三步查相邻月份假如前后几个月都很稳定只有单月突变大概率是数据口径或纳入项目调整造成的假信号。做完这三步查证你就有底气在报告里写“该区县本月均价变动主要受样本结构影响”而不是被一个孤立跳点带偏整份研究的结论。我个人的习惯是拿到这类数据头一个星期只做一件事摸清楚字段的“脾气”而不是急着出图。数据是死的但字段口径、代码规则、缺失形态这些“脾气”是活的花半小时把区划代码和月份格式统一好后面所有分析都会顺要是跳过这步直接出图你大概率会在后续环节被各种莫名其妙的问题连环折腾。还有个实用的小技巧Excel透视表做好之后把列宽锁定、数值格式统一再往外发收到表格的人对专业度的判断往往就来自这些细节。区县级逐月房价数据本身就是一轮很好的行情样本建议你用它练两次板块对比、出一张专题图做完之后你对“数据颗粒度”这个词的理解会比读十篇分析文章都深刻。