# silo # Scientific Information for Land Owners (SILO) is a database of Australian climate data from 1889 (current to yesterday). It provides daily datasets for a range of climate variables in ready-to-use formats suitable for research and climate applications. SILO products provide national coverage with interpolated infills for missing data, which allows you to focus on your research or model development without the burden of data preparation. https://silo.longpaddock.qld.gov.au There are two different data types: #### Point data: Get multiple climate variables at a single point (accessible with this python module). #### Gridded data: Get a single climate variable for the entire Australian continent (accessible on the SILO website). ## Point data ## ### Installation ### ``` git clone http://git.wrl.unsw.edu.au:3000/danh/silo.git pip install -e silo ``` ## Usage ## ```python import silo # Reigster for API key at https://silo.longpaddock.qld.gov.au/register api_key = 'BcfJnotlnVgX9gyLmZh2dURqNH8xAD3m8Am7V9OY' variables = ['daily_rain', 'max_temp', 'min_temp'] start = '18990101' finish = '20180101' lat = -33 lon = 151 silo.pointdata(variables, api_key, start, finish, lat=lat, lon=lon, output='silo-data.csv') ``` **silo-data.csv** | date | latitude | longitude | daily_rain_mm | daily_rain_source | max_temp_Celsius | max_temp_source | min_temp_Celsius | min_temp_source | |------------------------|----------|-----------|---------------|-------------------|------------------|-----------------|------------------|-----------------| | 1899-01-01 | -33 | 151 | 0.9 | 24 | 31.4 | 35 | 14.8 | 35 | | 1899-01-02 | -33 | 151 | 0 | 24 | 30.1 | 35 | 18.3 | 35 | | 1899-01-03 | -33 | 151 | 0 | 24 | 33.3 | 35 | 14.3 | 35 | | ... | | | | | | | | | ## Gridded data ## Gridded datasets are available here: https://silo.longpaddock.qld.gov.au/gridded-data ### Example: generate timeseries at specific location ### ```python import xarray as xr import pandas as pd import calendar import matplotlib.pyplot as plt # Open netcdf dataset fname = '2000.monthly_rain.nc' ds = xr.open_dataset(fname) # Convert to pandas dataframe df = ds.to_dataframe().drop(columns=['crs']) # Set coordinates lat = -33.75 lon = 151.25 # Create temporary dataframe at specific location df1 = df.loc[(lat, lon), :] # Plot time series fig, ax = plt.subplots(1, 1, figsize=(6, 4)) ax.plot(df1.index, df1.values) # Tidy up figure ax.set_xticks(df1.index) ax.set_xticklabels([calendar.month_abbr[i] for i in df1.index.month]) ax.set_ylabel('Rainfall (mm)', labelpad=10) ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False) plt.show() ``` ![](doc/gridded-timeseries-demo.png) ### Example: generate maps at specific dates ### ```python import xarray as xr import pandas as pd import calendar import matplotlib.pyplot as plt # Open netcdf dataset fname = '2000.monthly_rain.nc' ds = xr.open_dataset(fname) # Convert to pandas dataframe df = ds.to_dataframe().drop(columns=['crs']) # Get index values lats = df.index.get_level_values('lat').unique() lons = df.index.get_level_values('lon').unique() dates = df.index.get_level_values('time').unique() fig, ax = plt.subplots(3, 4) for i, date in enumerate(dates): # Get temporary dataframe with only one date ('slice(None)' is ':') df1 = df.loc[(slice(None), slice(None), date), :] # Split multi-index so that rows=latitude and columns=longitude grid = df1.unstack().unstack() # Plot colour map for current month a = ax.ravel()[i] im = a.imshow(grid, cmap='Blues', vmin=-100, vmax=800) a.set_title(calendar.month_abbr[i + 1]) a.invert_yaxis() a.axis('off') # Add colour bar cbax = fig.add_axes([0.95, 0.3, 0.02, 0.4]) cb = fig.colorbar(im, cax=cbax) cb.set_ticks([0, 200, 400, 600, 800]) cbax.set_ylabel('Monthly rainfall (mm)', labelpad=10) plt.show() ``` ![](doc/gridded-map-demo.png) ## Available climate variables ## | code | name | units | |---------------------|-----------------------------------------------------------------------------------------|---------| | daily_rain | Daily rainfall | mm | | monthly_rain | Monthly rainfall | mm | | max_temp | Maximum temperature | Celsius | | min_temp | Minimum temperature | Celsius | | vp | Vapour pressure | hPa | | vp_deficit | Vapour pressure deficit | hPa | | evap_pan | Evaporation - Class A pan | mm | | evap_syn | Evaporation - synthetic estimate | mm | | evap_comb | Evaporation - combination (synthetic estimate pre-1970, class A pan 1970 onwards) | mm | | evap_morton_lake | Evaporation - Morton's shallow lake evaporation | mm | | radiation | Solar radiation - total incoming downward shortwave radiation on a horizontal surface | MJm-2 | | rh_tmax | Relative humidity at the time of maximum temperature | % | | rh_tmin | Relative humidity at the time of minimum temperature | % | | et_short_crop | Evapotranspiration - FAO56 short crop | mm | | et_tall_crop | Evapotranspiration - ASCE tall crop | mm | | et_morton_actual | Evapotranspiration - Morton's areal actual evapotranspiration | mm | | et_morton_potential | Evapotranspiration - Morton's potential evapotranspiration | mm | | et_morton_wet | Evapotranspiration - Morton's wet-environment areal evapotranspiration over land | mm | | mslp | Mean sea level pressure | hPa |