Skip to content

Instantly share code, notes, and snippets.

@vassilyl
Last active April 26, 2016 17:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vassilyl/ee9dbf136a82eddfe243b40508265ec0 to your computer and use it in GitHub Desktop.
Save vassilyl/ee9dbf136a82eddfe243b40508265ec0 to your computer and use it in GitHub Desktop.
Query FetchClimate from Python
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import requests\n",
"from datetime import datetime\n",
"from time import sleep\n",
"from calendar import timegm\n",
"import numpy as np\n",
"import matplotlib\n",
"from matplotlib import pyplot as plt\n",
"import re\n",
"\n",
"# An example showing how to use FetchClimate API from Python.\n",
"#\n",
"# To reproduce Figure 1 from the paper we query the same FetchClimate instance\n",
"# and use its configuration at the specified moment in time.\n",
"# Choosing different parameters may significantly change the resulting chart.\n",
"\n",
"serviceurl = 'http://fetchclim.cloudapp.net'\n",
"tstamp = datetime(2015,5,27) \n",
"\n",
"#serviceurl = 'http://fetchclimate2.cloudapp.net'\n",
"#tstamp = datetime.utcnow()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2015-05-27T00:00:00Z\n",
"---- environmental variables\n",
"airt Air temperature near surface (Degrees C)\n",
"prate Precipitation rate (mm/month)\n",
"airt_land Air temperature near surface (land only area) (Degrees C)\n",
"airt_ocean Air temperature near surface (ocean only area) (Degrees C)\n",
"depth_ocean Depth below sea level (ocean only area) (meters)\n",
"relhum_land Relative humidity (land only area) (percentage)\n",
"abshum Absolute air humidity (g/m^3)\n",
"wvp Water vapour pressure (hPa)\n",
"wvsp Water vapour saturation pressure (hPa)\n",
"pet Potential evapotranspiration (mm/month)\n",
"soilmoist Soil moisture (mm/m)\n",
"elev Elevation above sea level (meters)\n",
"elev_land Elevation above sea level (land only area) (meters)\n",
"dtr Diurnal air temperature rate (Degrees C)\n",
"frs Frost days frequency (days/month)\n",
"relhum Relative humidity (percentage)\n",
"sunp Sunshine fraction (Percent of maximum possible sunshine)\n",
"wet Wet days frequency (days/month)\n",
"windspeed Wind speed at 10m (m/s)\n",
"---- data sources\n",
"13 CESM1-BGC airt ['airt']\n",
"12 CESM1-BGC prate ['prate']\n",
"11 FC1 Variables ['airt_land', 'airt_ocean', 'depth_ocean', 'relhum_land']\n",
"10 WagnerWVSP ['abshum', 'wvp', 'wvsp']\n",
" 9 Malmstrom PET ['pet']\n",
" 8 CpcSoilMoisture ['soilmoist']\n",
" 7 NCEP/NCAR Reanalysis 1 (Gauss T62) ['prate']\n",
" 6 NCEP/NCAR Reanalysis 1 (regular grid) ['airt']\n",
" 5 ETOPO1 ['elev']\n",
" 4 GTOPO30 ['elev', 'elev_land']\n",
" 3 GHCNv2 ['airt', 'prate']\n",
" 2 WorldClim 1.4 ['airt', 'airt_land', 'prate']\n",
" 1 CRU CL 2.0 ['airt', 'airt_land', 'dtr', 'frs', 'prate', 'relhum', 'relhum_land', 'sunp', 'wet', 'windspeed']\n"
]
}
],
"source": [
"# Request and print service configuration\n",
"\n",
"config = requests.get(serviceurl+'/api/configuration', params=dict(timestamp=tstamp.isoformat())).json()\n",
"print(config[\"TimeStamp\"])\n",
"print(\"---- environmental variables\")\n",
"for v in config[\"EnvironmentalVariables\"]:\n",
" print(\"{0:16} {1} ({2})\".format(v['Name'],v['Description'],v['Units']))\n",
"print(\"---- data sources\")\n",
"for ds in config['DataSources']:\n",
" print(\"{2:2} {0:16} {1}\".format(ds['Name'], ds['ProvidedVariables'], ds['ID']))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Build FetchClimate request object.\n",
"# For one geographical point (8, 10) query average summer (June-August) air temperature.\n",
"\n",
"time_series_yearly = dict(\n",
" ReproducibilityTimestamp=\n",
" \"/Date({0}000+0000)/\".format(timegm(tstamp.utctimetuple())),\n",
" EnvironmentVariableName = 'airt',\n",
" Domain = dict(\n",
" SpatialRegionType = 'Points',\n",
" Lats = [8.0],\n",
" Lons = [10.0],\n",
" TimeRegion = dict(\n",
" Hours = [0, 24],\n",
" IsIntervalsGridHours = True,\n",
" Days = [152, 243],\n",
" IsIntervalsGridDays = True,\n",
" Years = list(range(1950,2050)),\n",
" IsIntervalsGridYears = False,\n",
" )))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"msds:ab?AccountName=fetchclimate2r1&Container=requests&Blob=14464fd47a64686e890b0b4be2b89d868135d91c\n",
"---- dataset variables and metadata\n",
"provenance ['i', 't_y']\n",
"sd ['i', 't_y']\n",
"values ['i', 't_y']\n",
"lon ['i']\n",
"lat ['i']\n",
"years ['t_y']\n",
"days ['t_d']\n",
"hours ['t_h']\n",
"environmentVariable = airt\n",
"timeStamp = 2015-05-06T19:38:17.61+00:00\n",
"---- data\n"
]
},
{
"data": {
"image/png": "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\nKD7++GOeeuopLly4AIC3tzfz58/nwoULrFy5kg8//JBly5Zliatr164cPXqU/fv3O7Z99tlnDB48\nGIDHHnuM2bNnEx8fzx9//EHbtm0d9TJGv//66y/++9//8vvvvxMfH8/q1aupUaNGnu9JXg4cOECZ\nMmWy/MyWLVtGr169iIuLo3///rz//vssW7aMn3/+maioKAICAnjyyScB2Lt3L0899RRffPEFp06d\n4sKFC0RFReV63JyWLZQpU4Zp06YRExPD5s2bWbt2LTNmzHCqs3TpUrZu3crevXuztHcllszn1q9f\nP6d49u7dy5NPPsnnn3/u+APo5MmTTu3r169/VetpCzURFZHdItJERG4TkX+IyBv27YPsr28TkW4i\nciavvpRSJdOKFSucftFk5uvry7Rp0+jevTubNm1yqb+YmBgeeughXn755auagqpXrx5Dhw7llVde\nyXa/1WplwIAB3HfffVmm5RISEpxeX7x4Md/HL81Op6Y7ktAMFk8vTqemF8rxwsPDmT59epZRwfPn\nzxMSEpJn+0mTJhEYGEhAQACBgYFOo5MiQoUKFQgKCmLYsGG88847jjWoq1atokOHDk51jTG89tpr\nTJgwwWmkytV4jh07xk8//US/fv2oWLEi7du3zzLNuWjRIgIDA/Hy8mLOnDksXrwYiyXnX+ObN28m\nMDAQT09PRo0axWeffUZwcDBgS/g6derE/fffD0C7du1o2rQpq1atAqBjx46OhK5ly5bcd999/Pzz\nz46+3dzcGDNmDGXKlKFjx454e3s7/j+/5557aNiwIQC33HILffr0cRptzdxH7969HcsQ9uzZQ2Rk\npGOk2c3NjT179pCQkICfn1+2f+CVKVOGtLQ0/vjjDy5dukRYWJhLI555iYuLw8fHJ8v25s2b06VL\nF8A2HT1r1izeeOMNQkJCKFeuHGPHjmXx4sVYrVaWLFlC165dad68OWXLluW111676niaNGlCs2bN\nMMYQFhbGsGHDsrynr7zyCn5+fri7u2dp70osmc/Nw8MjS/suXbpw9913U65cOSZMmJAlafbx8XH8\nMZIf+mQlpVSO9u3bd01rHcPDw3nmmWe45557eOCBB/j+++/JfH/Ku+++m/bt2/PRRx/Rq1cvl/oM\nDAxk69at/PbbbwwZMoSrud/lmDFj+O6779iyZUuWfbNnz+b8+fOOacDMevfuzejRoxERvvrqK5o1\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xce20a8ec18>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Start computation and wait for its completion.\n",
"\n",
"status = requests.post(serviceurl+'/api/compute', json=time_series_yearly)\n",
"while status.text.startswith('pending=',1) or status.text.startswith('progress=',1) :\n",
" print(status.text,' waiting 2 secs...')\n",
" id = re.search('hash=\\w+', status.text)\n",
" sleep(2)\n",
" status = requests.get(serviceurl+'/api/status?' + id.group(0))\n",
"\n",
"if status.text.startswith('completed=',1) :\n",
"\n",
" # Completed computation returns URI of the result dataset.\n",
" \n",
" url = status.text[11:-1]\n",
" print(url)\n",
" \n",
" # Query and print schema of the result dataset.\n",
"\n",
" print('---- dataset variables and metadata')\n",
" schema = requests.get(serviceurl+'/jsproxy/schema', params=dict(uri=status.text[11:-1])).json()\n",
" for v in schema[\"Variables\"]:\n",
" print (v['Name'],v['Dimensions'])\n",
" for m in schema['Metadata']:\n",
" print (\"{0} = {1}\".format(m,schema['Metadata'][m]['Value']))\n",
"\n",
" # Download data from the dataset.\n",
"\n",
" print('---- data')\n",
" result = requests.get(serviceurl+'/jsproxy/data', params=dict(uri=url, variables='years,values,sd,provenance'))\n",
" years = np.array(result.json()['years'])\n",
" airt = np.array(result.json()['values'][0])\n",
" sd = np.array(result.json()['sd'][0])\n",
" provenance = np.array(result.json()['provenance'][0])\n",
" \n",
" # Build dictionary of FetchClimate data sources used to fulfill the query.\n",
" \n",
" dss = dict()\n",
" for p in provenance:\n",
" if p not in dss:\n",
" for ds in config['DataSources']:\n",
" if ds['ID']==p:\n",
" dss[p] = ds['Name']\n",
" # Plot mean and credible interval (one sigma) of the time series\n",
" # and mark which data source provided each of the values.\n",
" \n",
" prov=plt.scatter(years, airt, c=provenance, s=40, edgecolors='face', cmap='rainbow')\n",
" plt.plot(years, airt, 'k-', years, airt+sd, 'k--', years, airt-sd, 'k--')\n",
" plt.xlabel('year')\n",
" plt.ylabel('air temperature')\n",
" \n",
" plt.legend(\n",
" handles=[plt.Line2D([0,0],[0,0],color=prov.cmap(prov.norm(id)), marker='o', linestyle='') for id in dss],\n",
" labels=[dss[id] for id in dss], \n",
" numpoints=1, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\n",
" plt.show()\n",
"else:\n",
" # In case of error just print the diagnostics.\n",
" print(status.text)"
]
}
],
"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.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment