{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Here I download and preprocess current data\n", "\n", "\n", "see\n", "- from https://catalogue-imos.aodn.org.au/geonetwork/srv/api/records/ae86e2f5-eaaf-459e-a405-e654d85adb9c\n", "- http://thredds.aodn.org.au/thredds/catalog/IMOS/ANMN/WA/WATR20/Velocity/catalog.html" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2020-10-26T03:39:41.682896Z", "start_time": "2020-10-26T03:39:40.104951Z" } }, "outputs": [], "source": [ "from pathlib import Path\n", "import xarray as xr\n", "import pandas as pd\n", "import numpy as np\n", "from urllib import request\n", "import os, shutil\n", "from matplotlib import pyplot as plt" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2020-10-25T07:01:29.004548Z", "start_time": "2020-10-25T07:01:29.001734Z" } }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2020-10-26T03:39:42.553735Z", "start_time": "2020-10-26T03:39:41.685439Z" } }, "outputs": [], "source": [ "from torchvision.datasets.utils import download_url, extract_archive, download_and_extract_archive" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2020-10-26T03:39:42.560919Z", "start_time": "2020-10-26T03:39:42.556898Z" } }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import uptide\n", "\n", "# https://en.wikipedia.org/wiki/Theory_of_tides#Harmonic_analysis\n", "default_tidal_constituents = [\n", " 'M2', 'S2', 'N2', 'K2', # Semi-diurnal\n", " 'K1', 'O1', 'P1', 'Q1', # Diurnal\n", " 'M4', 'M6', 'S4', 'MK3', # Short period\n", " 'MM', 'SSA', 'SA' # Long period\n", " ]\n", "\n", "def generate_tidal_periods(t:pd.Series, constituents:list=default_tidal_constituents):\n", " tide = uptide.Tides(constituents)\n", " t0 = t[0]\n", " td = t-t0\n", " td = td.dt.total_seconds().to_numpy().astype(int)\n", " tide.set_initial_time(t0)\n", "\n", " # calc tides\n", " amplitudes=np.ones_like(td)\n", " phases=np.zeros_like(td)\n", " eta = {}\n", " for name, f, amplitude, omega, phase, phi, u in zip(tide.constituents, tide.f, amplitudes, tide.omega,\n", " phases, tide.phi, tide.u):\n", " eta[name] = f*amplitude*np.cos(omega*td-phase+phi+u)\n", " df_eta = pd.DataFrame(eta, index=t)\n", " return df_eta" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "ExecuteTime": { "end_time": "2020-10-26T03:59:16.671092Z", "start_time": "2020-10-26T03:59:16.655680Z" }, "scrolled": true }, "outputs": [], "source": [ "# 'ANMN Two Rocks, WA, 204m mooring, Jul2009 - Dec2009. Preprocessed with DepthPP.'\n", "\n", "def get_current_timeseries(\n", " cache_folder=Path(\"../data/raw/IMOS_ANMN/\"), \n", " outfile=Path('../data/processed/currents/MOS_ANMN-WA_AETVZ_WATR20_FV01_WATR20-1909-Continental-194_currents.nc')\n", " ):\n", " if not outfile.exists():\n", "\n", " files = [\n", " \"IMOS_ANMN-WA_AETVZ_20090715T080000Z_WATR20_FV01_WATR20-0907-Continental-194_END-20090716T181317Z_C-20191122T052830Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20100409T080000Z_WATR20_FV01_WATR20-1004-Continental-194_END-20100430T084500Z_C-20191122T053845Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20101222T080000Z_WATR20_FV01_WATR20-1012-Continental-194_END-20110518T051500Z_C-20200916T020035Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20110608T080000Z_WATR20_FV01_WATR20-1106-Continental-194_END-20111122T035000Z_C-20200916T025619Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20111221T060300Z_WATR20_FV01_WATR20-1112-Continental-194_END-20120704T050500Z_C-20200916T043212Z.nc\", \n", " \"IMOS_ANMN-WA_AETVZ_20120726T044000Z_WATR20_FV01_WATR20-1207-Continental-194_END-20130204T044000Z_C-20200916T032027Z.nc\",\n", "\n", " \"IMOS_ANMN-WA_AETVZ_20130221T080000Z_WATR20_FV01_WATR20-1302-Continental-194_END-20131003T035000Z_C-20180529T020609Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20131111T080000Z_WATR20_FV01_WATR20-1311-Continental-194_END-20140519T035000Z_C-20200114T033335Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20140710T080000Z_WATR20_FV01_WATR20-1407-Continental-194_END-20150121T021500Z_C-20180529T055902Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20150213T080000Z_WATR20_FV01_WATR20-1502-Continental-194_END-20150424T134002Z_C-20200114T035347Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20150914T080000Z_WATR20_FV01_WATR20-1509-Continental-194_END-20160331T043000Z_C-20180601T013623Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20160427T080000Z_WATR20_FV01_WATR20-1604-Continental-194_END-20160531T021800Z_C-20180531T071709Z.nc\",\n", " # \"IMOS_ANMN-WA_AETVZ_20170512T080000Z_WATR20_FV01_WATR20-1705-Continental-194_END-20170717T014558Z_C-20190805T004647Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20171204T080000Z_WATR20_FV01_WATR20-1712-Continental-194_END-20180618T030000Z_C-20180620T233149Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20180802T080000Z_WATR20_FV01_WATR20-1807-Continental-194_END-20190225T054500Z_C-20190227T001343Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20190307T080000Z_WATR20_FV01_WATR20-1903-Continental-194_END-20190911T003144Z_C-20200114T045053Z.nc\",\n", " \"IMOS_ANMN-WA_AETVZ_20190926T080000Z_WATR20_FV01_WATR20-1909-Continental-194_END-20200326T030000Z_C-20200420T064334Z.nc\",\n", " ]\n", " base=\"http://thredds.aodn.org.au/thredds/fileServer/IMOS/ANMN/WA/WATR20/Velocity/\"\n", "\n", " # Download files\n", " [download_url(base+f, cache_folder) for f in files]\n", "\n", " # load and merge\n", " xds=[xr.open_dataset(cache_folder/f) for f in files]\n", " vars=['VCUR', 'UCUR', 'WCUR', 'TEMP', 'PRES_REL', 'DEPTH', 'ROLL', 'PITCH']\n", " xds2= [x[vars].isel(HEIGHT_ABOVE_SENSOR=18) for x in xds]\n", " xd = xr.concat(xds2, dim='TIME')\n", " xd = xd.where(xd.DEPTH>150) # remove outliers\n", "\n", "\n", " xd['TIME'] = xd['TIME'].dt.round('10T')\n", " xd = xd.dropna(dim='TIME', subset=['VCUR', 'UCUR', 'WCUR'])\n", " # xd = xd.resample(TIME='30T').first()\n", " # Add tides, these are features that can be forecast\n", "\n", " # Generate tidal freqs\n", " t = xd.TIME.to_series()\n", " df_eta = generate_tidal_periods(t)\n", "\n", " # Add tidal freqs\n", " xd = xd.merge(df_eta)\n", "\n", " # Cache to nc\n", " xd.to_netcdf(outfile)\n", " print(f'wrote \"{outfile}\" with size {outfile.stat().st_size*1e-6:2.2f} MB')\n", " return outfile" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "ExecuteTime": { "end_time": "2020-10-26T04:04:08.230047Z", "start_time": "2020-10-26T04:04:08.099310Z" } }, "outputs": [ { "data": { "text/html": [ "
| \n", " | VCUR | \n", "UCUR | \n", "WCUR | \n", "TEMP | \n", "PRES_REL | \n", "DEPTH | \n", "ROLL | \n", "PITCH | \n", "LATITUDE | \n", "LONGITUDE | \n", "... | \n", "O1 | \n", "P1 | \n", "Q1 | \n", "M4 | \n", "M6 | \n", "S4 | \n", "MK3 | \n", "MM | \n", "SSA | \n", "SA | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TIME | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
| 2009-07-15 08:00:00 | \n", "-0.396391 | \n", "0.089687 | \n", "-0.009671 | \n", "18.549999 | \n", "205.076004 | \n", "203.550812 | \n", "4.6 | \n", "-3.4 | \n", "-31.728650 | \n", "115.037217 | \n", "... | \n", "0.286288 | \n", "0.116457 | \n", "-1.014973 | \n", "-0.146817 | \n", "-0.801534 | \n", "-0.500000 | \n", "0.370082 | \n", "0.132683 | \n", "-0.686775 | \n", "-0.395743 | \n", "
| 2009-07-15 08:10:00 | \n", "-0.407620 | \n", "0.085398 | \n", "-0.019875 | \n", "18.650000 | \n", "205.078003 | \n", "203.552795 | \n", "4.6 | \n", "-2.4 | \n", "-31.728650 | \n", "115.037217 | \n", "... | \n", "0.242810 | \n", "0.159551 | \n", "-1.031149 | \n", "-0.304345 | \n", "-0.900573 | \n", "-0.642788 | \n", "0.494417 | \n", "0.134147 | \n", "-0.686601 | \n", "-0.395853 | \n", "
| 2009-07-15 08:20:00 | \n", "-0.365314 | \n", "0.104038 | \n", "0.000991 | \n", "18.730000 | \n", "205.076996 | \n", "203.551788 | \n", "4.8 | \n", "-2.7 | \n", "-31.728650 | \n", "115.037217 | \n", "... | \n", "0.198932 | \n", "0.202343 | \n", "-1.045759 | \n", "-0.453239 | \n", "-0.942304 | \n", "-0.766044 | \n", "0.610654 | \n", "0.135610 | \n", "-0.686427 | \n", "-0.395963 | \n", "
| 2009-07-15 08:30:00 | \n", "-0.406632 | \n", "0.119376 | \n", "-0.003729 | \n", "18.799999 | \n", "205.067001 | \n", "203.541901 | \n", "4.7 | \n", "-2.4 | \n", "-31.728650 | \n", "115.037217 | \n", "... | \n", "0.154727 | \n", "0.244751 | \n", "-1.058780 | \n", "-0.589276 | \n", "-0.924071 | \n", "-0.866025 | \n", "0.716890 | \n", "0.137073 | \n", "-0.686253 | \n", "-0.396072 | \n", "
| 2009-07-15 08:40:00 | \n", "-0.383744 | \n", "0.090066 | \n", "-0.008921 | \n", "18.860001 | \n", "205.065994 | \n", "203.540894 | \n", "4.9 | \n", "-2.9 | \n", "-31.728650 | \n", "115.037217 | \n", "... | \n", "0.110268 | \n", "0.286697 | \n", "-1.070194 | \n", "-0.708598 | \n", "-0.847034 | \n", "-0.939693 | \n", "0.811384 | \n", "0.138535 | \n", "-0.686080 | \n", "-0.396182 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 2020-03-26 01:00:00 | \n", "-0.436635 | \n", "-0.784922 | \n", "-0.012147 | \n", "16.610001 | \n", "197.384003 | \n", "195.919662 | \n", "-2.9 | \n", "3.0 | \n", "-31.728717 | \n", "115.042133 | \n", "... | \n", "-0.734741 | \n", "0.190139 | \n", "0.964792 | \n", "0.882484 | \n", "0.770444 | \n", "0.505439 | \n", "1.028587 | \n", "-0.881951 | \n", "0.990514 | \n", "0.997626 | \n", "
| 2020-03-26 01:30:00 | \n", "-0.355067 | \n", "-0.845100 | \n", "-0.005201 | \n", "16.629999 | \n", "197.408005 | \n", "195.943497 | \n", "-2.7 | \n", "3.0 | \n", "-31.728717 | \n", "115.042133 | \n", "... | \n", "-0.629257 | \n", "0.316317 | \n", "0.895545 | \n", "0.957914 | \n", "0.933774 | \n", "0.006292 | \n", "0.851981 | \n", "-0.880483 | \n", "0.990416 | \n", "0.997601 | \n", "
| 2020-03-26 02:00:00 | \n", "-0.568277 | \n", "-0.816935 | \n", "-0.024944 | \n", "16.660000 | \n", "197.412994 | \n", "195.948425 | \n", "-2.6 | \n", "2.9 | \n", "-31.728717 | \n", "115.042133 | \n", "... | \n", "-0.514470 | \n", "0.437113 | \n", "0.814067 | \n", "0.793395 | \n", "0.584762 | \n", "-0.494541 | \n", "0.551159 | \n", "-0.878996 | \n", "0.990316 | \n", "0.997576 | \n", "
| 2020-03-26 02:30:00 | \n", "-0.306141 | \n", "-0.773147 | \n", "-0.028096 | \n", "16.719999 | \n", "197.419006 | \n", "195.954407 | \n", "-2.6 | \n", "2.7 | \n", "-31.728717 | \n", "115.042133 | \n", "... | \n", "-0.392074 | \n", "0.550470 | \n", "0.721473 | \n", "0.430136 | \n", "-0.085096 | \n", "-0.862862 | \n", "0.169980 | \n", "-0.877489 | \n", "0.990217 | \n", "0.997551 | \n", "
| 2020-03-26 03:00:00 | \n", "-0.218563 | \n", "-0.757217 | \n", "0.013233 | \n", "16.790001 | \n", "197.429001 | \n", "195.964340 | \n", "-2.8 | \n", "2.8 | \n", "-31.728717 | \n", "115.042133 | \n", "... | \n", "-0.263881 | \n", "0.654460 | \n", "0.619026 | \n", "-0.040868 | \n", "-0.708264 | \n", "-0.999980 | \n", "-0.235982 | \n", "-0.875962 | \n", "0.990116 | \n", "0.997526 | \n", "
239075 rows × 25 columns
\n", "