In [1]:
import pandas as pd
from lizard_connector import Client
cli = Client()
cli.endpoints
Out[1]:
De connectie met Lizard is gemaakt en bovenstaand zijn alle beschikbare endpoints.
Nu gaan we de metadata verzamelen van de timeseries met uuid 867b166a-fa39-457d-a9e9-4bcb2ff04f61
:
In [2]:
result = cli.timeseries.get(uuid="867b166a-fa39-457d-a9e9-4bcb2ff04f61")
result.metadata
Out[2]:
Download van timeseries met uuid 867b166a-fa39-457d-a9e9-4bcb2ff04f61
van 31 december 1999 tot 14 februari 2018.
Dit is de metadata:
In [3]:
queryparams = {
"end":1518631200000,
"start":946681200000,
"window":"month"
}
result = cli.timeseries.get(uuid="867b166a-fa39-457d-a9e9-4bcb2ff04f61", **queryparams)
result.metadata
Out[3]:
En dit is de data:
In [4]:
result.data[0]
Out[4]:
Nu kunnen we de andere tijdseries van de zelfde locatie opzoeken op basis van de metadata. De neerslag, verdamping en windsnelheid zijn allen in meer of mindere mate gecorreleerd voor een en de zelfde locatie. We gaan hierna die data in een datafame zetten.
In [5]:
location__uuid = result.metadata['location__uuid'][0]
# een scientific result kan ook gesplitst worden in metadata en events:
metadata_multiple, events_multiple = cli.timeseries.get(location__uuid=location__uuid, **queryparams)
columns = [x for x in metadata_multiple.columns if "observation_type" in x or "uuid" in x]
metadata_multiple[columns]
Out[5]:
De data is van verschillende lengte, dat is niet te correleren. Resamplen naar maanden hadden we al gedaan uit Lizard. Daarbij kregen we per periode de min en max terug. Die gaan we correleren. We laten zien dat de tijdseries nu allen de zelfde lengte hadden. We hadden dit ook kunnen doen door eerst naar de metadata te kijken en dan pas de data op te halen.
In [6]:
indexed_events = [e.set_index('timestamp') for e in events_multiple if 'timestamp' in e.columns]
first = max([indexed.index[0] for indexed in indexed_events])
last = min([indexed.index[-1] for indexed in indexed_events])
print(first, last)
indexed_events_ranged = [e[first:last] for e in indexed_events]
[e.shape for e in indexed_events_ranged]
Out[6]:
De lengte is nu inderdaad voor allemaal hetzelfde. Nu selecteren we de max van de verschillende tijdseries:
In [7]:
observation_types = metadata_multiple['observation_type__parameter'].tolist()
max_weerdata = pd.DataFrame({observation_type: events['max'] for observation_type, events in zip(observation_types, indexed_events_ranged)})
max_weerdata
Out[7]:
Vervolgens is het eenvoudig de correlatie te berekenen:
In [8]:
max_weerdata.corr()
Out[8]: