news 2026/6/26 6:46:54

Python 数据分析实战:2001-2024 全国婚姻登记数据可视化(时序趋势 + 地域地图 + 动态时间轮播)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 数据分析实战:2001-2024 全国婚姻登记数据可视化(时序趋势 + 地域地图 + 动态时间轮播)

一、项目简介

本次基于全国 31 省市 2001-2024 年结婚、离婚登记数据集,完整完成数据读取、数据清洗重塑、时序趋势分析、地域空间可视化、动态交互图表全流程实战。 工具栈:pandas数据处理、matplotlib静态绘图、pyecharts交互式地图 / 玫瑰饼图 / 时间线轮播图。 适合数据分析课程作业、Python 可视化练手项目,完整代码可直接运行。

环境依赖安装

bash

运行

pip install pandas numpy matplotlib pyecharts

二、阶段一:数据初探与质量体检

1. 导入基础库与全局配置

python

运行

import pandas as pd import numpy as np import matplotlib.pyplot as plt # 解决matplotlib中文乱码 plt.rcParams['font.sans-serif'] =['SimHei'] # 解决负号显示异常 plt.rcParams['axes.unicode_minus']=False # 屏蔽无关警告 import warnings warnings.filterwarnings('ignore')

2. 读取结婚、离婚原始数据

原始数据为宽表结构:每行代表省份,每一列对应一个年份登记数量。

python

运行

# 读取结婚数据 merrige_df=pd.read_csv('结婚登记(万对).csv',encoding='gbk') # 读取离婚数据 divorce_df=pd.read_csv('离婚登记(万对).csv',encoding='gbk') # 查看前5行 merrige_df.head()

数据集说明:

  • 共 31 行:全国 31 个省、自治区、直辖市;
  • 25 列:地区名称 + 2001~2024 共 24 个年份登记数据;
  • 数值列无缺失值,数据类型统一为 float64,无需缺失填充。

3. 数据基础信息探查

python

运行

# 查看字段、行数、数据类型 divorce_df.info() # 统计均值、标准差、最大最小值等分布指标 divorce_df.describe()

数据分析结论:

  1. 各省婚姻登记量差距巨大,最大值超 35 万对,最低仅 0.68 万对;
  2. 标准差数值偏高,人口基数差异造成地域分化明显。

4. 原始宽表预览折线图

直接对原始宽表绘图,直观观察各省份历年波动:

python

运行

plt.figure(figsize=(20,6)) merrige_df.plot(kind='line',title="每年结婚登记地区分布") plt.xticks(merrige_df.index,merrige_df['地区'],rotation=45) plt.show()

存在缺陷:宽表结构无法按年份分组统计,可读性差,必须通过melt完成宽表转长表标准化。

三、阶段二:数据清洗重塑(核心步骤)

1. 结婚数据宽表转长表

python

运行

