Skip to content

Instantly share code, notes, and snippets.

@emiliom
Last active August 29, 2015 14:01
Show Gist options
  • Save emiliom/57e84aee123ca60c4fa3 to your computer and use it in GitHub Desktop.
Save emiliom/57e84aee123ca60c4fa3 to your computer and use it in GitHub Desktop.
#IOOS #pyoos #NERRS Accessing a NERRS station with Pyoos, via CDMO SOAP web services. Illustrates querying all stations ("features") from a NERRS Reserve site; access to data from a NERRS station (specified by its station code); extraction of station metadata; and conversion of the returned multi-variable time series to a pandas DataFrame, follo…
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:36adde301942cdf7c90ac3debfa5530ccc3afed6370766adda793adb84283c54"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Accessing a NERRS station with Pyoos, via CDMO SOAP web services\n",
"Illustrates querying all stations (\"features\") from a NERRS Reserve site; access to data from a NERRS station (specified by its station code); extraction of station metadata; and conversion of the returned multi-variable time series to a pandas DataFrame, followed by a time series plot from the DataFrame. Builds off the work from Dan Ramage (SECOORA), whose code is listed in the last cell, at the end. _Note that this is running from a pyoos fork with some small but key changes to the nerrs collector._ 2014 May 8-10. Emilio Mayorga."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from datetime import datetime, timedelta\n",
"import pandas as pd\n",
"from pyoos.collectors.nerrs.nerrs_soap import NerrsSoap"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# FROM pyoos SOS handling\n",
"# Convenience function to build record style time series representation\n",
"def flatten_element(p):\n",
" rd = {'time':p.time}\n",
" for m in p.members:\n",
" rd[m['standard']] = m['value']\n",
" return rd\n",
"\n",
"# sta.get_unique_members() serves the same function as the pyoos SOS get_unique_members method\n",
"# Convenience function to extract a dict of unique members (observed properties) by standard name\n",
"obsprops_bystdname = lambda sta: {m['standard']:m for m in sta.get_unique_members()}"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"First here's a very compact set of statements to get and plot the data for a station. No exploratory side trips."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**NOTE:** I manually removed (commented out) the NERRS/CDMO access token after running this notebook, before uploading notebook to my github gist. *Replace 'TOKEN STRING' with a [token obtained from the NERRS/CDMO office](http://nerrsdata.org/contact.cfm)*"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# NERRS/CDMO access token.\n",
"accesstoken = 'TOKEN STRING'\n",
"\n",
"# Initialize pyoos NERRS collector object\n",
"nerrsData = NerrsSoap()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Access pdbpfmet station, for the last 7 days (roughly)\n",
"nerrsData.filter(features=['pdbpfmet'],\n",
" start=datetime.utcnow() - timedelta(days=7),\n",
" end=datetime.utcnow() - timedelta(hours=12))\n",
"\n",
"response = nerrsData.collect(accesstoken)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sta = response.elements[0]\n",
"obsprops_bystdname_dict = obsprops_bystdname(sta)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# FROM pyoos SOS handling\n",
"# For first (and only) station\n",
"flattenedsta_0 = map(flatten_element, sta.elements)\n",
"sta_0df = pd.DataFrame.from_records(flattenedsta_0, index=['time'])\n",
"sta_0df.head()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>air_pressure</th>\n",
" <th>air_temperature</th>\n",
" <th>cumulative_precipitation</th>\n",
" <th>relative_humidity</th>\n",
" <th>total_par_LiCor</th>\n",
" <th>total_precipitation</th>\n",
" <th>wind_direction_from_true_north</th>\n",
" <th>wind_direction_standard_deviation</th>\n",
" <th>wind_sped</th>\n",
" <th>wind_speed_of_gust</th>\n",
" </tr>\n",
" <tr>\n",
" <th>time</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2014-05-10 19:30:00+00:00</th>\n",
" <td> 1021</td>\n",
" <td> 12.1</td>\n",
" <td> 0</td>\n",
" <td> 81</td>\n",
" <td> 651</td>\n",
" <td> 0</td>\n",
" <td> 212</td>\n",
" <td> 22</td>\n",
" <td> 1.8</td>\n",
" <td> 3.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014-05-10 19:15:00+00:00</th>\n",
" <td> 1021</td>\n",
" <td> 11.6</td>\n",
" <td> 0</td>\n",
" <td> 83</td>\n",
" <td> 462</td>\n",
" <td> 0</td>\n",
" <td> 192</td>\n",
" <td> 17</td>\n",
" <td> 2.0</td>\n",
" <td> 3.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014-05-10 19:00:00+00:00</th>\n",
" <td> 1021</td>\n",
" <td> 11.4</td>\n",
" <td> 0</td>\n",
" <td> 83</td>\n",
" <td> 394</td>\n",
" <td> 0</td>\n",
" <td> 189</td>\n",
" <td> 12</td>\n",
" <td> 2.2</td>\n",
" <td> 4.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014-05-10 18:45:00+00:00</th>\n",
" <td> 1021</td>\n",
" <td> 11.4</td>\n",
" <td> 0</td>\n",
" <td> 84</td>\n",
" <td> 451</td>\n",
" <td> 0</td>\n",
" <td> 193</td>\n",
" <td> 14</td>\n",
" <td> 2.0</td>\n",
" <td> 3.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014-05-10 18:30:00+00:00</th>\n",
" <td> 1021</td>\n",
" <td> 11.3</td>\n",
" <td> 0</td>\n",
" <td> 83</td>\n",
" <td> 420</td>\n",
" <td> 0</td>\n",
" <td> 202</td>\n",
" <td> 15</td>\n",
" <td> 2.0</td>\n",
" <td> 4.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows \u00d7 10 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": [
" air_pressure air_temperature \\\n",
"time \n",
"2014-05-10 19:30:00+00:00 1021 12.1 \n",
"2014-05-10 19:15:00+00:00 1021 11.6 \n",
"2014-05-10 19:00:00+00:00 1021 11.4 \n",
"2014-05-10 18:45:00+00:00 1021 11.4 \n",
"2014-05-10 18:30:00+00:00 1021 11.3 \n",
"\n",
" cumulative_precipitation relative_humidity \\\n",
"time \n",
"2014-05-10 19:30:00+00:00 0 81 \n",
"2014-05-10 19:15:00+00:00 0 83 \n",
"2014-05-10 19:00:00+00:00 0 83 \n",
"2014-05-10 18:45:00+00:00 0 84 \n",
"2014-05-10 18:30:00+00:00 0 83 \n",
"\n",
" total_par_LiCor total_precipitation \\\n",
"time \n",
"2014-05-10 19:30:00+00:00 651 0 \n",
"2014-05-10 19:15:00+00:00 462 0 \n",
"2014-05-10 19:00:00+00:00 394 0 \n",
"2014-05-10 18:45:00+00:00 451 0 \n",
"2014-05-10 18:30:00+00:00 420 0 \n",
"\n",
" wind_direction_from_true_north \\\n",
"time \n",
"2014-05-10 19:30:00+00:00 212 \n",
"2014-05-10 19:15:00+00:00 192 \n",
"2014-05-10 19:00:00+00:00 189 \n",
"2014-05-10 18:45:00+00:00 193 \n",
"2014-05-10 18:30:00+00:00 202 \n",
"\n",
" wind_direction_standard_deviation wind_sped \\\n",
"time \n",
"2014-05-10 19:30:00+00:00 22 1.8 \n",
"2014-05-10 19:15:00+00:00 17 2.0 \n",
"2014-05-10 19:00:00+00:00 12 2.2 \n",
"2014-05-10 18:45:00+00:00 14 2.0 \n",
"2014-05-10 18:30:00+00:00 15 2.0 \n",
"\n",
" wind_speed_of_gust \n",
"time \n",
"2014-05-10 19:30:00+00:00 3.1 \n",
"2014-05-10 19:15:00+00:00 3.7 \n",
"2014-05-10 19:00:00+00:00 4.1 \n",
"2014-05-10 18:45:00+00:00 3.8 \n",
"2014-05-10 18:30:00+00:00 4.0 \n",
"\n",
"[5 rows x 10 columns]"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Time series plot.\n",
"# \"wind_speed\" is currently mispelled; that's in pyoos, and can be fixed easily\n",
"obsprop_name = 'wind_sped'\n",
"obsprop = obsprops_bystdname_dict[obsprop_name]\n",
"sta_0df[obsprop_name].plot()\n",
"ylabel(obsprop_name + ' ('+obsprop['unit']+')');"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x4bc8a90>"
]
}
],
"prompt_number": 7
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Now the same thing, but with lots of exploration in between"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# pyoos NERRS collector\n",
"nerrsData = NerrsSoap()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"_May 10:_ Not sure if this will work, b/c the access token is passed via the collect method, so it hasn't been passed here yet!"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Get all Padilla Bay stations (pdb)\n",
"[featureid for featureid in nerrsData.list_features() if featureid.startswith('pdb')]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 9,
"text": [
"['pdbbpnut',\n",
" 'pdbbpwq',\n",
" 'pdbbynut',\n",
" 'pdbbywq',\n",
" 'pdbgdnut',\n",
" 'pdbgsnut',\n",
" 'pdbgswq',\n",
" 'pdbjenut',\n",
" 'pdbjewq',\n",
" 'pdbjlnut',\n",
" 'pdbjlwq',\n",
" 'pdbnnwq',\n",
" 'pdbpfmet']"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Access pdbpfmet station, for the last 7 days (roughly)\n",
"nerrsData.filter(features=['pdbpfmet'],\n",
" start=datetime.utcnow() - timedelta(days=7),\n",
" end=datetime.utcnow() - timedelta(hours=12))\n",
"#nerrsData.filter(variables=[\"ATemp\"])\n",
"response = nerrsData.collect()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# The raw response (a string) is not used outside this cell. The collect method response is what's used\n",
"# I'm showing the raw response here, just for reference\n",
"raw = nerrsData.raw()\n",
"type(raw), raw.keys()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
"(dict, ['pdbpfmet'])"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# response.elements is a one-element array with a paegan.cdm.dsg.features.station.Station element\n",
"response.elements"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 12,
"text": [
"[<paegan.cdm.dsg.features.station.Station at 0x4848a50>]"
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Looks like the station in the response doesn't include any info about the Reserve it belongs to. Too bad.\n",
"# Or is one of the pieces of information below the NERRS site?\n",
"sta = response.elements[0]\n",
"sta.__dict__.keys()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 13,
"text": [
"['_type',\n",
" '_location',\n",
" '_description',\n",
" '_name',\n",
" '_uid',\n",
" '_elements',\n",
" '_properties']"
]
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sta.uid, sta.name, sta.description, sta.type, sta.location, sta.properties"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 14,
"text": [
"('pdbpfmet',\n",
" 'Padilla Bay Farm',\n",
" None,\n",
" 'timeSeries',\n",
" <shapely.geometry.point.Point at 0x4848150>,\n",
" <bound method Station.properties of <paegan.cdm.dsg.features.station.Station object at 0x4848a50>>)"
]
}
],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# 'siteid' and 'location_description' seem to refer to the NERRS reserve/site\n",
"sta.get_property('siteid'), sta._properties"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 15,
"text": [
"('pdb',\n",
" {'horizontal_crs': 'EPSG:4326',\n",
" 'location_description': 'Padilla Bay',\n",
" 'siteid': 'pdb',\n",
" 'state': 'wa',\n",
" 'vertical_crs': 'EPSG:4297',\n",
" 'vertical_units': 'm'})"
]
}
],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"staloc = sta.get_location()\n",
"print staloc, '||', staloc.type, '||', staloc.xy"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"POINT Z (122.469303 48.463847 0) || Point || (array('d', [122.469303]), array('d', [48.463847]))\n"
]
}
],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"obsprops_bystdname_dict = obsprops_bystdname(sta)\n",
"obsprops_bystdname_dict['wind_sped']"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 17,
"text": [
"{'description': 'WSpd', 'name': 'WSpd', 'standard': 'wind_sped', 'unit': 'm/s'}"
]
}
],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# The individual observations are returned in the station \"elements\"\n",
"stael = sta.elements\n",
"type(stael), len(stael)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 18,
"text": [
"(list, 656)"
]
}
],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"stael0 = stael[0]\n",
"stael0.time\n",
"# See sta.get_unique_members(), above\n",
"# stael0.get_member_names() returns a list of member names for this station 'element'"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 19,
"text": [
"datetime.datetime(2014, 5, 10, 19, 30, tzinfo=<UTC>)"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"stael0.members"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 20,
"text": [
"[{'description': 'ATemp',\n",
" 'name': 'ATemp',\n",
" 'standard': 'air_temperature',\n",
" 'unit': '\\xc2\\xb0C',\n",
" 'value': 12.1},\n",
" {'description': 'BP',\n",
" 'name': 'BP',\n",
" 'standard': 'air_pressure',\n",
" 'unit': 'mb',\n",
" 'value': 1021.0},\n",
" {'description': 'CumPrcp',\n",
" 'name': 'CumPrcp',\n",
" 'standard': 'cumulative_precipitation',\n",
" 'unit': 'mm',\n",
" 'value': 0.0},\n",
" {'description': 'MaxWSpd',\n",
" 'name': 'MaxWSpd',\n",
" 'standard': 'wind_speed_of_gust',\n",
" 'unit': 'm/s',\n",
" 'value': 3.1},\n",
" {'description': 'RH',\n",
" 'name': 'RH',\n",
" 'standard': 'relative_humidity',\n",
" 'unit': '%',\n",
" 'value': 81.0},\n",
" {'description': 'SDWDir',\n",
" 'name': 'SDWDir',\n",
" 'standard': 'wind_direction_standard_deviation',\n",
" 'unit': 'sd',\n",
" 'value': 22.0},\n",
" {'description': 'TotPAR',\n",
" 'name': 'TotPAR',\n",
" 'standard': 'total_par_LiCor',\n",
" 'unit': 'mmoles/m^2',\n",
" 'value': 651.0},\n",
" {'description': 'TotPrcp',\n",
" 'name': 'TotPrcp',\n",
" 'standard': 'total_precipitation',\n",
" 'unit': 'mm',\n",
" 'value': 0.0},\n",
" {'description': 'Wdir',\n",
" 'name': 'Wdir',\n",
" 'standard': 'wind_direction_from_true_north',\n",
" 'unit': '\\xc2\\xb0TN',\n",
" 'value': 212.0},\n",
" {'description': 'WSpd',\n",
" 'name': 'WSpd',\n",
" 'standard': 'wind_sped',\n",
" 'unit': 'm/s',\n",
" 'value': 1.8}]"
]
}
],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# From paegan: flatten Returns a Generator of Points that are part of this collection\n",
"# Just exploring what this does...\n",
"response.flatten"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 21,
"text": [
"<bound method StationCollection.flatten of <paegan.cdm.dsg.collections.station_collection.StationCollection object at 0x4848f90>>"
]
}
],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# FROM pyoos SOS handling\n",
"# For first (and only) station\n",
"flattenedsta_0 = map(flatten_element, sta.elements)\n",
"sta_0df = pd.DataFrame.from_records(flattenedsta_0, index=['time'])\n",
"sta_0df.head()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>air_pressure</th>\n",
" <th>air_temperature</th>\n",
" <th>cumulative_precipitation</th>\n",
" <th>relative_humidity</th>\n",
" <th>total_par_LiCor</th>\n",
" <th>total_precipitation</th>\n",
" <th>wind_direction_from_true_north</th>\n",
" <th>wind_direction_standard_deviation</th>\n",
" <th>wind_sped</th>\n",
" <th>wind_speed_of_gust</th>\n",
" </tr>\n",
" <tr>\n",
" <th>time</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2014-05-10 19:30:00+00:00</th>\n",
" <td> 1021</td>\n",
" <td> 12.1</td>\n",
" <td> 0</td>\n",
" <td> 81</td>\n",
" <td> 651</td>\n",
" <td> 0</td>\n",
" <td> 212</td>\n",
" <td> 22</td>\n",
" <td> 1.8</td>\n",
" <td> 3.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014-05-10 19:15:00+00:00</th>\n",
" <td> 1021</td>\n",
" <td> 11.6</td>\n",
" <td> 0</td>\n",
" <td> 83</td>\n",
" <td> 462</td>\n",
" <td> 0</td>\n",
" <td> 192</td>\n",
" <td> 17</td>\n",
" <td> 2.0</td>\n",
" <td> 3.7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014-05-10 19:00:00+00:00</th>\n",
" <td> 1021</td>\n",
" <td> 11.4</td>\n",
" <td> 0</td>\n",
" <td> 83</td>\n",
" <td> 394</td>\n",
" <td> 0</td>\n",
" <td> 189</td>\n",
" <td> 12</td>\n",
" <td> 2.2</td>\n",
" <td> 4.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014-05-10 18:45:00+00:00</th>\n",
" <td> 1021</td>\n",
" <td> 11.4</td>\n",
" <td> 0</td>\n",
" <td> 84</td>\n",
" <td> 451</td>\n",
" <td> 0</td>\n",
" <td> 193</td>\n",
" <td> 14</td>\n",
" <td> 2.0</td>\n",
" <td> 3.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014-05-10 18:30:00+00:00</th>\n",
" <td> 1021</td>\n",
" <td> 11.3</td>\n",
" <td> 0</td>\n",
" <td> 83</td>\n",
" <td> 420</td>\n",
" <td> 0</td>\n",
" <td> 202</td>\n",
" <td> 15</td>\n",
" <td> 2.0</td>\n",
" <td> 4.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows \u00d7 10 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 22,
"text": [
" air_pressure air_temperature \\\n",
"time \n",
"2014-05-10 19:30:00+00:00 1021 12.1 \n",
"2014-05-10 19:15:00+00:00 1021 11.6 \n",
"2014-05-10 19:00:00+00:00 1021 11.4 \n",
"2014-05-10 18:45:00+00:00 1021 11.4 \n",
"2014-05-10 18:30:00+00:00 1021 11.3 \n",
"\n",
" cumulative_precipitation relative_humidity \\\n",
"time \n",
"2014-05-10 19:30:00+00:00 0 81 \n",
"2014-05-10 19:15:00+00:00 0 83 \n",
"2014-05-10 19:00:00+00:00 0 83 \n",
"2014-05-10 18:45:00+00:00 0 84 \n",
"2014-05-10 18:30:00+00:00 0 83 \n",
"\n",
" total_par_LiCor total_precipitation \\\n",
"time \n",
"2014-05-10 19:30:00+00:00 651 0 \n",
"2014-05-10 19:15:00+00:00 462 0 \n",
"2014-05-10 19:00:00+00:00 394 0 \n",
"2014-05-10 18:45:00+00:00 451 0 \n",
"2014-05-10 18:30:00+00:00 420 0 \n",
"\n",
" wind_direction_from_true_north \\\n",
"time \n",
"2014-05-10 19:30:00+00:00 212 \n",
"2014-05-10 19:15:00+00:00 192 \n",
"2014-05-10 19:00:00+00:00 189 \n",
"2014-05-10 18:45:00+00:00 193 \n",
"2014-05-10 18:30:00+00:00 202 \n",
"\n",
" wind_direction_standard_deviation wind_sped \\\n",
"time \n",
"2014-05-10 19:30:00+00:00 22 1.8 \n",
"2014-05-10 19:15:00+00:00 17 2.0 \n",
"2014-05-10 19:00:00+00:00 12 2.2 \n",
"2014-05-10 18:45:00+00:00 14 2.0 \n",
"2014-05-10 18:30:00+00:00 15 2.0 \n",
"\n",
" wind_speed_of_gust \n",
"time \n",
"2014-05-10 19:30:00+00:00 3.1 \n",
"2014-05-10 19:15:00+00:00 3.7 \n",
"2014-05-10 19:00:00+00:00 4.1 \n",
"2014-05-10 18:45:00+00:00 3.8 \n",
"2014-05-10 18:30:00+00:00 4.0 \n",
"\n",
"[5 rows x 10 columns]"
]
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Time series plot.\n",
"# \"wind_speed\" is currently mispelled; that's in pyoos, and can be fixed easily\n",
"obsprop_name = 'wind_sped'\n",
"obsprop = obsprops_bystdname_dict[obsprop_name]\n",
"sta_0df[obsprop_name].plot()\n",
"ylabel(obsprop_name + ' ('+obsprop['unit']+')');"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x455ef10>"
]
}
],
"prompt_number": 23
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"The block below is Dan's code, with some tweaks I had made. I'm no longer using it directly"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Change this to return arrays and/or pandas data frames that pull out individual time series per variable** \n",
"**SEE THE CELL ABOVE THIS ONE!** \n",
"\n",
"for obsRec in response:\n",
" for stationRec in response.get_elements():\n",
" #stationRec = obsRec.feature\n",
" print \"**** Station: %s Location: %s\" % (stationRec.name, stationRec.get_location())\n",
" #The elements are a list of the observed_properties returned wrapped in a Point object.\n",
" for obsProp in stationRec.get_elements():\n",
" print \" -------------------\"\n",
" print \" - Observation Date/Time: %s\" % (obsProp.get_time())\n",
" #print \"Member names: %s\" % (obsProp.get_member_names())\n",
" #I think that for a multi sensor request, there should be multiple members, each representing\n",
" #a specific observed_property.\n",
" for member in obsProp.get_members():\n",
" #Apparently you're going to have to know how each collector parses the pieces of the data.\n",
" #For an SOS query, there appear to be: name, units, value, and standard(CF MMI link).\n",
" #print \" ------\\n member.keys() = %s\" % member.keys()\n",
" # member.keys() = ['value', 'description', 'name', 'unit', 'standard']\n",
" m = member\n",
" member_values_tup = (m['name'], m['description'], m['standard'], m['value'], m['unit'])\n",
" print \"name: %s (description=%s, standard=%s); value=%s, unit=%s\" % member_values_tup\n",
" #for key,value in member.iteritems():\n",
" # print \" %s = %s\" % (key, value)"
]
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment