寒暖の差大きく、大雪も 12~2月、気象庁まとめ (日経新聞)
気象庁は1日、この冬(昨年12月~今年2月)の天候まとめを発表した。3カ月間の平均気温は全国的に高めとなったものの、暖冬をもたらす「エルニーニョ現象」と北極域の気圧が高くなる「北極振動」の影響で、例年以上に寒暖の差が大きくなった。
気象庁によると、今冬はエルニーニョ現象の影響で西高東低の冬型の気圧配置が長続きせず、平均気温は西日本で平年より1.0度、東日本で0.9度、北日本と沖縄・奄美は0.6度高くなった。
季節外れの暖かさとなったのは1月下旬と2月下旬で、2月25日には全国約160カ所で、2月の最高気温の記録を更新した。(01日 19:53)
エルニーニョを話題とする。エルニーニョを監視するために、東太平洋のエルニーニョ監視領域の海面温度がよく使われる。
エルニーニョ監視領域
エルニーニョ監視領域の温度とその平年値からの偏差(anomaly)のデータは
NOAAのclimate predictionセンターから手に入る。
ここの情報によれば、平年値は1971年から2000年までの平均で定義される。
以下は、これらのエルニーニョ監視領域の絶対値と偏差をネットから取得するモジュールと、4つの監視領域の偏差をデータ全期間もしくは過去48ヶ月分プロットするプログラムである。今回は正で赤、負で青で塗り分けるために、matplotlibの
fill_betweenを使った。
NINO_all.png
NINO_48months.png
read_NINO.py
import numpy as np
import scikits.timeseries as ts
def read_NINO():
"""
output output NINO index data
data souce is http://www.cpc.ncep.noaa.gov/data/indices/sstoi.indices
Explanation is http://www.cpc.ncep.noaa.gov/data/indices/
usage: from read_NINO import read_NINO
data=read_NINO()
outputs are
data["NINO1+2"] : NINO1+2
data["NINO1+2 ANOM"]: NINO1+2 ANOMARY
data["NINO3"] : NINO3
data["NINO3 ANOM"] : NINO3 ANOMALY
data["NINO4"] : NINO4
data["NINO4 ANOM"] : NINO4 ANOMALY
data["NINO3.4"] : NINO3.4
data["NINO3.4 ANOM"]: NINO3.4 ANOMALY
"""
ninodata={}
names=('YEAR','MONTH','NINO1+2','NINO1+2 ANOM','NINO3','NINO3 ANOM','NINO4','NINO4 ANOM','NINO3.4','NINO3.4 ANOM')
ds = np.DataSource(None)
f=ds.open('http://www.cpc.ncep.noaa.gov/data/indices/sstoi.indices')
data=np.loadtxt(f,skiprows=1,\
dtype={'formats':('i4','i4','f4','f4','f4','f4','f4','f4','f4','f4'),\
'names': names})
firstday=ts.Date(freq='M',year=data['YEAR'][0],month=data['MONTH'][0])
for n in names[2:]:
ninodata[n]=ts.time_series(data[n],start_date=firstday,freq='M')
return ninodata
#######################################################################
if __name__ == '__main__':
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
data=read_NINO()
#plot
for nt in range(2):
temp=data['NINO3'].dates # dummy to get dates of time series
if nt==0: # all data
t=ts.date_array(start_date=temp[0],end_date=temp[-1])
figname="NINO_all.png"
else: # last 48 months
t=ts.date_array(start_date=temp[-1]-47,end_date=temp[-1])
figname="NINO_48months.png"
fig=plt.figure()
names=('NINO1+2 ANOM','NINO3 ANOM','NINO4 ANOM','NINO3.4 ANOM')
for n,name in enumerate(names):
x=(data[name])[t].dates.tolist()
y=(data[name])[t].series
ax=fig.add_subplot(len(names),1,n+1)
ax.plot(x,y,'k-')
ax.fill_between(x,y1=y,y2=0,facecolor='red',where=y>=0) #positive red
ax.fill_between(x,y1=y,y2=0,facecolor='blue',where=y<=0) #positive red
if (nt==0): # axis for all data
years = mdates.YearLocator(5) #major tick every 5 years
ax.xaxis.set_major_locator(years)
else: # axis for latst 48 months
years = mdates.YearLocator(1) #major tick every 1 year
ax.xaxis.set_major_locator(years)
months = mdates.MonthLocator() # minor tick every month
ax.xaxis.set_minor_locator(months)
plt.title(name) #tile
plt.subplots_adjust(hspace=0.5) #adjust subplot scape
plt.savefig(figname)
plt.show()