1. 这份数据到底是什么一份能直接“上手”的地级市房价时间序列先说结论这是一份覆盖2011年到2025年、全国地级市层面的逐年二手房房价数据同时提供 Excel 和 Shp 两种格式。Excel 表格适合做统计分析、透视表、写公式Shp 则是 GIS 领域的标准矢量格式可以直接拖进 ArcGIS、QGIS 等软件做空间可视化、地图制图和空间分析。我拿到这类数据的第一反应不是“数据真全”而是“这份数据到底能不能直接用”。因为市面上所谓的“地级市房价数据”不少但真正能落地做分析的少有的只有省会城市地级市名单不全有的年份断断续续中间缺三四年有的只给均价不给具体口径回头写论文或做报告时根本没法交代数据来源。这份数据从2011年到2025年逐年铺开覆盖地级市层面时间跨度和空间粒度都对得上“区域经济分析”“城市房价演变”“空间计量”这类常见研究场景。适合谁用三类人最对口做城乡规划、经济地理、房地产研究方向的学生或研究者需要一份面板数据来做描述统计、回归分析或空间可视化政府智库、咨询公司里做城市研判的从业者需要快速对比不同城市的房价走势数据爱好者或 GIS 用户想把房价数据和其他空间数据如行政区划、人口、 GDP、地铁线路做叠加分析。再说白一点Excel 文件解决“算”的问题Shp 文件解决“画”的问题。两个格式配合使用既能算又能画才是一份房价数据该有的完整形态。接下来我从数据内容、处理逻辑、实操流程和常见坑四个角度把这份数据彻底拆开讲清楚。2. 数据核心拆解字段设计、口径问题和年份连贯性2.1 字段结构从“城市名称”到“逐年房价”的标准面板布局一份合格的逐年房价面板数据Excel 表头通常是这样的逻辑每一行是一个城市每一列是一个年份或者每一行是“城市-年份”的组合再单独列一列房价。两种布局没有绝对好坏关键看你怎么用。如果是“宽表”布局一个城市一行2011到2025各占一列优点是透视起来直观折线图一拖就能出缺点是做回归分析前通常要转成“长表”。如果是“长表”布局每条记录是“城市年份房价”优点是直接进 Stata、R、Python 跑面板模型不需要额外 reshape缺点是人眼查看时不够直观。我拿到数据后第一件事就是先看表头确认是哪一种布局再看有没有“城市编码”“省份”这类辅助字段。城市编码尤其重要光是城市名称会碰到“市”和“地区”的写法差异比如“北京市”和“北京”如果不带行政区划代码后续和其他数据匹配时很容易产生一对多或匹配失败的问题。2.2 口径问题均价、挂牌价还是成交价房价数据最容易被忽视、也最致命的问题就是统计口径。二手房房价数据通常有三类来源一是房产平台挂牌价二是实际网签成交价三是中介或研究机构发布的均价指数。三者的差异非常大特别是在市场波动期挂牌价往往滞后于成交价波动幅度也会被放大。这份数据具体采用哪种口径建议拿到后第一眼先确认说明文档。如果没有说明文档也要结合数值量级和波动幅度做经验判断普通地级市的二手房挂牌均价2015年前后大多在每平方米几千元到一万元出头2020年后部分东部城市明显上行。如果某个城市某年房价突然跳到每平方米三万元又跌回八千元大概率是口径拼接或数据源切换造成的异常而不是真实市场波动。2.3 年份跨度与连续性从2011到2025的“长周期”价值2011年到2025年覆盖了接近15年这在中国房地产研究里是一个非常珍贵的窗口期期间经历了2013到2014年的调整期、2015到2018年的“去库存”上行期、2020到2021年的分化行情以及2022年后的市场降温。如果数据能逐年连续覆盖那么用来做“城市房价周期”分析、“区域分化”研究和“政策冲击评估”都会非常有说服力。但连续15年全覆盖是一件有难度的事。早期城市数据缺失、行政区划调整比如撤地设市、合并、平台数据源改版都可能导致某一年数值断档或跳变。所以建议拿到手后先做一个“数据完整性检查”数一数每个城市实际有多少年的记录哪些城市中间缺了年份缺的是不是集中在某一时间段。这一步只要几分钟但能帮你避开后面分析时的无数个雷。3. Excel 和 Shp 两种格式怎么选、怎么转、怎么配合用3.1 Excel 格式分析主力也是整理“源头”Excel 格式的价值不在于“能打开”而在于它是一份可编辑、可运算、可透视的“中间态数据”。如果后续要用 Stata 跑固定效应模型我会先把 Excel 里的宽表转成长表保存为 CSV 再导入如果只是出统计图表Excel 里的透视表和条件格式已经足够。实际操作中有几个高频需求我逐个说做法第一把宽表转成长表。选中整个数据区域用 Excel 的“数据→从表格/区域”进入 Power Query选择需要转置的年份列在“转换”选项卡里点“逆透视其他列”几秒钟就能把2011到2025的15个年份列压成两列一列“年份”、一列“房价”。如果不用 Power Query也可以用公式配合 INDEXMATCH 做二维表转一维表但效率会低一些。第二对房价数据做标准化或分组统计。在 Excel 里可以用 AVERAGEIFS、SUMIFS 这类条件统计函数比如计算“东部城市2015到2020年的平均房价”写成AVERAGEIFS(C2:C100, B2:B100, 东部, A2:A100, 2015, A2:A100, 2020)就能一步到位。标准化则可以用(B2-AVERAGE(B$2:B$100))/STDEV(B$2:B$100)的公式下拉实现。第三查重和去重。如果表格里有重复城市记录用“数据→删除重复值”最快但删除前一定要先确认保留哪一条否则容易把有效数据删掉。更稳妥的做法是先用条件格式→突出显示重复值肉眼确认一遍再动手。3.2 Shp 格式空间可视化和空间分析的“地图语言”Shp 文件不是单一文件而是由至少三个文件组成的一套集合主文件.shp存储几何信息索引文件.shx存储几何索引属性文件.dbf存储属性数据。再加上可选的 .prj 投影文件、.cpg 编码文件等。所以拿到 Shp 时别只复制一个 .shp 文件要把同一文件夹下的整套文件一起拷贝否则 GIS 软件会报打不开或属性缺失。把 Shp 拖进 ArcGIS 或 QGIS 后第一件要做的事是确认坐标系。如果数据是地理坐标系GCS_WGS_1984做小比例尺全国地图没问题但要算面积或做精确的距离分析就得先投影到适合的投影坐标系比如 Albers 等积投影或 UTM 分带投影。评论区提到的“DWG转Shp”“shp转3dtiles”“渔网分割shp”都说明大家实际工作中经常要在不同格式间做转换。Shp 和 Excel 的配合使用核心逻辑其实很简单Shp 里的属性表本身就类似一张 Excel 表你可以把房价数据导入属性表然后按字段值渲染地图。最常见的操作是在 ArcGIS 里右键 Shp 图层→连接和关联→连接选择“基于某个字段的连接”把 Excel 表里的房价数据关联到 Shp 属性表上连接的关联字段用“城市名称”或“城市编码”保证两边写法一致连接成功后在图层属性的“符号系统”里选“数量→分级色彩”按年份字段渲染就能做出一张该年份的房价空间分布图。如果不用 ArcGIS也可以用 QGIS 完成同样的操作QGIS 还支持直接把 CSV 文件拖入后按坐标或字段关联完全免费适合预算有限的学生和个人研究者。3.3 格式转换Shp 导出为 Excel、Excel 导入 Shp、Shp 转其他格式实际工作中格式转换是高频需求我列几个最常见的路径Shp 转 Excel。在 ArcGIS 中可以直接用“表→导出”功能把属性表导出为 dBase 表或 CSV再用 Excel 打开也可以直接在属性表里全选复制粘贴到 Excel 中。在 QGIS 中可以用“导出→另存要素为”选择 CSV 或 Excel 格式。注意如果属性表里的中文字段导出后出现乱码通常是编码问题ArcGIS 里默认的 dbf 编码不是 UTF-8建议在导出时指定编码为 UTF-8或者在 Excel 里用“数据→自文本”手动选择编码导入。Excel 导入 Shp即属性连接。前文已经说了连接方法这里补充一个关键细节Excel 表的第一行必须是字段名且用于连接的字段要和 Shp 属性表中的字段类型一致比如都是文本型。如果一边是文本“北京”一边是文本“北京市”直接连接会失败或者大量空值。建议在 Excel 里先用 SUBSTITUTE 函数去掉“市”“省”等后缀统一城市名称格式后再连接。Shp 转 GeoJSON 或 3DTiles。如果要做 Web 可视化或三维场景通常需要把 Shp 转成 GeoJSON 或 3DTiles。转换工具很多QGIS 可以直接导出 GeoJSON3DTiles 则常用 cesiumlab 或 FME 处理。这些转换的本质都是把 Shp 的几何信息和属性信息映射到新格式的结构中转换前务必确认坐标系和目标格式的兼容性。4. 实操全流程从拿到数据到完成一张房价空间分布图4.1 数据准备与清洗15分钟搞定拿到数据后别急着画图先花15分钟做一个“体检”。我的标准流程是用 Excel 打开数据表先看总行数、总列数、表头名称对每一列做筛选看看有没有明显空值、0值、负数、文本型数字对房价列做排序看最大最小值是否合理如果出现每平方米几百元或几十万的极端值定位到城市和年份检查城市列表有没有重复选中城市列用“条件格式→重复值”标出来检查年份列是否连续如果数据是长表用透视表统计“城市→年份计数”找出缺失年份。这一步做完你就会知道这份数据的真实“体质”。我见过太多案例数据拿过来不做体检直接跑回归最后结果被几个异常值带偏还不知道问题出在哪。4.2 从 Excel 到 Shp 的关联属性连接实操假设你已经有了一个地级市行政区划 Shp 文件和一份房价 Excel目标是做“2021年地级市二手房房价空间分布图”。第一步统一关联字段。在 Excel 中新增一列“城市匹配”用公式SUBSTITUTE(SUBSTITUTE(A2,市,),省,)去掉地名后缀同时检查 Shp 属性表里是否已有相同格式的城市名称字段如果带后缀也做同样处理。第二步打开 ArcGIS或 QGIS加载 Shp 文件。右键图层→连接和关联→连接关联字段选择 Shp 里的城市名称字段关联表选择 Excel 表关联表字段选择“城市匹配”连接方式选“一对一”。第三步连接成功后图层属性表里会出现来自 Excel 的房价字段。右键图层→属性→符号系统→数量→分级色彩值选择2021年房价字段分级方法选“自然间断点”颜色带随便选一套色。地图就能渲染出来了。第四步导出地图。在布局视图里添加图例、比例尺、指北针导出为 PNG 或 PDF。4.3 ArcGIS 批量出图的进阶技巧如果要做多年份的对比图比如每个年份出一张房价分布图手动一页一页改符号系统太慢了。ArcGIS 里可以用“批处理”的思路把所有年份的房价字段都放在同一个 Shp 属性表里宽表布局在符号系统里选择“多个属性→数量”一次设定多个字段的渲染方式然后利用数据驱动页面按年份批量出图。评论区有人提“ArcGIS批量出图想插入Excel表格”这其实可以用布局视图里的“对象→插入→对象→由文件创建”把 Excel 图表当作 OLE 对象插入到布局中再在数据驱动页面里设置不同年份的图表数据源实现每页地图配一张对应年份的 Excel 图表。这个技巧对做“城市房价演变”动态地图或年度报告特别有用不用一页一页手动改导出后就是一套整齐的年份序列图。4.4 数据分析展示用 Python 或 R 做进一步验证Excel 和 Shp 解决的是“看”和“画”的问题如果要跑模型我建议把数据导出成 CSV 后用 Python 或 R 处理。比如用 pandas 读入数据后做描述统计、画时间序列折线图、计算城市间的房价分化指数比如用变异系数 CV 标准差/平均值都能很快完成。这里给出一个简单的 pandas 代码思路import pandas as pd df pd.read_csv(house_price.csv, encodingutf-8) df[year] df[year].astype(int) # 检查数据完整性 pivot df.pivot_table(indexcity, columnsyear, valuesprice, aggfuncfirst) missing_years pivot.isna().sum(axis1) print(missing_years[missing_years 0]) # 计算年度变异系数观察城市间分化趋势 cv_by_year df.groupby(year)[price].apply(lambda x: x.std() / x.mean()) print(cv_by_year)这一步能帮你从“会画图”进阶到“会分析”。对于研究型用户来说这份 Excel 数据的真正价值就藏在变异系数、基尼系数、面板回归这些统计结果里。5. 常见问题与避坑清单全是实操踩过的坑5.1 Excel 相关的高频问题“Excel 加载项被禁用”。出现这个提示通常不是文件坏了而是 Office 安全设置里禁用了加载项。在 Excel 选项→加载项→管理 COM 加载项里重新启用即可。如果是 Power Query 相关功能不能用检查是否在“COM 加载项”里勾选了 Power Query。“Excel 无法打开文件因为文件格式或文件扩展名无效”。这个报错最常见的原因是文件实际是 CSV 或旧版 xls但扩展名写成了 xlsx。解决办法是右键文件→打开方式→选择“记事本”看前几行内容是不是逗号分隔的纯文本如果是就用 Excel 的“数据→自文本”导入或直接另存为 xlsx。“Excel CtrlV 失效 / 无法粘贴数据”。多数情况下是剪贴板被某个插件或大型程序占用或者当前工作表处于“无法编辑”的保护状态。逐项排查先确认工作表是否被保护审阅→撤销工作表保护再重启 Excel 清理剪贴板最后检查是否有第三方剪贴板工具冲突。“Excel 公式下拉失效”。如果公式下拉不自动填充多半是“计算选项”被设成了“手动”或者单元格格式是文本。把公式选项卡下的计算方式改回“自动”再把目标区域的单元格格式改成“常规”问题就解决了。“Excel 写 UUID”。这个需求其实是用 Excel 生成唯一标识常见做法是用公式LOWER(CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8),-,DEC2HEX(RANDBETWEEN(0,65535),4),-,DEC2HEX(RANDBETWEEN(0,65535),4),-,DEC2HEX(RANDBETWEEN(0,65535),4),-,DEC2HEX(RANDBETWEEN(0,4294967295),8)))拼出模拟的 UUID或者直接用 Python 的 uuid 库生成后回填。Excel 本身没有原生 UUID 函数这一点只能靠拼接或外部生成。5.2 Shp 相关的高频问题“Shp 文件下载后打不开”。99%的情况是文件不完整只下了 .shp 主文件缺了 .shx 和 .dbf。把整个文件夹下载完整再解压到同一目录就能正常打开。记住Shp 不是单文件是“全家桶”。“Shp 属性表字段乱码”。最常见的原因是 dbf 文件编码不兼容。ArcGIS 老版本默认的编码不是 UTF-8QGIS 新版本默认是 UTF-8两边切换就会出现中文乱码。解决办法在 QGIS 中加载 Shp 时手动选择数据源编码为 GBK 或 UTF-8看哪个不乱码用哪个如果需要在 ArcGIS 里彻底解决可以用 QGIS 把 Shp 另存一份在导出时明确指定编码为 UTF-8。“DWG 转 Shp”。建筑和规划专业的用户经常遇到。在 ArcGIS 中直接用“ArcToolbox→转换工具→转为 Shapefile→要素类转 Shapefile(批量)”可以把 DWG 中的点、线、面要素批量导出为 Shp。注意DWG 中的文字注记通常不会直接转为地理要素属性需要另外做标注转换。“shp 转 3DTiles”。目前比较成熟的是用 cesiumlab 做转换。流程新建数据处理→选择 Shp→设置高度字段或拉伸属性→生成 3DTiles 瓦片→在 Cesium 中加载。如果数据量很大建议在转换前先在 GIS 里做简化面操作减轻瓦片负担。“渔网分割 Shp”。这个需求通常是为了做网格化统计比如把房价数据落到渔网单元里。在 ArcGIS 中可以用“Data Management Tools→采样→创建渔网”先生成网格再用“空间连接”把 Shp 面要素的空间信息匹配到网格中。渔网的行列数取决于你要的粒度一般建议先试一个 0.1 度或 1 公里的网格观察数据分布再调整。5.3 数据层面的避坑提醒最后说三个数据层面的坑这三条比任何工具技巧都重要第一别把不同统计口径的房价混在一起分析。如果2011到2018是挂牌均价2019到2025变成了成交均价你画的“15年房价走势图”其实是两条不同曲线的拼接得出的结论会失真。拿到数据先做口径一致性检查无法确认时宁可按“前后两段分别分析”来处理。第二注意行政区划调整。15年跨度里部分城市的名称、代码、管辖范围发生过变化比如某些县改区、地区改市。做面板数据时要确认城市编码是否始终保持一致如果不一致需要做匹配对照表来统一。第三空间可视化不等于空间分析。把房价地图渲染出来很直观但有视觉冲击力的地图不代表结论可靠。它可能只是反映“大城市房价高”这个常识真正的分析要看扣除城市规模、人口、产业结构等因素后的净效应。地图是起点不是终点。6. 最后一个实操建议把这份数据真正“用起来”我个人在实际操作中的体会是这类数据最容易犯的错误不是不会用 Excel 或 ArcGIS而是拿到手后先想“我能做什么”而不是“数据长什么样”。正确顺序应该是先看数据、清洗数据、确认口径再想研究问题和展示方式。否则你费力画出的地图和跑出的回归很可能只是把数据的缺陷重复了一遍。最后再分享一个小技巧如果要做多年份对比地图别一张一张导图。把数据做成宽表在 ArcGIS 里用数据驱动页面批量出图一年一张拼在一起就是绝佳的房价演变序列图。我在做区域房价演变报告时用这个方法十分钟不到就生成了一整套15张图比手动操作快十倍以上。这份“2011—2025年地级市二手房房价数据”的真正价值不在于文件本身而在于你能用它回答什么问题、解决什么决策需求。数据是死的分析思路才是活的。