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.

Updating tags after calculations

prices = Dataset('AZ Drinks')[{'variable':'price'}]
volumes = Dataset('AZ Drinks')[{'variable':'volume'}]
revenues = prices * volumes

The new Dataset instance revenues gets an autogenerated name. The series names are also inherited from the inputs to the calculation.

print(revenues.name)
print(revenues.series)
(COPY of(AZ Drinks SELECTED by names (), pattern: , regex:  tags: [{'variable': 'price'}]).multiply.COPY of(AZ Drinks SELECTED by names (), pattern: , regex:  tags: [{'variable': 'volume'}]))
['a_price_beer', 'a_price_coffe', 'a_price_softdrinks', 'a_price_tea', 'a_price_wine', 'b_price_beer', 'b_price_coffe', 'b_price_softdrinks', 'b_price_tea', 'b_price_wine', 'c_price_beer', 'c_price_coffe', 'c_price_softdrinks', 'c_price_tea', 'c_price_wine', 'd_price_beer', 'd_price_coffe', 'd_price_softdrinks', 'd_price_tea', 'd_price_wine', 'e_price_beer', 'e_price_coffe', 'e_price_softdrinks', 'e_price_tea', 'e_price_wine', 'f_price_beer', 'f_price_coffe', 'f_price_softdrinks', 'f_price_tea', 'f_price_wine', 'g_price_beer', 'g_price_coffe', 'g_price_softdrinks', 'g_price_tea', 'g_price_wine', 'h_price_beer', 'h_price_coffe', 'h_price_softdrinks', 'h_price_tea', 'h_price_wine', 'i_price_beer', 'i_price_coffe', 'i_price_softdrinks', 'i_price_tea', 'i_price_wine', 'j_price_beer', 'j_price_coffe', 'j_price_softdrinks', 'j_price_tea', 'j_price_wine', 'k_price_beer', 'k_price_coffe', 'k_price_softdrinks', 'k_price_tea', 'k_price_wine', 'l_price_beer', 'l_price_coffe', 'l_price_softdrinks', 'l_price_tea', 'l_price_wine', 'm_price_beer', 'm_price_coffe', 'm_price_softdrinks', 'm_price_tea', 'm_price_wine', 'n_price_beer', 'n_price_coffe', 'n_price_softdrinks', 'n_price_tea', 'n_price_wine', 'o_price_beer', 'o_price_coffe', 'o_price_softdrinks', 'o_price_tea', 'o_price_wine', 'p_price_beer', 'p_price_coffe', 'p_price_softdrinks', 'p_price_tea', 'p_price_wine', 'q_price_beer', 'q_price_coffe', 'q_price_softdrinks', 'q_price_tea', 'q_price_wine', 'r_price_beer', 'r_price_coffe', 'r_price_softdrinks', 'r_price_tea', 'r_price_wine', 's_price_beer', 's_price_coffe', 's_price_softdrinks', 's_price_tea', 's_price_wine', 't_price_beer', 't_price_coffe', 't_price_softdrinks', 't_price_tea', 't_price_wine', 'u_price_beer', 'u_price_coffe', 'u_price_softdrinks', 'u_price_tea', 'u_price_wine', 'v_price_beer', 'v_price_coffe', 'v_price_softdrinks', 'v_price_tea', 'v_price_wine', 'w_price_beer', 'w_price_coffe', 'w_price_softdrinks', 'w_price_tea', 'w_price_wine', 'x_price_beer', 'x_price_coffe', 'x_price_softdrinks', 'x_price_tea', 'x_price_wine', 'y_price_beer', 'y_price_coffe', 'y_price_softdrinks', 'y_price_tea', 'y_price_wine', 'z_price_beer', 'z_price_coffe', 'z_price_softdrinks', 'z_price_tea', 'z_price_wine']

