知識一:使用 Python 診斷北極和氣候異常的關係

來源:Taiwan Code School 編輯:Louis、凱琳 建議:少涵、冠樺 時間:2018/09/19 版本:Python3

科普小教室

海平面真的會上升嗎 ? 為什麼每次去海邊都一樣?

我們使用 NASA 的數據,並經由 Python 的分析,觀察海平面上升的嚴重性。藉由 5 大數據分別分析出:「北極海冰逐年減少的問題,以及海平面上升問題」。

透過北極 & 溫度異常的數據,觀察氣溫的逐年攀升,是否會導致北極海冰範圍減少。使用南極 & 格陵蘭 & 海平面上升的數據,看出逐年減少的冰層是否有影養到海平面上升。

文章的最後,我們同時來比對五大數據,觀察氣溫異常與北極海冰、南極和格陵蘭的冰層範圍減少之關聯性,以及南極和格陵蘭的冰層減少是否會導致海平面的上升。

數據來源:Global climate change Vital Signs of the Planet.(數據經過 Taiwan Code School 團隊優化整理) Credit: NASA

發燒原因一:北極海冰減少問題

科普小教室

一直以來,我們從教科書上熟知南極是大陸,一整年都為厚厚的冰雪所覆蓋。南極大陸 95% 以上的面積為厚度極高的冰雪所覆蓋。

而北極呢 ? 北極冬天時海水會結冰,我們稱之為北極海冰,堆積約近四公尺厚; 在冰下有零度以上的溫暖海水。

北極海冰和氣候變遷是習習相關的,北極海冰本身對氣候變化非常敏感,溫度升高海冰減少,而海冰減少亦會造成溫度持續增加。

我們透過北極海冰範圍之數據來驗證是否真有其事。

北極海冰範圍分析

北極熊廣泛地生活在俄羅斯、挪威、格陵蘭、加拿大以及阿拉斯加的部分地區,我們都稱為北極地區,以前能夠在這些地方找到些北極熊的蹤跡,而如今卻越來越少了。

北極熊擅長遠距離游泳,也能夠在大型的海冰上找尋海豹,卻無法長時間泡在海裡捕獵,因此北極熊還是得仰賴海冰的存在,才得以捕到海豹、生存下去。

準備套件

第一件要做的就是 import pandas (匯入pandas套件)。

不想每一次都打pandas這麼長,可以給他一個小名叫做 pd,這樣子要呼叫小熊貓時,只需要叫他的小名pd就可以了。

In [1]:
import pandas as pd

抓取資料

北極是全球氣候變遷關鍵的因素之一,我們先從北極海冰範圍開始分析。

北極海冰範圍分析資料: 我們把數據路徑放到 link_data_Arctic 裡面,讓我們可以讓 Python 知道數據在哪裡。

In [2]:
link_data_Arctic = "/Users/louishan/Desktop/nasa/Arctic-Sea-Ice-Minimum.csv"
  • 此處我們將讀出來的資料給他一個變數名稱,叫做 link_data_Arctic 讓我們方便使用。

read_csv 功能簡顯易懂,就是讓我們可以讀取 csv 資料的功能,我們把 link_data_Arctic 放入到 read_csv 裡面,讓 python 可以抓取資料

In [3]:
data_Arctic = pd.read_csv(link_data_Arctic, parse_dates=True)
Year_Arctic = data_Arctic["YR"]
Arctic = data_Arctic["ICE EXTENT"]
Arctic.head()
Out[3]:
0    6998892.433
1    7862302.527
2    7203627.698
3    7342438.729
4    7537161.907
Name: ICE EXTENT, dtype: float64

我們分別抓出了 Year_Arctic 時間和 Arctic 北極海冰數據

讓我們使用 Arctic.head() 來看看 Python 有沒有成功讀到我們的北極海冰數據。

顯示資料

matplotlib 是幫助我們顯示資料出來的強大套件,透過 matplotlib 裡面的 pyplot 功能,可以讓我們看出北極的數據。

準備繪圖套件

In [4]:
from matplotlib import pyplot as plt
  • 我們一樣給他一個小名叫做 plt 方便我們使用這個功能。

style 是 matplotlib 的 free style ,可以透過它來去選擇較清楚的背景。

In [5]:
from matplotlib import style

小技巧

matplotlib 有些小問題,就是無法顯示中文的 title,所以為了避免這個問題,我們使用這行程式告訴 Python 我們想要顯示中文。

In [6]:
plt.rcParams['font.sans-serif'] = ['SimHei']

我們讓顯示出來的數據可以更大更清楚,所以使用了 15 比 8 的尺寸。

In [7]:
from pylab import rcParams
rcParams['figure.figsize'] = 15, 8

背景的 style 則是 'ggplot' 是讓背景可以更亮和更清楚的背景。

In [8]:
style.use('ggplot')

顯示數據

接下來我們先簡單透過 plt 的 plot 功能把抓取到的北極海冰範圍資料顯示出來。

In [9]:
plt.plot(Year_Arctic, Arctic)
Out[9]:
[<matplotlib.lines.Line2D at 0x10a29c6d8>]

北極海冰範圍在增加或減少?

透過趨勢線分析 38 年來北極海冰範圍 (1979 - 2017)

準備套件

我們使用 numpy 這個算數套件來讓我們可以算出之後所有數據的一個趨勢。

In [10]:
import numpy as np

分析趨勢線

北極海冰在每年 9 月期間會達到最低點,為了讓我們方便看出 38 年來北極冰海範圍的走勢,我們使用了 polyfit 功能算出趨勢線。

