湯加火山噴發後,分析全球火山分佈,發現最多火山的地區在這裡!
數人之道原創文章,轉載請關注本公眾號聯絡我們
數人之道ID:datamanroad
若需要本文所有原始碼及資料集檔案,請關注『數人之道』公眾號,回覆 火山 獲取。
南太平洋島國湯加的一座海底火山,於當地時間 1 月 14 日、15 日,連續兩次劇烈噴發,爆發出大量岩漿並引發海嘯,海浪環繞地球足足兩圈,導致環太平洋多國發布海嘯預警。這次火山噴發初步評估VEI 等級為 5~6 級,或對全球航運和農業造成較大影響。
上次聽說湯加這個國家,還是在去年的東京奧運會上,體態健美的奧運男子旗手讓湯加這個國家登上了熱搜。
圖0-1:東京奧運會上的湯加旗手
我們通過幾組衛星雲圖照片,來感受一下這次湯加火山噴發的威力程度。
圖0-2:湯加火山噴發衛星動態雲圖
圖0-3:湯加火山噴發衛星動態雲圖
圖0-4:湯加火山噴發衛星雲圖捕捉畫面
這次在全球範圍內影響甚廣的火山噴發,再次引起人們對全球火山的關注。那全球火山的分佈情況到底如何?湯加這次噴發的火山具體在地圖上哪個位置?距離湯加首都多遠?下面我們用 Python 的 folium 及 pyecharts 模組結合火山資料集進行視覺化分析。
1 資料準備
從機器學習及資料科學社群平臺 Kaggle 下載由美國華盛頓史密森尼學會整理的全球火山資料集,使用 pandas 模組讀取並存儲資料集用於分析(若無法註冊或找不到資料集,可
關注公眾號『數人之道』,回覆 火山 獲取資料集檔案
)。
這次我們使用 Jupyter Notebook 進行程式碼編寫及除錯,以方便觀察分析結果。
圖1-1:讀入並存儲火山資料集
此資料集的火山資訊十分詳盡豐富,非常適合做多維度的分析研究。
2 全球火山帶分佈分析
我們準備用兩種視覺化的方式,分析全球火山帶的分佈及統計火山分佈最多的地區、國家。
使用 folium 模組的地圖,標記全球火山的位置,視覺化展示全球火山帶分佈情況;使用 pyecharts 模組的柱狀圖,視覺化統計火山在各個國家、地區的分佈數量。
2.1 地圖視覺化分析
2.1.1. 標籤式地圖示記
讀取火山資料集,迴圈遍歷每一行資料,提取其火山的經緯度及名稱資訊,作為引數傳入 folium 模組的 Marker() 方法中進行標籤式地圖示記,並將標記結果加入例項化的 Map() 物件中,以在地圖中進行視覺化展示。
【引數介紹】
folium。Marker() 的常用引數:
location:同 folium。Map() 中的同名引數,tuple 或 list 型別輸入,格式為(緯度,經度)或[緯度,經度],預設為 None,用於確定標記部件的經緯位置
popup:str 型或 folium。Popup() 物件輸入,用於控制標記部件的具體樣式(folium 內部自建了許多樣式),預設為 None,即不顯示部件;這裡設定為對應的火山名稱
icon:folium。Icon() 物件,用於設定 popup 定義的部件的具體顏色、圖示內容等
tooltip:str 型,用於標記點選前的提示,懸停在標記上不用點選即會顯示,可介紹點選標記會顯示的內容
【程式碼】
#將火山在地圖中進行標籤式標記顯示
volcano_map
=
folium
。
Map
()
foriinrange
(
0
,
len
(
tb_volcano
)):
volcano_info
=
tb_volcano
。
iloc
[
i
]
latitude
=
volcano_info
[
“latitude”
]
longitude
=
volcano_info
[
“longitude”
]
volcano_name
=
volcano_info
[
“volcano_name”
]
folium
。
Marker
([
latitude
,
longitude
],
popup
=
volcano_name
,
tooltip
=
“ClicktoseetheVolcanoName”
,
icon
=
folium
。
Icon
(
color
=
‘red’
,
icon
=
‘info-sign’
))
。
add_to
(
volcano_map
)
volcano_map
【結果】
圖2-1-1:標籤式標記火山在地圖上的位置
2.1.2. 圓圈式地圖示記
上面的 Maker() 方法輸出的標記圖形太大了,可視範圍內標記十幾個還好,但是火山資料有接近一千條,不太利於觀察。我們利用 CircleMarker() 方法,將標記改為有顏色的圈,進行標記顯示最佳化。並透過 add_child() 方法,新增點選觸發事件 LatLngPopup(),實現點選地圖任意一處均可顯示對應的經緯度資訊的子功能。
【引數介紹】
folium。CircleMarker() 的常用引數:
location:同 folium。Map() 中的 location,用於控制圓圈的圓心座標
radius:int 型,用於控制圓圈的半徑,單位為畫素;注意,在 folium。CircleMarker() 中,因為 radius 的單位是畫素,即其為螢幕上大小固定的一個圓圈,隨著地圖的縮放,其大小也不會發生變化;但在 folium。Circle() 方法中,radius 引數單位為米,所以其大小會隨著地圖的縮放程度而進行相應的變化
color:str 型,用於控制圓圈的顏色,預設為十六進位制顏色“#3388ff”,即一種藍色,可直接輸入顏色名稱
fill:bool 型,當為 True 時,圓圈內部將被填充上色彩,預設不填充
fill_color:str 型,控制圓圈內部填充的色彩,預設與 color 引數一致
fill_opacity:float 型,用於控制圓圈內部填充顏色的透明度,從 0。到 1。之間,預設為 0。2
popup:str 型或 folium。Popup() 物件,用於控制圓圈的樣式,預設為 None,即無樣式
【程式碼】
#將火山在地圖中進行圓圈式標記顯示
volcano_circle_map=folium。Map()
foriinrange(0,len(tb_volcano)):
volcano_info=tb_volcano。iloc[i]
latitude=volcano_info[“latitude”]
longitude=volcano_info[“longitude”]
volcano_name=volcano_info[“volcano_name”]
folium。CircleMarker((latitude,longitude),popup=volcano_name,tooltip=“ClicktoseetheVolcanoName”,
radius=3,color=“red”,fill=True,fill_color=“red”,fill_opacity=0。8)。add_to(volcano_circle_map)
#點選地圖顯示經緯度資訊
volcano_circle_map。add_child(folium。LatLngPopup())
volcano_circle_map
【結果】
圖2-1-2:圓圈式標記火山在地圖上的位置
比標籤式更加方便觀察了,且點選地圖任一處可以顯示其經緯度資訊。
【分析】
透過全球火山地圖示記可以看到,火山分佈最多的地區是在環太平洋火山帶上。這塊呈馬蹄狀的地區包含了地球上約 80% 的火山,以印尼、日本、俄羅斯、菲律賓以及中南美洲等地區最為密集。還有一些散佈在夏威夷、冰島、剛果、義大利等地。
2.2 柱狀圖視覺化分析
我們再從另一個視覺化角度,分析全球火山分佈情況:統計火山分佈在全球各個國家、地區的數量,並統計不同火山型別的數量。
2.2.1. 全球火山分佈數量前 20 的國家
按國家彙總火山的數量,透過柱狀圖的形式,視覺化輸出前 20 名的國家。
【程式碼】
#按國家統計火山分佈數量前20名
volcano_country=tb_volcano[“country”]。value_counts()。to_frame()
volcano_country。columns=[“count_num”]
name_country=volcano_country。head(20)。index。to_list()
value_country=volcano_country[“count_num”]。head(20)。to_list()
#資料視覺化輸出
bars_non_slider(name_country,value_country,“全球火山分佈數量(國家)前20”,“全球火山分佈數量(國家)前20”)
【結果】
圖2-2-1:全球火山分佈數量前 20個國家
【分析】
全球火山分佈數量最多的國家基本都是在太平洋上的,這與我們在地圖上看到的環太平洋火山帶佔據大部分火山的資訊吻合。
全球火山分佈數目前五位國家分別是美國、印度尼西亞、日本、俄羅斯、智利。而前十名中可以看到一個非太平洋上的國家:冰島(位於大西洋與北冰洋交匯處),且有 28 個火山之多。
2.2.2. 全球火山在各地區的分佈數量
按地區彙總火山的數量,透過柱狀圖的形式,視覺化輸出各地區的分佈情況。
【程式碼】
#按地區統計火山分佈數量前20名
volcano_region=tb_volcano[“region”]。value_counts()。to_frame()
volcano_region。columns=[“count_num”]
name_region=volcano_region。index。to_list()
value_region=volcano_region[“count_num”]。to_list()
#資料視覺化輸出
bars_non_slider(name_region,value_region,“全球火山分佈數量(地區)”,“全球火山分佈數量(地區)”)
【結果】
圖2-2-2:全球火山地區分佈數量
【分析】
全球火山分佈數量排在前列的地區基本都集中在環太平洋上,這也與我們在地圖上看到的環太平洋火山帶佔據大部分火山的資訊吻合。
全球火山分佈數目前五位地區中只有第五位不是在太平洋板塊上的,分別是南美洲,日本、中國臺灣及馬里亞納群島地區,印度尼西亞群島、墨西哥及中美洲大陸、非洲大陸及紅海(印度洋板塊)。
2.2.3. 全球各型別火山的分佈數量
按地區彙總火山的數量,透過柱狀圖的形式,視覺化輸出全球前 20 種火山型別。
【程式碼】
#按火山型別統計火山數量
volcano_type=tb_volcano[“primary_volcano_type”]。value_counts()。to_frame()
volcano_type。columns=[“count_num”]
name_type=volcano_type。head(20)。index。to_list()
value_type=volcano_type[“count_num”]。head(20)。to_list()
#資料視覺化輸出
bars_non_slider2(name_type,value_type,“全球火山種類前20”,“全球火山種類前20”)
【結果】
圖2-2-3:全球火山數量前 20種類型
【分析】
全球分佈最多的火山種類是Stratovolcanoes(層狀火山),又名 Composite(複合型火山),為多次噴發所造成,其復發週期可以是幾十萬年,也可以是幾百年;其次是Shield(盾狀火山),是具有寬闊頂面和緩坡度側翼(盾狀)的大型火山,夏威夷島(大島)就是典型的盾狀火山。
3 湯加噴發火山位置
使用 folium 模組,展示地圖上的湯加,並檢視這次噴發的火山位置及其與湯加首都的距離。
3.1 地圖上的湯加
透過查詢,獲得湯加首都努庫阿洛法的經緯度位置資訊:21°10‘41。6“ S, 175°11’55。2” W,轉換為度分秒格式:-21。178235, -175。198673。
將轉換格式後的經緯度傳入 folium 的 Map() 方法中,並放大地圖尺寸,檢視地圖上的湯加首都。
【引數介紹】
folium。Map() 的常用引數:
location:tuple 或 list 型別輸入,用於控制初始地圖中心點的座標,格式為(緯度,經度)或[緯度,經度],預設為 None
width:int 型或 str 型,int 型時,傳入的是地圖寬度的畫素值;str 型時,傳入的是地圖寬度的百分比,形式為“xx%”;預設為“100%”
height:控制地圖的高度,格式同 width
tiles:str 型,用於控制繪圖呼叫的地圖樣式,預設為“OpenStreetMap”,也有一些其他的內建地圖樣式,如“Stamen Terrain”、“Stamen Toner”、“Mapbox Bright”、“Mapbox Control Room”等;也可以傳入“None”來繪製一個沒有風格的樸素地圖,或傳入一個 URL 來使用其它的自選 osm
zoom_start:int 型,設定地圖初始展示時的縮放大小尺寸
max_zoom:int 型,控制地圖可以放大程度的上限,預設為 18
attr:str 型,當在 tiles 中使用自選 URL 內的 osm 時使用,用於給自選 osm 命名
control_scale:bool 型,控制是否在地圖上新增比例尺,預設為 False,即不新增
no_touch:bool 型,控制地圖是否禁止接受來自裝置的觸控事件譬如拖拽等,預設為 False,即不禁止
【程式碼】
#湯加首都位置
volcano_tj_map=folium。Map([-21。178235,-175。198673],width=“90%”,zoom_start=11,control_scale=True)
volcano_tj_map
【結果】
圖3-1:在地圖上顯示湯加首都
湯加首都在地圖上看,就是太平洋上一塊小小的島嶼。
3.2 本次噴發火山的位置
透過查詢,獲得本次噴發的火山所在的洪阿哈阿帕伊島(Hunga Haapai)的經緯度位置資訊:20° 32′ 34。8″ S, 174° 24′ 21。6″ W,轉換為度分秒格式:-20。543792, -174。406127。
將轉換格式後的經緯度傳入 folium 的 Circle() 方法(跟前面用到的 CircleMarker() 方法類似)中,用圓圈在地圖上標記此位置,並加入展示湯加首都的地圖中,以檢視噴發的火山與湯加首都的距離。
【程式碼】
#湯加火山噴發位置及其與湯加首都的距離展示
volcano_tj_eruption_map=folium。Map([-21。178235,-175。198673],width=“90%”,zoom_start=9,control_scale=True)
folium。Circle(location=(-20。543792,-174。406127),radius=2000,color=“blue”,fill=True,fill_color=“blue”)。add_to(volcano_tj_eruption_map)
volcano_tj_eruption_map
【結果】
圖3-2:火山噴發位置與湯加首都的距離
【分析】
在地圖上可以看到,這次噴發的火山所在的洪阿哈阿帕伊島,位於湯加首都努庫阿洛法以北約 70 公里,湯加哈派群島以南約 30 公里。這座島嶼本身也是一個海底火山,該火山非常活躍,最高海拔 149 米(489 英尺),火山口曾在 2009 年爆發過,且在去年的 12 月也有小規模爆發。
4 湯加火山噴發前後對比
透過紐西蘭的飛機航拍及聯合國的衛星照,對比火山噴發前後的湯加,看看這次火山噴發對湯加造成的觸目驚心的影響。
圖4-1:火山噴發前(BEFORE)
圖4-2:火山噴發後(AFTER)
圖4-3:火山噴發前後對比
圖4-4:火山噴發前後對比
圖4-5:火山噴發前(BEFORE)
圖4-6:火山噴發後(AFTER)
圖4-7:火山噴發前(BEFORE)
圖4-8:火山噴發後(AFTER)
圖4-9:火山噴發前(BEFORE)
圖4-10:火山噴發後(AFTER)
圖4-11:火山噴發前(BEFORE)
圖4-12:火山噴發後(AFTER)
火山噴發所在的洪阿哈阿帕伊島已經整個沉入海面以下;湯加大部分島嶼海岸邊緣的房屋及建築物、植被等都覆蓋上了厚厚的火山灰,部分建築物垮塌甚至直接消失不見;塔布島的機場跑道也被火山灰侵襲,導致所有飛機航班無法降落。
5 結語
截至目前為止,湯加火山噴發產生的火山灰和氣體已進入 20 公里以上的平流層,可能形成陽傘效應,但較之 1991 年菲律賓皮納圖博火山大爆發,這次二氧化硫釋放的量小了很多,暫時還不足以對氣候產生巨大的影響。
與此同時,沉睡了 300 年的日本富士山,其岩漿正在積蓄力量,一旦噴發,只需要兩個小時,火山灰就可以抵達東京上空。
無論萬里之遙的湯加火山灰是否會飄落到你我身邊,不再沉默的火山,似乎正在提醒我們:
地球,是人類唯一的家園,面對火山這樣強大的自然力量,沒有人可以真的獨善其身!
★★★★★
實踐資料技術,探索資料思維,關注資料行業前沿資訊,資料人之道。關注『數人之道』公眾號,發掘更多精彩的【資料分析】相關文章。