Tag maintentance¶
Scope¶
As shown in the basics, a dataset gets a few mandatory technical attributes on creation.
Additional descriptive metadata may be provided, that is the dataset and its series may be tagged. The tagging is a one time operation that neeed should not need to be repeated. That is, unless mistakes or omissions have been made, or new series are added to the set.
For calculations that derive new data. Some functions will automaticly update the metadata. Others will require that to be handled by the user.
Setup¶
from datetime import timedelta
from ssb_timeseries.sample_data import create_df,date_ranges
from ssb_timeseries.dates import ensure_datetime, date_utc
import polars as pl
from datetime import datetime
from ssb_timeseries.types import SeriesType, Versioning, Temporality
from ssb_timeseries.dataset import Dataset
Manually tagging set and series¶
def some_simple_data_from_file_or_query(
start='2020-01-01',
end='2025-06-01',
):
"""create some sample data"""
return create_df(
['p','q','r'],
start_date=start,
end_date=end,
freq='D'
)
pqr_df = some_simple_data_from_file_or_query()
pqr = Dataset(
name = 'PQR',
data_type = SeriesType('NONE', 'AT'),
data = pqr_df,
)
The technical metadata is added at creation time.
pqr.tags
{'name': 'PQR',
'repository': 'tutorials',
'series': {'p': {'dataset': 'PQR',
'name': 'p',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'kaffe',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'},
'q': {'dataset': 'PQR',
'name': 'q',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'knekkebrød',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'},
'r': {'dataset': 'PQR',
'name': 'r',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'brunost',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'}},
'temporality': 'AT',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'}
pqr.tag_dataset(tags={'variabel': 'pris','varegruppe': 'nødvendigheter'})
pqr.tag_series('p',tags={'vare': 'kaffe'})
pqr.tag_series('q',tags={'vare': 'knekkebrød'})
pqr.tag_series('r',tags={'vare': 'brunost'})
pqr.tags
{'name': 'PQR',
'repository': 'tutorials',
'series': {'p': {'dataset': 'PQR',
'name': 'p',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'kaffe',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'},
'q': {'dataset': 'PQR',
'name': 'q',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'knekkebrød',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'},
'r': {'dataset': 'PQR',
'name': 'r',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'brunost',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'}},
'temporality': 'AT',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'}
Tags can be used immediately.
pqr[{'vare': 'kaffe'}].data
valid_at |
p |
|---|---|
2020-01-01 |
90.0 |
2020-01-02 |
90.0 |
2020-01-03 |
110.0 |
2020-01-04 |
110.0 |
2020-01-05 |
100.0 |
… |
… |
2025-05-28 |
90.0 |
2025-05-29 |
90.0 |
2025-05-30 |
100.0 |
2025-05-31 |
110.0 |
2025-06-01 |
90.0 |
pqr.save()
Autotagging¶
interval_data = SeriesType('NONE', 'FROM_TO')
def mock_interval_data_from_file_or_query(start, end):
a_to_z = [chr(i) for i in range(ord('a'), ord('z') + 1)]
variables = ['volume', 'price']
goods = ['coffe', 'tea', 'softdrinks', 'beer', 'wine']
return create_df(
a_to_z, variables, goods,
start_date=start,
end_date=end,
freq='M',
temporality='FROM_TO',
implementation='polars'
)
bigger_data = mock_interval_data_from_file_or_query(start='2025-01-01', end='2025-06-01')
bigger_data
valid_from |
valid_to |
a_volume_coffe |
a_volume_tea |
a_volume_softdrinks |
a_volume_beer |
a_volume_wine |
a_price_coffe |
a_price_tea |
a_price_softdrinks |
a_price_beer |
a_price_wine |
b_volume_coffe |
b_volume_tea |
b_volume_softdrinks |
b_volume_beer |
b_volume_wine |
b_price_coffe |
b_price_tea |
b_price_softdrinks |
b_price_beer |
b_price_wine |
c_volume_coffe |
c_volume_tea |
c_volume_softdrinks |
c_volume_beer |
c_volume_wine |
c_price_coffe |
c_price_tea |
c_price_softdrinks |
c_price_beer |
c_price_wine |
d_volume_coffe |
d_volume_tea |
d_volume_softdrinks |
d_volume_beer |
d_volume_wine |
… |
w_volume_beer |
w_volume_wine |
w_price_coffe |
w_price_tea |
w_price_softdrinks |
w_price_beer |
w_price_wine |
x_volume_coffe |
x_volume_tea |
x_volume_softdrinks |
x_volume_beer |
x_volume_wine |
x_price_coffe |
x_price_tea |
x_price_softdrinks |
x_price_beer |
x_price_wine |
y_volume_coffe |
y_volume_tea |
y_volume_softdrinks |
y_volume_beer |
y_volume_wine |
y_price_coffe |
y_price_tea |
y_price_softdrinks |
y_price_beer |
y_price_wine |
z_volume_coffe |
z_volume_tea |
z_volume_softdrinks |
z_volume_beer |
z_volume_wine |
z_price_coffe |
z_price_tea |
z_price_softdrinks |
z_price_beer |
z_price_wine |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
datetime[μs] |
datetime[μs] |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
… |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
2025-01-01 00:00:00 |
2025-02-01 00:00:00 |
100.0 |
100.0 |
110.0 |
100.0 |
110.0 |
110.0 |
100.0 |
90.0 |
90.0 |
100.0 |
90.0 |
110.0 |
90.0 |
90.0 |
90.0 |
110.0 |
100.0 |
90.0 |
100.0 |
100.0 |
120.0 |
100.0 |
110.0 |
80.0 |
100.0 |
110.0 |
110.0 |
100.0 |
100.0 |
100.0 |
90.0 |
90.0 |
110.0 |
90.0 |
100.0 |
… |
100.0 |
110.0 |
90.0 |
100.0 |
110.0 |
90.0 |
100.0 |
100.0 |
80.0 |
110.0 |
100.0 |
80.0 |
120.0 |
110.0 |
100.0 |
100.0 |
110.0 |
100.0 |
80.0 |
120.0 |
110.0 |
100.0 |
80.0 |
90.0 |
100.0 |
90.0 |
100.0 |
100.0 |
90.0 |
110.0 |
90.0 |
90.0 |
100.0 |
80.0 |
100.0 |
90.0 |
110.0 |
2025-02-01 00:00:00 |
2025-03-01 00:00:00 |
100.0 |
90.0 |
80.0 |
120.0 |
100.0 |
80.0 |
110.0 |
100.0 |
90.0 |
100.0 |
110.0 |
100.0 |
100.0 |
100.0 |
100.0 |
110.0 |
110.0 |
110.0 |
100.0 |
100.0 |
120.0 |
70.0 |
110.0 |
80.0 |
90.0 |
120.0 |
90.0 |
100.0 |
110.0 |
70.0 |
110.0 |
90.0 |
90.0 |
100.0 |
100.0 |
… |
100.0 |
100.0 |
90.0 |
100.0 |
110.0 |
120.0 |
90.0 |
110.0 |
110.0 |
110.0 |
100.0 |
100.0 |
110.0 |
90.0 |
100.0 |
90.0 |
110.0 |
110.0 |
100.0 |
90.0 |
100.0 |
110.0 |
100.0 |
100.0 |
100.0 |
80.0 |
100.0 |
110.0 |
110.0 |
100.0 |
100.0 |
100.0 |
110.0 |
110.0 |
90.0 |
80.0 |
110.0 |
2025-03-01 00:00:00 |
2025-04-01 00:00:00 |
100.0 |
100.0 |
100.0 |
80.0 |
90.0 |
90.0 |
100.0 |
90.0 |
110.0 |
100.0 |
110.0 |
80.0 |
100.0 |
100.0 |
110.0 |
110.0 |
90.0 |
100.0 |
90.0 |
100.0 |
100.0 |
100.0 |
100.0 |
110.0 |
90.0 |
90.0 |
100.0 |
100.0 |
100.0 |
80.0 |
130.0 |
110.0 |
80.0 |
100.0 |
110.0 |
… |
100.0 |
100.0 |
100.0 |
110.0 |
80.0 |
90.0 |
120.0 |
80.0 |
90.0 |
100.0 |
100.0 |
110.0 |
70.0 |
90.0 |
120.0 |
90.0 |
90.0 |
110.0 |
110.0 |
110.0 |
100.0 |
90.0 |
70.0 |
100.0 |
100.0 |
100.0 |
90.0 |
110.0 |
90.0 |
90.0 |
110.0 |
100.0 |
100.0 |
110.0 |
100.0 |
100.0 |
110.0 |
2025-04-01 00:00:00 |
2025-05-01 00:00:00 |
100.0 |
100.0 |
80.0 |
100.0 |
100.0 |
100.0 |
100.0 |
80.0 |
110.0 |
100.0 |
110.0 |
110.0 |
100.0 |
100.0 |
100.0 |
80.0 |
120.0 |
90.0 |
90.0 |
100.0 |
80.0 |
90.0 |
110.0 |
110.0 |
90.0 |
100.0 |
90.0 |
110.0 |
100.0 |
90.0 |
90.0 |
110.0 |
90.0 |
120.0 |
110.0 |
… |
120.0 |
130.0 |
100.0 |
80.0 |
90.0 |
110.0 |
90.0 |
100.0 |
100.0 |
110.0 |
110.0 |
110.0 |
100.0 |
90.0 |
100.0 |
110.0 |
100.0 |
90.0 |
100.0 |
100.0 |
90.0 |
90.0 |
100.0 |
120.0 |
90.0 |
90.0 |
100.0 |
100.0 |
100.0 |
90.0 |
90.0 |
110.0 |
90.0 |
100.0 |
100.0 |
110.0 |
90.0 |
2025-05-01 00:00:00 |
2025-06-01 00:00:00 |
100.0 |
90.0 |
110.0 |
100.0 |
90.0 |
100.0 |
80.0 |
110.0 |
110.0 |
100.0 |
120.0 |
100.0 |
100.0 |
80.0 |
80.0 |
90.0 |
110.0 |
90.0 |
90.0 |
110.0 |
100.0 |
110.0 |
100.0 |
100.0 |
110.0 |
120.0 |
110.0 |
110.0 |
110.0 |
100.0 |
100.0 |
90.0 |
100.0 |
110.0 |
110.0 |
… |
100.0 |
110.0 |
100.0 |
100.0 |
100.0 |
90.0 |
100.0 |
100.0 |
100.0 |
100.0 |
90.0 |
90.0 |
90.0 |
100.0 |
90.0 |
100.0 |
90.0 |
100.0 |
90.0 |
90.0 |
90.0 |
110.0 |
100.0 |
100.0 |
100.0 |
110.0 |
90.0 |
120.0 |
100.0 |
110.0 |
100.0 |
90.0 |
120.0 |
90.0 |
100.0 |
120.0 |
90.0 |
2025-06-01 00:00:00 |
2025-07-01 00:00:00 |
90.0 |
110.0 |
90.0 |
100.0 |
100.0 |
100.0 |
110.0 |
110.0 |
100.0 |
90.0 |
90.0 |
110.0 |
90.0 |
110.0 |
70.0 |
100.0 |
110.0 |
110.0 |
80.0 |
110.0 |
120.0 |
90.0 |
110.0 |
90.0 |
100.0 |
120.0 |
80.0 |
90.0 |
80.0 |
90.0 |
100.0 |
110.0 |
100.0 |
110.0 |
100.0 |
… |
100.0 |
100.0 |
110.0 |
120.0 |
90.0 |
90.0 |
110.0 |
110.0 |
100.0 |
90.0 |
90.0 |
100.0 |
100.0 |
100.0 |
90.0 |
90.0 |
80.0 |
100.0 |
110.0 |
120.0 |
90.0 |
110.0 |
90.0 |
90.0 |
110.0 |
90.0 |
110.0 |
90.0 |
100.0 |
90.0 |
110.0 |
90.0 |
90.0 |
100.0 |
110.0 |
80.0 |
110.0 |
az = Dataset(
name = 'AZ Drinks',
data_type = interval_data,
data = bigger_data,
attributes=['store','variable','product'], # <-- this is the clever part
)
az.save()
len(az.series)
260
az_selection = az[{'product': 'tea', 'variable': 'price'}]
az_selection.data
valid_from |
valid_to |
a_price_tea |
b_price_tea |
c_price_tea |
d_price_tea |
e_price_tea |
f_price_tea |
g_price_tea |
h_price_tea |
i_price_tea |
j_price_tea |
k_price_tea |
l_price_tea |
m_price_tea |
n_price_tea |
o_price_tea |
p_price_tea |
q_price_tea |
r_price_tea |
s_price_tea |
t_price_tea |
u_price_tea |
v_price_tea |
w_price_tea |
x_price_tea |
y_price_tea |
z_price_tea |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
datetime[μs] |
datetime[μs] |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
f64 |
2025-01-01 00:00:00 |
2025-02-01 00:00:00 |
100.0 |
100.0 |
110.0 |
110.0 |
80.0 |
100.0 |
120.0 |
100.0 |
100.0 |
100.0 |
90.0 |
100.0 |
110.0 |
110.0 |
100.0 |
100.0 |
90.0 |
100.0 |
90.0 |
100.0 |
100.0 |
90.0 |
100.0 |
110.0 |
90.0 |
80.0 |
2025-02-01 00:00:00 |
2025-03-01 00:00:00 |
110.0 |
110.0 |
90.0 |
110.0 |
110.0 |
100.0 |
130.0 |
90.0 |
110.0 |
100.0 |
90.0 |
80.0 |
100.0 |
110.0 |
120.0 |
90.0 |
110.0 |
100.0 |
100.0 |
80.0 |
90.0 |
120.0 |
100.0 |
90.0 |
100.0 |
110.0 |
2025-03-01 00:00:00 |
2025-04-01 00:00:00 |
100.0 |
90.0 |
100.0 |
100.0 |
110.0 |
110.0 |
100.0 |
90.0 |
100.0 |
100.0 |
90.0 |
100.0 |
110.0 |
80.0 |
100.0 |
110.0 |
90.0 |
100.0 |
100.0 |
120.0 |
110.0 |
110.0 |
110.0 |
90.0 |
100.0 |
110.0 |
2025-04-01 00:00:00 |
2025-05-01 00:00:00 |
100.0 |
120.0 |
90.0 |
100.0 |
100.0 |
120.0 |
110.0 |
100.0 |
100.0 |
120.0 |
120.0 |
110.0 |
90.0 |
100.0 |
110.0 |
90.0 |
100.0 |
90.0 |
80.0 |
90.0 |
110.0 |
100.0 |
80.0 |
90.0 |
120.0 |
100.0 |
2025-05-01 00:00:00 |
2025-06-01 00:00:00 |
80.0 |
110.0 |
110.0 |
90.0 |
100.0 |
100.0 |
90.0 |
90.0 |
120.0 |
100.0 |
100.0 |
110.0 |
90.0 |
100.0 |
90.0 |
90.0 |
90.0 |
100.0 |
80.0 |
80.0 |
90.0 |
110.0 |
100.0 |
100.0 |
100.0 |
90.0 |
2025-06-01 00:00:00 |
2025-07-01 00:00:00 |
110.0 |
110.0 |
80.0 |
90.0 |
100.0 |
100.0 |
100.0 |
90.0 |
90.0 |
90.0 |
110.0 |
110.0 |
110.0 |
80.0 |
100.0 |
100.0 |
110.0 |
110.0 |
110.0 |
100.0 |
90.0 |
90.0 |
120.0 |
100.0 |
90.0 |
100.0 |
len(az_selection.series)
26
By supplying the attributes parameter, we utilised the fact that names were structured as underscore separated strings.
This way, we managed to tag 26 * 2 * 5 attributes across 260 series.
The autotagging is quite powerful. Additional parameters may be supplied to specify other separators, substitutions, or more complex patterns with regexes.
Detagging¶
If mistakes have been made, it may be necessary to remove tags.
from copy import deepcopy
deepcopy(pqr.tags)
{'name': 'PQR',
'repository': 'tutorials',
'series': {'p': {'dataset': 'PQR',
'name': 'p',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'kaffe',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'},
'q': {'dataset': 'PQR',
'name': 'q',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'knekkebrød',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'},
'r': {'dataset': 'PQR',
'name': 'r',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'brunost',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'}},
'temporality': 'AT',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'}
pqr.detag_series('varegruppe', vare='knekkebrød')
pqr.detag_series( vare='knekkebrød' )
pqr.tags
{'name': 'PQR',
'repository': 'tutorials',
'series': {'p': {'dataset': 'PQR',
'name': 'p',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'kaffe',
'variabel': 'pris',
'versioning': 'NONE'},
'q': {'dataset': 'PQR',
'name': 'q',
'repository': 'tutorials',
'temporality': 'AT',
'variabel': 'pris',
'versioning': 'NONE'},
'r': {'dataset': 'PQR',
'name': 'r',
'repository': 'tutorials',
'temporality': 'AT',
'vare': 'brunost',
'variabel': 'pris',
'versioning': 'NONE'}},
'temporality': 'AT',
'varegruppe': 'nødvendigheter',
'variabel': 'pris',
'versioning': 'NONE'}
The catalog¶
Allows inspection and analysis of tags across all sets and series.
Actual maintenance via Dataset methods.
from ssb_timeseries import get_catalog
our_timeseries_database = get_catalog()
all_sets = our_timeseries_database.datasets()
[s.object_name for s in all_sets]
['AZ_drikkevarer', 'Prices and Volumes', 'A Sample Dataset', 'PQR', 'Sample Data', 'AZ Drinks', 'XYZ', 'More Prices and Volumes', 'AZ_omsetning', 'AZ_drinks']
series_in_xyz = our_timeseries_database.series(tags={'dataset': 'XYZ'})
[s.object_name for s in series_in_xyz]
['x', 'y', 'z']
import pandas as pd
everything = our_timeseries_database.items()
pd.DataFrame(everything)
repository_name |
object_name |
object_type |
object_tags |
parent |
children |
|---|---|---|---|---|---|
tutorials |
AZ_drikkevarer |
dataset |
{‘name’: ‘AZ_drikkevarer’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘series’: {‘a_antall_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’}, ‘a_antall_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’}, ‘a_antall_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘antall’, ‘vare’: ‘te’}, ‘a_antall_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’}, ‘a_antall_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_antall_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘antall’, ‘vare’: ‘øl’}, ‘a_pris_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_pris_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘pris’, ‘vare’: ‘brus’}, ‘a_pris_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_pris_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘pris’, ‘vare’: ‘kaffe’}, ‘a_pris_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_pris_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘pris’, ‘vare’: ‘te’}, ‘a_pris_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_pris_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘pris’, ‘vare’: ‘vin’}, ‘a_pris_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_pris_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘pris’, ‘vare’: ‘øl’}, ‘b_antall_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘b_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘b’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’}, ‘b_antall_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘b_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘b’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’}, ‘b_antall_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘b_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘b’, ‘variabel’: ‘antall’, ‘vare’: ‘te’}, ‘b_antall_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘b_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘b’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’}, ‘b_antall_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘b_antall_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘b’, ‘variabel’: ‘antall’, ‘vare’: ‘øl’}, ‘b_pris_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘b_pris_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘b’, ‘variabel’: ‘pris’, ‘vare’: ‘brus’}, ‘b_pris_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘b_pris_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘b’, ‘variabel’: ‘pris’, ‘vare’: ‘kaffe’}, ‘b_pris_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘b_pris_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘b’, ‘variabel’: ‘pris’, ‘vare’: ‘te’}, ‘b_pris_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘b_pris_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘b’, ‘variabel’: ‘pris’, ‘vare’: ‘vin’}, ‘b_pris_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘b_pris_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘b’, ‘variabel’: ‘pris’, ‘vare’: ‘øl’}, ‘c_antall_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘c_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘c’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’}, ‘c_antall_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘c_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘c’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’}, ‘c_antall_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘c_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘c’, ‘variabel’: ‘antall’, ‘vare’: ‘te’}, ‘c_antall_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘c_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘c’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’}, ‘c_antall_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘c_antall_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘c’, ‘variabel’: ‘antall’, ‘vare’: ‘øl’}, ‘c_pris_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘c_pris_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘c’, ‘variabel’: ‘pris’, ‘vare’: ‘brus’}, ‘c_pris_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘c_pris_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘c’, ‘variabel’: ‘pris’, ‘vare’: ‘kaffe’}, ‘c_pris_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘c_pris_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘c’, ‘variabel’: ‘pris’, ‘vare’: ‘te’}, ‘c_pris_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘c_pris_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘c’, ‘variabel’: ‘pris’, ‘vare’: ‘vin’}, ‘c_pris_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘c_pris_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘c’, ‘variabel’: ‘pris’, ‘vare’: ‘øl’}, ‘d_antall_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘d_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘d’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’}, ‘d_antall_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘d_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘d’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’}, ‘d_antall_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘d_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘d’, ‘variabel’: ‘antall’, ‘vare’: ‘te’}, ‘d_antall_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘d_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘d’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’}, ‘d_antall_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘d_antall_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘d’, ‘variabel’: ‘antall’, ‘vare’: ‘øl’}, ‘d_pris_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘d_pris_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘d’, ‘variabel’: ‘pris’, ‘vare’: ‘brus’}, ‘d_pris_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘d_pris_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘d’, ‘variabel’: ‘pris’, ‘vare’: ‘kaffe’}, ‘d_pris_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘d_pris_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘d’, ‘variabel’: ‘pris’, ‘vare’: ‘te’}, ‘d_pris_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘d_pris_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘d’, ‘variabel’: ‘pris’, ‘vare’: ‘vin’}, ‘d_pris_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘d_pris_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘d’, ‘variabel’: ‘pris’, ‘vare’: ‘øl’}, ‘e_antall_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘e_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘e’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’}, ‘e_antall_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘e_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘e’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’}, ‘e_antall_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘e_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘e’, ‘variabel’: ‘antall’, ‘vare’: ‘te’}, ‘e_antall_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘e_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘e’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’}, ‘e_antall_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘e_antall_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘e’, ‘variabel’: ‘antall’, ‘vare’: ‘øl’}, ‘e_pris_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘e_pris_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘e’, ‘variabel’: ‘pris’, ‘vare’: ‘brus’}, ‘e_pris_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘e_pris_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘e’, ‘variabel’: ‘pris’, ‘vare’: ‘kaffe’}, ‘e_pris_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘e_pris_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘e’, ‘variabel’: ‘pris’, ‘vare’: ‘te’}, ‘e_pris_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘e_pris_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘e’, ‘variabel’: ‘pris’, ‘vare’: ‘vin’}, ‘e_pris_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘e_pris_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘e’, ‘variabel’: ‘pris’, ‘vare’: ‘øl’}, ‘f_antall_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘f_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘f’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’}, ‘f_antall_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘f_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘f’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’}, ‘f_antall_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘f_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘f’, ‘variabel’: ‘antall’, ‘vare’: ‘te’}, ‘f_antall_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘f_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘f’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’}, ‘f_antall_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘f_antall_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘f’, ‘variabel’: ‘antall’, ‘vare’: ‘øl’}, ‘f_pris_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘f_pris_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘f’, ‘variabel’: ‘pris’, ‘vare’: ‘brus’}, ‘f_pris_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘f_pris_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘f’, ‘variabel’: ‘pris’, ‘vare’: ‘kaffe’}, ‘f_pris_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘f_pris_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘f’, ‘variabel’: ‘pris’, ‘vare’: ‘te’}, ‘f_pris_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘f_pris_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘f’, ‘variabel’: ‘pris’, ‘vare’: ‘vin’}, ‘f_pris_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘f_pris_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘f’, ‘variabel’: ‘pris’, ‘vare’: ‘øl’}, ‘g_antall_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘g_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘g’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’}, ‘g_antall_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘g_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘g’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’}, ‘g_antall_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘g_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘g’, ‘variabel’: ‘antall’, ‘vare’: ‘te’}, ‘g_antall_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘g_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘g’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’}, ‘g_antall_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘g_antall_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘g’, ‘variabel’: ‘antall’, ‘vare’: ‘øl’}, ‘g_pris_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘g_pris_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘g’, ‘variabel’: ‘pris’, ‘vare’: ‘brus’}, ‘g_pris_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘g_pris_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘g’, ‘variabel’: ‘pris’, ‘vare’: ‘kaffe’}, ‘g_pris_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘g_pris_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘g’, ‘variabel’: ‘pris’, ‘vare’: ‘te’}, ‘g_pris_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘g_pris_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘g’, ‘variabel’: ‘pris’, ‘vare’: ‘vin’}, ‘g_pris_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘g_pris_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘g’, ‘variabel’: ‘pris’, ‘vare’: ‘øl’}, ‘h_antall_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘h_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘h’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’}, ‘h_antall_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘h_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘h’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’}, ‘h_antall_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘h_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘h’, ‘variabel’: ‘antall’, ‘vare’: ‘te’}, ‘h_antall_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘h_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘h’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’}, ‘h_antall_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘h_antall_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘h’, ‘variabel’: ‘antall’, ‘vare’: ‘øl’}, ‘h_pris_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘h_pris_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘h’, ‘variabel’: ‘pris’, ‘vare’: ‘brus’}, ‘h_pris_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘h_pris_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘h’, ‘variabel’: ‘pris’, ‘vare’: ‘kaffe’}, ‘h_pris_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘h_pris_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘h’, ‘variabel’: ‘pris’, ‘vare’: ‘te’}, ‘h_pris_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘h_pris_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘h’, ‘variabel’: ‘pris’, ‘vare’: ‘vin’}, ‘h_pris_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘h_pris_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘h’, ‘variabel’: ‘pris’, ‘vare’: ‘øl’}, ‘i_antall_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘i_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘i’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’}, ‘i_antall_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘i_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘i’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’}, ‘i_antall_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘i_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘i’, ‘variabel’: ‘antall’, ‘vare’: ‘te’}, ‘i_antall_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘i_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘i’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’}, ‘i_antall_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘i_antall_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘i’, ‘variabel’: ‘antall’, ‘vare’: ‘øl’}, ‘i_pris_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘i_pris_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘i’, ‘variabel’: ‘pris’, ‘vare’: ‘brus’}, ‘i_pris_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘i_pris_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘i’, ‘variabel’: ‘pris’, ‘vare’: ‘kaffe’}, ‘i_pris_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘i_pris_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘i’, ‘variabel’: ‘pris’, ‘vare’: ‘te’}, ‘i_pris_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘i_pris_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘i’, ‘variabel’: ‘pris’, ‘vare’: ‘vin’}, ‘i_pris_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘i_pris_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘i’, ‘variabel’: ‘pris’, ‘vare’: ‘øl’}, ‘j_antall_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘j_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘j’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’}, ‘j_antall_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘j_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘j’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’}, ‘j_antall_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘j_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘j’, ‘variabel’: ‘antall’, ‘vare’: ‘te’}, ‘j_antall_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘j_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘j’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’}, ‘j_antall_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘j_antall_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘j’, ‘variabel’: ‘antall’, ‘vare’: ‘øl’}, ‘j_pris_brus’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘j_pris_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘j’, ‘variabel’: ‘pris’, ‘vare’: ‘brus’}, ‘j_pris_kaffe’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘j_pris_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘j’, ‘variabel’: ‘pris’, ‘vare’: ‘kaffe’}, ‘j_pris_te’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘j_pris_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘j’, ‘variabel’: ‘pris’, ‘vare’: ‘te’}, ‘j_pris_vin’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘j_pris_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘j’, ‘variabel’: ‘pris’, ‘vare’: ‘vin’}, ‘j_pris_øl’: {‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘j_pris_øl’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘j’, ‘variabel’: ‘pris’, ‘vare’: ‘øl’}, …}, ‘repository’: ‘tutorials’} |
None |
|
tutorials |
a_antall_brus |
series |
{‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_antall_brus’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘antall’, ‘vare’: ‘brus’} |
AZ_drikkevarer |
None |
tutorials |
a_antall_kaffe |
series |
{‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_antall_kaffe’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘antall’, ‘vare’: ‘kaffe’} |
AZ_drikkevarer |
None |
tutorials |
a_antall_te |
series |
{‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_antall_te’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘antall’, ‘vare’: ‘te’} |
AZ_drikkevarer |
None |
tutorials |
a_antall_vin |
series |
{‘dataset’: ‘AZ_drikkevarer’, ‘name’: ‘a_antall_vin’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘butikk’: ‘a’, ‘variabel’: ‘antall’, ‘vare’: ‘vin’} |
AZ_drikkevarer |
None |
… |
… |
… |
… |
… |
… |
tutorials |
z_volume_wine_NW |
series |
{‘dataset’: ‘AZ_drinks’, ‘name’: ‘z_volume_wine_NW’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘store’: ‘z’, ‘variable’: ‘volume’, ‘product’: ‘wine’, ‘region’: ‘NW’} |
AZ_drinks |
None |
tutorials |
z_volume_wine_S |
series |
{‘dataset’: ‘AZ_drinks’, ‘name’: ‘z_volume_wine_S’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘store’: ‘z’, ‘variable’: ‘volume’, ‘product’: ‘wine’, ‘region’: ‘S’} |
AZ_drinks |
None |
tutorials |
z_volume_wine_SE |
series |
{‘dataset’: ‘AZ_drinks’, ‘name’: ‘z_volume_wine_SE’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘store’: ‘z’, ‘variable’: ‘volume’, ‘product’: ‘wine’, ‘region’: ‘SE’} |
AZ_drinks |
None |
tutorials |
z_volume_wine_SW |
series |
{‘dataset’: ‘AZ_drinks’, ‘name’: ‘z_volume_wine_SW’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘store’: ‘z’, ‘variable’: ‘volume’, ‘product’: ‘wine’, ‘region’: ‘SW’} |
AZ_drinks |
None |
tutorials |
z_volume_wine_W |
series |
{‘dataset’: ‘AZ_drinks’, ‘name’: ‘z_volume_wine_W’, ‘versioning’: ‘NONE’, ‘temporality’: ‘FROM_TO’, ‘repository’: ‘tutorials’, ‘store’: ‘z’, ‘variable’: ‘volume’, ‘product’: ‘wine’, ‘region’: ‘W’} |
AZ_drinks |
None |
Consuming KLASS¶
The Dataset and Series attributes are technically just key-value pairs.
It is, however, possible (even recommended) to rely on more formal taxonomies top structure these.
from klass import get_classification
from klass import KlassClassification # Import the class for KlassClassifications
print(get_classification(157))
Classification 157: Standard for klassifisering av energibalanseposter
Owning Section: 425 - Seksjon for energi-, miljø- og transportstatistikk
Contact Person:
name: Bjelvert, Malin
email: Malin.Bjelvert@ssb.no
phone:
Statistical Units: Foretak, Aktivitet/produkt/tjeneste/vare, Person, Bedrift
Number of versions: 1
Klassifisering av energibalanseposter er en klassifisering av tilgang og anvendelse av energiprodukter. Energibalansen følger en territorial avgrensing og omfatter all
flyt av energiprodukter på norsk jord, uavhengig av nasjonalitet.
from ssb_timeseries.meta import Taxonomy
print('"Energy balance posts" - KLASS 157 is an example of a taxonomy with hierarchical structure.')
klass157 = Taxonomy(klass_id=157)
klass157.entities # <-- arrow table, with an extra row 0
"Energy balance posts" - KLASS 157 is an example of a taxonomy with hierarchical structure.
pyarrow.Table code: string not null parentCode: string name: string not null level: string shortName: string presentationName: string validFrom: string validTo: string notes: string ---- code: [["0","1","1.1","1.1.1","1.1.2",...,"8.6","8.7","8.8","8.9","9"]] parentCode: [[null,"0","1","1.1","1.1",...,"8","8","8","8","0"]] name: [["KLASS-157","Produksjon av primære energiprodukter","Av dette fra fornybare kilder","Av dette i vannkraftverk","Av dette i vindkraftverk",...,"Vindkraftstasjoner","Varmekraftverk","Kraftvarmeverk","Fjernvarmeverk","Svinn"]] level: [["0","1","2","3","3",...,"2","2","2","2","1"]] shortName: [["","","","","",...,"","","","",""]] presentationName: [["","","","","",...,"","","","",""]] validFrom: [["",null,null,null,null,...,null,null,null,null,null]] validTo: [["",null,null,null,null,...,null,null,null,null,null]] notes: [["","Produksjon av primære energiprodukter omfatter utvinning av brensel eller energi fra naturlige fo (... 239 chars omitted)","Produksjon av primære energiprodukter fra fornybare energikilder, for eksempel produksjon av biod (... 72 chars omitted)","Elektrisitet produsert i verk som drives av frisk, flytende eller fallende vann.","Elektrisitet produsert i verk som drives av vindkraft",...,"","I varmekraftverk omvandles termisk energi til elektrisitet ved bruk av brennbare energiprodukter, (... 107 chars omitted)","Forbruk av energi i anlegg som produserer både varme og elektrisk kraft.","I fjernvarmeverk omvandles termisk energi til varme ved bruk av brennbare energiprodukter, dvs. en (... 100 chars omitted)","Svinn er tap under overføring, fordeling og transport av brensel, varme og elektrisitet."]]
# ... is inserted by the Taxonomy() bto create a tree structure with a single root node
klass157.print_tree()
╙── 0
├─╼ 1
│ ├─╼ 1.1
│ │ ├─╼ 1.1.1
│ │ ├─╼ 1.1.2
│ │ └─╼ 1.1.3
│ └─╼ 1.2
├─╼ 11
│ ├─╼ 11.1
│ └─╼ 11.2
├─╼ 12
│ ├─╼ 12.1
│ │ ├─╼ 12.1.1
│ │ ├─╼ 12.1.10
│ │ ├─╼ 12.1.11
│ │ ├─╼ 12.1.12
│ │ ├─╼ 12.1.13
│ │ ├─╼ 12.1.2
│ │ ├─╼ 12.1.3
│ │ ├─╼ 12.1.4
│ │ ├─╼ 12.1.5
│ │ ├─╼ 12.1.6
│ │ ├─╼ 12.1.7
│ │ ├─╼ 12.1.8
│ │ └─╼ 12.1.9
│ ├─╼ 12.2
│ │ ├─╼ 12.2.1
│ │ ├─╼ 12.2.2
│ │ ├─╼ 12.2.3
│ │ ├─╼ 12.2.4
│ │ └─╼ 12.2.5
│ └─╼ 12.3
│ ├─╼ 12.3.1
│ ├─╼ 12.3.2
│ ├─╼ 12.3.3
│ └─╼ 12.3.4
├─╼ 13
├─╼ 14
├─╼ 15
├─╼ 2
├─╼ 3
├─╼ 4
│ ├─╼ 4.1
│ └─╼ 4.2
├─╼ 5
├─╼ 6
├─╼ 7
│ ├─╼ 7.1
│ ├─╼ 7.2
│ ├─╼ 7.3
│ ├─╼ 7.4
│ ├─╼ 7.5
│ └─╼ 7.6
├─╼ 8
│ ├─╼ 8.1
│ ├─╼ 8.2
│ ├─╼ 8.3
│ ├─╼ 8.4
│ ├─╼ 8.5
│ ├─╼ 8.6
│ ├─╼ 8.7
│ ├─╼ 8.8
│ └─╼ 8.9
└─╼ 9
print(klass157.leaf_nodes)
['1.1.1', '1.1.2', '1.1.3', '1.2', '11.1', '11.2', '12.1.1', '12.1.10', '12.1.11', '12.1.12', '12.1.13', '12.1.2', '12.1.3', '12.1.4', '12.1.5', '12.1.6', '12.1.7', '12.1.8', '12.1.9', '12.2.1', '12.2.2', '12.2.3', '12.2.4', '12.2.5', '12.3.1', '12.3.2', '12.3.3', '12.3.4', '13', '14', '15', '2', '3', '4.1', '4.2', '5', '6', '7.1', '7.2', '7.3', '7.4', '7.5', '7.6', '8.1', '8.2', '8.3', '8.4', '8.5', '8.6', '8.7', '8.8', '8.9', '9']
print(klass157.parent_nodes)
['1', '0', '1.1', '11', '12', '12.1', '12.2', '12.3', '4', '7', '8']
# read/write to file -> taxonomies can be defined outside KLASS
#klass157.save('klass157.json')
#file157 = Taxonomy(path='klass157.json')
#klass157 == file157