Python 数据分析实战|2001-2024 全国婚姻登记数据完整挖掘(Pandas+Matplotlib+Pyecharts)

发布时间:2026/6/26 10:06:09
Python 数据分析实战|2001-2024 全国婚姻登记数据完整挖掘(Pandas+Matplotlib+Pyecharts) 一、前言大家好本文分享大一数据分析课程完整实战项目基于国家统计局2001-2024 全国 31 省份结婚、离婚登记面板数据从数据清洗、宽表转长表、时序趋势、地域空间可视化、离结比深度分析、动态时间轮播图全流程落地完整覆盖Pandas数据预处理、Matplotlib静态绘图、Pyecharts交互式地图 / 玫瑰图 / Timeline 动态排行适合数据分析入门练手、课程作业、课程设计参考。项目基础信息适用人群计算机 / 大数据 / 经管大一学生技术栈Python Pandas / Matplotlib / Pyecharts数据来源国家统计局公开分省婚姻登记数据数据范围2001-2024 年 31 省结婚、离婚登记单位万对项目周期4 学时课堂 课外自主实践核心能力点宽长表转换melt、分组聚合、时空多维分析、交互式地理可视化、动态时序图表二、项目背景与分析目标婚姻登记数据是反映人口结构、社会观念、经济发展的核心 “社会晴雨表”。通过 24 年分省数据我们完成三层目标技能目标熟练掌握 Pandas 数据清洗、melt 宽表转长表、groupby 分组聚合掌握静态 动态双可视化方案。思维目标建立时间 空间二维分析框架挖掘婚姻数据长期趋势、地域差异拐点。拓展目标结合社会学、经济学交叉解读数据用数据解读当代婚姻变迁。三、数据集说明1. 文件结构两份 CSV 宽表文件结婚登记(万对).csv行 省份列 2001-2024 年份数值为当年结婚对数离婚登记(万对).csv结构同上数值为当年离婚对数2. 数据特征31 个省 / 自治区 / 直辖市无缺失值全部为浮点数值原生宽表结构不利于时序分组必须通过melt逆透视转为长表才能分析字段地区、2001 年2024 年共 24 个年份数值列四、完整代码分步实现步骤 1环境导入与全局配置解决中文乱码、负号显示、过滤警告python运行import numpy as np import matplotlib.pyplot as plt import pandas as pd import warnings warnings.filterwarnings(ignore) # Matplotlib中文显示配置 plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False步骤 2读取数据 数据初探质量体检读取两份 CSV查看样本、数据结构、描述性统计python运行# 读取数据 marriage_df pd.read_csv(结婚登记(万对).csv, encodinggbk) divorce_df pd.read_csv(离婚登记(万对).csv, encodinggbk) # 查看前5行样本 print(结婚数据预览) print(marriage_df.head()) # 查看数据类型、缺失值 print(\n数据信息) print(marriage_df.info()) # 描述性统计均值、极值、分位数 print(\n离婚数据统计分布) print(divorce_df.describe()) # 基础静态折线图各省份历年结婚/离婚分布 plt.figure(figsize(20,6)) marriage_df.plot(kindline, title各地区历年结婚登记分布) plt.xticks(marriage_df.index, marriage_df[地区], rotation45) plt.show() plt.figure(figsize(20,6)) divorce_df.plot(kindline, title各地区历年离婚登记分布) plt.xticks(divorce_df.index, divorce_df[地区], rotation45) plt.show()数据体检结论31 省份无缺失值数值分布差异巨大人口大省河南、山东、广东登记数远高于西部、东北小型省份数据存在明显地域分层。步骤 3核心预处理 —— 宽表转长表 melt原生宽表年份为列无法按年份分组使用melt逆透视重构数据结构python运行# 结婚宽表转长表 marriage_long marriage_df.melt( id_vars[地区], # 保留不变标识列 var_name年份, # 原年份列转为“年份”字段 value_name结婚登记数 # 单元格数值命名 ).sort_values(by年份).reset_index(dropTrue) # 离婚宽表转长表 divorce_long divorce_df.melt( id_vars[地区], var_name年份, value_name离婚登记数 ).sort_values(by年份).reset_index(dropTrue) # 合并两张表统一数据集 df marriage_long.copy() df[离婚登记数] divorce_long[离婚登记数] print(合并后标准长表) print(df.head())转换后数据结构地区、年份、结婚登记数、离婚登记数一行代表某省某一年婚姻数据完美适配分组、时序、空间分析。步骤 4时间维度趋势分析全国 单省4.1 全国历年结婚、离婚总量趋势python运行# 按年份聚合全国总和 year_total df.groupby(年份)[[结婚登记数,离婚登记数]].sum().reset_index() plt.figure(figsize(16,6)) plt.plot(year_total[年份], year_total[结婚登记数], marker*, label结婚登记) plt.plot(year_total[年份], year_total[离婚登记数], markero, label离婚登记) plt.title(2001-2024全国每年结婚离婚登记总量万对) plt.legend() plt.xticks(rotation45) plt.grid(alpha0.3) plt.show()趋势解读2013 年全国结婚登记达到历史峰值此后持续逐年下滑离婚登记长期稳步上行2020 年小幅冲高疫情集中办理2022 年后回落一升一降形成剪刀差婚姻稳定性持续走低。4.2 单省案例广西壮族自治区时序分析python运行gx_df df[df[地区] 广西壮族自治区].groupby(年份)[[结婚登记数,离婚登记数]].sum().reset_index() plt.figure(figsize(16,6)) plt.plot(gx_df[年份], gx_df[结婚登记数], marker*, label结婚) plt.plot(gx_df[年份], gx_df[离婚登记数], markero, label离婚) plt.title(广西2001-2024结婚离婚登记趋势) plt.legend() plt.xticks(rotation45) plt.show()4.3 离结比时序 分省对比离结比 结婚总数 / 离婚总数比值越低代表离婚相对越多python运行# 全国年度离结比 year_ratio df.groupby(年份)[结婚登记数].sum() / df.groupby(年份)[离婚登记数].sum() plt.figure(figsize(12,5)) year_ratio.plot(kindline, marker*, title全国历年离结比变化) plt.grid() plt.show() # 各省份累计离结比柱状图 prov_ratio df.groupby(地区)[结婚登记数].sum() / df.groupby(地区)[离婚登记数].sum() plt.figure(figsize(16,6)) prov_ratio.plot(kindbar, title全国各省累计离结比) plt.xticks(rotation45) plt.grid(axisy) plt.show()关键结论东北三省、京津冀直辖市离结比显著偏低离婚相对占比更高西部人口大省离结比更高婚姻稳定性更强。步骤 5空间维度可视化Pyecharts 地图 玫瑰图5.1 全国分省累计结婚 / 离婚热力地图python运行from pyecharts.charts import Map from pyecharts import options as opts # 结婚地图 prov_mar df.groupby(地区)[结婚登记数].sum() mar_data [list(z) for z in zip(prov_mar.index.tolist(), prov_mar.values.tolist())] map_mar ( Map() .add(累计结婚登记(万对), mar_data, china) .set_global_opts( title_optsopts.TitleOpts(title2001-2024各省累计结婚登记热力图), visualmap_optsopts.VisualMapOpts(max_1000, min_10) ) ) map_mar.render(各省结婚热力图.html) # 离婚地图 prov_div df.groupby(地区)[离婚登记数].sum() div_data [list(z) for z in zip(prov_div.index.tolist(), prov_div.values.tolist())] map_div ( Map() .add(累计离婚登记(万对), div_data, china) .set_global_opts( title_optsopts.TitleOpts(title2001-2024各省累计离婚登记热力图), visualmap_optsopts.VisualMapOpts(max_700, min_10) ) ) map_div.render(各省离婚热力图.html)5.2 南丁格尔玫瑰图结婚 TOP10、离婚 TOP10 省份python运行from pyecharts.charts import Pie # 结婚总量前十玫瑰图 top_mar df.groupby(地区)[结婚登记数].sum().sort_values(ascendingFalse).head(10) pie_mar ( Pie() .add(结婚登记前十, [list(z) for z in zip(top_mar.index, top_mar.values)], radius[25%, 60%], rosetyperadius) .set_global_opts(title_optsopts.TitleOpts(累计结婚登记TOP10省份)) ) pie_mar.render(结婚前十玫瑰图.html) # 离婚总量前十玫瑰图 top_div df.groupby(地区)[离婚登记数].sum().sort_values(ascendingFalse).head(10) pie_div ( Pie() .add(离婚登记前十, [list(z) for z in zip(top_div.index, top_div.values)], radius[25%, 60%], rosetyperadius) .set_global_opts(title_optsopts.TitleOpts(累计离婚登记TOP10省份)) ) pie_div.render(离婚前十玫瑰图.html)步骤 6进阶可视化 ——Timeline 动态年份排行榜实现 2001-2024 每年各省结婚数量动态轮播柱状图自动播放python运行from pyecharts.charts import Bar, Timeline from pyecharts.globals import CurrentConfig, ThemeType from pyecharts.commons.utils import JsCode # 修复国内CDN空白问题 CurrentConfig.ONLINE_HOST https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/ year_list df[年份].unique().tolist() # 自定义颜色 color_js JsCode(function(params){let c [#ff4757,#ffa502,#fffa65,#2ed573,#1e90ff,#3742fa];return c[params.dataIndex % c.length];}) timeline Timeline(init_optsopts.InitOpts(width1600px, height850px)) for year in year_list: year_df df[df[年份]year].sort_values(结婚登记数, ascendingTrue) bar ( Bar() .add_xaxis(year_df[地区].tolist()) .add_yaxis(结婚登记数, year_df[结婚登记数].tolist(), itemstyle_optsopts.ItemStyleOpts(colorcolor_js), label_optsopts.LabelOpts(is_showTrue, positionright)) .reversal_axis() .set_global_opts(title_optsopts.TitleOpts(f{year}年各省结婚登记排行)) ) timeline.add(bar, str(year)) # 时间轴自动播放配置 timeline.add_schema( is_auto_playTrue, is_loop_playTrue, play_interval800, pos_leftcenter, width95% ) timeline.render(结婚动态年度排行.html)步骤 7拓展交叉分析思路课程思考题相关性验证引入各省城镇化率、人均 GDP计算与离结比皮尔逊相关系数验证 “城镇化越高离婚相对越多” 假设东北高离结比成因青年人口持续外流适婚人口结婚分母持续萎缩离婚存量人口沉淀直接拉高离结比政策影响分析2021 离婚冷静期、2023 疫情补偿性结婚、2024 结婚创新低等政策 / 事件拐点解读。五、核心数据分析结论1. 时间维度全国结婚登记 2013 年触顶后连续下跌2024 年创近 24 年最低离婚登记长期上行仅疫情、政策年份短期波动离结比持续走低婚姻稳定性整体逐年下降。2. 空间地域维度人口大省广东、河南、山东、四川结婚、离婚总量常年位居全国前列东部沿海、直辖市、东北三省离结比偏低离婚相对比例更高中西部内陆省份婚姻稳定性更强数据分布符合胡焕庸线特征线东南婚姻登记总量远高于西北。3. 社会学解读城市化城市女性经济独立、婚姻观念多元化离婚意愿提升人口结构晚婚、少子化、青年外流双重挤压结婚基数社会包容度社会对离婚接纳度提升不再单纯维持形式婚姻经济压力购房、育儿成本拉高结婚门槛年轻人推迟或放弃结婚。六、项目局限性仅使用分省总量数据无年龄、性别、初婚 / 再婚细分维度未区分城乡差异无法细化城镇、农村婚姻分化缺少人均收入、出生率、房价等外部面板数据深度回归未区分协议离婚、诉讼离婚无法分析离婚类型结构。七、学习总结本项目完整覆盖数据分析全链路数据读取→质量体检→宽长表结构重塑→分组聚合→静态可视化→交互式地图 / 动态时序图表→交叉社科解读。melt是处理年度宽表的万能工具完美解决多年份列拆解Pyecharts 适合地域、动态可视化输出 HTML 交互式图表汇报效果远优于静态 Matplotlib单纯绘图无意义数据分析核心是数据 行业背景交叉解读本项目结合人口、社会学完成多维挖掘适合课程作业、数据分析入门练手。八、完整项目文件清单plaintext婚姻登记分析/ ├── 结婚登记(万对).csv ├── 离婚登记(万对).csv ├── 婚姻数据分析.ipynb # 完整代码notebook ├── 各省结婚热力图.html ├── 各省离婚热力图.html ├── 结婚前十玫瑰图.html ├── 离婚前十玫瑰图.html ├── 结婚动态年度排行.html └── 婚姻登记数据分析报告.md标签#Python 数据分析 #Pandas 实战 #Pyecharts 地图 #婚姻数据挖掘 #大一课程设计 #宽表转长表 melt