当前位置: 首页 > news >正文

【数据可视化-82】中国城市幸福指数可视化分析:Python + PyEcharts 打造炫酷城市幸福指数可视化大屏

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

【数据可视化-82】中国城市幸福指数可视化分析:Python + PyEcharts 打造炫酷城市幸福指数可视化大屏

    • 一、引言
    • 二、数据准备与预处理
    • 三、多维度可视化分析
      • 3.1 各区域幸福指数占比玫瑰图
      • 3.2 各区域教育满意度与幸福指数关系
      • 3.3 人均可支配收入区间与平均幸福指数
      • 3.4 省份平均幸福指数地图
      • 3.5 创建城市平均幸福指数
      • 3.6 区域平均幸福指数地图(增强版)
      • 3.7不同区域多维表现雷达图
      • 3.8 幸福指数相关因素热力图
    • 四、构建可视化大屏
    • 五、分析与结论
    • 六、总结

一、引言

  在当今社会,城市的幸福指数不仅是居民生活质量的重要体现,也是衡量城市竞争力的关键指标。本文将通过 Python 和 Pyecharts 对中国城市幸福指数及其影响因素进行深度可视化分析。我们将从多个维度出发,结合多种炫酷的图表,展示数据背后的深刻洞察,并最终生成一个可移动的可视化大屏,为数据分析和决策提供有力支持。

二、数据准备与预处理

  首先,我们需要加载数据,在进行可视化之前,需要对数据进行清洗,去除异常值和缺失值。:

import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import *
from pyecharts.globals import ThemeType# 读取数据
df = pd.read_csv("updated_city_happiness.csv")# 清理数据
df = df[~df['省份'].str.contains('ce1')]  # 删除异常行
numeric_cols = df.columns[4:-1]  # 从第5列开始是数值列
df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric, errors='coerce')
df = df.drop(['status'], axis=1)

三、多维度可视化分析

3.1 各区域幸福指数占比玫瑰图

# 计算各区域幸福指数占比
region_happiness_percentage = df.groupby('区域')['幸福指数'].mean().reset_index()
region_happiness_percentage.columns = ['区域', '平均幸福指数']# 创建玫瑰图
pie = (Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK, width="100%", height="400px")).add("", [list(z) for z in zip(region_happiness_percentage['区域'], region_happiness_percentage['平均幸福指数'])]).set_global_opts(title_opts=opts.TitleOpts(title="各区域幸福指数占比玫瑰图", pos_left="center"),legend_opts=opts.LegendOpts(orient="vertical", pos_left="left"),tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"))
)

3.2 各区域教育满意度与幸福指数关系

# 计算各区域教育满意度与幸福指数的关系
region_education_happiness = df.groupby('区域')[['教育满意度(10分制)', '幸福指数']].mean().reset_index()# 创建柱状图
bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK, width="100%", height="400px")).add_xaxis(region_education_happiness['区域'].tolist()).add_yaxis("教育满意度(10分制)", region_education_happiness['教育满意度(10分制)'].tolist(), yaxis_index=0, color="#67E0E3").add_yaxis("幸福指数", region_education_happiness['幸福指数'].tolist(), yaxis_index=1, color="#FFD700") 
)

3.3 人均可支配收入区间与平均幸福指数

# 将人均可支配收入分组
bins = [0, 2, 4, 6, 8, 10]
labels = ['0-2万', '2-4万', '4-6万', '6-8万', '8-10万']
df['收入区间'] = pd.cut(df['人均可支配收入(万元)'], bins=bins, labels=labels, right=False)# 计算每个收入区间的平均幸福指数
grouped_data = df.groupby('收入区间')['幸福指数'].mean().reset_index()# 创建柱状图
bar1 = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK, width="100%", height="400px")).add_xaxis(grouped_data['收入区间'].tolist()).add_yaxis("平均幸福指数", grouped_data['幸福指数'].round(2).tolist(), color="#FF6B6B")
)

3.4 省份平均幸福指数地图

# 计算各省份的平均幸福指数
province_happiness = df.groupby('省份')['幸福指数'].mean().reset_index()
province_happiness.columns = ['省份', '平均幸福指数']# 创建地图
province_map = (Map(init_opts=opts.InitOpts(theme=ThemeType.DARK, width="100%", height="600px")).add("平均幸福指数", [list(z) for z in zip(province_happiness['省份'], province_happiness['平均幸福指数'])], "china")
)

3.5 创建城市平均幸福指数