merrige_df=merrige_df.melt( id_vars=['地区'], # 保留不变维度 var_name='年份', # 年份列重命名 value_name='结婚登记数' # 登记数值列命名 ).sort_values(by='年份').reset_index(drop=True) merrige_df.head()

转换后标准结构:地区、年份、结婚登记数,一行代表某省份单一年份数据。

2. 离婚数据同步转换

python

运行

divorce_df=divorce_df.melt( id_vars=['地区'], var_name='年份', value_name='离婚登记数' ).sort_values(by='年份').reset_index(drop=True) divorce_df.head()

3. 结婚、离婚数据合并

python

运行

# 合并两套数据 merrige_df['离婚登记数']=divorce_df['离婚登记数'] df=merrige_df.copy() df.head()

最终数据集字段:地区、年份、结婚登记数、离婚登记数,后续全部分析基于该表。

四、阶段三:时间维度趋势与拐点分析

1. 全国历年结婚离婚总量趋势

按年份聚合全国总登记量,绘制对比折线图,观察长期变化趋势:

python

运行

# 按年份分组求和 year_count=df.groupby('年份')[['结婚登记数','离婚登记数']].sum().reset_index() # 绘图 plt.figure(figsize=(16,6)) plt.plot(year_count['年份'],year_count['结婚登记数'],marker='*',label='结婚登记') plt.plot(year_count['年份'],year_count['离婚登记数'],marker='o',label='离婚登记') plt.title("2001-2024每年结婚和离婚登记总量(万对)") plt.legend() plt.show()

趋势解读:

  1. 2010-2019 年全国结婚登记维持高位,2020 年后持续下滑;
  2. 离婚登记量长期缓慢上升,近年增速放缓;
  3. 结婚 / 离婚比值逐年下降,婚姻稳定性持续走低。

2. 各省份结婚离婚比率柱状图

计算各省 24 年总结婚数 / 总离婚数,比值越高代表当地离婚占比越低:

python

运行

# 分组聚合计算比率 ratio=df.groupby('地区')['结婚登记数'].sum()/df.groupby('地区')['离婚登记数'].sum() # 绘制柱状图 plt.figure(figsize=(16,6)) ratio.plot(kind='bar',title="各地区结婚离婚比率") plt.xticks(rotation=45) plt.grid(axis='y') plt.show()

五、阶段四:空间维度地域差异可视化(Pyecharts 交互式图表)

前置配置:修复国内 CDN 空白问题

python

运行

from pyecharts.charts import Map,Pie,Bar,Timeline from pyecharts import options as opts from pyecharts.globals import CurrentConfig from pyecharts.commons.utils import JsCode # 国内环境必须替换CDN,否则导出HTML无图表 CurrentConfig.ONLINE_HOST = "https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/"

1. 全国累计结婚登记地图

python

运行

# 按地区聚合总结婚数 provice_marrige=df.groupby('地区')['结婚登记数'].sum() # 组装地图所需数据格式 map_data=[list(z) for z in zip(provice_marrige.index.astype(str), provice_marrige)] # 绘制地图 m=( Map() .add('累计结婚登记数(万对)',map_data) .set_global_opts( title_opts=opts.TitleOpts(title="全国各地区累计结婚登记数"), visualmap_opts=opts.VisualMapOpts(is_show=True,max_=1800,min_=10) ) ) m.render_notebook() # 导出独立html文件 # m.render("结婚登记地图.html")

地图结论:广东、山东、江苏等人口大省结婚总量遥遥领先;西部偏远省份登记量偏低。

2. 全国累计离婚登记地图

python

运行

provice_divorce=df.groupby('地区')['离婚登记数'].sum() map_data=[list(z) for z in zip(provice_divorce.index.astype(str), provice_divorce)] m=( Map() .add('累计离婚登记数(万对)',map_data) .set_global_opts( title_opts=opts.TitleOpts(title="全国各地区累计离婚登记数"), visualmap_opts=opts.VisualMapOpts(is_show=True,max_=1800, min_=10) ) ) m.render_notebook()

3. 结婚登记 TOP10 省份玫瑰饼图

python

运行

# 降序取前十省份 provice_marrige=df.groupby('地区')['结婚登记数'].sum().sort_values(ascending=False).head(10) pie_data=[list(z) for z in zip(provice_marrige.index.astype(str),provice_marrige)] pie=( Pie() .add('结婚登记前十省份', pie_data,radius=['25%','60%'],rosetype='radius') .set_global_opts(title_opts=opts.TitleOpts(title="结婚人数前十省份玫瑰图")) ) pie.render_notebook()

4. 结婚登记最少 10 省份玫瑰饼图

python

运行

provice_marrige=df.groupby('地区')['结婚登记数'].sum().sort_values(ascending=True).head(10) pie_data=[list(z) for z in zip(provice_marrige.index.astype(str),provice_marrige)] pie=( Pie() .add('结婚登记最少十省份', pie_data,radius=['25%','60%'],rosetype='radius') .set_global_opts(title_opts=opts.TitleOpts(title="结婚人数最少前十省份玫瑰图")) ) pie.render_notebook()

5. 离婚登记 TOP10 省份玫瑰饼图

python

运行

provice_divorce=df.groupby('地区')['离婚登记数'].sum().sort_values(ascending=False).head(10) pie_data=[list(z) for z in zip(provice_divorce.index.astype(str),provice_divorce)] pie=( Pie() .add('离婚登记前十省份', pie_data,radius=['25%','60%'],rosetype='radius') .set_global_opts(title_opts=opts.TitleOpts(title="离婚人数前十省份玫瑰图")) ) pie.render_notebook()

6. 年度动态轮播横向柱状图(Timeline 时间线)

实现 2001-2024 逐年省份结婚排行,自动轮播切换年份,交互式动态图表:

python

运行

# 获取全部年份列表 year_list=df["年份"].unique().tolist() # 自定义循环配色 color_js = JsCode(""" function(params){ let c=['#ff4757','#ffa502','#fffa65','#2ed573','#1e90ff','#3742fa','#a55eea']; return c[params.dataIndex%c.length]; } """) # 初始化时间线容器 timeline_final = Timeline(init_opts=opts.InitOpts(width="1600px", height="850px")) # 循环年份生成柱状图 for year in year_list: year_df = df[df['年份']==year] year_df = year_df.sort_values('结婚登记数',ascending=True) province = year_df['地区'].tolist() count = year_df['结婚登记数'].tolist() bar=( Bar() .add_xaxis(province) .add_yaxis("结婚登记数",count, itemstyle_opts=opts.ItemStyleOpts(color=color_js,opacity=0.85), label_opts=opts.LabelOpts(is_show=True,position="right")) .reversal_axis() # 横向柱状图 .set_global_opts( title_opts=opts.TitleOpts(title=f"{year}年中国结婚登记数省份排行"), xaxis_opts=opts.AxisOpts(name="登记万对"), yaxis_opts=opts.AxisOpts(name="省份"), tooltip_opts=opts.TooltipOpts(trigger="axis") ) ) timeline_final.add(bar,str(year)) # 配置时间轮播参数 timeline_final.add_schema( is_auto_play=True, is_loop_play=True, play_interval=800, pos_left="center", width="95%" ) # 导出网页文件 timeline_final.render("结婚登记数动态排行.html") timeline_final.render_notebook()

六、项目整体分析结论

1. 数据处理技术总结

  1. 时序宽表必须通过melt转为长表,才能完成分组、聚合、统计;
  2. matplotlib适合快速静态趋势对比,pyecharts擅长交互式地图、动态时间轮播,适合生成可视化报告;
  3. 国内使用 pyecharts 务必替换 CDN 地址,否则导出 HTML 图表空白无法展示。

2. 业务分析结论

  1. 时间趋势:全国结婚登记规模持续下滑,离婚量长期缓慢上涨,婚恋稳定性逐年下降;
  2. 地域差异:人口大省结婚、离婚总量全国领先,西藏、青海、宁夏、海南等省份登记规模垫底;
  3. 区域婚恋特征:东部发达省份结婚离婚比值更低,离婚相对占比更高;中西部省份婚姻稳定性相对更高;
  4. 关键拐点:2020 年后全国结婚数据出现明显下滑,人口结构、婚恋观念变化是核心影响因素。

七、项目拓展优化方向

  1. 引入常住人口数据,计算千人结婚率、千人离婚率,消除人口基数干扰;
  2. 新增年度离婚率热力地图,直观展示分年份区域离婚差异;
  3. 增加多图表联动,实现地图点击跳转对应年份排行;
  4. 基于年份数据做简单线性预测,预判未来婚姻登记变化趋势。

八、常见报错解决

  1. matplotlib 中文方框乱码:必须配置SimHei黑体字体;
  2. pyecharts 导出 HTML 空白:替换国内 CDN 地址;
  3. melt 合并后数据错位:转换长表后统一按年份排序再合并;
  4. 地图省份无数据:省份名称必须与标准行政区名称完全一致。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 6:45:26

夏日胶原保卫战!三招锁住肌肤弹力,越热越要补!

空调冷风呼呼吹,冰镇饮料大口灌,你的胶原蛋白正在悄悄"融化"!盛夏午后,空调房凉意阵阵,手中冰饮甜爽沁心——这本是夏天最惬意的时刻。可镜中的自己,为何疲惫倦容明显,眼周细纹仿佛又…

作者头像 李华
网站建设 2026/6/26 6:44:41

移动Linux开发调试利器:JTAG与i.MX处理器实战指南

1. 项目概述与核心挑战在移动和消费电子领域,时间就是金钱,成本就是生命线。作为一名在嵌入式行业摸爬滚打了十几年的老兵,我亲眼见证了设备功能从单一走向融合,复杂度呈指数级增长。如今,一台智能手机不仅是通讯工具&…

作者头像 李华
网站建设 2026/6/26 6:42:08

从拉菲看二次元手游角色养成:情感联结与社区生态构建

1. 项目概述:从“拉菲”看二次元手游的角色养成与社区生态如果你是一位手游玩家,尤其是对二次元题材有所涉猎,那么“碧蓝航线”这个名字你一定不陌生。而在这个由舰船拟人化构成的庞大世界里,“拉菲”这个名字,几乎是一…

作者头像 李华
网站建设 2026/6/26 6:39:39

小程序毕设选题推荐:基于微信小程序的高校社团考勤与活动发布系统设计与实现 SpringBoot 框架下校园社团资源管理系统设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/26 6:37:08

一站式考证+就业机构——君展教育

如果你心里已经有非常明确的目标岗位,而且你自己能搞定报名流程,那可能不需要额外的就业服务。但如果你对国央企内部体系完全陌生,求职信息要靠自己从犄角旮旯扒拉,那你确实需要一个能帮你打通“考证就业”闭环的帮手。 君展教育在…

作者头像 李华
网站建设 2026/6/26 6:36:37

告别人工质检漏洞,AI相机筑牢服装标签品控防线

服装生产行业中,标签质检是成品出厂的关键环节,标签缺失、破损、残缺等问题,直接影响产品合规性与品牌口碑。长期以来,多数工厂依赖人工目视检测标签,存在诸多难以规避的弊端。流水线高强度作业下,人工长时…

作者头像 李华