🏠 中国国家统计局官方发布的70个大中城市商品住宅销售价格变动数据集,含自动化更新与数据提取工具。
访问 70 城房价观察,无需下载文件即可:
- 搜索任意城市,查看新房、二手房及不同面积住宅的同比、环比和定基/累计走势
- 同屏比较所选城市最新月份的 8 项住宅指数,并点击切换历史趋势
- 横向比较 70 个城市的最新指数与市场温度
- 查询单个城市近 12 个月明细,并下载完整 CSV
- 每个城市另有一页静态汇总(如 深圳),无需 JS 即可查看最新读数与近 12 个月明细
网页以 70cityprice.csv 为唯一数据源。每次主分支更新后,GitHub Actions 会自动生成紧凑的网页数据并部署到 GitHub Pages,无需重复维护数据副本。
- 📊 完整历史数据:2006年至今近20年的月度数据(约4.5万条记录)
- 🔄 自动化更新:一行命令即可更新最新月份数据
- 🔍 灵活提取:支持按城市、按时间范围等多种方式提取子数据集
- 📦 即用即走:CSV格式,无需数据库,可直接用于 Python/R/Excel 分析
- 房地产市场研究与趋势分析
- 城市间房价比较研究
- 宏观经济政策效果评估
- 数据新闻与可视化项目
- 学术论文数据支持
点击展开数据样例
| DATE | CITY | FixedBase | CommodityHouseIDX | SecondHandIDX |
|---|---|---|---|---|
| 2025/12/1 | 北京 | 同比 | 97.6 | 91.5 |
| 2025/12/1 | 上海 | 同比 | 104.8 | 93.9 |
| 2025/12/1 | 广州 | 同比 | 95.2 | 92.2 |
| 2025/12/1 | 深圳 | 同比 | 95.6 | 94.6 |
70cityprice/
├── 70cityprice.csv # 主数据文件(2006年至今,当前更新至2026年6月)
├── README.md # 项目说明文档(面向人类读者)
├── SKILL.md # AI 协作入口:数据心智模型与流程索引
├── AGENTS.md # 仓库级 AI 说明(CLAUDE.md 导入此文件)
├── LICENSE # MIT 许可证
├── references/ # 领域知识(口径、命名、schema、官方表格解析)
│ ├── schema.md
│ ├── city-naming.md
│ ├── fixedbase-caliber.md
│ └── stats-table-parsing.md
├── workflows/ # 可执行流程
│ ├── monthly-update.md
│ ├── extract.md
│ ├── chart.md
│ └── site-build.md
├── scripts/ # 工具脚本目录
│ ├── extract_70cityprice.py # 数据提取脚本
│ ├── update_70cityprice.py # 数据更新脚本
│ ├── validate_70cityprice.py # 数据质量校验脚本
│ ├── generate_chart.py # 图表生成脚本
│ ├── build_site_data.py # 构建网页分片数据
│ └── build_site_pages.py # 构建 70 城静态页与分享卡片
├── assets/ # 资源文件
│ └── price_trend.png # 数据可视化图表
├── site/ # GitHub Pages 站点源文件
│ ├── index.html
│ ├── app.js
│ ├── styles.css
│ └── city.css # 静态城市页样式
├── .github/workflows/
│ └── deploy-pages.yml # GitHub Pages 自动部署
└── projects/ # 生成的数据文件(Git忽略,不上传)
| 文件/目录 | 说明 |
|---|---|
70cityprice.csv |
主数据文件,包含2006年至今的完整历史数据 |
SKILL.md |
AI 协作入口 - AI 助手处理本数据集前必读,含流程索引 |
references/ |
领域知识 - 定基口径演变、城市命名、CSV schema、官方表格解析约定 |
workflows/ |
可执行流程 - 月度更新、数据提取、图表生成、网页构建 |
scripts/update_70cityprice.py |
自动更新脚本 - 从国家统计局网址抓取新数据并追加到CSV |
scripts/extract_70cityprice.py |
数据提取脚本 - 按月份/城市提取数据到新文件 |
scripts/validate_70cityprice.py |
数据校验脚本 - 检查结构、主键、月份连续性和70城覆盖 |
scripts/build_site_data.py |
网页数据构建脚本 - 从主 CSV 生成紧凑的浏览器数据 |
site/ |
静态数据浏览器 - 无前端框架和第三方运行时依赖 |
projects/ |
本地生成的数据文件目录(Git忽略) |
需要 Python 3.9+。首次使用先安装依赖:
pip3 install -r requirements.txt本仓库所有命令示例统一使用
python3/pip3。Linux/macOS 默认即可;Windows 用户请使用 Microsoft Store 版本或 WSL,以保证python3命令可用。
每月国家统计局发布新数据后,只需运行:
python3 scripts/update_70cityprice.py "国家统计局发布页面的URL"示例:
# 更新6月份数据(7月发布)
python3 scripts/update_70cityprice.py "https://www.stats.gov.cn/sj/zxfbhjd/202507/t20250715_1960403.html"
# 更新1月份数据(2月发布)- 脚本会自动处理没有年度平均的情况
python3 scripts/update_70cityprice.py "https://www.stats.gov.cn/xxgk/sjfb/zxfb2020/202502/t20250219_1958761.html"脚本会自动:
- 从URL抓取所有表格数据
- 解析日期(会自动计算上一个月作为数据月份)
- 提取70个城市的所有指数
- 自动检测表格列数,适配不同月份的表格格式
- 1月份特殊处理:由于1月份没有"年度平均"列,脚本会自动使用同比数据作为定基比
- 追加到现有CSV文件中(如果该月数据已存在则替换)
python3 scripts/extract_70cityprice.py month <起始月份> <结束月份> [输出文件名] [--fixedbase 指数类型]示例:
# 提取2025年7月至11月的数据(自动保存到 projects/ 目录)
python3 scripts/extract_70cityprice.py month 202507 202511
# 指定输出文件名
python3 scripts/extract_70cityprice.py month 202507 202511 my_data.csv
# 支持多种日期格式
python3 scripts/extract_70cityprice.py month 2024-01 2024-12
# 仅提取环比
python3 scripts/extract_70cityprice.py month 202401 202412 --fixedbase 环比python3 scripts/extract_70cityprice.py city <城市名1> [城市名2] ... [--output 输出文件名] [--fixedbase 指数类型]示例:
# 提取单个城市的全部历史数据
python3 scripts/extract_70cityprice.py city 成都
# 提取多个城市
python3 scripts/extract_70cityprice.py city 北京 上海 广州 深圳
# 指定输出文件名
python3 scripts/extract_70cityprice.py city 成都 --output chengdu.csv
# 提取城市的同比+环比
python3 scripts/extract_70cityprice.py city 成都 --fixedbase 同比,环比python3 scripts/extract_70cityprice.py filter --cities <城市1> <城市2> ... --start <起始月份> --end <结束月份> [--fixedbase 指数类型]示例:
# 提取成都和重庆2024年全年数据
python3 scripts/extract_70cityprice.py filter --cities 成都 重庆 --start 202401 --end 202412
# 提取重庆最近三年的环比
python3 scripts/extract_70cityprice.py filter --cities 重庆 --start 202301 --end 202512 --fixedbase 环比# 列出所有可用城市
python3 scripts/extract_70cityprice.py list-cities
# 列出数据日期范围
python3 scripts/extract_70cityprice.py list-dates
# 校验主数据质量(建议更新后执行)
python3 scripts/validate_70cityprice.py| 情况 | 输出位置 |
|---|---|
不指定 --output |
自动保存到 projects/ 目录 |
指定文件名 --output my.csv |
保存到 projects/my.csv |
指定路径 --output data/my.csv |
保存到指定路径 |
💡
projects/目录已在.gitignore中配置忽略,生成的数据文件不会上传到 GitHub。
每年1月份的数据发布时,表格结构与其他月份不同:
- 其他月份:包含 环比、同比、年度平均(1-N月平均)三列
- 1月份:只有 环比、同比 两列(因为1月是第一个月,没有累计平均)
脚本会自动检测这种情况,并将 同比数据复制到定基比 字段中。
- 主数据存储口径:
CITY列统一采用国家统计局当前发布写法(无“市”后缀),例如北京、成都、大理。 - 更新脚本写入口径:
scripts/update_70cityprice.py在抓取后会自动标准化城市名,写回CSV时保持上述统一口径。 - 提取脚本输入兼容:
scripts/extract_70cityprice.py同时兼容北京/北京市、成都/成都市、大理/大理市/大理白族自治州等常见写法。 - 历史兼容建议:若你有旧版导出文件(带“市”后缀或“自治州”写法),建议先运行
python3 scripts/validate_70cityprice.py检查口径一致性。
| 列名 | 说明 | 示例 |
|---|---|---|
| DATE | 数据日期 | 2025/10/1 |
| ADCODE | 城市行政区划代码 | 110100 |
| CITY | 城市名称(国家统计局当前写法) | 北京 |
| FixedBase | 指数类型 | 同比/环比/定基比 |
| HouseIDX | 住宅价格指数(早期数据) | |
| ResidentIDX | 住宅价格指数(早期数据) | |
| CommodityHouseIDX | 新建商品住宅指数 | 99.7 |
| SecondHandIDX | 二手住宅指数 | 99.0 |
| ResidentBelow90IDX | 住宅90m²以下(早期数据) | |
| CommonResidentBelow90IDX | 普通住宅90m²以下(早期数据) | |
| CommodityBelow90IDX | 新建商品住宅90m²以下 | 99.5 |
| Commodity144IDX | 新建商品住宅90-144m² | 99.6 |
| CommodityAbove144IDX | 新建商品住宅144m²以上 | 99.9 |
| SecondHandBelow90IDX | 二手住宅90m²以下 | 98.8 |
| SecondHand144IDX | 二手住宅90-144m² | 99.3 |
| SecondHandAbove144IDX | 二手住宅144m²以上 | 99.1 |
| 类型 | 说明 | 计算基期 |
|---|---|---|
| 同比 | 与上年同月相比 | 上年同月=100 |
| 环比 | 与上月相比 | 上月=100 |
| 定基比 | 与基期相比/年度平均 | 基期=100 或 上年同期=100 |
-
调查范围:各城市的市辖区,不包括县。
-
调查方法:新建商品住宅销售价格调查为全面调查,基础数据直接采用当地房地产管理部门的网签数据;二手住宅销售价格调查为重点调查和典型调查相结合,基础数据来源于房地产经纪机构上报、相关部门提供和调查员实地采价。
-
计算方法:价格指数的计算方法详见《房地产价格统计报表制度》。
-
无成交处理:如当月无成交,则视为价格总体水平无变动。
-
口径调整:2023年起将发布定基指数调整为发布年内月累计同比指数,定基指数可由环比指数链接相乘测算得出。
重要提示:本数据集中"定基比"字段的含义随时间发生过变化,在跨年份分析时需特别注意!
国家统计局发布的70个大中城市住宅销售价格指数中,"定基指数"曾被广泛用于衡量房价相对于某一固定基期的累计变化。但在实际使用中:
- 不同年份公布的"定基指数"并不能直接连成一条长期序列
- 近几年官方已不再直接公布定基指数,而改用"累计涨跌幅"口径
其根本原因在于:定基指数的基期并非永久固定,而是定期轮换。
根据国家统计局房地产价格统计制度说明,70城住宅价格指数大约每五年进行一次基期轮换,以保持样本结构、权数和价格水平的现实代表性。
基期轮换后:
- 定基指数的"100"代表的是新的基期年份平均价格水平
- 新旧定基指数之间不存在天然的可比性
| 使用时间 | 定基基期 | 定基列含义 |
|---|---|---|
| 2011–2015 | 2010年 = 100 | 相对2010年平均价格水平 |
| 2016–2020 | 2015年 = 100 | 相对2015年平均价格水平 |
| 2021–2022 | 2020年 = 100 | 相对2020年平均价格水平 |
| 2023年至今 | 不再公布定基指数 | 改为发布"年初至今累计涨跌幅" |
注意:
- "2016年启用的新基期"并不是"2016年=100",而是 2015年=100,自2016年1月开始使用
- 同理,2021年开始使用的是 2020年=100
虽然表头都写着"定基指数",但 2010=100、2015=100、2020=100 实际上是三条不同基准下的指数序列。
如果不做转换而直接拼接:
- 会人为制造"跳变"
- 会夸大或缩小长期累计涨幅
- 在计量或图表中产生结构性断点
定基指数本质是相对某一基期价格水平的指数(相对数),它不能直接用于:
- 推算房价(元/㎡)
- 与其他基期下的定基指数直接比较
自 2023年1月 开始,国家统计局:
- 停止直接发布定基指数
- 改为发布 "年内月累计同比指数 / 累计涨跌幅"
该"累计"指标的含义是:年初至当月,价格相对上年同期的累计变化情况。
短期分析(1–2年) → 直接使用环比、同比、年内累计指标
阶段性分析(单一基期内) → 使用对应阶段的定基指数(如2016–2020使用2015=100基期)
长期研究(2011年至今)的处理建议
若必须构造长期序列,建议采用以下方法之一:
| 方法 | 说明 | 优缺点 |
|---|---|---|
| 分段分析(推荐) | 2011–2015(2010基期)、2016–2020(2015基期)、2021–2022(2020基期)、2023–至今(累计/环比) | 与官方统计逻辑完全一致,不引入额外假设 |
| 指数再标定(高级) | 利用新旧基期的衔接期(如2015年、2020年),将后一段指数换算回前一段的基期 | 存在四舍五入误差,拼接结果应注明"研究口径构造" |
- 70城房价"定基指数"并非长期固定基期指标
- 基期轮换是制度性安排,而非统计错误
- 2023年起停止公布定基,标志着官方对该指标"长期比较用途"的主动弱化
- 在严肃研究中,任何跨基期的定基比较都必须进行明确的口径说明或技术处理
北京、天津、石家庄、太原、呼和浩特、沈阳、大连、长春、哈尔滨、上海、南京、杭州、宁波、合肥、福州、厦门、南昌、济南、青岛、郑州、武汉、长沙、广州、深圳、南宁、海口、重庆、成都、贵阳、昆明、西安、兰州、西宁、银川、乌鲁木齐
唐山、秦皇岛、包头、丹东、锦州、吉林、牡丹江、无锡、徐州、扬州、温州、金华、蚌埠、安庆、泉州、九江、赣州、烟台、济宁、洛阳、平顶山、宜昌、襄阳、岳阳、常德、韶关、湛江、惠州、桂林、北海、三亚、泸州、南充、遵义、大理
国家统计局通常在每月15-17日发布上月的70城房价数据。
例如:
- 2025年7月15日 发布 2025年6月数据
- 2025年8月16日 发布 2025年7月数据
- URL格式:确保使用国家统计局官方发布页面的完整URL
- 网络连接:脚本需要访问互联网抓取数据
- 数据覆盖:如果该月数据已存在,脚本会替换旧数据
- 历史数据格式:2011年前后数据结构有变化,部分列可能为空
本仓库中的统计数据来源于中华人民共和国国家统计局,属于政府公开数据。
本仓库中的工具脚本代码采用 MIT License 开源。
本仓库仅提供数据整理与工具服务,不对数据准确性负责。如需官方数据,请访问 国家统计局网站。
如果您在研究或项目中使用了本数据集,建议按以下格式注明来源:
数据来源:国家统计局《70个大中城市商品住宅销售价格变动情况》
数据整理:70城房价数据项目 https://github.com/[your-username]/70cityprice
