Example of SMHI direct use
Direct usage of SMHI
.
Basic use
The SMHI
client is in an experimental state and currently only deals with Metobs
data. It is intended as a parent class for easy traversing of SMHI observational
data from GPS or city names directly.
The most basic usage of the client is to simply ask for data for a given station and a given parameter:
from smhi.smhi import SMHI
client = SMHI()
client.parameters.data #List all available parameters
#Parameter 1 is hourly air temperature
stations = client.get_stations(1)
stations.data #List all available stations for parameter 1
data = client.get_data(1, 72630) #Get data from specific station
#Station 72630 is Gothenburg
The data
variable holds four dataframes when a single station
is used to fetch data as above.
They are called station
, parameter
, period
and df
, where the latter holds
the actual observational data. See further
example of Metobs use.
Interpolation
When there are several stations close to a measurement location and historical data
records are incomplete, it is convenient to use nearby stations to fill in the missing
data: This naive interpolation feature is included in the package by the parameter
radius
. Thus, if we want to fetch historical data on the snow coverage in Kiruna,
the call is:
from smhi.smhi import SMHI
client = SMHI()
#Parameter 8 is depth of snow coverage
data = client.get_data(8, 180960, 40) #Get data from specific station
#Station 180960 is Kiruna. 40 indicates we will use stations within
#a 40km radius to complement any data losses.
data2 = client.get_data(8, 180960) #Get comparison data without the
#interpolation.
Visualise the data:
Scatter plot code
import plotly.graph_objects as go
d1 = data.df
d2 = data2.df
index = d1.index.intersection(d2.index)
d2_dropped = d2.drop(index, axis=0)
fig = go.Figure()
fig.add_trace(
go.Scattergl(
x=d1.index,
y=d1["Snödjup"],
mode="markers",
name="Kiruna station"
)
)
fig.add_trace(
go.Scattergl(
x=d2_dropped.index,
y=d2_dropped["Snödjup"],
mode="markers",
name="Interpolerat, radie 40 km"
)
)
fig.update_layout(
title='Historiskt snödjup i Kiruna',
xaxis_title="År",
yaxis_title="Snödjup [m]",
legend={"orientation": "h"},
margin={"l": 0, "r": 0, "b": 80, "t": 100}
)
fig.show()
Finding data from a city
There are a lot of stations available: Frequently, we are simply interested
in meterological observations from a specific city. Using the library geopy
,
this is included in the package too: