🧑 博主簡介:曾任某智慧城市類企業
算法總監
,目前在美國市場的物流公司從事高級算法工程師
一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN人工智能領域的優質創作者,提供AI相關的技術咨詢、項目開發和個性化解決方案等服務,如有需要請站內私信或者聯系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉絲群介紹:① 群內初中生、高中生、本科生、研究生、博士生遍布,可互相學習,交流困惑。② 熱榜top10的常客也在群里,也有數不清的萬粉大佬,可以交流寫作技巧,上榜經驗,漲粉秘籍。③ 群內也有職場精英,大廠大佬,可交流技術、面試、找工作的經驗。④ 進群免費贈送寫作秘籍一份,助你由寫作小白晉升為創作大佬。⑤ 進群贈送CSDN評論防封腳本,送真活躍粉絲,助你提升文章熱度。有興趣的加文末聯系方式,備注自己的CSDN昵稱,拉你進群,互相學習共同進步。
【數據可視化-75】🌩? 北京密云區2025年7月暴雨深度分析:Python + Pyecharts 炫酷大屏可視化(含完整數據、代碼)
- 一、引言
- 二、數據集介紹
- 三、環境準備
- 四、數據預處理
- 五、可視化分析
- 5.1 降雨量面積圖
- 5.2 日降雨量柱狀圖
- 5.3 日最高溫和最低溫折線圖
- 5.4 AQI 柱狀圖
- 5.5 風向玫瑰圖
- 5.6 降雨量與 AQI 散點圖
- 5.7 風向頻率統計詞云圖
- 六、組合大屏
- 七、分析總結
- 7.1 社會影響
- 7.2 防范建議
一、引言
??2025年7月,北京市密云區遭遇了罕見的特大暴雨,多個站點的降雨量突破歷史極值。暴雨引發了山洪、泥石流、滑坡等次生災害,給當地居民的生活和財產帶來了巨大影響。本文將基于密云區2025年7月的天氣數據集,使用 Python 和 Pyecharts 構建一個炫酷的黑色大屏,從多個維度分析暴雨的形成機制和社會影響。
二、數據集介紹
??數據集包含以下字段:
日期
:日期白天/晚上
:Day 或 Night高溫
:白天最高溫度(℃)低溫
:夜間最低溫度(℃)AQI
:空氣質量指數風向
:16個方向(如北、東北、東等)降雨量
:當日降雨量(mm)
三、環境準備
??在開始之前,請確保安裝了以下庫:
pip install pandas pyecharts
四、數據預處理
??我們首先讀取數據,并進行必要的預處理。
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import *
from pyecharts.globals import ThemeType# 讀取數據
df = pd.read_csv("miyun_weather_202507.csv")# 將日期列轉換為日期格式
df['日期'] = pd.to_datetime(df['日期'], format="%m月%d日")# 提取日期字符串
df['日期_str'] = df['日期'].dt.strftime('%m-%d')df['高溫'] = df['高溫'].str.replace('℃', '').astype(int)
df['低溫'] = df['低溫'].str.replace('℃', '').astype(int)
五、可視化分析
??接下來,我們將從多個角度對數據進行可視化分析。
5.1 降雨量面積圖
# 降雨量面積圖
area_rain = (Line(init_opts=opts.InitOpts(theme=ThemeType.DARK, bg_color="#000")).add_xaxis(df['日期_str'].tolist()).add_yaxis("降雨量 (mm)", df['降雨量'].tolist(), is_smooth=True, linestyle_opts=opts.LineStyleOpts(width=2, curve=0.3)).set_global_opts(title_opts=opts.TitleOpts(title="7月每日降雨量面積圖", subtitle="單位:毫米"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),yaxis_opts=opts.AxisOpts(name="降雨量 (mm)"),tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross")).set_series_opts(areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color=JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{offset:0,color:'#00f2fe'},{offset:1,color:'#4facfe'}])""")))
)
5.2 日降雨量柱狀圖
??我們首先查看7月份每天的降雨量。
# 日降雨量柱狀圖
bar_rain = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK, bg_color="#000")).add_xaxis(df['日期_str'].tolist()).add_yaxis("降雨量 (mm)", df['降雨量'].tolist(), itemstyle_opts=opts.ItemStyleOpts(color="#00f2fe")).set_global_opts(title_opts=opts.TitleOpts(title="7月每日降雨量", subtitle="單位:毫米"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),yaxis_opts=opts.AxisOpts(name="降雨量 (mm)"),visualmap_opts=opts.VisualMapOpts(is_show=True,pos_top="middle",pos_left="right",orient="vertical",min_=0,max_=df['降雨量'].max(),range_color=["#00f2fe", "#4facfe", "#00aaff"]))
)
5.3 日最高溫和最低溫折線圖
??接下來,我們查看7月份每天的最高溫和最低溫。
# 日最高溫和最低溫折線圖
line_temp = (Line(init_opts=opts.InitOpts(theme=ThemeType.DARK, bg_color="#000")).add_xaxis(df['日期_str'].tolist()).add_yaxis("高溫 (℃)", df['高溫'].tolist(), is_smooth=True, linestyle_opts=opts.LineStyleOpts(width=2, curve=0.3)).add_yaxis("低溫 (℃)", df['低溫'].tolist(), is_smooth=True, linestyle_opts=opts.LineStyleOpts(width=2, curve=0.3)).set_global_opts(title_opts=opts.TitleOpts(title="7月每日最高溫和最低溫", subtitle="單位:攝氏度"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),yaxis_opts=opts.AxisOpts(name="溫度 (℃)"),tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"))
)
5.4 AQI 柱狀圖
??我們再看看7月份每天的 AQI 情況。
# AQI 柱狀圖
bar_aqi = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK, bg_color="#000")).add_xaxis(df['日期_str'].tolist()).add_yaxis("AQI", df['AQI'].tolist(), itemstyle_opts=opts.ItemStyleOpts(color="#ffde93")).set_global_opts(title_opts=opts.TitleOpts(title="7月每日AQI", subtitle="空氣質量指數"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),yaxis_opts=opts.AxisOpts(name="AQI"),visualmap_opts=opts.VisualMapOpts(is_show=True,pos_top="middle",pos_left="right",orient="vertical",min_=df['AQI'].min(),max_=df['AQI'].max(),range_color=["#ffde93", "#ffc107", "#ff9800"]))
)
5.5 風向玫瑰圖
??我們再看看7月份風向的分布情況。
# 風向玫瑰圖
rose_wind = (Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK, bg_color="#000")).add("", list(df['風向'].value_counts().items()), radius=[30, 100], center=["50%", "50%"], rosetype="radius").set_global_opts(title_opts=opts.TitleOpts(title="7月風向分布"),legend_opts=opts.LegendOpts(is_show=True,orient="vertical", pos_top="15%", pos_left="2%")).set_series_opts(label_opts=opts.LabelOpts(is_show=True))
)
5.6 降雨量與 AQI 散點圖
??我們再看看降雨量與 AQI 之間的關系。
# 降雨量與 AQI 散點圖
scatter_rain_aqi = (Scatter(init_opts=opts.InitOpts(theme=ThemeType.DARK, bg_color="#000")).add_xaxis(df['AQI'].tolist()).add_yaxis("降雨量 (mm)", df['降雨量'].tolist(), symbol_size=10).set_global_opts(title_opts=opts.TitleOpts(title="降雨量與 AQI 的關系"),xaxis_opts=opts.AxisOpts(name="AQI"),yaxis_opts=opts.AxisOpts(name="降雨量 (mm)"),visualmap_opts=opts.VisualMapOpts(type_="size",max_=df['降雨量'].max(),min_=0,range_size=[5, 20]))
)
5.7 風向頻率統計詞云圖
??我們再看看7月份風向的分布情況的詞云圖。
# 數據分析維度四:風向頻率統計
wind_direction_counts = df['風向'].value_counts()
wind_data = list(zip(wind_direction_counts.index.tolist(), wind_direction_counts.values.tolist()))
wordcloud = ( WordCloud(init_opts=opts.InitOpts(theme=ThemeType.DARK, bg_color="#000")) .add("", wind_data, word_size_range=[20, 100]) .set_global_opts( title_opts=opts.TitleOpts(title="風向頻率統計"), tooltip_opts=opts.TooltipOpts(is_show=True) )
)
六、組合大屏
??最后,我們將所有圖表組合成一個炫酷的大屏。
# 組合大屏
page = Page(layout=Page.DraggablePageLayout)
page.add(area_rain,bar_rain, line_temp, bar_aqi, rose_wind, scatter_rain_aqi,wordcloud)
page.render("miyun_weather_dashboard.html")
print("? 已生成 miyun_weather_dashboard.html")
七、分析總結
??通過上述可視化分析,我們可以清晰地看到7月份密云區的天氣情況,特別是暴雨的形成機制和社會影響:
- 降雨量:7月26日和27日降雨量極高,達到特大暴雨級別,這與新聞報道中的暴雨紅色預警相符合。
- 溫度:高溫和低溫的變化與降雨量有一定的相關性,高溫天氣可能加劇了暴雨的形成。
- AQI:空氣質量指數在暴雨期間有所下降,說明暴雨對空氣污染有一定的沖刷作用。
- 風向:風向的分布顯示了暴雨期間的風向變化,可能與暴雨的移動路徑有關。
7.1 社會影響
??暴雨引發了山洪、泥石流、滑坡等次生災害,給當地居民的生活和財產帶來了巨大影響。建議在暴雨期間加強預警和防范措施,減少災害損失。
7.2 防范建議
- 加強預警:及時發布暴雨預警信息,提醒居民做好防范準備。
- 加固設施:對山區和低洼地區的基礎設施進行加固,減少災害風險。
- 應急救援:建立應急救援機制,及時響應災害事件,減少人員傷亡和財產損失。
??希望這篇文章能幫助你更好地理解和分析密云區的暴雨情況。如果你有任何問題或建議,歡迎在評論區留言!🎉