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

发布时间:2026/6/26 6:47:10
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_dfpd.read_csv(结婚登记(万对).csv,encodinggbk) # 读取离婚数据 divorce_dfpd.read_csv(离婚登记(万对).csv,encodinggbk) # 查看前5行 merrige_df.head()数据集说明共 31 行全国 31 个省、自治区、直辖市25 列地区名称 2001~2024 共 24 个年份登记数据数值列无缺失值数据类型统一为 float64无需缺失填充。3. 数据基础信息探查python运行# 查看字段、行数、数据类型 divorce_df.info() # 统计均值、标准差、最大最小值等分布指标 divorce_df.describe()数据分析结论各省婚姻登记量差距巨大最大值超 35 万对最低仅 0.68 万对标准差数值偏高人口基数差异造成地域分化明显。4. 原始宽表预览折线图直接对原始宽表绘图直观观察各省份历年波动python运行plt.figure(figsize(20,6)) merrige_df.plot(kindline,title每年结婚登记地区分布) plt.xticks(merrige_df.index,merrige_df[地区],rotation45) plt.show()存在缺陷宽表结构无法按年份分组统计可读性差必须通过melt完成宽表转长表标准化。三、阶段二数据清洗重塑核心步骤1. 结婚数据宽表转长表python运行merrige_dfmerrige_df.melt( id_vars[地区], # 保留不变维度 var_name年份, # 年份列重命名 value_name结婚登记数 # 登记数值列命名 ).sort_values(by年份).reset_index(dropTrue) merrige_df.head()转换后标准结构地区、年份、结婚登记数一行代表某省份单一年份数据。2. 离婚数据同步转换python运行divorce_dfdivorce_df.melt( id_vars[地区], var_name年份, value_name离婚登记数 ).sort_values(by年份).reset_index(dropTrue) divorce_df.head()3. 结婚、离婚数据合并python运行# 合并两套数据 merrige_df[离婚登记数]divorce_df[离婚登记数] dfmerrige_df.copy() df.head()最终数据集字段地区、年份、结婚登记数、离婚登记数后续全部分析基于该表。四、阶段三时间维度趋势与拐点分析1. 全国历年结婚离婚总量趋势按年份聚合全国总登记量绘制对比折线图观察长期变化趋势python运行# 按年份分组求和 year_countdf.groupby(年份)[[结婚登记数,离婚登记数]].sum().reset_index() # 绘图 plt.figure(figsize(16,6)) plt.plot(year_count[年份],year_count[结婚登记数],marker*,label结婚登记) plt.plot(year_count[年份],year_count[离婚登记数],markero,label离婚登记) plt.title(2001-2024每年结婚和离婚登记总量(万对)) plt.legend() plt.show()趋势解读2010-2019 年全国结婚登记维持高位2020 年后持续下滑离婚登记量长期缓慢上升近年增速放缓结婚 / 离婚比值逐年下降婚姻稳定性持续走低。2. 各省份结婚离婚比率柱状图计算各省 24 年总结婚数 / 总离婚数比值越高代表当地离婚占比越低python运行# 分组聚合计算比率 ratiodf.groupby(地区)[结婚登记数].sum()/df.groupby(地区)[离婚登记数].sum() # 绘制柱状图 plt.figure(figsize(16,6)) ratio.plot(kindbar,title各地区结婚离婚比率) plt.xticks(rotation45) plt.grid(axisy) 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/echarts5.4.3/dist/1. 全国累计结婚登记地图python运行# 按地区聚合总结婚数 provice_marrigedf.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_optsopts.TitleOpts(title全国各地区累计结婚登记数), visualmap_optsopts.VisualMapOpts(is_showTrue,max_1800,min_10) ) ) m.render_notebook() # 导出独立html文件 # m.render(结婚登记地图.html)地图结论广东、山东、江苏等人口大省结婚总量遥遥领先西部偏远省份登记量偏低。2. 全国累计离婚登记地图python运行provice_divorcedf.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_optsopts.TitleOpts(title全国各地区累计离婚登记数), visualmap_optsopts.VisualMapOpts(is_showTrue,max_1800, min_10) ) ) m.render_notebook()3. 结婚登记 TOP10 省份玫瑰饼图python运行# 降序取前十省份 provice_marrigedf.groupby(地区)[结婚登记数].sum().sort_values(ascendingFalse).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%],rosetyperadius) .set_global_opts(title_optsopts.TitleOpts(title结婚人数前十省份玫瑰图)) ) pie.render_notebook()4. 结婚登记最少 10 省份玫瑰饼图python运行provice_marrigedf.groupby(地区)[结婚登记数].sum().sort_values(ascendingTrue).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%],rosetyperadius) .set_global_opts(title_optsopts.TitleOpts(title结婚人数最少前十省份玫瑰图)) ) pie.render_notebook()5. 离婚登记 TOP10 省份玫瑰饼图python运行provice_divorcedf.groupby(地区)[离婚登记数].sum().sort_values(ascendingFalse).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%],rosetyperadius) .set_global_opts(title_optsopts.TitleOpts(title离婚人数前十省份玫瑰图)) ) pie.render_notebook()6. 年度动态轮播横向柱状图Timeline 时间线实现 2001-2024 逐年省份结婚排行自动轮播切换年份交互式动态图表python运行# 获取全部年份列表 year_listdf[年份].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_optsopts.InitOpts(width1600px, height850px)) # 循环年份生成柱状图 for year in year_list: year_df df[df[年份]year] year_df year_df.sort_values(结婚登记数,ascendingTrue) province year_df[地区].tolist() count year_df[结婚登记数].tolist() bar( Bar() .add_xaxis(province) .add_yaxis(结婚登记数,count, itemstyle_optsopts.ItemStyleOpts(colorcolor_js,opacity0.85), label_optsopts.LabelOpts(is_showTrue,positionright)) .reversal_axis() # 横向柱状图 .set_global_opts( title_optsopts.TitleOpts(titlef{year}年中国结婚登记数省份排行), 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_interval800, pos_leftcenter, width95% ) # 导出网页文件 timeline_final.render(结婚登记数动态排行.html) timeline_final.render_notebook()六、项目整体分析结论1. 数据处理技术总结时序宽表必须通过melt转为长表才能完成分组、聚合、统计matplotlib适合快速静态趋势对比pyecharts擅长交互式地图、动态时间轮播适合生成可视化报告国内使用 pyecharts 务必替换 CDN 地址否则导出 HTML 图表空白无法展示。2. 业务分析结论时间趋势全国结婚登记规模持续下滑离婚量长期缓慢上涨婚恋稳定性逐年下降地域差异人口大省结婚、离婚总量全国领先西藏、青海、宁夏、海南等省份登记规模垫底区域婚恋特征东部发达省份结婚离婚比值更低离婚相对占比更高中西部省份婚姻稳定性相对更高关键拐点2020 年后全国结婚数据出现明显下滑人口结构、婚恋观念变化是核心影响因素。七、项目拓展优化方向引入常住人口数据计算千人结婚率、千人离婚率消除人口基数干扰新增年度离婚率热力地图直观展示分年份区域离婚差异增加多图表联动实现地图点击跳转对应年份排行基于年份数据做简单线性预测预判未来婚姻登记变化趋势。八、常见报错解决matplotlib 中文方框乱码必须配置SimHei黑体字体pyecharts 导出 HTML 空白替换国内 CDN 地址melt 合并后数据错位转换长表后统一按年份排序再合并地图省份无数据省份名称必须与标准行政区名称完全一致。