import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import xarray as xr
from pandas.plotting import register_matplotlib_converters #これを描かないと警告文がでる(オマジナイ)
register_matplotlib_converters()
file = "data/radiosonde_tropical_eastward_wind_195301-202509.nc"
# --> "data/dd/radiosonde_tropical_eastward_wind_195301-202509.nc" に変更
data_org = xr.open_dataset(file)["u"].sel(time=slice("1960","2018"),pressure=[70,50,40,30,20,15,10])
print(data_org)
time = data_org["time"]
pressure = data_org["pressure"]
time_v = time.values
pressure_v = pressure.values
data_org_v = data_org.values
# 後々のために、データ行列(数値配列)にしておく。
# サンプル描画 その1:ラインプロット
fig = plt.figure(figsize=(10,4))
ax = fig.add_subplot(111)
ax.plot(time_v,data_org_v[:,0],label='Original') # "0"なので、pressure levelの最初の層である 70 hPa面
ax.legend()
plt.show()
# サンプル描画 その2:時間ー高度断面
fig = plt.figure(figsize=(10,4))
ax = fig.add_subplot(111)
clb = ax.contourf(time_v,pressure,data_org_v.T)
# 横軸が時刻、縦軸が気圧になるように、データは転置している(.T)
ax.set_yscale('log'); ax.invert_yaxis()
ax.set_xlabel('Date'); ax.set_ylabel("Pressure [hPa]")
plt.colorbar(clb)
plt.show()
色々やり方はあるが、各月でコンポジットを取って月平均の東西風(の高度分布)を算出し、オリジナルデータから差し引くのが簡単。
「月」の情報はmonth = data["time"].dt.monthなどとすれば得られます。
(4) 行列の積を計算する際に、縦ベクトルと横ベクトルを区別したいときがある。uを大きさnの配列とすると:
uh = np.reshape(u, (1,n)):横ベクトルにするuv = np.reshape(u, (n,1)):縦ベクトルにする(3): PC1 (横軸)➖ PC2(縦軸)の散布図
ax.scatter(x,y,....)(4): 横軸:時刻(x)、縦軸(y):気圧座標として、東西風速(z)をコンター表示
ax.contourf(x,y,z) (z = z(y, x))(5:発展): 横軸: 緯度(x)、縦軸(y):気圧座標として、回帰係数をコンター表示
月平均東西風データはdata/ncep.reanalysis.derived/pressure/uwnd.mon.mean.ncを使用。
以下、データの読み込み例(の一部)を示す:
file = "Fortran/data/uwnd.mon.mean.nc"
#月平均東西風データを指定
#"data/ncep.reanalysis.derived/pressure/"以下に変更
data = xr.open_dataset(file)
print(data)
uwnd = data['uwnd'].sel(time=slice('1960-01','2018-12')).mean(dim='lon')
plevel = uwnd['level']
lat = uwnd['lat']
time = uwnd['time']
1を超えるのは、おそらくインデックスが直交しているとは限らないから(12月で指定しているため)