{ "metadata": { "name": "", "signature": "sha256:a19bcc3b7970ea198aeb7b4572a348b602c96533339019c3c74c5cb606aac0f7" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "name = '2015-09-28-xray_get_attr'\n", "title = \"Using get_variables_by_attributes with xray\"" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "\n", "import os\n", "from datetime import datetime\n", "from IPython.core.display import HTML\n", "\n", "with open('creative_commons.txt', 'r') as f:\n", " html = f.read()\n", "\n", "hour = datetime.utcnow().strftime('%H:%M')\n", "comments=\"true\"\n", "\n", "date = '-'.join(name.split('-')[:3])\n", "slug = '-'.join(name.split('-')[3:])\n", "\n", "metadata = dict(title=title,\n", " date=date,\n", " hour=hour,\n", " comments=comments,\n", " slug=slug,\n", " name=name)\n", "\n", "markdown = \"\"\"Title: {title}\n", "date: {date} {hour}\n", "comments: {comments}\n", "slug: {slug}\n", "\n", "{{% notebook {name}.ipynb cells[2:] %}}\n", "\"\"\".format(**metadata)\n", "\n", "content = os.path.abspath(os.path.join(os.getcwd(),\n", " os.pardir,\n", " os.pardir, \n", " '{}.md'.format(name)))\n", "with open('{}'.format(content), 'w') as f:\n", " f.writelines(markdown)\n", " \n", "html = '''\n", "\n", "
This post was written as an IPython notebook.\n", " It is available for download\n", " or as a static html.
\n", "\n", "%s''' % (name, name, html)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In my last post I showed the new `get_variables_by_attributes` method that will be available in netCDF4-python `1.2.0`. But what if you want to use that now? You can just copy the [method]((https://github.com/ocefpaf/netcdf4-python/blob/ef69cd01915aacfec7949a2e61884f2ccad0c2d5/netCDF4/_netCDF4.pyx#L2275-L2315) as a local function and change the `self` argument to take the the `netCDF4.Dataset` (`nc`) object.\n", "\n", "In fact we can even expand that to `xray` or `iris`.\n", "Well... If your dataset is CF-compliant then it makes no sense to use this in `iris`.\n", "Just use iris methods instead ;-)\n", "\n", "Below is an example with `xray`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def get_variables_by_attributes(ds, **kwargs):\n", " vs = []\n", " \n", " has_value_flag = False\n", " for vname, var in ds.items():\n", " for k, v in kwargs.items():\n", " if callable(v):\n", " has_value_flag = v(getattr(var, k, None))\n", " if has_value_flag is False:\n", " break\n", " elif hasattr(var, k) and getattr(var, k) == v:\n", " has_value_flag = True\n", " else:\n", " has_value_flag = False\n", " break\n", " if has_value_flag is True:\n", " vs.append(ds[vname])\n", "\n", " return vs" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now let's do the same thing we did in the last post: construct the dimensioned vertical coordinate." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import xray\n", "\n", "\n", "url = (\"http://omgsrv1.meas.ncsu.edu:8080/thredds/dodsC/fmrc/sabgom/\"\n", " \"SABGOM_Forecast_Model_Run_Collection_best.ncd\")\n", "\n", "\n", "ds = xray.open_dataset(url)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "formula_terms = lambda v: v is not None\n", "\n", "var = get_variables_by_attributes(ds, formula_terms=formula_terms)[0]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "var.attrs.get('formula_terms')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "u's: s_rho C: Cs_r eta: zeta depth: h depth_c: hc'" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "var.attrs.get('standard_name')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "u'ocean_s_coordinate_g1'" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we know the variable holding the `formula_terms` and all the variables in the `formula_terms` itself we can get them from the dataset.\n", "\n", "Note that I am getting only the last time-step for `eta`. That is because\n", "I was unable to find a way to lazily re-shape arrays in `xray`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "s = ds['s_rho']\n", "C = ds['Cs_r']\n", "eta = ds['zeta'][-1, ...] # Last time step.\n", "depth = ds['h']\n", "depth_c = ds['hc']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember that we need to match all the shapes before computing the vertical coordinate.\n", "Here I will take a different approach from the last post,\n", "that soon will be the default behavior in [`odvc`](https://github.com/pyoceans/odvc),\n", "I will align the shapes based on a final desired shape.\n", "\n", "Right now this approach is incomplete because it does not guess the final shape,\n", "but in `odvc` this will be [possible](https://github.com/pyoceans/odvc/blob/master/odvc/utils.py#L62-L76). The current shapes are," ] }, { "cell_type": "code", "collapsed": false, "input": [ "s.shape, C.shape, eta.shape, depth.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "((36,), (36,), (320, 440), (320, 440))" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We want the vertical coordinate to be the leftmost dimension.\n", "That means the final shape should be `(36, 320, 440)`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "final = (36, 320, 440)\n", "\n", "def align(shape_in, shape_out):\n", " dims = [k for k in shape_in]\n", " def select(dim):\n", " return dim if dim in dims else 1\n", " return tuple(select(k) for k in shape_out)\n", "\n", "\n", "def to_shape(arr, shape):\n", " reshape = align(shape_in=arr.shape, shape_out=final)\n", " return arr.data.reshape(reshape)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "s = to_shape(s, shape=final)\n", "C = to_shape(C, shape=final)\n", "eta = to_shape(eta, shape=final)\n", "depth = to_shape(depth, shape=final)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "s.shape, C.shape, eta.shape, depth.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "((36, 1, 1), (36, 1, 1), (1, 320, 440), (1, 320, 440))" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nice! It works!! Now let's end the post with a fancy figure." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from odvc import ocean_s_coordinate_g1\n", "\n", "z = ocean_s_coordinate_g1(s, C, eta, depth, depth_c.data)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "salt = get_variables_by_attributes(ds, standard_name='sea_water_salinity')[0]\n", "\n", "temp = get_variables_by_attributes(ds, standard_name='sea_water_potential_temperature')[0]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "import mpl_toolkits.axisartist as AA\n", "from mpl_toolkits.axes_grid1 import host_subplot\n", "\n", "import seaborn\n", "seaborn.set(style='ticks')\n", "\n", "\n", "def adjust_xlim(ax, offset):\n", " x1, x2 = ax.get_xlim()\n", " ax.set_xlim(x1 - offset, x2 + offset)\n", "\n", "\n", "fig = plt.figure(figsize=(6, 9))\n", "fig.subplots_adjust(bottom=0.1, top=0.85)\n", "ax0 = host_subplot(111, axes_class=AA.Axes)\n", "\n", "ax0.invert_yaxis()\n", "ax1 = ax0.twiny()\n", "\n", "new_axis0 = ax0.get_grid_helper().new_fixed_axis\n", "new_axis1 = ax1.get_grid_helper().new_fixed_axis\n", "\n", "ax0.axis[\"top\"] = new_axis0(loc=\"top\", axes=ax0, offset=(0, 0))\n", "ax1.axis[\"top\"] = new_axis1(loc=\"top\", axes=ax1, offset=(0, 40))\n", "\n", "ax0.axis[\"bottom\"].toggle(all=False)\n", "ax1.axis[\"bottom\"].toggle(all=False)\n", "\n", "ax0.set_ylabel(\"Depth (m)\")\n", "ax0.set_xlabel(u\"Temperature (\\xb0C)\")\n", "ax1.set_xlabel(r\"Salinity (g kg$^{-1}$)\")\n", "\n", "kw = dict(linewidth=2.5)\n", "l0, = ax0.plot(temp[-1, :, 5, 364], -z[:, 5, 364], **kw)\n", "l1, = ax1.plot(salt[-1, :, 5, 364], -z[:, 5, 364], **kw)\n", "\n", "adjust_xlim(ax0, offset=0.05)\n", "adjust_xlim(ax1, offset=0.05)\n", "\n", "ax0.axis[\"top\"].label.set_color(l0.get_color())\n", "ax1.axis[\"top\"].label.set_color(l1.get_color())" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nyh133KEoiqIcPXpUufXWW5X/+7//O2sfk8mkXHPNNW4tp6t0d/5vvfWW8ve///2c+3zyySfKunXr\nFEVRlAMHDjies4GqL8+Br78H1q1bp2zdulVRFEXJyMhQPv/88y77+NJ7oC/n70uvv6Kc+3NQURTF\naDQqV199tVJZWdlln76+B3yixrFkyRIWLVoEwOnTpwkLC6O2tpbnnnuO9evX8/DDD5+1z4kTJ2hq\namL16tVYLBbuu+8+Jk+e7O6iO0V353/06FHy8vLYtm0bCQkJrF+/nqCgjmtO7Nu3j3nz5gEwefJk\njhw54pGyO0tfngNffQ+UlJQQFhbG/v37GTNmDLfddhtxcXGsX7++yz6+9B7oy/n70usP3f8fsPvD\nH/7ATTfdRGRkZJd9+vwecFLYeYV169YpqampypdffqnceeedyqlTp5SioiLl+uuvP2vbkydPKm+9\n9ZaiKIqSl5enLFmyRLFYLO4uslPZz3/Xrl3Ke++9pxw9elRRFEV58cUXlaeffrrLtuvXr1e++OIL\nx98LFy4c8OevKL17Dnz5PbBz505lwoQJyubNmxVFUZQ//vGPyvPPP99lW198D/Tm/H3x9VeUrv8H\nFEVRqqqqlBUrVihWq/Wsbfv6HvCp4FAURamsrFQmTZqkLF68WLn55puV66+/XklNTVWefPLJLtuZ\nTCalpaXF8fe1116rlJWVubu4TldZWaksXLhQKS8vd9yWk5OjfP/73++y3VNPPeWoxiuKoixYsMBd\nRXS5nj4HvvweuOSSS5TZs2crtbW1iqIoyrFjx5Qf//jHXbbz1fdAT8/fV19/Ren4P9Dc3Kxs2rRJ\n+ctf/tLtdn19D/jEqKr333+fv/71rwD4+/sTHR3Nli1bePXVV/n9739PSkoKv/jFL7rs89577/H0\n008DUF5eTmNjI9HR0W4vuzN8+/xVKhV33XUXhw4dAmD37t1MmDChyz7Tpk1jx44dABw4cIDRo0e7\nt9BO1pfnwJffA2q1mrS0NLZv3w7A3r17HQNG7HzpPdCX8/el1x+6fw7UajW7d+9m/vz53e7T1/eA\nT6yO29LSwrp166isrMRsNnP77bezcOFCwNbWt2bNGseoqrVr13LfffcRFRXFL37xC0pKSlCpVNx/\n//1MmXLhazd7o+7Of9iwYTz22GP4+fkRHR3Nr371K4KDgx3nP3ToUMdoCoCnnnqKpKQkD59J3/Xl\n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\n", "text": [ "This post was written as an IPython notebook.\n", " It is available for download\n", " or as a static html.
\n", "\n", "