revenues.rename('AZ Revenue', ('price', 'revenue'))
print(revenues.name)
print(revenues.series)
AZ Revenue
['a_revenue_beer', 'a_revenue_coffe', 'a_revenue_softdrinks', 'a_revenue_tea', 'a_revenue_wine', 'b_revenue_beer', 'b_revenue_coffe', 'b_revenue_softdrinks', 'b_revenue_tea', 'b_revenue_wine', 'c_revenue_beer', 'c_revenue_coffe', 'c_revenue_softdrinks', 'c_revenue_tea', 'c_revenue_wine', 'd_revenue_beer', 'd_revenue_coffe', 'd_revenue_softdrinks', 'd_revenue_tea', 'd_revenue_wine', 'e_revenue_beer', 'e_revenue_coffe', 'e_revenue_softdrinks', 'e_revenue_tea', 'e_revenue_wine', 'f_revenue_beer', 'f_revenue_coffe', 'f_revenue_softdrinks', 'f_revenue_tea', 'f_revenue_wine', 'g_revenue_beer', 'g_revenue_coffe', 'g_revenue_softdrinks', 'g_revenue_tea', 'g_revenue_wine', 'h_revenue_beer', 'h_revenue_coffe', 'h_revenue_softdrinks', 'h_revenue_tea', 'h_revenue_wine', 'i_revenue_beer', 'i_revenue_coffe', 'i_revenue_softdrinks', 'i_revenue_tea', 'i_revenue_wine', 'j_revenue_beer', 'j_revenue_coffe', 'j_revenue_softdrinks', 'j_revenue_tea', 'j_revenue_wine', 'k_revenue_beer', 'k_revenue_coffe', 'k_revenue_softdrinks', 'k_revenue_tea', 'k_revenue_wine', 'l_revenue_beer', 'l_revenue_coffe', 'l_revenue_softdrinks', 'l_revenue_tea', 'l_revenue_wine', 'm_revenue_beer', 'm_revenue_coffe', 'm_revenue_softdrinks', 'm_revenue_tea', 'm_revenue_wine', 'n_revenue_beer', 'n_revenue_coffe', 'n_revenue_softdrinks', 'n_revenue_tea', 'n_revenue_wine', 'o_revenue_beer', 'o_revenue_coffe', 'o_revenue_softdrinks', 'o_revenue_tea', 'o_revenue_wine', 'p_revenue_beer', 'p_revenue_coffe', 'p_revenue_softdrinks', 'p_revenue_tea', 'p_revenue_wine', 'q_revenue_beer', 'q_revenue_coffe', 'q_revenue_softdrinks', 'q_revenue_tea', 'q_revenue_wine', 'r_revenue_beer', 'r_revenue_coffe', 'r_revenue_softdrinks', 'r_revenue_tea', 'r_revenue_wine', 's_revenue_beer', 's_revenue_coffe', 's_revenue_softdrinks', 's_revenue_tea', 's_revenue_wine', 't_revenue_beer', 't_revenue_coffe', 't_revenue_softdrinks', 't_revenue_tea', 't_revenue_wine', 'u_revenue_beer', 'u_revenue_coffe', 'u_revenue_softdrinks', 'u_revenue_tea', 'u_revenue_wine', 'v_revenue_beer', 'v_revenue_coffe', 'v_revenue_softdrinks', 'v_revenue_tea', 'v_revenue_wine', 'w_revenue_beer', 'w_revenue_coffe', 'w_revenue_softdrinks', 'w_revenue_tea', 'w_revenue_wine', 'x_revenue_beer', 'x_revenue_coffe', 'x_revenue_softdrinks', 'x_revenue_tea', 'x_revenue_wine', 'y_revenue_beer', 'y_revenue_coffe', 'y_revenue_softdrinks', 'y_revenue_tea', 'y_revenue_wine', 'z_revenue_beer', 'z_revenue_coffe', 'z_revenue_softdrinks', 'z_revenue_tea', 'z_revenue_wine']

A similar operation is required for tags:

# DEBUG: tags are lost in selects above, hence not flowing through
revenues.tags["series"]["a_revenue_beer"]
{'dataset': 'AZ Revenue',
 'name': 'a_revenue_beer',
 'product': 'beer',
 'repository': 'tutorials',
 'store': 'a',
 'temporality': 'FROM_TO',
 'variable': 'price',
 'versioning': 'NONE'}
# ... tag maintenance is likely to be necessary after calculations:
revenues.replace_tags(({'variable':'price'},{'variable':'revenue'}))
revenues.tags["series"]["a_revenue_beer"]
{'dataset': 'AZ Revenue',
 'name': 'a_revenue_beer',
 'product': 'beer',
 'repository': 'tutorials',
 'store': 'a',
 'temporality': 'FROM_TO',
 'variable': 'revenue',
 'versioning': 'NONE'}

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