🧑 博主簡介:曾任某智慧城市類企業
算法總監
,目前在美國市場的物流公司從事高級算法工程師
一職,深耕人工智能領域,精通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"可以直接在瀏覽器中打開,支持拖拽、縮放等交互操作。