Init MJO script master origin/HEAD origin/master
authorEthan Nelson <git@ethan-nelson.com>
Mon, 9 Oct 2017 03:45:00 +0000 (22:45 -0500)
committerEthan Nelson <git@ethan-nelson.com>
Fri, 3 Nov 2017 19:11:23 +0000 (14:11 -0500)
LICENSE [new file with mode: 0644]
README.md [new file with mode: 0644]
mjo_indices.py [new file with mode: 0644]

diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..af4c2a4
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Ethan Nelson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..14639f4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,29 @@
+MJO Indices Script
+==================
+
+This Python script retrieves and parses [Madden-Julian Oscillation](https://en.wikipedia.org/wiki/Madden%E2%80%93Julian_oscillation) [Wheeler-Hendon Index](http://journals.ametsoc.org/doi/abs/10.1175/1520-0493%282004%29132%3C1917%3AAARMMI%3E2.0.CO%3B2) values from the Australian [Bureau of Meteorology (BOM)](http://www.bom.gov.au/).
+
+Functions
+---------
+
+### `load_indices()`
+
+This is a meta-function that runs all functions in the script: retrieving, parsing, and extracting indices from the BOM site.
+
+The output is a two-dimensional matrix with each row containing the year, julian day, phase, and amplitude.
+
+### `_retrieve()`
+
+This function fetches the indices file from the BOM and returns its text.
+
+### `_parse(data)`
+
+This function takes the text output from `_retrieve()`, removes the header information, and parses the data.
+
+The output is a two-dimensional matrix with each row containing the year, month, day, first EOF magnitude, second EOF magnitude, phase, amplitude, and note for each day. Missing values are set to 999.
+
+### `_extract(data)`
+
+This function takes the output from `_parse()` and returns only certain information.
+
+The output is a two-dimensional matrix with each row containing the year, julian day, phase, and amplitude.
diff --git a/mjo_indices.py b/mjo_indices.py
new file mode 100644 (file)
index 0000000..0f5fd93
--- /dev/null
@@ -0,0 +1,36 @@
+import datetime as dt
+import numpy as np
+import urllib2
+
+URL = 'http://www.bom.gov.au/climate/mjo/graphics/rmm.74toRealtime.txt'
+
+def _retrieve():
+    resp = urllib2.urlopen(URL)
+    data = resp.read()
+
+    return data
+
+
+def _parse(data):
+    d1 = data.split('\n')
+    d2 = []
+    for row in d1:
+        d2.append(row.split())
+    return d2[2:-1]
+
+
+def _extract(data):
+    # Columns are year, month, day, rmm1, rmm2, phase, amplitude, note. Missing values are 999 in phase.
+    out = np.zeros([len(data), 4])
+    for ir,row in enumerate(data):
+        t = dt.datetime(int(row[0]), int(row[1]), int(row[2]))
+        out[ir,:] = int(row[0]), t.timetuple().tm_yday, int(row[5]), float(row[6])
+    return out
+
+
+def load_indices():
+    a = _retrieve()
+    b = _parse(a)
+    c = _extract(b)
+
+    return c