In [11]:
get_Arctic_data = np.polyfit(Year_Arctic, Arctic, 2) #北極冰海年份和數據放入 polyfit 功能 
Analysis_Arctic = np.poly1d(get_Arctic_data) #產生出線性方程式
Trendline_Arctic = Analysis_Arctic(Year_Arctic) #趨勢線

顯示數據

我們使用 plot 功能讓趨勢線和海冰範圍能夠在數據圖裡面呈現出來,並標註 title 和每條線代表的說明。

In [12]:
plt.plot(Year_Arctic, Trendline_Arctic, linestyle='--',linewidth= 4, label='趨勢線')
plt.plot(Year_Arctic, Arctic, linestyle='-', marker='o', label='海冰範圍')
plt.title('38 年北極海冰範圍 & 趨勢線 (1979 - 2017)')
plt.xlabel('年')
plt.ylabel('百萬平方公里')
plt.legend()
Out[12]:
<matplotlib.legend.Legend at 0x10a5a0b38>

科普小教室

海冰的減少也會對北極的生態造成威脅,產生重大的環境問題,影響大型哺乳動物的生存環境,如北極熊可能由於海冰退縮失去賴以生存和捕食的場所。

異常溫度分析

抓取資料

In [13]:
link_data_Temperature = "/Users/louishan/Desktop/nasa/Global-Temperature.csv"
  • 此處我們將讀出來的資料給他一個變數名稱,叫做 link_data_Temperature 讓我們方便使用。

我們把 link_data_Temperature 放入到 read_csv 裡面,讓 Python 可以抓取資料。

In [14]:
data_Temperature = pd.read_csv(link_data_Temperature, parse_dates=True)
Year_Temperature = data_Temperature["YR"]
Temperature = data_Temperature["Temperature"]
Temperature.head()
Out[14]:
0    0.16
1    0.27
2    0.33
3    0.13
4    0.31
Name: Temperature, dtype: float64

顯示數#25818;

使用 plot 功能把抓取到的異常溫度資料顯示出來。

In [15]:
plt.plot(Year_Temperature, Temperature)
Out[15]:
[<matplotlib.lines.Line2D at 0x10a7bdeb8>]

分析趨勢線

為了讓我們方便看出 38 年來正負溫度異常範圍的走勢,我們使用了 polyfit 功能算出趨勢線。

In [16]:
get_Temperature_data = np.polyfit(Year_Temperature, Temperature, 2) #氣溫異常年份和數據放入 polyfit 功能 
Analysis_Temperature = np.poly1d(get_Temperature_data) #產生出線性方程式
Trendline_Temperature = Analysis_Temperature(Year_Temperature) #趨勢線

顯示數據

我們使用 plot 功能讓趨勢線和正負溫度異常範圍能夠在數據圖裡面呈現出來,並標註 title。

legend() 是負責顯示每條線代表意義的小框框。

In [17]:
plt.plot(Year_Temperature, Trendline_Temperature, linestyle='--',linewidth= 4, label='趨勢線')
plt.plot(Year_Temperature, Temperature, linestyle='-', label='溫度異常(C)')
plt.title('38 年正負溫度異常 & 趨勢線 (1979 - 2017)')
plt.xlabel('年')
plt.ylabel('溫度異常(C)')
plt.legend()
Out[17]:
<matplotlib.legend.Legend at 0x10ab5e828>

診斷:觀察北極海冰 & 溫度異常圖

顯示數據

為了可以讓我們同時分析出北極海冰和溫度異常圖的數據,我們使用了 plt.figure() 裡面的 add_subplot() 功能,告訴 python 說我要一個大畫布,有兩個東西要顯示,分別顯示在左邊和右邊。

left 和 right 變數簡顯易懂,在我們要 plot 出左邊的圖時,就使用 left 變數,right 變數則是讓我們可以顯示圖在右邊。

legend() 是負責顯示每條線代表意義的小框框,告訴 legend() 左右兩邊的圖裡都要顯示框框。

In [18]:
fig = plt.figure()
left = fig.add_subplot(121)
right = fig.add_subplot(122)

left.plot(Year_Arctic, Trendline_Arctic, linestyle='--',linewidth= 4, label='趨勢線')
left.plot(Year_Arctic, Arctic, linestyle='-', marker='o', label='海冰範圍')
left.legend()

right.plot(Year_Temperature, Trendline_Temperature, linestyle='--',linewidth= 4, label='趨勢線')
right.plot(Year_Temperature, Temperature, linestyle='-', label='溫度異常(C)')

right.legend()
Out[18]:
<matplotlib.legend.Legend at 0x10add15f8>

科普小教室

海冰範圍加速縮小,不只影響到北極熊的生存權利,也同時加速了全球暖化和氣候變遷的影響。由於海冰通過自身吸收太陽輻射和熱能,它的存在使得高緯地區夏天不會過熱,而冬天也不會過份地太冷。

從數據中可看出,氣溫升高使得北極海冰的範圍逐年縮小,從 2010 來,整體的趨勢也再擴大當中。海冰反射太陽輻射的能力減弱,上層海冰吸收了更多的熱能,導致北極氣候以全球水準約兩倍的速度變暖。

這會讓氣候變遷更加嚴峻,北極的增溫,會有更多極端氣候出現在各個地區,如大量降雪、熱浪、洪水。

下篇,將要進入到知識二:海平面上升問題。地球發燒不只變熱,還會淹沒你我的家園,我們使用 Python 分析了南極 & 格陵蘭和海平面上升的數據,透過理性的分析,診斷出海平面上升是真還是假。