自打开始做城市经济和房地产相关的研究,我最大的感受就是:数据不难找,难的是找到一套能直接上手的、口径统一的时间序列数据。尤其是二手房房价,网上碎片化信息一大堆,今天这个平台出一个均价,明天那个机构给一个指数,时间维度对不上,城市范围也对不齐,真要拿来分析的时候,光是清洗和对齐就能耗掉两三天。所以当我看到“2011-2025年我国地级市逐月二手房房价数据(Excel/Shp格式)”这套数据时,第一反应是——这玩意儿终于把“口径”和“格式”这两件最头疼的事给解决了。
先说这套数据能干什么。它覆盖了2011年到2025年整整15年,时间粒度细化到月份,空间粒度落在全国地级市层面。这意味着你既可以用Excel做纯面板数据分析(比如房价增速、城市间差异、影响因素回归),也可以把Shp文件直接拖进ArcGIS或QGIS里做空间可视化,比如画一张“2024年全国地级市二手房均价分布图”,或者做“房价热点转移”的逐年动画。对于做区域经济、城市规划、房地产金融、土地管理方向的学生和研究者来说,这套数据属于那种拿到手就能用的基础底料。
我先后把Excel和Shp两套数据都仔细摸了一遍,中间也踩了一些格式转换、字段匹配、坐标系上的坑。这篇文章就把这套数据的结构、加工思路、以及在ArcGIS和Excel里的实操过程完整梳理一遍,希望能帮后面拿到同样数据的人少走弯路。
1. 数据结构与字段设计:拿到手先看清这些门道
1.1 Excel部分的核心字段与记录粒度
Excel格式这套数据,打开以后第一感觉是“干净”。表头没有多余的合并单元格,没有乱七八糟的备注行,从第一行开始就是标准字段。我拿到的主表包含这些关键字段:
- 省份:省级行政区名称,用来做区域分组
- 城市:地级市名称,是空间匹配的关键字段之一
- 城市代码:我建议你留意这一列,它在关联Shp属性表时非常有用,比用中文城市名去匹配要稳定得多
- 年份:2011-2025,数值格式
- 月份:1-12,数值格式
- 二手房均价:单位是元/平方米,保留到整数位
- 环比涨跌:相比上个月的百分比变化
- 同比涨跌:相比去年同月的百分比变化
这里有个特别要说明的地方:数据是“逐月”记录的,也就是每个城市每年有12条记录。如果你要构建面板数据,主键就是“城市代码+年份+月份”,千万别只用城市名来合并,因为全国有重名的区县但很少有重名的地级市,但为了保险,代码字段是最稳的关联锚点。
表里的“环比涨跌”和“同比涨跌”这两列,我的建议是保留下来做校验。比如你算出来某城市某月均价环比涨了20%,先别高兴,回头看看是不是数据本身录的就是异常值,还是城市范围调整导致的跳变。这在后续做稳健性检验时特别重要。
1.2 Shp部分的图层结构与属性表设计
Shp格式这边是典型的面图层(Polygon),每个地级行政单元是一个面要素。打开属性表以后,核心字段包括:
- 城市名称:中文名,与Excel表里的“城市”字段一一对应
- 城市代码:与Excel表里的一致,这是空间数据和表格数据关联的关键桥梁
- 省份名称:中文名,便于按省级区域做制图筛选
- 空间几何:地级行政边界
这里有一个年份上的设计考量:行政边界不是每一年都完全一样的。2011年到现在,部分地级市的行政区划发生过调整(比如撤县设区、新设地级市等)。这套Shp数据里,空间边界用的是统一的基础底图,但属性表里保留了城市代码和名称的映射关系。在你做时间序列空间分析时,要特别留意某几个城市在2015年前后是否发生过代码变更或名称变更,否则出图的时候会出现“幽灵城市”或者“凭空消失的城市”。
一个更稳妥的做法:先把Shp属性表里的唯一城市代码导出来,和Excel里的城市代码做一次全比对,看看哪些城市在哪个年份缺失、哪些是后加入的。这套数据整体覆盖度很高,但个别微调城市的连续性问题还是需要自己把关。
2. Excel还是Shp?两种格式的实际应用场景拆解
2.1 Excel格式:面板回归、统计建模与快速透视
如果你要做的是计量分析,比如房价影响因素、城市群差异、货币政策传导效果之类的研究,Excel格式是首选。原因很简单:它本身就是面板数据的标准结构,直接导入Stata、SPSS、Python的Pandas或R语言里都极其顺畅。
我实测下来,把这张表导入Python以后,做这么几步就能得到分析面板:
import pandas as pd df = pd.read_excel("二手房房价_2011_2025.xlsx", sheet_name="月度数据") # 构造时间字段 df["year_month"] = pd.to_datetime(df["年份"].astype(str) + "-" + df["月份"].astype(str)) # 设为面板索引 df = df.set_index(["城市代码", "year_month"]) df.sort_index(inplace=True) # 查看某城市的时间序列 df.loc["110100", "二手房均价"].plot()如果你不写代码,Excel自带的透视表也已经够用。拉个数据透视表,行放“城市”,列放“年份”,值放“二手房均价”,就可以快速查看全国各城市历年的均价变化。再配合条件格式里的“色阶”功能,数值高低一目了然。
我这里有一个实操建议:把“月份”字段拆出来单独用,或者构造一个“年月”组合字段,都会让你的分析灵活很多。因为在Excel里,如果你同时选了“年份”和“月份”两个字段做筛选,实际上不太好直接按时间排序;更好的做法是在原始表边上加一列辅助列,用公式生成标准日期格式:
=DATE(A2, B2, 1)这样生成的日期字段可以直接用于图表轴、时间线筛序,也能被Excel的时间智能功能识别。
2.2 Shp格式:空间制图、格局演化和区域差异可视化
Shp格式的数据是给地图用的。当你想回答“房价高地是不是在向三四线城市蔓延”“哪些城市群连片上涨”“都市圈外围的房价洼地在哪里”这类空间格局问题时,Excel给不了你直观答案,必须把数据落到地图上。
最常见的操作是把Excel数据通过城市代码关联到Shp属性表,然后再做分级设色、专题制图、时间动画。ArcGIS和QGIS都支持这种“表格连接(Join)”操作。
关联好之后,你可以做的事就很多了:
- 单年截面图:选择某一年某个月的均价字段做Quantile或Natural Breaks分级渲染,马上得到“房价梯度图”
- 多年变化图:计算2015年和2024年之间的房价累计涨幅,生成“涨幅空间分布图”
- 动态序列图:利用ArcGIS的时间滑块功能,按“年月”字段播放2011年以来的房价演变过程,能清晰看到热点从沿海向内陆扩散的路径
这里要提醒的是,做空间分析时不要直接用Excel表里的均价字段做空间统计。因为二手房均价虽然落到城市面,但城市规模差异极大,必须用“总成交面积”或者“城市常住人口”做加权处理才有空间统计意义。如果数据里没有这些辅助字段,那就老老实实做“分级展示”,不要去跑空间自相关那类统计——结果会被大城市主导,产生误导。
3. 数据加工的完整实操:从原始文件到一张合格专题图
3.1 Excel清洗流程与字段扩展
拿到原始Excel以后,我习惯先做一遍标准化清理。不要觉得“现成的数据就不需要清洗”,实际上为了让后面分析顺滑,这几步省不了。
第一步,删除空行和无效记录。理论上这套数据不该有空行,但合并过多表格以后难免会有零散的空值。用筛选功能快速定位空白的“均价”单元格,看看是整行缺失还是个别缺失,再决定是补插值还是直接删掉。
第二步,统一数字格式。Excel里有时候部分单元格会被存成文本格式,这会导致求和、平均函数失效。检查方法是选中均价那一列,看“类型”是不是“数值”。如果有文本格式,别一个个改,选中整列后点击“数据-分列-完成”,Excel会自动将文本型数字转换为数值型。
第三步,构造主键和辅助字段。除了前面的“year_month”列,我还习惯加一个“城市_年份”的组合列,这样在做某些需要城市和年份双维度的匹配时,就不用写复杂的多重条件公式。
公用的几个公式也分享一下:
# 提取城市所属区域(假设有省份字段,按东中西分组) =IF(OR(D2="北京", D2="上海", D2="广东", D2="浙江", D2="江苏", D2="福建", D2="山东", D2="天津", D2="河北", D2="海南"), "东部", IF(OR(D2="山西", D2="安徽", D2="江西", D2="河南", D2="湖北", D2="湖南", D2="吉林", D2="黑龙江"), "中部", "西部")) # 生成同比增速(如果数据没有自带) =(K2 - INDEX(K:K, MATCH(A2&"-"&(B2-1), A:A&"-"&B:B, 0))) / INDEX(K:K, MATCH(A2&"-"&(B2-1), A:A&"-"&B:B, 0))第二个公式是数组公式,录入后需要按Ctrl+Shift+Enter结束,否则会报错。我个人的建议是直接用Python处理这类跨行引用,比Excel公式可维护性高得多。
3.2 Shp文件和Excel的关联:ArcGIS详细操作
把Excel数据关联到Shp属性表,是本次实操里最关键的一步。我以ArcGIS 10.8为例,操作路径如下:
- 打开ArcMap,加载Shp文件
- 在目录面板里,找到“设置数据源”或者直接在ArcToolbox里搜“Excel 转表(Excel To Table)”,把Excel工作簿里的Sheet转成dBASE表或者地理数据库表
- 右键Shp图层,选择“连接和关联-连接”
- 连接设置里,第一个下拉框选“基于某一字段的连接”,第二个下拉框选Shp属性表里的“城市代码”字段,第三个下拉框选刚才转出来的Excel表,第四个下拉框选Excel表里的“城市代码”字段
- 保留所有记录,完成连接
这里有一个非常容易踩坑的地方:Excel文件如果直接在ArcMap里作为连接源,有时候会因为路径或格式问题(尤其是xlsx格式和某些特殊字符)导致连接失败。我的建议是永远多走一步“Excel转表”的操作,把xlsx先转换成gdb里的表或者DBF格式,再执行连接,稳定得多。
连接好之后,你会发现属性表里多了Excel的所有字段。这时候要出图,先别急着用“灰度”默认样式,按以下步骤做:
- 右键图层打开“属性-符号系统”
- 选择“数量-分级色彩”
- 值字段选择“二手房均价”或“同比涨跌”
- 分类方式选“自然间断点分级”,类别数设5-7类
- 颜色带选从浅蓝到深红的渐变色,这样低值冷色、高值暖色,识别度最高
如果要做的是“涨幅图”而非“价格图”,那值字段就选“同比涨跌”,并且把分级类型改成“几何间隔”。因为涨幅数据分布往往是正负都有、且尾部值大,几何间隔能更好地展示中间变化。
3.3 QGIS实操:开源方案同样顺手
如果不方便用ArcGIS,QGIS这一套完全开源、免费,操作路径也差不多。
- 加载Shp文件后,在“图层”面板里右键,选择“属性-连接”
- 点击“添加连接”,数据源选择Excel文件(QGIS直接支持xlsx格式,但注意需要系统装了合适的驱动)
- 连接字段两边都选“城市代码”
- 完成后字段列表里多出Excel的字段,再到“符号系统-分级”里选择渲染字段,设置颜色渐变
QGIS对xlsx的直接读取支持比我预想的好,它不需要提前转成DBF。不过如果Excel文件特别大(比如几万行),连接时QGIS会稍微卡顿,这属于正常现象,等进度条走完即可。
另外多说一句,QGIS里做时间序列播放非常方便:在“时间管理器”插件里,设置“年月”字段为时间字段,然后设置每一帧对应一个月份,导出的动画可以直接用于论文答辩展示。
3.4 用Python批量处理两套格式的衔接
对于大量级的数据处理,我更喜欢直接用Python脚本完成Excel和Shp之间的字段同步。用GeoPandas读取Shp,再用Pandas读取Excel,然后按城市代码做关联,效率比手动在ArcGIS里操作高很多,而且可复现。
import geopandas as gpd import pandas as pd # 读取Shp gdf = gpd.read_file("地级市边界.shp", encoding="utf-8") # 读取Excel房价数据 price_df = pd.read_excel("二手房房价_2011_2025.xlsx", sheet_name="月度数据") # 按城市代码合并 merged = gdf.merge(price_df, left_on="城市代码", right_on="城市代码", how="left") # 筛选某年月,导出为新的Shp one_month = merged[merged["year_month"] == "2024-06"] one_month.to_file("2024年6月房价.shp", encoding="utf-8")这脚本的核心逻辑就是把空间数据和属性数据在代码层面做连接,之后你可以按任意年月切片,导出成专题图源数据。对于做连续月度空间序列的人来说,这种批量处理的价值极大——你不需要在ArcGIS里手动做15年×12个月=180次连接操作。
如果你要做的是200多个月连续出图,强烈建议用脚本写个循环,一次性导出所有月份切片,再配合ArcGIS的时间滑块或QGIS的时间管理器播放,效果直接起飞。
4. 常见问题与避坑技巧实录
4.1 Excel导入ArcGIS失败的几种典型场景
问题1:Excel表不能直接在ArcMap里做连接数据源
症状:连接时提示“未找到表”或“外部表不是预期的格式”。
原因:xlsx格式在旧版ArcGIS(10.2及以下)里支持不好,此外Excel表格里如果有合并单元格、特殊符号、超长文本,也容易导致读取失败。
解法:先用ArcToolbox的“Excel转表”工具把Excel转成数据库表,再执行连接。如果还没有数据库,直接新建一个文件地理数据库(File Geodatabase),把Excel导进去,基本能解决90%以上的读取问题。
问题2:Shp属性表里字段名乱码,中文显示为问号
原因:Shp文件的属性表默认用dBase编码存储,中文需要配合合适的代码页。在ArcGIS里加载时默认可能用系统语言代码页,一旦不匹配就会乱码。
解法:加载Shp时,在“数据源属性”里指定代码页为UTF-8或GBK,具体取决于原始数据生成时用的编码。这套数据我测试下来,在ArcGIS 10.8里用系统默认编码通常没问题,但如果你用QGIS加载,需要把文件编码手动改成UTF-8,否则中文城市名会变成乱码。更稳妥的办法是加载完以后检查属性表里的城市名称字段,如果全是问号,在QGIS里面选择正确的文件编码重新加载即可。
问题3:连接后数据是空的,或者出现一对多的情况
原因:两个表的关键字段类型不一致。比如Shp里的“城市代码”是文本型,Excel里是数值型,匹配时类型不匹配,导致连接结果为空。
解法:先把两边的字段类型统一。在Excel里选中“城市代码”列,检查单元格格式;在ArcGIS属性表里,如果字段是文本型,确保Excel对应列也用文本型(有时需要添加一列辅助列,用TEXT函数强制转换)。连接之前用“统计”工具检查两边唯一值数量是否一致。
4.2 Shp文件损坏后的修复方案
问题4:Shp文件缺少后缀文件,打开提示“无法读取”
这是我自己处理这类数据时经常遇到的问题。一个完整的Shp文件由至少三个文件组成:.shp(几何)、.dbf(属性)、.shx(索引)。一旦缺少其中一个,ArcGIS就无法读取。
如果你的压缩包里只有.shp和.dbf,缺失了.shx文件,不要慌,有两种办法:
- 用ArcGIS自带的
Check Geometry工具检查,但这工具不能修复缺. shx 问题 - 用Shapechk修复工具,这是一个专门修复Shp文件的命令行工具,用法很简单:
shapechk 地级市边界.shp它的作用就是检查Shp文件的完整性,并且能自动生成缺失的.shx索引文件。实测下来,对于简单的缺少索引文件的情况,修复后再用ArcGIS加载就正常了。
4.3 时间格式与数据连续性的细节
问题5:Excel里的“年月”被显示成一个很大的时间戳数字
Excel里日期本质上存的是“距离1900年1月1日的天数”,所以如果源数据里的年月被Excel自动识别为日期,你看到的可能是“45123”这类数字。
解法:选中该列,右键“设置单元格格式-日期”,选择“2012年1月”这种显示格式,数字就变成正常月份了。
问题6:某几个城市的月度数据存在断档
比如某些城市在2013年、2020年出现过若干月份没有记录。遇到这种情况,你可以选择:
- 用前后月份均值填补
- 用线性插值填补
- 直接删掉该城市(如果你只需要完整城市面板)
我个人建议用线性插值,尤其是在做时间序列图时,插值能让曲线更连续。Python里一行代码搞定:
df["二手房均价"] = df.groupby("城市代码")["二手房均价"].transform(lambda x: x.interpolate())注意一定要先按城市分组再做插值,否则会跨城市插出离谱的数据。
5. 数据的延展应用:基于这套数据你能做哪些分析
数据拿到手,格式摸透,最终还是要出成果。我根据自己实际用过的分析方向,列几个这套数据最合适的应用场景,供大家参考。
5.1 城市房价分化与收敛性分析
传统做法是把“房价水平”和“房价增速”放在一起做分类:用某个年份的均价做横轴,用之后几年的累计涨幅做纵轴,把全国城市画成散点图。这样可以快速识别出“高基数高增长”(一线和强二线)、“低基数高增长”(部分受辐射的三线城市)、“低基数低增长”(收缩型城市)这几类分化格局。
用这套逐月数据,你还能把时间粒度进一步细化:2015年、2016年、2020年这几个节点都对应明显的政策或外部冲击期,你可以用逐月数据做断点回归或事件研究分析。
5.2 城市群内部房价联动与溢出效应
把几个重点城市群(长三角、珠三角、京津冀、成渝)的城市单独筛出来,计算各城市月度房价的相关系数矩阵,再做一个格兰杰因果检验,就能判断核心城市房价变动是否领先于周边城市。这种研究用月度数据正好,年度数据太粗,季度数据又没有月度数据灵敏。
5.3 数字地图中的房价动态展示
如果是要做汇报或展示,我的建议是直接用Shp做“时间序列播放”。用ArcGIS的Time Slider或者QGIS的Time Manager,按月播放2011-2025年数据,地图上的颜色变化会让你直观感受到房价热点的扩散过程。拿这个动画去汇报,效果远好于静态图。
我个人在做这类数据可视化时的经验是:连续播放比逐帧切换更有说服力,颜色分级不宜超过7级,图例尽量用“数据值”而非“分位值”,这样观众对绝对价格的感知更准确,不会因为分级方式的不同而对数据产生误解。
5.4 结合其他数据做扩展分析
这套房价数据如果能跟其他公开数据结合,分析价值还能上一个台阶。比如结合城市GDP、常住人口、产业结构、地铁里程、优质教育资源分布等,就能做住房可负担性、人口流动与房价关系、公共服务设施资本化等问题的研究。数据格式是标准Excel和Shp,所以跟其他表关联的门槛很低。
6. 一份趁手的数据工具,值得细心打磨
这套“2011-2025年我国地级市逐月二手房房价数据”填补了一个很实际的需求缺口。在这之前,想要获取这么长跨度、这么细粒度、同时涵盖空间边界的二手房数据,要么自己爬取网络房源信息做清洗聚合,要么找不同口径的数据源拼凑,最后得到的东西往往口径混乱、缺失严重、研究说服力大打折扣。
我在实际测试中也发现,Excel和Shp的双格式确实照顾到了两类核心用户:做计量的用Excel,做空间分析的用Shp。而这两个群体恰好构成了城市经济和房地产研究的主力。
关于Shp文件还有一个通用提醒:每次操作完数据后,记得把.dbf文件备份好。.dbf文件一旦损坏,属性数据就很难恢复,而.shp文件本身的几何信息反而相对容易重建。我做项目时习惯每次大操作前先把整个Shp文件夹复制一份,虽然有点占空间,但保障性极佳。
如果你手里有这套数据,我建议你先别急着跑回归、画画图,花一个下午把数据彻底摸熟——看看每个文件里有什么、字段间怎么关联、哪些城市有特殊波动、哪些年份有系统性缺漏。这套数据值钱的地方不只是“有数据”,而是它的时间跨度和城市覆盖度足够做出一篇有说服力的实证研究。把数据基础打牢,后面的一切分析才能站得住脚。