2014年11月20日木曜日

Wavelet解析



Torrence and Compo [1998]  のwavelet解析手法と、そのツールは我々の分野でよく使われる。私もMiyama and Miyazawa [2014]をで使用している。その関連した発表をAOGS 2014でした時に、Torrence and Compo [1998] はスケールが大きいほうを過大評価するバイアスがあり、それに関する論文(Liu et al. 2007関連するweb page)を教えていただいた。

下の図はLiu et al. 2007のFig.2に対応する、1,8,32,128,365日のsineカーブの単純な重ね合わせ(a)のシグナルにwavelet解析をかけたものである。Torrence and Compo [1998] の手法(b,c)ではスケールが大きい(長周期)のほうがシグナルが大きいと解析されてしまう。一方、Liu et al. [2007]はスペクトルをスケールで割ることを提案しており、これであれば(d,e)、各周期が同じくらいの強さであるという合理的な結果が出る。





上記の図を作るwavelet解析のツールをpythonに翻訳し、IPython Notebookにしたものはこちら。
http://nbviewer.jupyter.org/urls/dl.dropbox.com/s/u0wb931fs4qfrpn/wavelet_test_sine.ipynb

さらに、NINO SST3のwavelet解析した(Liu et al. 2007のFig 4に対応)物をIPython Notebookしたものはこちら。
http://nbviewer.jupyter.org/urls/dl.dropbox.com/s/400j051n0sustcy/wavelet_test_ElNino3_Liu.ipynb





2014年11月11日火曜日

Surface velocity data of MOVE/MRI.com at NEAR-GOOS RRTDB



NEAR-GOOSのRegional Real Time Databaseのサイトは、最近更新されて、データのダウンロードがregistration無しでダウンロードできるようになった(自動ダウンロードを行うにはregistrationが必要)。

ここでは、その中から、気象庁(JMA)のDaily Surface Currents in the seas adjacent to Japanをプロットして見る。

2014年11月6日のデータ "move_subc_jpn_D20141106.txt"をダウンロードして置き、CartopyでプロットするIPython Notebookはこちら。
https://www.dropbox.com/s/bpow09n6x4rm9sy/MOVE_velocity.ipynb?dl=0





2014年10月30日木曜日

Colors (diverging data)



前回はsequential data用のカラーマップについてテストしたが、今回は正負のアノマリなどをプロットする diverging カラーマップについてテストした。

ipython notebookはこちら
http://nbviewer.ipython.org/urls/dl.dropbox.com/s/t8um9tdmauu8qpv/divergent_color.ipynb?dl=0

テストデータのしてはNOAA OISST version 2の海面温度アノマリを使った。データ読み込みとプロットにはIrisを使った。

Irisはイギリスのソフトのためか、日付変更線をまたぐ場合には少し癖があり、そのデモでもある。



2014年10月28日火曜日

Colors (sequential data)



最近、カラーマップに関する考察をいくつか読んだ。

いずれも"rainbow"(またの名を"jet")と呼ばれるカラーマップの弊害を述べている。

それに対する代替はいくつか提案されている。

以下のipython notebookでは、それらを試してみた。
http://nbviewer.ipython.org/urls/dl.dropbox.com/s/5t9jrhr7va3wscj/colors.ipynb?dl=0

データはGHRSST OSTIA SSTという海面温度で、2014年10月15日の117-150E, 17-40Nの範囲をIRISを使ってIPRC APDRCから読み込み、プロットさせている。

下は"cube1"と呼ばれるカラーマップでプロットした例。

ちなみに、この日の海面温度には台風19号と台風20号の通過に伴い、海水の低下した場所が見られる。


Reference
Kuroshio Oyashio Watch 2014/10/20



2014年10月26日日曜日

等値線の位置を求める



Qiu and Chen (2005)などでは、海面高度データのある等値線の位置を黒潮続流の位置とし、Decadal Variationの議論している。

等値線の位置を決めるのは、渦などの紛らわしい等値線があり、目でみていちいち確認しないで自動的に欲しい等値線の位置を決めるのは難しい。

ここでは、図作成ソフトmatplotlibのcontourルチーンから情報を取り出して、等値線の位置を決める工夫をする。

参考にしたのはstackoverflowの


ipythonノートブックは

http://nbviewer.ipython.org/urls/dl.dropbox.com/s/qt804lsufj4whyx/Kuroshio_extension_path.ipynb?dl=0

Step1 力学高度のデータをferretを使い、読み込み、図示する

データはAVISOの絶対力学高度の2009年1月21日のデータを用いる。データはAVISOからダウンロードしておく。
データの読み込みと図示には、前回紹介したferret magicを使う。



このデータでは、0.8mの等値線が黒潮続流位置としてはよさそうである。本当はheat fluxによるsteric heightの変動を考慮にいれないとならないが(Qiu and Chen, 2005)、ここではその手順は省略。
Qiu and Chen (2005)では東経141から153度のデータで議論しているので、その範囲だけ抜き出しておく。
等値線は、渦や蛇行のなどのため等値線が4つあるが、黒潮続流にあたる本来欲しい線(東西にのびる線)だけを取り出すのが課題である。


