{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# OPeNDAP\n", "\n", "Allows to access netCDF file directly through the network. Most libraries that can read netCDF support OPeNDAP, so you can access the link as you would a file on disk.\n", "\n", "In practice this works fairly well except when file access requires authentication, as with CMIP5. Then we need to handle certificates and the difficulty level increases. For this exercise, we'll use a simple test server to avoid these difficulties.\n", "\n", "The advantage of using OPeNDAP is that you don't have to download the entire file. You can open the dataset remotely, access the time slice or the region of interest and make computation on the data. \n", "\n", "Some resources:\n", " * https://pypi.org/project/netcdf4_pydap/\n", " * https://portal.enes.org/data/data-metadata-service/search-and-download/opendap" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import netCDF4 as nc" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['title', 'DSD_entry_id', 'platform', 'sensor', 'Conventions', 'references', 'institution', 'contact', 'GDS_version_id', 'netcdf_version_id', 'creation_date', 'history', 'product_version', 'spatial_resolution', 'start_date', 'start_time', 'stop_date', 'stop_time', 'northernmost_latitude', 'southernmost_latitude', 'easternmost_longitude', 'westernmost_longitude', 'file_quality_index', 'comment']\n" ] }, { "data": { "text/plain": [ "odict_keys(['lat', 'lon', 'time', 'sea_surface_temperature', 'sst_dtime', 'proximity_confidence', 'SSES_bias_error', 'SSES_standard_deviation_error', 'rejection_flag', 'confidence_flag', 'sea_surface_temperature4', 'proximity_confidence4', 'SSES_bias_error4', 'SSES_standard_deviation_error4'])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "url = 'http://test.opendap.org:80/opendap/data/nc/20070917-MODIS_A-JPL-L2P-A2007260000000.L2_LAC_GHRSST-v01.nc'\n", "D = nc.Dataset(url)\n", "print(D.ncattrs())\n", "D.variables.keys()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "seconds since 1981-01-01 00:00:00 842832339 2007-09-17 00:05:39\n" ] } ], "source": [ "lat = D.variables['lat'][:]\n", "lon = D.variables['lon'][:]\n", "time = D.variables['time']\n", "print(time.units, time[0], nc.num2date(time[0], time.units))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sea surface temperature\n", "kelvin\n", "('time', 'nj', 'ni') (1, 2030, 1354)\n" ] } ], "source": [ "sst = D.variables['sea_surface_temperature']\n", "print(sst.long_name)\n", "print(sst.units)\n", "print(sst.dimensions, sst.shape)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "a = sst[:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This dataset is problematic because it is entirely masked. We need to extract the data attribute to get to the original, unmasked values." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[[ -3575. , -3529. , -3483. , ..., -5279. ,\n", " -5268. , -5239. ],\n", " [ -3636. , -3657. , -3527. , ..., -5264. ,\n", " -5231. , -5224. ],\n", " [ -3669. , -3703. , -3696. , ..., -5270. ,\n", " -5284. , -5243. ],\n", " ...,\n", " [ 18540. , 16666. , 300.57498, ..., -16281. ,\n", " 18350. , -16186. ],\n", " [ 30893. , -16313. , -22356. , ..., 16749. ,\n", " 24427. , 16773. ],\n", " [ 11372. , 16703. , -1684. , ..., -16333. ,\n", " -18770. , -16266. ]]], dtype=float32)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a.data" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "plt.imshow(a.data[0])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ESGF Access\n", "\n", "For reference, here is how you would access ESGF data using OPeNDAP. Note that not all files are exposed through the OPeNDAP protocol... " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", "from pydap.cas.esgf import setup_session\n", "# ds_url = \"http://esgfcog.cccma.ec.gc.ca/thredds/dodsC/cmip5.output.CCCma.CanESM2.rcp85.mon.atmos.r4i1p1.pr.20130331.aggregation\"\n", "# The CCCMA server fails with an SSLError...\n", "# ds_url = \"https://esgf1.dkrz.de/thredds/dodsC/cmip5.output1.MPI-M.MPI-ESM-MR.rcp85.day.atmos.day.r1i1p1.uas.20120503.aggregation\"\n", "ds_url = \"https://esgf1.dkrz.de/thredds/dodsC/cmip5.output1.MPI-M.MPI-ESM-MR.rcp85.mon.atmos.Amon.r1i1p1.pr.20120503.aggregation\"\n", "session = setup_session('', '', check_url=ds_url)\n", "store = xr.backends.PydapDataStore.open(ds_url, session=session)\n", "ds = xr.open_dataset(store)\n", "ds.attrs" ] } ], "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.3" } }, "nbformat": 4, "nbformat_minor": 2 }