geo = (Geo(init_opts=opts.InitOpts(theme=ThemeType.DARK)).add_schema(maptype="china").add("平均幸福指数",[(row['城市'], row['幸福指数']) for index, row in df.iterrows()],# type_=GeoType.HEATMAP,)
)
geo.render("城市平均幸福指数地图.html")

3.6 区域平均幸福指数地图(增强版)

# 模拟区域数据
region_happiness = pd.DataFrame({"区域": ["东北", "华东", "华中", "华北", "华南", "西北", "西南"],"平均幸福指数": [80.87, 82.35, 78.60, 74.69, 89.81, 76.89, 87.32]
})# 区域与省份映射
region_to_provinces = {"东北": ["辽宁省", "吉林省", "黑龙江省"],# ... 其他区域映射
}# 准备地图数据
map_data = []
for _, row in region_happiness.iterrows():region = row["区域"]happiness = row["平均幸福指数"]for province in region_to_provinces[region]:map_data.append([province, happiness])# 创建地图
region_map_chart = (Map(init_opts=opts.InitOpts(theme=ThemeType.DARK, width="100%", height="600px")).add(series_name="平均幸福指数",data_pair=map_data,maptype="china",is_map_symbol_show=False)
)

3.7不同区域多维表现雷达图

# 计算各区域多维指标均值
dimensions = ['人均可支配收入(万元)', '房价收入比', '教育满意度(10分制)', '医疗资源指数', 'PM2.5年均值', '公园绿地面积(㎡/人)', '养老保险覆盖率(%)', '每万人警力数', '通勤时间(分钟)'
]
region_data = df.groupby('区域')[dimensions].mean().reset_index()# 准备雷达图数据
radar_data = [{"value": [round(x, 1) for x in region_data.iloc[i][1:].values.tolist()],"name": region_data.iloc[i]["区域"]} for i in range(len(region_data))
]# 创建雷达图
radar = (Radar(init_opts=opts.InitOpts(theme=ThemeType.DARK)).add_schema(schema=[opts.RadarIndicatorItem(name=str('人均可支配收入(万元)'), max_=5,min_=1),...],splitarea_opt=opts.SplitAreaOpts(is_show=False, areastyle_opts=opts.AreaStyleOpts(opacity=1)))
)

3.8 幸福指数相关因素热力图

# 计算相关系数矩阵
corr_matrix = df[['幸福指数', '人均可支配收入(万元)', '教育满意度(10分制)', '医疗资源指数', '公园绿地面积(㎡/人)', 'PM2.5年均值']].corr()# 准备热力图数据
columns = corr_matrix.index.tolist()
heatmap_data = [[i, j, round(corr_matrix.iloc[i, j], 2)] for i in range(len(columns)) for j in range(len(columns))]# 创建热力图
heatmap = (HeatMap(init_opts=opts.InitOpts(theme=ThemeType.DARK, width="100%", height="500px")).add_xaxis(columns).add_yaxis("相关性系数",columns,heatmap_data,label_opts=opts.LabelOpts(color="#fff"),)
)

四、构建可视化大屏

from pyecharts.charts import Page# 创建页面
page = Page(layout=Page.DraggablePageLayout, page_title="中国城市幸福指数可视化大屏")# 添加所有图表
page.add(pie,bar,bar1,province_map,geo,region_map_chart,radar,heatmap
)# 保存为HTML文件
page.render("中国城市幸福指数可视化大屏.html")

五、分析与结论

  通过以上多维度可视化分析,我们可以得出以下结论:

区域差异显著: 华南地区幸福指数最高,可能与经济发展水平、气候条件等因素相关。

经济与幸福指数: 人均可支配收入在4-6万区间时,幸福指数达到峰值,说明收入与幸福感并非线性关系。

多维表现: 各区域在医疗、教育、环境等维度表现各异,雷达图清晰展示了区域发展的不平衡性。

关键影响因素: 热力图显示,PM2.5年均值与幸福指数呈强负相关,说明环境质量对幸福感有重要影响。

六、总结

  本文通过PyEcharts构建了一个炫酷的交互式可视化大屏,从多个角度分析了中国城市的幸福指数。这种可视化方式不仅直观展示了数据特征,还通过交互功能增强了用户体验。对于数据分析和可视化从业者来说,这种多图表组合的大屏展示方式值得借鉴。

  最终生成的可视化大屏文件"中国城市幸福指数可视化大屏.html"可以直接在浏览器中打开,支持拖拽、缩放等交互操作。

http://www.lryc.cn/news/612476.html

相关文章:

  • JAVA算法练习题day9
  • 蓝桥杯----锁存器、LED、蜂鸣器、继电器、Motor
  • Pytest项目_day06(requests中Session的用法)
  • Python 进行点云ICP(lterative Closest Point)配准(精配准)
  • Java高频方法总结
  • 实习文档背诵
  • chdir系统调用及示例
  • docker启动出现Error response from daemon: Container的问题【已解决】
  • 92、【OS】【Nuttx】【构建】cmake 支持构建的目标
  • InfluxDB 集群部署与高可用方案(二)
  • 【概念学习】深度学习有何不同
  • 敏捷协作平台推荐:Jira、PingCode、Tapd等15款
  • iptables相关知识笔记
  • AI+物理融合新范式:物理信息神经网络(PINN)的深度研究报告
  • Flash Attention与SDPA
  • 深度探索:非静态内部类不能定义 static 成员属性和方法 及 静态内部类的必要性
  • AI Infra与LLM的联系与差异
  • ICCV 2025 | 视频生成迈入“多段一致”新时代!TokensGen用“压缩Token”玩转长视频生成
  • 【java】DDD架构同普通微服务项目的区别
  • 低代码系统的技术深度:超越“可视化操作”的架构与实现挑战
  • MCU编程中的临界资源及临界区
  • 【51单片机2个独立按键2个独立数码管静态显示内容自定】2022-10-22
  • 从 0 到 1 创建 InfluxDB 3 表:标签、字段、命名规范一篇讲透
  • 无人机航拍数据集|第4期 无人机太阳光伏板红外目标检测YOLO数据集10945张yolov11/yolov8/yolov5可训练
  • 无人机图传的得力助手:5G 便携式多卡高清视频融合终端的协同应用
  • ⭐CVPR 文本到 3D 场景生成新突破:Prometheus 框架解析
  • 小实验--继电器定时开闭
  • Pytest项目_day04(Python做接口请求)
  • vector使用模拟实现
  • Linux 学习 之 killer 问题