Step 2 Ferretからpythonにデータを読み込む

matlabの機能を使うために、ferretからpythonへとデータを読み込む。これもferret magicを用いる。データがちゃんと読めているかを確認もしておく。

Step 3 等値線の位置を求める

matlabのcontour routineの機能を使って、等値線の位置を求める。等値線の位置は4つ求まっている。

Step 4 等値線の位置情報から、もっとも長い等値線を選ぶ。

等値線の位置が数値的に求まったので、この中から、欲しいpathだけを選ぶ。最も長いpathが黒潮続流にあたる欲しいpathだと考えられる(渦などを避けるために、始点と終点がもっとも離れているpathという条件でも良いかもしれない。)。

まず、pathの長さを求める関数を作成する。
get_distance は2点間の距離を km で求める関数。
get_pathlength はget_distanceを用いてpath位置の情報の配列からpathの長さを求める関数。

上の4つのpathの長さを求め、path #2が最も長いことがわかる(約1432km)。
path #= 0 length= 415.785621835 km
path #= 1 length= 527.959783762 km
path #= 2 length= 1432.08536051 km
path #= 3 length= 563.215908518 km
これが、求めるpathである。


Reference:
Qiu, B., and S. Chen, 2005: Variability of the Kuroshio Extension Jet, Recirculation Gyre, and Mesoscale Eddies on Decadal Time Scales. Journal of Physical Oceanography, 35, 2090-2103. doi:10.1175/JPO2807.1





2014年10月18日土曜日

pyferret, ipython ferret magic



pyferretは、大気海洋分野のお絵描きソフトferretの、pythonとの結合を深めたバージョンである。

さらにipython-ferretmagicipythonの中でferretを使うのを可能にしてくれる。

サンプルのノートブックはこちら。
http://nbviewer.ipython.org/urls/dl.dropbox.com/s/avefneoyxdxf7ov/ferret_magic_example.ipynb?dl=0

この中で、Levitusのデータを読み込んで、9月の温度26度の等温線を求めてプロットしている。
ferretからpythonにデータを読み込むことも可能である。






2014年9月6日土曜日

surface drifter




NOAA, Atlantic Oceanographic and Meteorological Laboratory (AOML)のGlobal Drifter Program (GDP), Drifter Data Assembly Center (DAC)には表層漂流ブイのアーカイブがある。このデータを読み込んで図示してみる。

サイトからftpでデータをあらかじめダウンロードしておく。このうち、buoydata_10001_mar14.dat (ブイ1万個目以降から2014年3月までのデータ)を例として扱う。

IPython Notebookはこちら。
http://nbviewer.ipython.org/urls/dl.dropbox.com/s/uzv1bktgazcf821/Test_buoys.ipynb?dl=0

まず、pandasでデータを読み込む。データが多量なので、読み込むまで時間がかかるかもしれない。

データ(data)の内で、一部に緯度が北緯25から45度、東経120から160度が含まれるデータを選びだす(selecteddata)。そのうちで、ユニークなid番号を持つもののは851個ある。

あらためて、もとのデータ(data)から、そのid番号を持つデータを抜き出し(wanteddata)、pickle形式で保存する。

次に、そのデータの中から、例として最初の10個だけcartopyを用いてプロットした。



参考文献




2014年8月7日木曜日

IrisとETOPO1



Irisはイギリスで開発されているpythonベースの気象・海洋データ解析パッケージである。

Irisを使って地形データETOPO1を読み込んで、プロットしたり、補間してみた。

ETOPO1は1/60°の海底地形で、NOAA NGDCのサイトからETOPO1 Bedrock(氷無しの地形)、cell-registered(グリッドセルの位置で定義される)の中から、netcdfファイル ETOPO1_Bed_c_gmt4.grdをダウンロードした。

IPython Notebookはこちらである。
http://nbviewer.ipython.org/urls/dl.dropbox.com/s/67khdbgzc2bf0sp/Read_ETOPO1.ipynb

下の図はプロットの一例。

2014年6月14日土曜日

PDO index



Pacific Decadal Oscillation (PDO) index をJISAOのPDOページからデータを取得し、ある月から最新のデータまで、時系列をプロットする。

ipython notobookはこちら
http://nbviewer.ipython.org/urls/dl.dropbox.com/s/y1lol5bl7h4xqdi/PDO.ipynb


2014年2月11日火曜日

bokehを使って、串本浦神の潮位差をプロット



串本と浦神の潮位差のデータをbokehを使ってプロットしてみる。bokehはpythonのプロットライブラリの一つで、ズームなどが可能なインタラクティブなプロットをweb上につくることができる。(bokehは日本語のボケから来てるらしい。何故そんな名前にしたんだか。)

ipython notebookはこちら。
http://nbviewer.ipython.org/urls/dl.dropbox.com/s/rry6nt3xs49o6s6/KushimotoUragami.ipynb

ズームなどができるのを確認してみてください。

データは以前のようにpandasで読み込んでいる。
daily dataの黒線で、30日の移動平均を赤線でプロットしている。ここでの30日平均は基準日を中心とした30日平均ではなく、基準日をさかのぼっての30日平均であることに注意。