diff --git a/notebooks/unsafe_mfdataset.ipynb b/notebooks/unsafe_mfdataset.ipynb new file mode 100644 index 0000000..eebe252 --- /dev/null +++ b/notebooks/unsafe_mfdataset.ipynb @@ -0,0 +1,506 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# unsafe_mfdataset demo\n", + "\n", + "`unsafe_mfdataset()` constructs a virtual file for a large collection, without having to open all of the individual files. It makes some assumptions that could be invalid in some situations" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from coecms.bigdata import unsafe_mfdataset\n", + "import pandas\n", + "import xarray\n", + "from pandas.tseries.offsets import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ERA-Interim\n", + "\n", + "Era-Interim has one file per month, with names like\n", + "\n", + " /g/data1/ub4/erai/netcdf/3hr/atmos/oper_fc_sfc/v01/tas/tas_3hrs_ERAI_historical_fc-sfc_20040101_20040131.nc\n", + " \n", + "Each file contains 3 hourly data, from 0300 on the first of the month, to 0000 on the first of the following month\n", + "\n", + "For convenience I've made a function that finds the file name associated with a given date - I need it to calculate both the start and end day of the given month" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [], + "source": [ + "def erai_path(date):\n", + " date = date - 3*Hour()\n", + " mstart = (date - MonthEnd() + Day()).strftime('%Y%m%d')\n", + " mend = (date + MonthBegin() - Day()).strftime('%Y%m%d')\n", + " return f'/g/data1/ub4/erai/netcdf/3hr/atmos/oper_fc_sfc/v01/tas/tas_3hrs_ERAI_historical_fc-sfc_{mstart}_{mend}.nc'" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [], + "source": [ + "# Check the paths are printed correctly\n", + "sample = '/g/data1/ub4/erai/netcdf/3hr/atmos/oper_fc_sfc/v01/tas/tas_3hrs_ERAI_historical_fc-sfc_20040101_20040131.nc'\n", + "\n", + "assert erai_path(pandas.to_datetime('20040101T0300')) == sample\n", + "assert erai_path(pandas.to_datetime('20040103T1800')) == sample\n", + "assert erai_path(pandas.to_datetime('20040201T0000')) == sample" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With this function I can work out the files needed for a specific time period. First I get a sequence of monthly dates using pandas, then apply `erai_path()` to each date in turn" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "dates = pandas.date_range('19810101', '20171231', freq='MS')\n", + "paths = [erai_path(d) for d in dates]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The list of files can be passed to `unsafe_mfdataset()`" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "Dimensions: (lat: 241, lon: 480, time: 108112)\n", + "Coordinates:\n", + " * lat (lat) float64 90.0 89.25 88.5 87.75 87.0 86.25 85.5 84.75 84.0 ...\n", + " * lon (lon) float64 -180.0 -179.2 -178.5 -177.8 -177.0 -176.2 -175.5 ...\n", + " * time (time) datetime64[ns] 1981-01-01T03:00:00 1981-01-01T06:00:00 ...\n", + "Data variables:\n", + " tas (time, lat, lon) float32 dask.array\n", + "Attributes:\n", + " CDI: Climate Data Interface version 1.6.9 (http://mpimet.mpg.de/...\n", + " Conventions: CF-1.4\n", + " history: Thu Sep 3 10:14:33 2015: ncks -O --md5_wrt_att -v tas 2T_1...\n", + " CDO: Climate Data Operators version 1.6.9 (http://mpimet.mpg.de/...\n", + " title: ERA-Interim 2 metre temperature [K] forecast on surface (gl...\n", + " institution: ARCCSS ARC Centre of Excellence for Climate System Science ...\n", + " source: Original grib files obtained from http://apps.ecmwf.int/dat...\n", + " references: Please acknowledge both ECMWF for original files and the AR...\n", + " NCO: 20150903" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds = unsafe_mfdataset(paths)\n", + "ds" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[########################################] | 100% Completed | 22.9s\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from dask.diagnostics import ProgressBar\n", + "with ProgressBar():\n", + " da = ds.tas.sel(lat=-37.8136, lon=144.9631, method='nearest').sel(time=slice(None, '19850101'))\n", + " da.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## MUR\n", + "\n", + "MUR data has one file per day, with OpenDAP urls like\n", + "\n", + " https://podaac-opendap.jpl.nasa.gov/opendap/allData/ghrsst/data/GDS2/L4/GLOB/JPL/MUR/v4.1/2002/152/20020601090000-JPL-L4_GHRSST-SSTfnd-MUR-GLOB-v02.0-fv04.1.nc\n", + " \n", + "First a function to get the date of a file:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def mur_path(date):\n", + " yyyy = date.year\n", + " doy = \"%03d\"%date.dayofyear\n", + " yyyymmdd = date.strftime('%Y%m%d')\n", + " return f'https://podaac-opendap.jpl.nasa.gov/opendap/allData/ghrsst/data/GDS2/L4/GLOB/JPL/MUR/v4.1/{yyyy}/{doy}/{yyyymmdd}090000-JPL-L4_GHRSST-SSTfnd-MUR-GLOB-v02.0-fv04.1.nc'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'https://podaac-opendap.jpl.nasa.gov/opendap/allData/ghrsst/data/GDS2/L4/GLOB/JPL/MUR/v4.1/2002/152/20020601090000-JPL-L4_GHRSST-SSTfnd-MUR-GLOB-v02.0-fv04.1.nc'" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mur_path(pandas.to_datetime('20020601'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This dataset is really high resolution, so we'll use dask chunks in the lat and lon dimensions, so we only download what we need.\n", + "\n", + "For whatever reason the default `'netCDF4'` engine has trouble with this OpenDAP server, so I'm using `'pydap'`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 4.15 s, sys: 128 ms, total: 4.28 s\n", + "Wall time: 2min 45s\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "paths = [mur_path(d) for d in pandas.date_range('20020601','20020701')]\n", + "ds = unsafe_mfdataset(paths, engine='pydap', chunks={'lat': 1000, 'lon': 1000})\n", + "ds.analysed_sst" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 13.4 s, sys: 15.7 s, total: 29.2 s\n", + "Wall time: 48.7 s\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%%time\n", + "\n", + "ds.analysed_sst.sel(lat=slice(-50,-40), lon=slice(140,150)).mean('time').plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 8.6 s, sys: 315 ms, total: 8.92 s\n", + "Wall time: 7min 11s\n" + ] + }, + { + "data": { + "text/plain": [ + "\n", + "Dimensions: (lat: 17999, lon: 36000, time: 31)\n", + "Coordinates:\n", + " * lat (lat) float32 -89.99 -89.98 -89.97 ... 89.97 89.98 89.99\n", + " * lon (lon) float32 -179.99 -179.98 -179.97 ... 179.99 180.0\n", + " * time (time) datetime64[ns] 2002-06-01T09:00:00 ... 2002-07-01T09:00:00\n", + "Data variables:\n", + " analysed_sst (time, lat, lon) float32 dask.array\n", + " analysis_error (time, lat, lon) float32 dask.array\n", + " mask (time, lat, lon) float32 dask.array\n", + " sea_ice_fraction (time, lat, lon) float32 dask.array\n", + "Attributes:\n", + " Conventions: CF-1.5\n", + " title: Daily MUR SST, Final product\n", + " summary: A merged, multi-sensor L4 Foundation SST anal...\n", + " references: http://podaac.jpl.nasa.gov/Multi-scale_Ultra-...\n", + " institution: Jet Propulsion Laboratory\n", + " history: created at nominal 4-day latency; replaced nr...\n", + " comment: MUR = \\\"Multi-scale Ultra-high Reolution\\\n", + " license: These data are available free of charge under...\n", + " id: MUR-JPL-L4-GLOB-v04.1\n", + " naming_authority: org.ghrsst\n", + " product_version: 04.1\n", + " uuid: 27665bc0-d5fc-11e1-9b23-0800200c9a66\n", + " gds_version_id: 2.0\n", + " netcdf_version_id: 4.1\n", + " date_created: 20150819T103929Z\n", + " start_time: 20020601T090000Z\n", + " stop_time: 20020601T090000Z\n", + " time_coverage_start: 20020531T210000Z\n", + " time_coverage_end: 20020601T210000Z\n", + " file_quality_level: 1\n", + " source: AMSRE-REMSS, AVHRR_Pathfinder-PFV5.2-NODC_day...\n", + " platform: Aqua, DMSP, NOAA-POES, Suomi-NPP, Terra\n", + " sensor: AMSR-E, AVHRR, MODIS, SSM/I, VIIRS, in-situ\n", + " Metadata_Conventions: Unidata Observation Dataset v1.0\n", + " metadata_link: http://podaac.jpl.nasa.gov/ws/metadata/datase...\n", + " keywords: Oceans > Ocean Temperature > Sea Surface Temp...\n", + " keywords_vocabulary: NASA Global Change Master Directory (GCMD) Sc...\n", + " standard_name_vocabulary: NetCDF Climate and Forecast (CF) Metadata Con...\n", + " southernmost_latitude: -90.0\n", + " northernmost_latitude: 90.0\n", + " westernmost_longitude: -180.0\n", + " easternmost_longitude: 180.0\n", + " spatial_resolution: 0.01 degrees\n", + " geospatial_lat_units: degrees north\n", + " geospatial_lat_resolution: 0.01 degrees\n", + " geospatial_lon_units: degrees east\n", + " geospatial_lon_resolution: 0.01 degrees\n", + " acknowledgment: Please acknowledge the use of these data with...\n", + " creator_name: JPL MUR SST project\n", + " creator_email: ghrsst@podaac.jpl.nasa.gov\n", + " creator_url: http://mur.jpl.nasa.gov\n", + " project: NASA Making Earth Science Data Records for Us...\n", + " publisher_name: GHRSST Project Office\n", + " publisher_url: http://www.ghrsst.org\n", + " publisher_email: ghrsst-po@nceo.ac.uk\n", + " processing_level: L4\n", + " cdm_data_type: grid" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "\n", + "xarray.open_mfdataset(paths, engine='pydap', chunks={'lat': 1000, 'lon': 1000})" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 2.26 s, sys: 71.7 ms, total: 2.33 s\n", + "Wall time: 1min 47s\n" + ] + } + ], + "source": [ + "%%time\n", + "from pydap.client import open_url\n", + "\n", + "for p in paths:\n", + " open_url(p)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 135 ms, sys: 973 µs, total: 136 ms\n", + "Wall time: 5.18 s\n" + ] + }, + { + "data": { + "text/plain": [ + "\n", + "Dimensions: (lat: 17999, lon: 36000, time: 1)\n", + "Coordinates:\n", + " * time (time) int32 675766800\n", + "Dimensions without coordinates: lat, lon\n", + "Data variables:\n", + " analysed_sst (time, lat, lon) int16 ...\n", + " analysis_error (time, lat, lon) int16 ...\n", + " mask (time, lat, lon) int16 ...\n", + " sea_ice_fraction (time, lat, lon) int16 ...\n", + "Attributes:\n", + " Conventions: CF-1.5\n", + " title: Daily MUR SST, Final product\n", + " summary: A merged, multi-sensor L4 Foundation SST anal...\n", + " references: http://podaac.jpl.nasa.gov/Multi-scale_Ultra-...\n", + " institution: Jet Propulsion Laboratory\n", + " history: created at nominal 4-day latency; replaced nr...\n", + " comment: MUR = \\\"Multi-scale Ultra-high Reolution\\\n", + " license: These data are available free of charge under...\n", + " id: MUR-JPL-L4-GLOB-v04.1\n", + " naming_authority: org.ghrsst\n", + " product_version: 04.1\n", + " uuid: 27665bc0-d5fc-11e1-9b23-0800200c9a66\n", + " gds_version_id: 2.0\n", + " netcdf_version_id: 4.1\n", + " date_created: 20150819T103929Z\n", + " start_time: 20020601T090000Z\n", + " stop_time: 20020601T090000Z\n", + " time_coverage_start: 20020531T210000Z\n", + " time_coverage_end: 20020601T210000Z\n", + " file_quality_level: 1\n", + " source: AMSRE-REMSS, AVHRR_Pathfinder-PFV5.2-NODC_day...\n", + " platform: Aqua, DMSP, NOAA-POES, Suomi-NPP, Terra\n", + " sensor: AMSR-E, AVHRR, MODIS, SSM/I, VIIRS, in-situ\n", + " Metadata_Conventions: Unidata Observation Dataset v1.0\n", + " metadata_link: http://podaac.jpl.nasa.gov/ws/metadata/datase...\n", + " keywords: Oceans > Ocean Temperature > Sea Surface Temp...\n", + " keywords_vocabulary: NASA Global Change Master Directory (GCMD) Sc...\n", + " standard_name_vocabulary: NetCDF Climate and Forecast (CF) Metadata Con...\n", + " southernmost_latitude: -90.0\n", + " northernmost_latitude: 90.0\n", + " westernmost_longitude: -180.0\n", + " easternmost_longitude: 180.0\n", + " spatial_resolution: 0.01 degrees\n", + " geospatial_lat_units: degrees north\n", + " geospatial_lat_resolution: 0.01 degrees\n", + " geospatial_lon_units: degrees east\n", + " geospatial_lon_resolution: 0.01 degrees\n", + " acknowledgment: Please acknowledge the use of these data with...\n", + " creator_name: JPL MUR SST project\n", + " creator_email: ghrsst@podaac.jpl.nasa.gov\n", + " creator_url: http://mur.jpl.nasa.gov\n", + " project: NASA Making Earth Science Data Records for Us...\n", + " publisher_name: GHRSST Project Office\n", + " publisher_url: http://www.ghrsst.org\n", + " publisher_email: ghrsst-po@nceo.ac.uk\n", + " processing_level: L4\n", + " cdm_data_type: grid" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "\n", + "xarray.open_dataset(paths[0], engine='pydap', decode_cf = False, drop_variables=['lat','lon'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/src/coecms/bigdata.py b/src/coecms/bigdata.py new file mode 100644 index 0000000..7f78629 --- /dev/null +++ b/src/coecms/bigdata.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python +""" +file: src/coecms/bigdata.py +author: Scott Wales + +Copyright 2018 ARC Centre of Excellence for Climate Systems Science + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +import xarray +import dask + + +def unsafe_mfdataset(paths, concat_dim='time', chunks={}, decode_cf=True, + decode_times=True, **kwargs): + """Virtually concatenate files, without checking dimensions + + xarray.open_mfdataset will check each file's dimensions to make sure they + are consistent, which is time consuming for large collections. This + function trusts that the metadata is consistent, which you should expect in + a published dataset. + + Args: + paths (iterable of str): An iterable with the path names to open. Files + will be concatenated in this order + + concat_dim (str): Dimension name to concatenate along + + chunks (dict): Dask chunk size + + decode_cf (bool): Decode CF metadata + + decode_times (bool): Decode CF time axis to Python datetimes + + **kwargs: Passed to xarray.open_dataset + + Returns: xarray.Dataset containing a virtual aggregate of the files in + ``paths``. + """ + + fs = [] + fs.append(xarray.open_dataset(paths[0], chunks=chunks, decode_cf=False, **kwargs)) + + drop_variables = [] + for k,v in fs[0].variables.items(): + if concat_dim not in v.dims: + drop_variables.append(k) + + for p in paths[1:]: + fs.append(xarray.open_dataset(p, chunks=chunks, decode_cf=False, drop_variables=drop_variables, **kwargs)) + + ds = xarray.Dataset(attrs=fs[0].attrs) + + for k,v in fs[0].variables.items(): + if concat_dim in v.dims: + concat_axis = v.dims.index(concat_dim) + ds[k] = xarray.DataArray( + dask.array.concatenate([f[k].data for f in fs], axis=concat_axis), + attrs=v.attrs, + dims=v.dims, + ) + else: + ds[k] = v + + if decode_cf: + ds = xarray.decode_cf(ds, decode_times=decode_times) + + return ds + diff --git a/test/test_bigdata.py b/test/test_bigdata.py new file mode 100644 index 0000000..9a985fe --- /dev/null +++ b/test/test_bigdata.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +""" +file: test/test_bigdata.py +author: Scott Wales + +Copyright 2018 ARC Centre of Excellence for Climate Systems Science + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +from coecms.bigdata import * + +import dask +import netCDF4 +import numpy +import pandas +import xarray + + +def test_unsafe_mfdataset(tmpdir): + path0 = tmpdir.join('0.nc') + ds0 = xarray.Dataset() + ds0['a'] = xarray.DataArray(numpy.random.rand(3, 6), dims=['x', 'time']) + ds0.to_netcdf(path0) + + path1 = tmpdir.join('1.nc') + ds1 = xarray.Dataset() + ds1['a'] = xarray.DataArray(numpy.random.rand(3, 6), dims=['x', 'time']) + ds1.to_netcdf(path1) + + ds = unsafe_mfdataset([path0, path1]) + assert ds['a'].shape == (3, 12) + assert ds['time'].shape == (12,) + numpy.testing.assert_array_equal(ds['time'], range(12))