用 Python 可视化分析全球火山分布,发现了这些有趣的现象
作者 | 俊欣
來源 | 關于數據分析與可視化
近日,南太平洋島國湯加發生火山噴發,有專門的專家學者分析,這可能是30年來全球規模最大的一次海底火山噴發,它引發的海嘯以及火山灰將對周邊的大氣、洋流、淡水、農業以及民眾健康等都造成不同程度的影響。
今天小編就用Python當中的folium模塊以及其他的可視化庫來對全球的火山情況做一個分析。
準備工作
和以往一樣,我們先導入需要數據分析過程當中需要用到的模塊并且讀取數據集,本次的數據集來自由kaggle網站,主要由美國著名的史密森學會整理所得
import?pandas?as?pd import?folium.plugins?as?plugins import?foliumdf_volcano?=?pd.read_csv("volcano.csv") df_volcano.head()output
數據集包含了這些個數據
df_volcano.columnsoutput
Index(['volcano_number',?'volcano_name',?'primary_volcano_type','last_eruption_year',?'country',?'region',?'subregion',?'latitude','longitude',?'elevation',?'tectonic_settings',?'evidence_category','major_rock_1',?'major_rock_2',?'major_rock_3',?'major_rock_4','major_rock_5',?'minor_rock_1',?'minor_rock_2',?'minor_rock_3','minor_rock_4',?'minor_rock_5',?'population_within_5_km','population_within_10_km',?'population_within_30_km','population_within_100_km'],dtype='object')全球火山帶的分布可視化
我們通過調用folium模塊來繪制一下全球各個火山的分布,代碼如下
volcano_map?=?folium.Map()#?將每一行火山的數據添加進來 for?i?in?range(0,?df_volcano.shape[0]):volcano?=?df_volcano.iloc[i]folium.Marker([volcano['latitude'],?volcano['longitude']],?popup=volcano['volcano_name']).add_to(volcano_map)volcano_mapoutput
上述代碼的邏輯大致來看就是先實例化一個Map()對象,然后遍歷每一行的數據,主要針對的是數據集當中的經緯度數據,并且在地圖上打上標簽,我們點擊每一個標簽都會自動彈出對應的火山的名稱
當然出來的可視化結果不怎么美觀,我們先通過簡單的直方圖來看一下全球火山的分布情況,代碼如下
fig,?(ax1,?ax2)?=?plt.subplots(1,?2,?figsize=(16,?4))volcano_country?=?pd.DataFrame(df_volcano.groupby(['country']).size()).sort_values(0,?ascending=True) volcano_country.columns?=?['Count'] volcano_country.tail(10).plot(kind='barh',?legend=False,?ax=ax1) ax1.set_title('Number?of?Volcanoes?per?Country') ax1.set_ylabel('Country') ax1.set_xlabel('Count')volcano_region?=?pd.DataFrame(df_volcano.groupby(['region']).size()).sort_values(0,?ascending=True) volcano_region.columns?=?['Count'] volcano_region.tail(10).plot(kind='barh',?legend=False,?ax=ax2) ax2.set_title('Number?of?Volcanoes?per?Region') ax2.set_ylabel('Region') ax2.set_xlabel('Count')plt.tight_layout() plt.show()output
可以看到火山主要集中在美國、印度尼西亞以及日本較多,而單從地域來看,南美以及日本、中國臺灣和印度尼西亞等地存在著較多的火山
全球火山帶的分布可視化優化
接下來我們來優化一下之前繪制的全球火山分布的地圖,調用folium模塊當中CircleMarker方法,并且設定好標記的顏色與大小
volcano_map?=?folium.Map(zoom_start=10) groups?=?folium.FeatureGroup('')#?將每一行火山的數據添加進來 for?i?in?range(0,?df_volcano.shape[0]):volcano?=?df_volcano.iloc[i]groups.add_child(folium.CircleMarker([volcano['latitude'],?volcano['longitude']],popup=volcano['volcano_name'],?radius=3,?color='blue',fill=True,?fill_color='blue',fill_opacity=0.8))volcano_map.add_child(groups) volcano_map.add_child(folium.LatLngPopup())output
地圖可視化實戰
然后我們來看一下這次火山的爆發地點,湯加共和國位于西南太平洋,屬于大洋洲,具體位置是在西經175°和南緯20°左右,
import?folium.plugins?as?plugins import?foliumm?=?folium.Map([-21.178986,?-175.198242],zoom_start=10,control_scale=True,?width='80%')moutput
第一個參數非常明顯代表的是經緯度,而zoom_start參數代表的是縮放的程度,要是我們需要進一步放大繪制的圖表,可以通過調整這個參數來實現,而width參數代表的則是最后圖表繪制出來的寬度。
在地圖上打上標記
我們也可以在繪制出來的地圖上面打上標記,例如畫個圓圈,代碼如下
m?=?folium.Map([-21.178986,?-175.198242],zoom_start=12,control_scale=True,?width='80%') folium.Circle(location?=?[-21.177986,?-175.199242],?radius?=?1500,color?=?"purple").add_to(m) moutput
或者給圈出來的區域標上顏色,代碼如下
m?=?folium.Map([-21.178986,?-175.198242],zoom_start=12,control_scale=True,?width='80%') folium.Circle(location?=?[-21.177986,?-175.199242],?radius?=?1500,color?=?"purple",?fill?=?True,?fill_color?=?"red").add_to(m) moutput
深遠影響
本次湯加火山爆發的VEI強度為5-6級,屬于本世紀以來最強等級,后面連帶引發的海嘯影響了太平洋沿岸地區。太平洋沿岸的智利、日本等國的潮位站監測到30厘米至150厘米的海嘯波,我國潮位站最大海嘯波幅在20厘米以下,短期內太平洋沿岸國際航運或受到影響,需要重點關注美豆到港情況。
而從長期來看,熱帶火山爆發或提高全球極端天氣發生概率,從而影響農作物的生長,對整個農產品的供應造成深遠的影響,而如果火山灰大面積擴散,或進一步影響全球航空業,降低運輸效率,拖累全球供應鏈。
往
期
回
顧
技術
盤一盤程序員們喜歡的數據網站
資訊
算力超越iPhone,芯片堪比Mac
技術
31個好用的Python字符串方法
資訊
游戲圈地震級消息,微軟收購動視暴雪
分享
點收藏
點點贊
點在看
總結
以上是生活随笔為你收集整理的用 Python 可视化分析全球火山分布,发现了这些有趣的现象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UIBezierPath
- 下一篇: CRC8校验分析