一、文章前言1. 项目背景婚姻登记数据是反映社会人口结构、婚恋观念、城镇化发展的核心民生指标。本文基于全国 31 省份 2001-2024 结婚、离婚登记万对二维宽表数据完整落地数据清洗→宽表转长表→时间趋势分析→空间地理可视化→动态时序排行榜全链路数据分析综合使用pandas数据预处理、matplotlib静态绘图、pyecharts交互式地图 / 玫瑰图 / 时间轮播图。2. 技术栈数据处理pandas、numpy静态可视化matplotlib交互式可视化pyecharts地图、玫瑰图、Timeline 动态排行环境Python3.8 Jupyter Notebook3. 数据集说明两份 CSV 文件结婚登记(万对).csv31 行省份25 列年份2001-2024宽表离婚登记(万对).csv同结构离婚数据 字段地区 2001 年2024 年登记数值单位万对4. 整体分析流程阶段一数据导入、数据质量体检缺失、重复、分布阶段二宽表转长表数据重塑、结婚 / 离婚数据合并阶段三时间序列趋势分析全国大盘、单省对比、离结比阶段四空间地域差异分析热力地图、玫瑰图 TOP 省份阶段五Timeline 动态时序排行榜可视化阶段六分析总结与社会解读二、阶段一数据初探与质量体检2.1 导入依赖库、全局配置python运行import pandas as pd import numpy as np import matplotlib.pyplot as plt # 设置中文显示 plt.rcParams[font.sans-serif] [SimHei] # 设置负号显示 plt.rcParams[axes.unicode_minus] False # 忽略警告 import warnings warnings.filterwarnings(ignore)2.2 读取两份婚姻数据处理中文编码 gbkpython运行#结婚登记数据 merrige_dfpd.read_csv(结婚登记(万对).csv,encodinggbk) #离婚登记数据 divorce_dfpd.read_csv(离婚登记(万对).csv,encodinggbk) #查看前5行 merrige_df.head()输出预览表格表格地 区2024 年2023 年2022 年2021 年2020 年2019 年...0北 京 市11.4513.739.1310.3411.3812.90...1天 津 市6.048.386.898.048.989.64...2河 北 省27.9437.1130.2133.7137.4942.13...2.3 数据基础信息探查python运行# 查看数据行列、字段类型、缺失值 merrige_df.info() divorce_df.info() # 数值字段描述性统计均值、最值、标准差、分位数 divorce_df.describe()统计结果解读共 31 个省份样本25 个年份数值列所有年份无缺失值最小值均大于 0无异常负数标准差较大说明各省登记数量地域差距明显。2.4 原始宽表简单折线预览python运行# 结婚数据原始宽表绘图 plt.figure(figsize(20,6)) merrige_df.plot(kindline,title每年结婚登记地区分布) plt.xticks(merrige_df.index,merrige_df[地区],rotation45) plt.show() # 离婚数据原始宽表绘图 plt.figure(figsize(20,6)) divorce_df.plot(kindline,title每年离婚登记地区分布) plt.xticks(divorce_df.index,divorce_df[地区],rotation45) plt.show()结果痛点原始宽表年份作为列无法直接按年份分组聚合、做时间序列分析必须进行宽表转长表重构。三、阶段二数据重塑与结构优化核心预处理3.1 melt 函数宽表转为标准长表长表固定三列地区、年份、登记数方便分组统计。python运行# 结婚宽表转长表 merrige_dfmerrige_df.melt( id_vars[地区], # 保留维度列 var_name年份, # 原年份列统一转为“年份”字段 value_name结婚登记数 # 数值列命名 ).sort_values(by年份).reset_index(dropTrue) # 按年份升序、重置索引 # 离婚宽表转长表 divorce_dfdivorce_df.melt( id_vars[地区], var_name年份, value_name离婚登记数 ).sort_values(by年份).reset_index(dropTrue) divorce_df.head()转换后长表输出表格地区年份离婚登记数0新疆维吾尔自治区2001 年5.511北京市2001 年2.772天津市2001 年1.313.2 合并结婚、离婚数据生成综合分析表python运行# 同顺序拼接离婚数据 merrige_df[离婚登记数] divorce_df[离婚登记数] df merrige_df.copy() df.head()合并后完整数据表结构地区、年份、结婚登记数、离婚登记数支撑后续所有指标计算。四、阶段三时间维度趋势与拐点分析4.1 全国历年结婚 离婚总量双折线python运行# 按年份聚合全国总登记量 year_countdf.groupby(年份)[[结婚登记数,离婚登记数]].sum().reset_index() # 绘制双折线趋势图 plt.figure(figsize(16,6)) plt.plot(year_count[年份],year_count[结婚登记数],markero,label结婚登记) plt.plot(year_count[年份],year_count[离婚登记数],marker*,label离婚登记) plt.title(2001-2024全国每年结婚和离婚登记总量(万对)) plt.legend() plt.xticks(rotation45) plt.show()趋势核心结论结婚总量 2013 年达到峰值后持续逐年下滑离婚总量长期稳步上涨2020 年后小幅回落2013 年为婚恋趋势关键拐点。4.2 单省趋势对比以广西壮族自治区为例python运行# 筛选广西数据按年份聚合 gx_countdf[df[地区]广西壮族自治区].groupby(年份)[[结婚登记数,离婚登记数]].sum().reset_index() plt.figure(figsize(16,6)) plt.plot(gx_count[年份],gx_count[结婚登记数],marker*,label广西结婚) plt.plot(gx_count[年份],gx_count[离婚登记数],markero,label广西离婚) plt.xticks(rotation45) plt.title(广西每年结婚和离婚登记(万对)) plt.legend() plt.show()可对比全国大盘分析地方婚恋趋势是否存在滞后 / 超前特征。4.3 全国历年离结比趋势离婚 / 结婚python运行# 分组计算每年离结比 year_marry_sum df.groupby(年份)[结婚登记数].sum() year_div_sum df.groupby(年份)[离婚登记数].sum() ratio year_div_sum / year_marry_sum # 绘制离结比折线 plt.figure(figsize(12,5)) ratio.plot(kindline,marker*,title全国历年离结比离婚/结婚) plt.grid() plt.show()解读离结比持续走高反映婚姻稳定性逐年下降结合城镇化、高等教育普及、女性独立等社会背景可深度分析。4.4 各省份整体离结比横向对比柱状图python运行# 各省累计离婚/累计结婚 prov_marry_sum df.groupby(地区)[结婚登记数].sum() prov_div_sum df.groupby(地区)[离婚登记数].sum() prov_ratio prov_div_sum / prov_marry_sum plt.figure(figsize(16,6)) prov_ratio.plot(kindbar,title各省份整体离结比) plt.xticks(rotation45) plt.grid(axisy) plt.show()现象东北三省、直辖市离结比显著高于中西部省份。五、阶段四空间维度地域差异分析Pyecharts 可视化5.1 全国结婚登记总量热力地图python运行from pyecharts.charts import Map from pyecharts import options as opts # 省份数值数据封装 provice_marrigedf.groupby(地区)[结婚登记数].sum() map_data[list(z) for z in zip(provice_marrige.index, provice_marrige)] m( Map() .add(累计结婚登记万对,map_data) .set_global_opts( title_optsopts.TitleOpts(title全国各地区累计结婚登记数热力图), visualmap_optsopts.VisualMapOpts(is_showTrue,max_1800,min_10) ) ) m.render(1.各地区结婚登记热力图.html)结果地图特征东部人口大省河南、山东、广东结婚总量最高西部低人口省份数值偏低符合胡焕庸线人口分布规律。5.2 全国离婚登记总量热力地图python运行from pyecharts.charts import Map from pyecharts import options as opts provice_divorcedf.groupby(地区)[离婚登记数].sum() map_div_data[list(z) for z in zip(provice_divorce.index.astype(str), provice_divorce)] m( Map() .add(累计离婚登记万对,map_div_data) .set_global_opts( title_optsopts.TitleOpts(title全国各地区累计离婚登记数热力图), visualmap_optsopts.VisualMapOpts(is_showTrue,max_700,min_0) ) ) m.render(2.各地区离婚登记热力图.html)结果5.3 结婚总量 TOP10 省份南丁格尔玫瑰图python运行from pyecharts.charts import Pie from pyecharts import options as opts # 降序取全部省份 provice_marrigedf.groupby(地区)[结婚登记数].sum().sort_values(ascendingFalse) pie_data[list(z) for z in zip(provice_marrige.index.astype(str),provice_marrige)] pie( Pie() .add(结婚登记总量,pie_data,rosetyperadius,radius[25%,60%]) .set_global_opts(title_optsopts.TitleOpts(title结婚登记总量前十省份玫瑰图)) ) pie.render(3.结婚前十省份玫瑰图.html)结果5.4 结婚总量最少 10 省份玫瑰图python运行provice_marrigedf.groupby(地区)[结婚登记数].sum().sort_values(ascendingTrue) pie_data[list(z) for z in zip(provice_marrige.index.astype(str),provice_marrige)] pie( Pie() .add(结婚登记总量最少省份,pie_data,rosetyperadius,radius[25%,60%]) .set_global_opts(title_optsopts.TitleOpts(title结婚登记最少省份玫瑰图)) ) pie.render(4.结婚最少省份玫瑰图.html)结果5.5 离婚总量 TOP10 省份玫瑰图python运行provice_divorcedf.groupby(地区)[离婚登记数].sum().sort_values(ascendingFalse) pie_data[list(z) for z in zip(provice_divorce.index.astype(str),provice_divorce)] pie( Pie() .add(离婚登记总量前十省份,pie_data,rosetyperadius,radius[25%,60%]) .set_global_opts(title_optsopts.TitleOpts(title离婚登记总量前十省份玫瑰图)) ) pie.render(5.离婚前十省份玫瑰图.html)结果六、阶段五动态可视化 ——Timeline 时间轴动态排行实现 2001-2024 每年各省结婚数量 TOP20 动态轮播柱状图支持自动播放python运行from pyecharts.charts import Bar, Timeline from pyecharts import options as opts from pyecharts.globals import ThemeType, CurrentConfig from pyecharts.commons.utils import JsCode # 修复国内CDN空白问题 CurrentConfig.ONLINE_HOST https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/ year_listdf[年份].unique().tolist() # 初始化时间轴容器 timeline_final Timeline(init_optsopts.InitOpts(width1600px,height850px)) # 自定义配色 color_js JsCode( function(params){ let c [#ff4757,#ffa502,#fffa65,#2ed573,#1e90ff,#3742fa,#a55eea]; return c[params.dataIndex % c.length]; } ) # 循环每一年生成柱状图 for year in year_list: # 筛选当年数据降序取前20 data_year df[df[年份]year].sort_values(结婚登记数,ascendingFalse).head(20) data_year data_year.sort_values(by结婚登记数,ascendingTrue) province data_year[地区].tolist() count data_year[结婚登记数].tolist() bar ( Bar() .add_xaxis(province) .add_yaxis( 结婚登记数, count, itemstyle_optsopts.ItemStyleOpts(colorcolor_js,opacity0.85,border_radius6), label_optsopts.LabelOpts(is_showTrue,positionright,color#fff) ) .reversal_axis() # 倒置坐标轴第一名置顶 .set_global_opts( title_optsopts.TitleOpts(titlef{year}年中国结婚登记数TOP20排行), xaxis_optsopts.AxisOpts(name登记数), yaxis_optsopts.AxisOpts(name省份), tooltip_optsopts.TooltipOpts(triggeraxis) ) ) timeline_final.add(bar,str(year)) # 配置时间轴自动播放 timeline_final.add_schema( is_auto_playTrue, is_loop_playTrue, play_interval600, width95% ) # 渲染网页 timeline_final.render(结婚登记数动态排行.html) timeline_final.render_notebook()结果效果图说明自动轮播 2001-2024 各年份省份结婚排名直观观察人口大省长期稳居前列、中西部省份逐年小幅波动。七、核心分析结论7.1 时间趋势结论全国结婚登记量 2013 年触顶后连续十几年下滑晚婚、不婚观念普及离婚登记量长期上行离结比持续走高婚姻稳定性下降2020 年后两类数据同步小幅回落受疫情、婚恋冷静期政策双重影响。7.2 空间地域结论总量维度河南、山东、广东、四川等人口大省结婚、离婚总量遥遥领先离结比维度东北三省、一线城市离婚相对比例更高中西部偏低人口分布婚姻登记总量符合胡焕庸线东部沿海显著高于西部内陆。7.3 社会学解读城镇化城市人口流动大、生活成本高婚姻维系难度上升女性经济独立女性收入提升降低对婚姻经济依附人口结构适婚人口逐年减少叠加晚婚直接压低结婚总量观念变化当代年轻人更注重婚姻质量不合适更倾向选择离婚。八、项目局限与拓展方向局限数据仅包含登记对数无分年龄段、城乡、教育程度细分字段缺少人口基数无法计算千人结婚率仅能分析绝对总量无跨省流动、初婚 / 再婚细分数据。拓展方向新增千人结婚率、千人离婚率指标消除人口基数干扰引入 GDP、人均收入做相关性回归分析新增离婚原因、婚龄细分数据做多维度交叉分析构建机器学习模型预测未来 3-5 年婚姻登记趋势。九、完整源码获取文中所有代码均可直接复制运行CSV 数据集为公开民政统计数据替换文件路径即可复现全部图表。 依赖安装命令bash运行pip install pandas numpy matplotlib pyecharts -i https://pypi.tuna.tsinghua.edu.cn/simple