{
"cells": [
{
"cell_type": "markdown",
"id": "5e656f0d",
"metadata": {},
"source": [
"# 💻 Aggregering av data\n",
"\n",
"[](https://colab.research.google.com/github/GMGI221-2024/forelesninger/blob/main/06_aggregering_av_data.ipynb)\n",
"\n",
"Dataaggregering refererer til en prosess der vi kombinerer data i grupper. NÃ¥r\n",
"vi gjør romlig dataaggregering, slår vi geometriene sammen til grovere\n",
"enheter (basert på noen attributter), og kan også beregne sammendragsstatistikk for\n",
"disse kombinerte geometriene fra de opprinnelige, mer detaljerte verdiene. For eksempel,\n",
"anta at vi er interessert i å studere kontinenter, men vi har bare\n",
"landnivådata som datsettet for land; Hvis vi aggregerer dataene etter\n",
"kontinent, vil vi konvertere dataene på landsnivå til et datasett på\n",
"kontinentnivå.\n",
"\n",
"I denne opplæringen vil vi aggregere befolkningsdataene våre i Ås, dvs. rutenettcellene som har samme antall innbyggere vil bli slått sammen.\n",
"\n",
"La oss starte med å laste inn befolkningsdata i Ås fra filen: `aas_befolkning_2023.geojson`:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "0da59bd4",
"metadata": {},
"outputs": [],
"source": [
"import pathlib \n",
"NOTEBOOK_PATH = pathlib.Path().resolve()\n",
"DATA_MAPPE = NOTEBOOK_PATH / \"data\""
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "f60699fb",
"metadata": {},
"outputs": [],
"source": [
"import geopandas\n",
"intersection = geopandas.read_file(DATA_MAPPE / \"ssb_rutenett\" / \"aas_befolkning_2023.geojson\")"
]
},
{
"cell_type": "markdown",
"id": "af58fe34",
"metadata": {},
"source": [
"For å gjøre aggregeringen vil vi bruke en metode som heter `dissolve()` som tar\n",
"som inngang kolonnen som vil bli brukt til å utføre aggregeringen:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c4befebe",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
geometry
\n",
"
ru250m
\n",
"
gml_id
\n",
"
lokalId
\n",
"
navnerom
\n",
"
versjonId
\n",
"
oppdateringsdato
\n",
"
gyldigFra
\n",
"
datauttaksdato
\n",
"
navn
\n",
"
språk
\n",
"
kommunenummer
\n",
"
kommunenavn
\n",
"
samiskForvaltningsområde
\n",
"
\n",
"
\n",
"
pop_tot
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
1
\n",
"
MULTIPOLYGON (((261225.860 6618040.140, 261183...
\n",
"
22605006626000
\n",
"
kommune.28
\n",
"
d285e9c4-8da0-4dfc-b927-31ba7ee17e6a
\n",
"
https://data.geonorge.no/sosi/inndelinger/innd...
\n",
"
3
\n",
"
2023-11-28 16:00:22
\n",
"
2024-01-01
\n",
"
2024-03-04 12:27:57
\n",
"
Ã…s
\n",
"
nor
\n",
"
3218
\n",
"
Ã…s
\n",
"
False
\n",
"
\n",
"
\n",
"
2
\n",
"
MULTIPOLYGON (((260250.000 6618500.000, 260250...
\n",
"
22650006625250
\n",
"
kommune.28
\n",
"
d285e9c4-8da0-4dfc-b927-31ba7ee17e6a
\n",
"
https://data.geonorge.no/sosi/inndelinger/innd...
\n",
"
3
\n",
"
2023-11-28 16:00:22
\n",
"
2024-01-01
\n",
"
2024-03-04 12:27:57
\n",
"
Ã…s
\n",
"
nor
\n",
"
3218
\n",
"
Ã…s
\n",
"
False
\n",
"
\n",
"
\n",
"
3
\n",
"
MULTIPOLYGON (((260000.000 6619250.000, 260250...
\n",
"
22617506625250
\n",
"
kommune.28
\n",
"
d285e9c4-8da0-4dfc-b927-31ba7ee17e6a
\n",
"
https://data.geonorge.no/sosi/inndelinger/innd...
\n",
"
3
\n",
"
2023-11-28 16:00:22
\n",
"
2024-01-01
\n",
"
2024-03-04 12:27:57
\n",
"
Ã…s
\n",
"
nor
\n",
"
3218
\n",
"
Ã…s
\n",
"
False
\n",
"
\n",
"
\n",
"
4
\n",
"
MULTIPOLYGON (((262000.000 6618000.000, 262000...
\n",
"
22602506625750
\n",
"
kommune.28
\n",
"
d285e9c4-8da0-4dfc-b927-31ba7ee17e6a
\n",
"
https://data.geonorge.no/sosi/inndelinger/innd...
\n",
"
3
\n",
"
2023-11-28 16:00:22
\n",
"
2024-01-01
\n",
"
2024-03-04 12:27:57
\n",
"
Ã…s
\n",
"
nor
\n",
"
3218
\n",
"
Ã…s
\n",
"
False
\n",
"
\n",
"
\n",
"
5
\n",
"
MULTIPOLYGON (((261079.690 6617980.860, 261078...
\n",
"
22650006625500
\n",
"
kommune.28
\n",
"
d285e9c4-8da0-4dfc-b927-31ba7ee17e6a
\n",
"
https://data.geonorge.no/sosi/inndelinger/innd...
\n",
"
3
\n",
"
2023-11-28 16:00:22
\n",
"
2024-01-01
\n",
"
2024-03-04 12:27:57
\n",
"
Ã…s
\n",
"
nor
\n",
"
3218
\n",
"
Ã…s
\n",
"
False
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" geometry ru250m \\\n",
"pop_tot \n",
"1 MULTIPOLYGON (((261225.860 6618040.140, 261183... 22605006626000 \n",
"2 MULTIPOLYGON (((260250.000 6618500.000, 260250... 22650006625250 \n",
"3 MULTIPOLYGON (((260000.000 6619250.000, 260250... 22617506625250 \n",
"4 MULTIPOLYGON (((262000.000 6618000.000, 262000... 22602506625750 \n",
"5 MULTIPOLYGON (((261079.690 6617980.860, 261078... 22650006625500 \n",
"\n",
" gml_id lokalId \\\n",
"pop_tot \n",
"1 kommune.28 d285e9c4-8da0-4dfc-b927-31ba7ee17e6a \n",
"2 kommune.28 d285e9c4-8da0-4dfc-b927-31ba7ee17e6a \n",
"3 kommune.28 d285e9c4-8da0-4dfc-b927-31ba7ee17e6a \n",
"4 kommune.28 d285e9c4-8da0-4dfc-b927-31ba7ee17e6a \n",
"5 kommune.28 d285e9c4-8da0-4dfc-b927-31ba7ee17e6a \n",
"\n",
" navnerom versjonId \\\n",
"pop_tot \n",
"1 https://data.geonorge.no/sosi/inndelinger/innd... 3 \n",
"2 https://data.geonorge.no/sosi/inndelinger/innd... 3 \n",
"3 https://data.geonorge.no/sosi/inndelinger/innd... 3 \n",
"4 https://data.geonorge.no/sosi/inndelinger/innd... 3 \n",
"5 https://data.geonorge.no/sosi/inndelinger/innd... 3 \n",
"\n",
" oppdateringsdato gyldigFra datauttaksdato navn språk \\\n",
"pop_tot \n",
"1 2023-11-28 16:00:22 2024-01-01 2024-03-04 12:27:57 Ã…s nor \n",
"2 2023-11-28 16:00:22 2024-01-01 2024-03-04 12:27:57 Ã…s nor \n",
"3 2023-11-28 16:00:22 2024-01-01 2024-03-04 12:27:57 Ã…s nor \n",
"4 2023-11-28 16:00:22 2024-01-01 2024-03-04 12:27:57 Ã…s nor \n",
"5 2023-11-28 16:00:22 2024-01-01 2024-03-04 12:27:57 Ã…s nor \n",
"\n",
" kommunenummer kommunenavn samiskForvaltningsområde \n",
"pop_tot \n",
"1 3218 Ã…s False \n",
"2 3218 Ã…s False \n",
"3 3218 Ã…s False \n",
"4 3218 Ã…s False \n",
"5 3218 Ã…s False "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Utføre aggregeringen\n",
"dissolved = intersection.dissolve(by=\"pop_tot\")\n",
"\n",
"# Hva fikk vi\n",
"dissolved.head()"
]
},
{
"cell_type": "markdown",
"id": "c6adf892",
"metadata": {},
"source": [
"La oss sammenligne antall celler i lagene før og etter aggregeringen:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "9b36aa39",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Rader i opprinnelig intersection GeoDataFrame: 636\n",
"Rader i oppløst lag: 142\n"
]
}
],
"source": [
"print(f\"Rader i opprinnelig intersection GeoDataFrame: {len(intersection)}\")\n",
"print(f\"Rader i oppløst lag: {len(dissolved)}\")"
]
},
{
"cell_type": "markdown",
"id": "1a0b8056",
"metadata": {},
"source": [
"Faktisk har antall rader i dataene våre blitt redusert og polygonene har blitt\n",
"slått sammen.\n",
"\n",
"Hva skjedde egentlig her? La oss ta en nærmere titt. \n",
"\n",
"La oss se hvilke kolonner vi nå har i vår GeoDataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "de0d71c9",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['geometry', 'ru250m', 'gml_id', 'lokalId', 'navnerom', 'versjonId',\n",
" 'oppdateringsdato', 'gyldigFra', 'datauttaksdato', 'navn', 'språk',\n",
" 'kommunenummer', 'kommunenavn', 'samiskForvaltningsområde'],\n",
" dtype='object')"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dissolved.columns"
]
},
{
"cell_type": "markdown",
"id": "026ce48f",
"metadata": {},
"source": [
"Som vi kan se, kan ikke kolonnen som vi brukte for å utføre aggregeringen\n",
"(`pop_tot`) finnes lenger i kolonnelisten. Hva skjedde med\n",
"den?\n",
"\n",
"La oss ta en titt på indeksene i vår GeoDataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "0864f418",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,\n",
" ...\n",
" 250, 256, 261, 278, 284, 297, 300, 344, 368, 379],\n",
" dtype='int64', name='pop_tot', length=142)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dissolved.index"
]
},
{
"cell_type": "markdown",
"id": "41a49537",
"metadata": {},
"source": [
"Aha! Vel nå forstår vi hvor kolonnen vår gikk. Den brukes nå som indeks i\n",
"vår `dissolved` GeoDataFrame. \n",
"\n",
"NÃ¥ kan vi for eksempel bare velge slike geometrier fra laget som har for\n",
"eksempel nøyaktig 15 innbyggere:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "6b5f54db",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"geometry MULTIPOLYGON (((259250.00000892268 6620999.999...\n",
"ru250m 22612506625750\n",
"gml_id kommune.28\n",
"lokalId d285e9c4-8da0-4dfc-b927-31ba7ee17e6a\n",
"navnerom https://data.geonorge.no/sosi/inndelinger/innd...\n",
"versjonId 3\n",
"oppdateringsdato 2023-11-28 16:00:22\n",
"gyldigFra 2024-01-01\n",
"datauttaksdato 2024-03-04 12:27:57\n",
"navn Ã…s\n",
"språk nor\n",
"kommunenummer 3218\n",
"kommunenavn Ã…s\n",
"samiskForvaltningsområde False\n",
"Name: 15, dtype: object"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Velg bare geometrier som har 15 innbyggere\n",
"dissolved.loc[15]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "8806cba1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"pandas.core.series.Series"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Se datatype\n",
"type(dissolved.loc[15])"
]
},
{
"cell_type": "markdown",
"id": "a64a16a3",
"metadata": {},
"source": [
"Som vi kan se, har vi nå som et resultat et Pandas `Series` objekt som inneholder\n",
"i utgangspunktet en rad fra vår opprinnelige aggregerte GeoDataFrame.\n",
"\n",
"La oss også visualisere disse 15 innbyggere-rutenettcellene.\n",
"\n",
"Først må vi konvertere den valgte raden tilbake til en GeoDataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "4eeb2269",
"metadata": {},
"outputs": [],
"source": [
"# Lag en GeoDataFrame\n",
"selection = geopandas.GeoDataFrame([dissolved.loc[15]], crs=dissolved.crs)"
]
},
{
"cell_type": "markdown",
"id": "9541de9a",
"metadata": {},
"source": [
"Plott utvalget på toppen av hele rutenettet:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "306e562a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAATAAAAGsCAYAAABaX/vLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABHIElEQVR4nO3deVQUV9o/8G+zNSCLgmloGgRECSgmEpuoEINmlOjEbAYwauIWPckPlyhDJkHGCS4DI3E8nDejvAODqHFJ3knEOCYa0AiJ0Qy+qBNBBRQQZQ1rg2Cz9P394UsNxdqN3XQXPJ9z+sSqurf6dsd+vPXUrXtFjDEGQggRICN9N4AQQgaLAhghRLAogBFCBIsCGCFEsCiAEUIEiwIYIUSwKIARQgSLAhghRLAogBFCBIsCGCFEsCiA9eGHH37Ayy+/DCcnJ4hEIpw4cULjczDGsHv3bnh6ekIsFsPFxQUxMTHabywhI5SJvhtgqB48eICnn34aq1atwhtvvDGoc7z//vtIS0vD7t27MWXKFDQ0NKC6ulrLLSVk5BLRw9wDE4lESE1NxWuvvcbta21txR/+8AccOXIE9fX18PHxwa5duzB79mwAwM2bN/HUU08hJycHTz75pH4aTsgwR5eQg7Rq1Sr89NNP+Pzzz/HLL78gJCQE8+fPR0FBAQDgn//8J8aPH49Tp07B3d0dbm5uWLNmDWpra/XcckKGDwpgg3Dnzh0cO3YM//jHPzBr1ix4eHggIiICzz33HFJSUgAAhYWFuHv3Lv7xj3/g0KFDOHDgALKzsxEcHKzn1hMyfFAObBCuXLkCxhg8PT15+5VKJezt7QEAKpUKSqUShw4d4solJydj2rRpyMvLo8tKQrSAAtggqFQqGBsbIzs7G8bGxrxjVlZWAACpVAoTExNekPP29gYAlJSUUAAjRAsogA2Cr68vOjo6UFVVhVmzZvVaJiAgAO3t7bhz5w48PDwAAPn5+QAAV1fXIWsrIcMZ3YXsQ1NTE27fvg3gUcDas2cP5syZAzs7O4wbNw5vvfUWfvrpJ/zlL3+Br68vqqur8f3332PKlCn47W9/C5VKBT8/P1hZWSE+Ph4qlQrr1q2DjY0N0tLS9PzpCBkmGOnV+fPnGYAerxUrVjDGGGttbWV//OMfmZubGzM1NWWOjo7s9ddfZ7/88gt3jtLSUrZo0SJmZWXFHBwc2MqVK1lNTY2ePhEhww/1wAghgkXDKAghgkUBjBAiWHQXsguVSoWysjJYW1tDJBLpuzmEjEiMMTQ2NsLJyQlGRv33sSiAdVFWVgYXFxd9N4MQAuDevXtwdnbutwwFsC6sra0BPPribGxs9NwaQkYmhUIBFxcX7vfYHwpgXXReNtrY2FAAI0TP1EnjUBKfECJYFMAIIYJFAYwQIlgUwAghgkUBjBAiWBTACCGCRQGMECJYFMAIIYJFAYwQIlgUwAghgkUBjBAiWBTACCGCRQGMECJYNBsF0VhDQwOUSiUAYPTo0TAzM9Nzi7Srvr4etra2NKmlAGjcAystLcVbb70Fe3t7WFpaYurUqcjOzu63jlKpRFRUFFxdXSEWi+Hh4YH9+/dzx48fPw65XI7Ro0dj1KhRmDp1Kj777DPeOWJjY+Hn5wdra2tIJBK89tpryMvL45VZuXIlRCIR7zVjxgxNPyIZwNmzZ5GQkICEhATEx8fj2rVr+m6SVo0ePZqCl0Bo1AOrq6tDQEAA5syZg9OnT0MikeDOnTsYPXp0v/VCQ0NRWVmJ5ORkTJgwAVVVVWhvb+eO29nZISoqCl5eXjAzM8OpU6ewatUqSCQSvPjiiwCAzMxMrFu3Dn5+fmhvb0dUVBSCgoJw48YNjBo1ijvX/PnzkZKSwm0Pt96BoWlpacGNGzcwdepUfTeFjEAaBbBdu3bBxcWFFyDc3Nz6rXPmzBlkZmaisLAQdnZ2vdaZPXs2b/v999/HwYMHceHCBS6AnTlzhlcmJSUFEokE2dnZeP7557n9YrEYjo6OmnwsQohAaXQJefLkScjlcoSEhEAikcDX1xdJSUlq1YmLi4NMJoOnpyciIiLQ0tLSa3nGGM6dO4e8vDxeYOquoaEBALig2CkjIwMSiQSenp5Yu3Ytqqqq+jyHUqmEQqHgvYjhyc/Px6lTp1BZWanvpvSrv79rRDc06oEVFhYiISEB4eHh2LJlC7KysrBx40aIxWIsX768zzoXLlyAubk5UlNTUV1djbCwMNTW1vLyYA0NDZDJZFAqlTA2Nsa+ffswb968Xs/JGEN4eDiee+45+Pj4cPsXLFiAkJAQuLq6oqioCFu3bsULL7yA7OxsiMXiHueJjY3Ftm3bNPkKCICcnBzedkFBgU7fTyqVCmKlqIFW0CHap9HK3GZmZpDL5bh48SK3b+PGjbh8+TIuXbrUa52goCD8+OOPqKiogK2tLYBHSfvg4GA8ePAAFhYWAB4taVZYWIimpiacO3cOO3bswIkTJ3pcXgLAunXr8M033+DChQv9rlpSXl4OV1dXfP7551i0aFGP40qlkrubBvxnMYGGhgaaE78fvQX9jz/+WA8tMXzl5eVwcHCg4KYBhUIBW1tbtX6HGvXApFIpJk2axNvn7e2Nr776qt86MpmMC16ddRhjuH//PiZOnAjg0b9eEyZMAABMnToVN2/eRGxsbI8AtmHDBpw8eRI//PDDgEsuSaVSuLq69tlDEIvFvfbMCNGGH374AdXV1bhx4waMjY3h7++PwMBAfTdrWNHon4WAgIAeQxfy8/Ph6urab52ysjI0NTXx6hgZGfUbgBhjvN4RYwzr16/H8ePH8f3338Pd3X3A9tbU1ODevXuQSqUDliVE21paWnD9+nV0dHSgtbUV169fR01Njb6bNaxo1APbvHkz/P39ERMTg9DQUGRlZSExMRGJiYlcmcjISJSWluLQoUMAgKVLl2LHjh1YtWoVtm3bhurqanzwwQdYvXo1d/kYGxsLuVwODw8PtLa24ttvv8WhQ4eQkJDAnXfdunU4evQovv76a1hbW6OiogIAYGtrCwsLCzQ1NSE6OhpvvPEGpFIpiouLsWXLFowdOxavv/76Y39RRBjKy8tRVFTEbYvFYjg5OcHExATFxcVoa2uDl5dXj5s/utD9brupqanO33Ok0SgHBgCnTp1CZGQkCgoK4O7ujvDwcKxdu5Y7vnLlShQXFyMjI4Pbd+vWLWzYsAE//fQT7O3tERoaip07d3IB7A9/+AO++OIL3L9/HxYWFvDy8sL777+PxYsX/6ehfSRwU1JSsHLlSrS0tOC1117D1atXUV9fD6lUijlz5mDHjh1qr7atybX3SDKYGx1DlRMbqG1isZjXkweAJUuWwNPTs9/zUE5Pf3SWAwOAhQsXYuHChX0eP3DgQI99Xl5eSE9P77POzp07sXPnzn7fd6A4a2Fhge+++67fMoSQ4YVujRBCBIse5iY8HR0dMDY21nczHkvXR8vMzMxgYsL/a25In284fN/6RAGM8LS1tfX4QXXPBxn6OLCIiAjedvf2Hj58eCib06+LFy9i1qxZ+m6GYNElJOExNzfXdxNGlOvXr+Orr75CR0eHvpsiSBTACNGznJycHuMriXoogBFiAEpKSvTdBEHSeBzYcEbjwHrXY4xUdHTPQgb018iQx611d+/ePbS2tkIkEsHNzY2emYSOx4ERQrRH3UHWpHcU7gkxIF1nKiYDowBGiAHJyspCZmYmBTI1UQAjxIAYGxvjzp07KC4u1ndTBIFyYERj23pJ4hvOMNaBE/K9JfkN5WHu1tZW3Lt3DxcvXuTmxyN9ox4YIQaourp6wAkMCAUwQgwSrU2pHgpghBiQzgWZu0/dTnpHA1m7oIGsvRPSwFB9MpQ8mtBp8jukHhghRLAogBFCBIsCGCFEsCgH1gXlwHqnq9XLtZEjUqdtlIsSFsqBEUJGBApghBDBogBGCBEsCmCEEMGih7mJoAzmhgINMB2+qAdGCBEsCmCEEMGiAEYIESzKgZEBqbMyt64M5XsR4aEeGCFEsCiAEUIEiwIYIUSwKAdG+nX//n04Ozvz9vU2jkro47N00ZabN2+iqKiI27axscFzzz332Ocl/6FxD6y0tBRvvfUW7O3tYWlpialTpyI7O7vfOkqlElFRUXB1dYVYLIaHhwf279/PHT9+/DjkcjlGjx6NUaNGYerUqfjss896nGffvn1wd3eHubk5pk2bhh9//JF3nDGG6OhoODk5wcLCArNnz0Zubq6mH5F0UV9fr+8mCFZJSQkuX77MvejvovZp1AOrq6tDQEAA5syZg9OnT0MikeDOnTsYPXp0v/VCQ0NRWVmJ5ORkTJgwAVVVVbyFO+3s7BAVFQUvLy+YmZnh1KlTWLVqFSQSCV588UUAwBdffIFNmzZh3759CAgIwN/+9jcsWLAAN27cwLhx4wAAcXFx2LNnDw4cOABPT0/s3LkT8+bNQ15eHqytrTX8aggAmJqa6rsJw4aFhYW+mzDsaBTAdu3aBRcXF6SkpHD73Nzc+q1z5swZZGZmorCwEHZ2dr3WmT17Nm/7/fffx8GDB3HhwgUugO3ZswfvvPMO1qxZAwCIj4/Hd999h4SEBMTGxoIxhvj4eERFRWHRokUAgIMHD8LBwQFHjx7Fu+++q8lHJf+HApj2zJ8/X99NGHY0uoQ8efIk5HI5QkJCIJFI4Ovri6SkJLXqxMXFQSaTwdPTExEREWhpaem1PGMM586dQ15eHp5//nkAjxb7zM7ORlBQEK9sUFAQLl68CAAoKipCRUUFr4xYLEZgYCBXpjulUgmFQsF7ET5LS0t9N0GwbG1tIZPJIJPJMGHCBEgkEn03adjRqAdWWFiIhIQEhIeHY8uWLcjKysLGjRshFouxfPnyPutcuHAB5ubmSE1NRXV1NcLCwlBbW8vLgzU0NEAmk0GpVMLY2Bj79u3DvHnzADxa5LOjowMODg68czs4OKCiogIAuP/2Vubu3bu9ti02NpYGSg7A0dFRrXKDGexqSA9V66ItM2bMwIwZM7R+XvIfGgUwlUoFuVyOmJgYAICvry9yc3ORkJDQZwBTqVQQiUQ4cuQIbG1tATy6HAwODsbevXu5vIC1tTWuXbuGpqYmnDt3DuHh4Rg/fjzv8rL7Qp+MsR771CnTKTIyEuHh4dy2QqGAi4uLGt8EIcQQaBTApFJpjwU3vb298dVXX/VbRyaTccGrsw5jDPfv38fEiRMBAEZGRpgwYQIAYOrUqbh58yZiY2Mxe/ZsjB07FsbGxlwvq1NVVRXX4+rsKVRUVEAqlfZapjuxWAyxWKzuxyeEGBiNcmABAQHIy8vj7cvPz4erq2u/dcrKytDU1MSrY2Rk1GN8UVeMMSiVSgCAmZkZpk2bhvT0dF6Z9PR0+Pv7AwDc3d3h6OjIK9Pa2orMzEyuDCFkeNGoB7Z582b4+/sjJiYGoaGhyMrKQmJiIhITE7kykZGRKC0txaFDhwAAS5cuxY4dO7Bq1Sps27YN1dXV+OCDD7B69Wru8jE2NhZyuRweHh5obW3Ft99+i0OHDiEhIYE7b3h4ON5++23I5XLMnDkTiYmJKCkpwXvvvQfg0aXjpk2bEBMTg4kTJ2LixImIiYmBpaUlli5d+thfFOnfYAaCGvJqR0QYNApgfn5+SE1NRWRkJLZv3w53d3fEx8dj2bJlXJny8nKUlJRw21ZWVkhPT8eGDRsgl8thb2+P0NBQ7Ny5kyvz4MEDhIWF4f79+7CwsICXlxcOHz6MxYsXc2UWL16MmpoabN++HeXl5fDx8cG3337L6/39/ve/R0tLC8LCwlBXV4fp06cjLS2NxoARMkzRupBd0LqQg0c9MKIttC4kIWREoABGCBEsmo2C6AQNECZDgXpghBDBogBGCBEsCmCEEMGiHBjRWG/5rY+jo/llum1rCw2RIF1RD4wQIlgUwAghgkUBjBAiWJQDI1oxUM5LWysZDRVDWjGJ9I16YIQQwaIARggRLApghBDBohwYUUt7ezuuXLmi72YYjIaGBt7sxObm5njqqaf02KKRiQIYUcvFixdx/vx5fTdjyJLrmqyyZGFhQbP+6gldQpIBNTQ04Mcff9R3MwxWS0sLMjIy0NbWpu+mjDgUwMiA0tPT0d7eru9mGLQ7d+5wi9CQoUOXkGRApaWlMDMz47ZbW1v12BrD0X1Jvr7WHyW6QwGMDMjBwaHHcnraMJjVvIeKOm356KOP+j3e3t4OExP6iekSXUKSAclkMn03QZCuXr1KvVUdowBGBtTfAsSkb7W1tfjqq69AC3/pDgUwMiCZTEb5nUHKz8/HpUuX9N2MYYsu0MmAzMzM4OXlhfr6egCPFi/WhV7HdHULnLqaKHEw+beB6syePRtOTk64ceMGpFIp3N3dB9s80gfqgRG1WFpaory8XGfBazh6+PAhysrKUFpairS0NLqU1AEKYEQtUqlU300QtIqKCpSWluq7GcMOBTCiltGjR+u7CYJ369YtfTdh2KEcGFGLjY0NJk+eDADIzc3Vc2uEwdzcnHcHt6GhQY+tGZ4ogBG1PPHEEwgODgYA7r/90dqg1O55I3XO2/2OabdzDNWA2YcPH+L+/fvcNo0J0z66hCRkiJibm+u7CcMOBTBChgjlEbWPAhghQ8TFxUXfTRh2NM6BlZaW4sMPP8Tp06fR0tICT09PJCcnY9q0aX3WUSqV2L59Ow4fPoyKigo4OzsjKioKq1evBgAkJSXh0KFDyMnJAQBMmzYNMTExePbZZ7lzuLm54e7duz3OHRYWhr179wIAVq5ciYMHD/KOT58+HT///LOmH5P0IiUlBffu3cOiRYvg4+PTb1l1HtRWZzLCQQ0w7T7YVY1JEAd6n8GuqtT1CQY3N7cByxPNaBTA6urqEBAQgDlz5uD06dOQSCS4c+fOgF3j0NBQVFZWIjk5GRMmTEBVVRVvfqmMjAwsWbIE/v7+MDc3R1xcHIKCgpCbm8s9SHz58mV0dHRwdXJycjBv3jyEhITw3mv+/PlISUnhtrtOA0Mez/Tp06FSqXpMI0P61jl41dzcHPb29npuzfCjUQDbtWsXXFxceAFioH9Vzpw5g8zMTBQWFsLOzq7XOkeOHOFtJyUl4csvv8S5c+ewfPlyAI/ugnX15z//GR4eHggMDOTtF4vFcHR01ORjETVNmjQJkyZN0nczBIkxRs+T6oBGObCTJ09CLpcjJCQEEokEvr6+SEpKUqtOXFwcZDIZPD09ERERgZaWlj7rNDc3o62tjQt43bW2tuLw4cNYvXp1j78UGRkZkEgk8PT0xNq1a1FVVdXn+yiVSigUCt6LEF2gKwHd0KgHVlhYiISEBISHh2PLli3IysrCxo0bIRaLuZ5Sb3UuXLgAc3NzpKamorq6GmFhYaitrcX+/ft7rfPRRx9BJpNh7ty5vR4/ceIE6uvrsXLlSt7+BQsWICQkBK6urigqKsLWrVvxwgsvIDs7u9fLntjYWIOaRI/0pItFO4bq/7m5uTmXuJdIJEPyniONRgFMpVJBLpcjJiYGAODr64vc3FwkJCT0GcBUKhVEIhGOHDkCW1tbAMCePXsQHByMvXv3wsLCglc+Li4Ox44dQ0ZGRp/jZpKTk7FgwQI4OTnx9i9evJj7s4+PD+RyOVxdXfHNN99g0aJFPc4TGRmJ8PBwbluhUNCdIqI1Dx8+xL179wCA0ho6otElpFQq7ZED8fb2RklJSb91ZDIZF7w66zDGeKOUAWD37t2IiYlBWlpan2vs3b17F2fPnsWaNWvUaq+rqysKCgp6PS4Wi2FjY8N7EaILdAmpGxoFsICAgB5zo+fn58PV1bXfOmVlZWhqauLVMTIy4j0n9sknn2DHjh04c+YM5HJ5n+dLSUmBRCLBSy+9NGB7a2pqcO/ePZpJgeiVg4MDZs2ape9mDEsaBbDNmzfj559/RkxMDG7fvo2jR48iMTER69at48pERkbyLieXLl0Ke3t7rFq1Cjdu3MAPP/yADz74AKtXr+YuH+Pi4vCHP/wB+/fvh5ubGyoqKlBRUcELesCjy9GUlBSsWLGix2IJTU1NiIiIwKVLl1BcXIyMjAy8/PLLGDt2LF5//XWNvxhCHlfnHfFnn32Whp7oiIhpOMvaqVOnEBkZiYKCAri7uyM8PBxr167ljq9cuZILIJ1u3bqFDRs24KeffoK9vT1CQ0Oxc+dOLoD1NUj1448/RnSXQYlpaWl48cUXkZeXB09PT17ZlpYWvPbaa7h69Srq6+shlUoxZ84c7NixQ+28lkKhgK2tLRoaGuhyUiDUSchra1Ctpm7duoUbN25g9uzZfd5RJz1p8jvUeCT+woULsXDhwj6PHzhwoMc+Ly8vpKen91mnuLhYrfcOCgrqc1ZLCwsLfPfdd2qdh5Ch4OXlBS8vL303Y1ijZyEJIYJFAYwQIlg0oSHRi7KyMhw9epS375133sGYMWN0/t66yHcR/aAARvRCpVLhwYMHvH20ag/RFF1CEqIjSqVS300Y9iiAEaIjP/74I7Kzs3lTRxHtoktIohdlZWU99n366acD1lMnfzVQmaEaBzZhwgSUlZXhzp07ePLJJ7V+fkIBjOiJpaWlvpugc25ubjQLq47RJSTRi7Fjx+q7CWQYoABG9MLa2lrfTSDDAF1CkiGlVCrx8OFDWFlZwcPDgzeUoqKiQo8tI0JEAYwMqbNnz+J///d/IZPJeszppk5yXRuzqaqzwhANdhUGuoQkQ6atrQ2VlZX6bgYZRqgHRnSOMYaysjKcOHEC1dXV+m4OGUYogBGdu379OrKzsyl4Ea2jAEZ0qrKyEj/88AOmTp3Kmwbc1NRUrbyTNlbM1kUejRgGCmBEp3Jzc1FTUwNTU1NaWoxoHSXxic48fPgQP/74o76bQYYxCmBEZ3766Sd9N4EMc3QJSXSic8hE55J7tC4i0QUKYEQnbty4wVtQ+O7duzh58mT/lUSinvu6rEoFaCchP5ibBcQw0SUk0brm5macPn1a380gIwAFMKJ1paWl+m4CGSHoEpJo3a1bt2BlZcVbjVqhUOixRcKlUqnQ2NgI4FEesXMxaPKIxitzD2e0Mrf2DObh6MHMlDpUuauhfLi7r88UFBSEmTNnDlifMQZRb/lEgdDpytyEEP1wdHRUq1x7ezs+/fRTyGQyPPHEExg3bhwmTJig49bpBwUwQgRgzJgxkEqlapdvbGzErVu3cOvWLYwfP37YBjBK4hMiAFOmTIG5ufmg6tbU1AzbNTepB0YMxmDzZEPxPkO1klFvHBwc4O7urnZ5Y2NjrFixgrdPpVLB2NhY203TOwpghBi4yspKNDY24ubNm2hpacHEiRP7XVPAyMiox2pIlZWVcHBw0HFLhx4FMEIE4Pjx49yfV6xYofGiKAUFBcMygFEOjJARoLy8HLW1tfpuhtZRD4wQA+fr68vbtrKy0vgcVlZWuH37Np599lltNcsgaBzASktL8eGHH+L06dNoaWmBp6cnkpOTMW3atD7rKJVKbN++HYcPH0ZFRQWcnZ0RFRWF1atXAwCSkpJw6NAh5OTkAACmTZuGmJgY3pcdHR3dI5Hq4ODAW4qLMYZt27YhMTERdXV1mD59Ovbu3YvJkydr+jGJlg02Ca6th7WFpEf7uw9KHcQdxc5hFU899dSg72YaIo0uIevq6hAQEABTU1OcPn0aN27cwF/+8heMHj2633qhoaE4d+4ckpOTkZeXh2PHjsHLy4s7npGRgSVLluD8+fO4dOkSxo0bh6CgoB7P1E2ePBnl5eXc6/r167zjcXFx2LNnD/7617/i8uXLcHR0xLx587hHMQgZyRQKBb744gu0tbXpuylao1EPbNeuXXBxcUFKSgq3r/vdju7OnDmDzMxMFBYWws7Ortc6R44c4W0nJSXhyy+/xLlz57B8+fL/NNbEpM/RyIwxxMfHIyoqCosWLQIAHDx4EA4ODjh69CjeffdddT8mIcNWcXEx/ud//gdvvvnmsBhWoVEP7OTJk5DL5QgJCYFEIoGvry+SkpLUqhMXFweZTAZPT09ERESgpaWlzzrNzc1oa2vjAl6ngoICODk5wd3dHW+++SYKCwu5Y0VFRaioqEBQUBC3TywWIzAwEBcvXuz1fZRKJRQKBe9FyHBkbGwMExMTmJiYoLi4GOfOnRsWg1s16oEVFhYiISEB4eHh2LJlC7KysrBx40aIxWJeT6l7nQsXLsDc3Bypqamorq5GWFgYamtrsX///l7rfPTRR5DJZJg7dy63b/r06Th06BA8PT1RWVmJnTt3wt/fH7m5ubC3t+dyYd1vFTs4OODu3bu9vk9sbCxNZKcjQ5WHGkweTZ06hpRH29Z9UsdBnOONN97gbd+8eRNJSUkIDAyEp6enYB/+1iiAqVQqyOVyxMTEAHh0dyQ3NxcJCQl9BjCVSgWRSIQjR47A1tYWALBnzx4EBwdj7969PaYHiYuLw7Fjx5CRkcFLNi5YsID785QpUzBz5kx4eHjg4MGDCA8P5451/x/R35P5kZGRvLoKhQIuLi7qfBWECF55eTk+//xzjBkzBi+88AJ8fHz03SSNaXQJKZVKMWnSJN4+b29vlJSU9FtHJpNxwauzDmMM9+/f55XdvXs3YmJikJaWhqeeeqrftowaNQpTpkzhpi3uzI11vSsJAFVVVX0O4BOLxbCxseG9CBlp6urqUFRUpO9mDIpGASwgIAB5eXm8ffn5+dzCDX3VKSsrQ1NTE6+OkZERnJ2duX2ffPIJduzYgTNnzkAulw/YFqVSiZs3b3JP6Lu7u8PR0RHp6elcmdbWVmRmZsLf31/tz0jISCIWi/HGG2/g5Zdf1ndTBkWjS8jNmzfD398fMTExCA0NRVZWFhITE5GYmMiViYyMRGlpKQ4dOgQAWLp0KXbs2IFVq1Zh27ZtqK6uxgcffIDVq1dzl49xcXHYunUrjh49Cjc3N64XZWVlxQ3ai4iIwMsvv4xx48ahqqoKO3fuhEKh4B5aFYlE2LRpE2JiYjBx4kRMnDgRMTExsLS0xNKlSx//myKPRZ8PQ3enTt5TncVDDCnP191AeT9nZ2eEhobC0dERY8aMeaz26ZNGAczPzw+pqamIjIzE9u3b4e7ujvj4eCxbtowrU15ezruktLKyQnp6OjZs2AC5XA57e3uEhoZi586dXJl9+/ahtbUVwcHBvPf7+OOPEf1/Ccz79+9jyZIlqK6uxhNPPIEZM2bg559/5vX+fv/736OlpQVhYWHcQNa0tDSNnxsjZLiztraGt7e3vpvx2DQeib9w4UIsXLiwz+MHDhzosc/Ly4t3adddcXHxgO/7+eefD1hGJBIhOjqaC3qEkOGNHuYmhAgWPcxNyDCjUql67Lt58yb351GjRmHcuHFD2SSdoVWJuqBViYgmDOlBc03aYmZmhvfee89gk/ea/A7pEpKQEaa1tRVnz57VdzO0ggIYISPQcJlShwIYISNQ94kShIpyYF1QDmxoDdUKQ+oYzAPfmp5TW+cdCGMM27dv5+3bsmULb9vIyMhgp9OhlbkJGcF6m7zA1NRUDy3RPbqEJIQIFgUworbbt2/j8OHDqKys1HdTCAFAl5Cki46Ojj7zIiqVCpcvX0ZbWxtqamo0XmNwsPmugXJG+nzIukferPsjbL080qaNXNtgHkYfrqgHRjipqanc/Gpdtba24uTJk8jPz0dJSQk6Ojr00DpCeqIeGAHwaCLI3NxcKBQKnDp1Cvb29nB3d0djYyOuX7+Ohw8f6ruJhPRAAYwAAL7//nvuz50LnAh1lk4yclAAI6iurkZDQwMkEglMTHr+lej+4O+oUaOGqmlES3799Vc0Nzdz2xYWFpBIJHpskXZQACPIz89HVVUVAPRY1EQkEvVY8+Czzz4b8Jzdk8i9JZW1kdBW57zaoNY5u40J7+3T6Gvw7vnz53kzUnh5eWHx4sWP3RZ9owA2gtXU1ODKlSu4evWqvptCyKBQABtBGGO4e/cubt++DaVSiStXrkAikfS7yDAhhowC2Ajy4MEDHDx4UN/NIHrg7e2NgoICtLe367spWkUBbASxtLTEpk2bePvi4+N52/fu3RuwzGBoKy9lSHmzwQyy1YWKigo4ODj0u7r2lClT4OHhgba2NgDo9WaNEA2PT0HUYmRkxFtguC/qlCGGo3NR54FYWlrquCVDj0biE0IEiwIYIUSwaELDLkbChIbq5JAGk2caqI6uHroejit+D1RnuKNFPQghIwIFMEKIYFEAI4QIFgUwQohgURK/i5GQxO9O6Enk4dh+Q27vUKAkPiFkRKAARggRLApghBDBomchiU5oYzCsOvUMakLDbtT5zCM93/W4NO6BlZaW4q233oK9vT0sLS0xdepUZGdn91tHqVQiKioKrq6uEIvF8PDwwP79+7njSUlJmDVrFsaMGYMxY8Zg7ty5yMrK4p0jNjYWfn5+sLa2hkQiwWuvvYa8vDxemZUrV0IkEvFeM2bM0PQjEkIEQqMeWF1dHQICAjBnzhycPn0aEokEd+7cwejRo/utFxoaisrKSiQnJ2PChAmoqqrizUuUkZGBJUuWwN/fH+bm5oiLi0NQUBByc3Mhk8kAAJmZmVi3bh38/PzQ3t6OqKgoBAUF4caNG7w52ufPn4+UlBRu28zMTJOPSAgREI0C2K5du+Di4sILEG5ubv3WOXPmDDIzM1FYWAg7O7te6xw5coS3nZSUhC+//BLnzp3D8uXLufN0lZKSAolEguzsbDz//PPcfrFYrPb0IoairKwMaWlpsLa2hrW1NSwsLNDR0QGFQoGGhgY0NTXh5ZdfhrOzs76bSohB0egS8uTJk5DL5QgJCYFEIoGvry+SkpLUqhMXFweZTAZPT09ERET0O41xc3Mz2trauIDXm4aGBgDoUSYjIwMSiQSenp5Yu3Ytt1hFb5RKJbeEWOdLF/71r3/h0qVL3KuyspJ33NzcHFKpFFZWVmCMobm5Ge3t7RCLxZBIJBg/fjzu3bvHTUZHCHlEo4Gs5ubmAIDw8HCEhIQgKysLmzZtwt/+9jeup9Td/PnzkZGRgblz5+KPf/wjqqurERYWhhdeeIGXB+tq3bp1+O6775CTk8O9Z1eMMbz66quoq6vDjz/+yO3/4osvYGVlBVdXVxQVFWHr1q1ob29HdnY2xGJxj/NER0f3mpxVdyBrR0cH6uvrYW9v32+5P/3pTwNO5aurZO5gZonobqhmljAkuppNdSR+l5rSZCCrRpeQKpUKcrkcMTExAABfX1/k5uYiISGhzwCmUqkgEolw5MgRbqbPPXv2IDg4GHv37oWFhQWvfFxcHI4dO4aMjIxegxcArF+/Hr/88gsuXLjA2991mSgfHx/I5XK4urrim2++waJFi3qcJzIyEuHh4dy2QqHosaxYX3799VecOHECzz333IABjBCiGxpdQkqlUkyaNIm3z9vbu8e6gd3ryGQy3jTF3t7eYIzh/v37vLK7d+9GTEwM0tLS8NRTT/V6vg0bNuDkyZM4f/78gDkhqVQKV1dXFBQU9HpcLBbDxsaG91JXS0sLysrK1CprZETD7QjRBY1+WQEBAT2GLuTn58PV1bXfOmVlZWhqauLVMTIy4gWgTz75BDt27MCZM2cgl8t7nIcxhvXr1+P48eP4/vvv4e7uPmB7a2pqcO/ePUilUnU+nkYsLS0xatQoGBsbD1j2N7/5DUaNGsW9CCHaoVEO7PLly/D398e2bdsQGhqKrKwsrF27FomJiVi2bBmAR5dlpaWlOHToEACgqakJ3t7emDFjBrZt24bq6mqsWbMGgYGB3A2AuLg4bN26FUePHkVAQAD3flZWVrCysgIAhIWF4ejRo/j666/x5JNPcmVsbW1hYWGBpqYmREdH44033oBUKkVxcTG2bNmCkpIS3Lx5E9bW1gN+vuH4MPdAuZzB5FvUydv0yL1FR/c8Ube/emrl47qdZ1tv5x2EweQGNT0nUY/OHub28/NDamoqjh07Bh8fH+zYsQPx8fFc8AKA8vJy3iWllZUV0tPTUV9fD7lcjmXLluHll1/Gf/3Xf3Fl9u3bh9bWVgQHB0MqlXKv3bt3c2USEhLQ0NCA2bNn88p88cUXAABjY2Ncv34dr776Kjw9PbFixQp4enri0qVLagUvQojwaPwo0cKFC7Fw4cI+jx84cKDHPi8vL6Snp/dZp7i4eMD3HaijaGFhge+++27A8xBChg/KLhNCBIsmNOxiOObAutPVQ8mDybUN1crV+qKtFZ9GGprQUI9KS0tx4sQJPHjwQN9NIWTYowCmZQqFAv/+97+hVCrR2tqKU6dO6btJhAxbFMB0wNHREXZ2djh9+jT+/e9/D/gYESFkcGhCQy349ddfUVpaCgBoa2vDb37zG9TW1oIxhsmTJ+P69euwtbVFY2MjGGNwcXGhx48I0QJK4ncx2CR+RkYGMjMzATwaMtL1mUyg58PcCxcuxLRp0/o9pz5X29FFQn4ok9WGcnOAEvSDQ0n8Idb18SBPT089toSQkYUCmBbI5XI8/fTTAIDa2lo9t4aQkYNyYFrQdXLG6urqHsc75+cnhGgX5cC60DQHdvnyZdy/fx85OTlQqVQAes+BacNg8zoD5WGG6gHqweaDtDHwVl/nGOx5R3ruTGcTGhK+q1evwsjIiAtehJChRTmwQXrw4AHKy8v13QxCRjQKYINkaWnZ55TXhJChQZeQg9TR0YHf/va3OH78OG//rVu3epTV1sIZWtHtZsLHvaRAe7x3tzK9ZWgGai/leh7R9GHu5uZmnD59GgBgb2+P2bNn66ppgkQ9sEEyMTHBlClT9N0MMsy1tbUhJycHDx8+7HWq9ZGOemCEGDAzMzO89NJLmDZtGg3F6QX1wAgxYG1tbTQ1Uz8ogBFiwIyNjVFaWtpjNTDyCA1k7cKQZmTV58PcAxnKthnKg9m6MhJvZAyEHuYmZBijPsd/UAAjRGAyMjKgVCr13QyDQAGMEIG5e/cuGhsb9d0Mg0DDKLQsLy8PJ06c4O17+PAhb3swq9VoKxekq/yVrnI52ngYfSjaoa7u7R3M/48lS5bAzMxMK+0ROgpgWqZSqXoELEK0SSwW67sJBoMuIbXMwsJC300gZMSgAKZlrq6usLW11XczCBkR6BJSy1pbWzFz5kzePrlcDmNjY25bnQebdbWCs75ya0If76St3OFQPLTfOcxiJDx6RAFMy8RiMaZPn67vZpARbCQErk50CUkIESwKYIQQwaJLSB0oLy9HR0cHt+3k5AQjI/q3ghBt0ziAlZaW4sMPP8Tp06fR0tICT09PJCcn97vStFKpxPbt23H48GFUVFTA2dkZUVFRWL16NQAgKSkJhw4dQk5ODgBg2rRpiImJwbPPPss7z759+/DJJ5+gvLwckydPRnx8PGbNmsUdZ4xh27ZtSExMRF1dHaZPn469e/di8uTJmn7MQWtvb8ff//73fhf6GEyyV1f0eXNgMDcqtFHHkAxmlXOa3fY/NOoW1NXVISAgAKampjh9+jRu3LiBv/zlLxg9enS/9UJDQ3Hu3DkkJycjLy8Px44dg5eXF3c8IyMDS5Yswfnz53Hp0iWMGzcOQUFBKC0t5cp88cUX2LRpE6KionD16lXMmjULCxYsQElJCVcmLi4Oe/bswV//+ldcvnwZjo6OmDdv3pA+diESiWigISFDRKMe2K5du+Di4oKUlBRun5ubW791zpw5g8zMTBQWFsLOzq7XOkeOHOFtJyUl4csvv8S5c+ewfPlyAMCePXvwzjvvYM2aNQCA+Ph4fPfdd0hISEBsbCwYY4iPj0dUVBQWLVoEADh48CAcHBxw9OhRvPvuu5p81EEzNjaGl5cXqqurce/evSF5T0JGKo16YCdPnoRcLkdISAgkEgl8fX2RlJSkVp24uDjIZDJ4enoiIiKCt5p1d83NzWhra+MCXmtrK7KzsxEUFMQrFxQUhIsXLwIAioqKUFFRwSsjFosRGBjIlelOqVRCoVDwXtrwyiuv4M0334SLi4tWzkcI6Z1GPbDCwkIkJCQgPDwcW7ZsQVZWFjZu3AixWMz1lHqrc+HCBZibmyM1NRXV1dUICwtDbW0t9u/f32udjz76CDKZDHPnzgUAVFdXo6OjAw4ODrxyDg4OqKioAADuv72VuXv3bq/vExsbq7P8iKWlJVasWIHU1FS88sorGj98q06uRxsrTuuKvh7uHkraGHysjf+HOTk5+PTTT7ntJ598ssc/9sOVRj0wlUqFZ555BjExMfD19cW7776LtWvXIiEhod86IpEIR44cwbPPPovf/va32LNnDw4cONBrLywuLg7Hjh3D8ePHe6y72H2AHmOsxz51ynSKjIxEQ0MD99L2JZ+xsTGCg4Nhamqq1fMS0pVSqURtbS33unz5sr6bNGQ0CmBSqRSTJk3i7fP29uYl0nurI5PJeM8Hent7gzGG+/fv88ru3r0bMTExSEtLw1NPPcXtHzt2LIyNjbleVqeqqiqux+Xo6AgA/ZbpTiwWw8bGhvfShZE0MpqQoaRRAAsICOixuEB+fj5cXV37rVNWVoampiZeHSMjIzg7O3P7PvnkE+zYsQNnzpzpsf6dmZkZpk2bhvT0dN7+9PR0+Pv7AwDc3d3h6OjIK9Pa2orMzEyuDCFkeNEoB7Z582b4+/sjJiYGoaGhyMrKQmJiIhITE7kykZGRKC0txaFDhwAAS5cuxY4dO7Bq1Sps27YN1dXV+OCDD7B69Wpu6pm4uDhs3boVR48ehZubG9eLsrKygpWVFQAgPDwcb7/9NuRyOWbOnInExESUlJTgvffeA/Col7Np0ybExMRg4sSJmDhxImJiYmBpaYmlS5c+/jelQ/X19bh27Zq+m0EESiqV4vnnn+e2R9KgaY0CmJ+fH1JTUxEZGYnt27fD3d0d8fHxWLZsGVemvLycd0lpZWWF9PR0bNiwAXK5HPb29ggNDcXOnTu5Mvv27UNrayuCg4N57/fxxx8jOjoaALB48WLU1NRg+/btKC8vh4+PD7799lte7+/3v/89WlpaEBYWxg1kTUtLg7W1tUZfylBraGhAZmYmb9+mTZu0Mi2PLpLeuhr8KnS6+jwD3RxwcnKCk5OTTt7b0Gk8En/hwoVYuHBhn8cPHDjQY5+Xl1ePy7+uiouL1XrvsLAwhIWF9XlcJBIhOjqaC3qEkOFt5PQ1CSHDDj3MbQBMTEwwZswY3j5t5TFqa2u5P4tEoh7vQ4iQUQAzADKZDBs3btS43kA5l4sXL/IGOI4aNQoREREav482ZofV1oymupqp1pB83D0FQgvZ9okuIQkhgkUBjBAiWBTACCG96jopp6ESMUYX2J0UCgVsbW3R0NCgs8eKhlJjYyMaGhq4bTMzM0gkksc+r7Ym1NPGg/TDMQdmKHk+pVKpl7ntNPkdUhJ/GLO2tjb4QbzEcAlhYk66hCSECBYFMEKIYFEAI4QIFiXxuxhuSfyRQJ0bCoY8c6222jZUKzwNBU1+h9QDI4QIFgUwQohgUQAjhAgWjQMjA9LWg9i6MJhVzg15pe7e6PPheUNHPTBCiGBRACOECBYFMEKIYFEOjAxI6Dmk7oZD7oc8Qj0wQohgUQAjhAgWBTBCiGBRDozoRXNzMwoLC3n7Jk6cKIg5qIjhoABGNKaNJHhtbS2++uor3r4NGzYMSQDT1oyy6px3oPfpsQIRgG06WJh5uN64oEtIQohgUQAjBsHGxgZWVlb6bgYRGLqEJHrl5uaGiRMnQiqVwszMTN/NIQJDAYzohbm5ORwcHPDqq69i9OjRatWpra3FX//6V96+1atXw9nZWe33vXHjBmQyGcrKyrh9kydPVrt+fwb10LUO8l0jCV1CEr0YO3Ys3nvvPbWDVyfGGPd69dVXIZVKNao/adIkBAQE8M5DkxILFwUwIlju7u4wNjbWuJ63tzeXb5s4cSLs7e213TQyROgSkgiWUqkcdN01a9bg3r17mDx5MkQikRZbRYYSBTCikZqaGrS0tGiUd9KWUaNG4dVXX+VtD5atrS1sbW210SzOYBbJUGeBjsFQ5wH84TA2TONLyNLSUrz11luwt7eHpaUlpk6diuzs7H7rKJVKREVFwdXVFWKxGB4eHti/fz93PDc3F2+88Qbc3NwgEokQHx/f4xydx7q/1q1bx5VZuXJlj+MzZszQ9COSfowePRpGRvrJPIjFYkydOpV7WVpa6qUdxHBo1AOrq6tDQEAA5syZg9OnT0MikeDOnTsDJmJDQ0NRWVmJ5ORkTJgwAVVVVWhvb+eONzc3Y/z48QgJCcHmzZt7Pcfly5fR0dHBbefk5GDevHkICQnhlZs/fz5SUlK4bbo1r13GxsYaJ84J0RWNAtiuXbvg4uLCCxBubm791jlz5gwyMzNRWFgIOzu7Xuv4+fnBz88PAPDRRx/1ep4nnniCt/3nP/8ZHh4eCAwM5O0Xi8VwdHRU5+OQQaKcETEUGl0LnDx5EnK5HCEhIZBIJPD19UVSUpJadeLi4iCTyeDp6YmIiAi0tLQMutGtra04fPgwVq9e3ePHlJGRAYlEAk9PT6xduxZVVVV9nkepVEKhUPBehKij82H0ri8y9DTqgRUWFiIhIQHh4eHYsmULsrKysHHjRojFYixfvrzPOhcuXIC5uTlSU1NRXV2NsLAw1NbW8vJgmjhx4gTq6+uxcuVK3v4FCxYgJCQErq6uKCoqwtatW/HCCy8gOzu714eEY2NjBT+7KNGPiooKfPbZZ7x9v/vd73iPQw02cT6Y5Lo2Vi4S4mreGgUwlUoFuVyOmJgYAICvry9yc3ORkJDQZwBTqVQQiUQ4cuQId9dnz549CA4Oxt69e2FhYaFxo5OTk7FgwQI4OTnx9i9evJj7s4+PD+RyOVxdXfHNN99g0aJFPc4TGRmJ8PBwbluhUMDFxUXj9hBC9EOjS0ipVIpJkybx9nl7e6OkpKTfOjKZjHfL2tvbG4wx3L9/X8PmAnfv3sXZs2exZs0atdrr6uqKgoKCXo+LxWLY2NjwXoQQ4dAogAUEBCAvL4+3Lz8/H66urv3WKSsrQ1NTE6+OkZHRoMYSpaSkQCKR4KWXXhqwbE1NDe7du0d3zYjWOTs76204CemCaSArK4uZmJiwP/3pT6ygoIAdOXKEWVpassOHD3NlPvroI/b2229z242NjczZ2ZkFBwez3NxclpmZySZOnMjWrFnDlVEqlezq1avs6tWrTCqVsoiICHb16lVWUFDAe/+Ojg42btw49uGHH/ZoW2NjI/vd737HLl68yIqKitj58+fZzJkzmUwmYwqFQq3P19DQwACwhoYGTb4WMkI1NTWxxsZG7tXR0TFgnejoaN6L9KTJ71CjAMYYY//85z+Zj48PE4vFzMvLiyUmJvKOr1ixggUGBvL23bx5k82dO5dZWFgwZ2dnFh4ezpqbm7njRUVFDECPV/fzfPfddwwAy8vL69Gu5uZmFhQUxJ544glmamrKxo0bx1asWMFKSkrU/mwUwIiuUQAbmCa/QxFj9Ch+J4VCAVtbWzQ0NFA+jOiEod3FM0Sa/A7pIp4QIljUA+uCemDEEIz0Xhr1wAghIwIFMEKIYFEAI4QIFk1oSIiOPHjwgDdBgKmpKcaOHavHFg0/FMAI0ZGCggJ8/fXX3LajoyPefffdAevpa5VwXZxD1+gSkhAdeZwpr4l6KIARoiNjxoyBiQld5OgSBTBCdKS3OeiIdtE/D4ToyLVr12Btbc1tq3tJqYuBrEM1SeJQowBGiI60trairq6O26YemfbRJSQhOtK5iA3RHQpghOjIgwcP9N2EYY8uIQnREUdHRwQEBHDbXfNhRDtoNoouaDYKMtQGu3KRLhjKLBg0GwUhZESgAEYIESwKYISQQWtsbERDQwP0lYmiJD4hOiL0Vd/Vyc/9/e9/R2trKz788MOhahYP9cAIIY9l/PjxentvCmCEkMfS3NyM69ev6+W96RKSEPJYiouL0dzcjClTpqCjowPGxsZD9t40DqwLGgdGdM1QxlqpQ50c3jvvvIP29naIRCK4urriwYMHjz0Pmia/Q+qBEUIGzdnZmbc91JM4Ug6MECJYFMAIIYJFl5CEEK0pLS1FRUUF7Ozs4O7urvP3oyR+F5TEJ+TxnDt3DhcuXICJiQkWLFiAZ555RuNz0MPchBC9am9vR1lZmc7fhy4hCSE6ce3aNVRWVmLmzJm4e/cuFixYoPX3oABGiAFjjKG9vZ23z9jYGEZGhnnxZGRkxFtK7uHDh/j666/h6Oiom/fTtEJpaSneeust2Nvbw9LSElOnTkV2dna/dZRKJaKiouDq6gqxWAwPDw/s37+fO56bm4s33ngDbm5uEIlEiI+P73GO6OhoiEQi3qv7l8IYQ3R0NJycnGBhYYHZs2cjNzdX049IiMFQKBSIiYnhvUpKSvTdLM62bdt4rzlz5iAqKop7hYaGorW1FZaWljp5f416YHV1dQgICMCcOXNw+vRpSCQS3LlzB6NHj+63XmhoKCorK5GcnIwJEyagqqqK969Kc3Mzxo8fj5CQEGzevLnP80yePBlnz57ltrs/shAXF4c9e/bgwIED8PT0xM6dOzFv3jzk5eXRdL5EkExMTDB37lyoVCp8//33+m7OoBUXF6OtrQ2mpqZaPa9GAWzXrl1wcXFBSkoKt8/Nza3fOmfOnEFmZiYKCwu5VVq61/Hz84Ofnx8A4KOPPuq7sSYmfXZFGWOIj49HVFQUFi1aBAA4ePAgHBwccPToUbz77rsDfTxCDM6oUaMQEBAAhUIh6AD28OFDqFQqrZ9Xo0vIkydPQi6XIyQkBBKJBL6+vkhKSlKrTlxcHGQyGTw9PREREYGWlhaNG1tQUAAnJye4u7vjzTffRGFhIXesqKgIFRUVCAoK4vaJxWIEBgbi4sWLvZ5PqVRCoVDwXoQYouLiYn034bHp4jNo1AMrLCxEQkICwsPDsWXLFmRlZWHjxo0Qi8VYvnx5n3UuXLgAc3NzpKamorq6GmFhYaitreXlwQYyffp0HDp0CJ6enqisrMTOnTvh7++P3Nxc2Nvbo6KiAgDg4ODAq+fg4IC7d+/2es7Y2FjBTzpHRoampiZ9N6FXAz2MbmNjg5CQEACPEvwqlUqrNyA0CmAqlQpyuRwxMTEAAF9fX+Tm5iIhIaHPAKZSqSASiXDkyBHY2toCAPbs2YPg4GDs3bsXFhYWar1311uwU6ZMwcyZM+Hh4YGDBw8iPDycOyYSiXj1GGM99nWKjIzk1VUoFHBxcVGrPYQMJaHmcMViMSZNmqSz82sUCqVSaY/GeHt793tXRCqVQiaTccGrsw5jDPfv39ewuf8xatQoTJkyBQUFBQDA5cY6e2KdqqqqevTKOonFYtjY2PBehBgifU0YaOg0CmABAQHIy8vj7cvPz4erq2u/dcrKynhd4Pz8fBgZGfWYikMTSqUSN2/ehFQqBQC4u7vD0dER6enpXJnW1lZkZmbC399/0O9DiCGQyWT6boJB0iiAbd68GT///DNiYmJw+/ZtHD16FImJiVi3bh1XJjIyknc5uXTpUtjb22PVqlW4ceMGfvjhB3zwwQdYvXo1d/nY2tqKa9eu4dq1a2htbUVpaSmuXbuG27dvc+eJiIhAZmYmioqK8K9//QvBwcFQKBRYsWIFgEeXjps2bUJMTAxSU1ORk5ODlStXwtLSEkuXLn2sL4kQfRs7diy8vLzg5eWlszFVgsQ09M9//pP5+PgwsVjMvLy8WGJiIu/4ihUrWGBgIG/fzZs32dy5c5mFhQVzdnZm4eHhrLm5mTteVFTEAPR4dT3P4sWLmVQqZaampszJyYktWrSI5ebm8t5HpVKxjz/+mDk6OjKxWMyef/55dv36dbU/W0NDAwPAGhoa1P9CCCFapcnvkGaj6IJmoyBE/2g2CkLIiEABjBAiWDQbBSEjgDqrbAsR9cAIIYJFAYwQIlgUwAghgkXDKLqgYRSE6B8NoyCEjAgUwAghgkUBjBAiWBTACCGCRQGMECJYFMAIIYJFAYwQIlgUwAghgkUPcxMyDKmz2hY9zE0IIXpEAYwQIlgUwAghgkUPc3dBD3MTon/0MDchZESgAEYIESwKYIQQwaIARggRLApghBDBogBGCBEsCmCEEMGiAEYIESwKYIQQwaIARggRLApghBDBogBGCBEsCmCEEMGiAEYIESwKYIQQwaI58bvonBpNoVDouSWEjFydvz91piqkANZFY2MjAMDFxUXPLSGENDY2wtbWtt8yNCNrFyqVCmVlZbC2toZIJNJ3cwySQqGAi4sL7t27R7PW6gB9v496Xo2NjXBycoKRUf9ZLuqBdWFkZARnZ2d9N0MQbGxsRuwPbCiM9O93oJ5XJ0riE0IEiwIYIUSwKIARjYjFYnz88ccQi8X6bsqwRN+vZiiJTwgRLOqBEUIEiwIYIUSwKIARQgSLAhghRLAogA0zsbGx8PPzg7W1NSQSCV577TXk5eX1KHfz5k288sorsLW1hbW1NWbMmIGSkhLuuFKpxIYNGzB27FiMGjUKr7zyCu7fv887R11dHd5++23Y2trC1tYWb7/9Nurr63llSkpK8PLLL2PUqFEYO3YsNm7ciNbWVl6Z69evIzAwEBYWFpDJZNi+fbtaz8ENNW19t7Nnz4ZIJOK93nzzTd45Rtp3O2iMDCsvvvgiS0lJYTk5OezatWvspZdeYuPGjWNNTU1cmdu3bzM7Ozv2wQcfsCtXrrA7d+6wU6dOscrKSq7Me++9x2QyGUtPT2dXrlxhc+bMYU8//TRrb2/nysyfP5/5+PiwixcvsosXLzIfHx+2cOFC7nh7ezvz8fFhc+bMYVeuXGHp6enMycmJrV+/nivT0NDAHBwc2JtvvsmuX7/OvvrqK2Ztbc12796t429Kc9r6bgMDA9natWtZeXk596qvr+e910j7bgeLAtgwV1VVxQCwzMxMbt/ixYvZW2+91Wed+vp6Zmpqyj7//HNuX2lpKTMyMmJnzpxhjDF248YNBoD9/PPPXJlLly4xAOzWrVuMMca+/fZbZmRkxEpLS7kyx44dY2KxmDU0NDDGGNu3bx+ztbVlDx8+5MrExsYyJycnplKpHvPT69ZgvlvGHgWw999/v8/j9N2qjy4hh7mGhgYAgJ2dHYBHD6x/88038PT0xIsvvgiJRILp06fjxIkTXJ3s7Gy0tbUhKCiI2+fk5AQfHx9cvHgRAHDp0iXY2tpi+vTpXJkZM2bA1taWV8bHxwdOTk5cmRdffBFKpRLZ2dlcmcDAQN7AzRdffBFlZWUoLi7W7pehZYP5bjsdOXIEY8eOxeTJkxEREcHNhALQd6sJCmDDGGMM4eHheO655+Dj4wMAqKqqQlNTE/785z9j/vz5SEtLw+uvv45FixYhMzMTAFBRUQEzMzOMGTOGdz4HBwdUVFRwZSQSSY/3lEgkvDIODg6842PGjIGZmVm/ZTq3O8sYosF+twCwbNkyHDt2DBkZGdi6dSu++uorLFq0iDs+0r9bTdBsFMPY+vXr8csvv+DChQvcPpVKBQB49dVXsXnzZgDA1KlTcfHiRfz3f/83AgMD+zwfY4w3zVBvUw5powz7vySzIU9p9Djf7dq1a7k6Pj4+mDhxIuRyOa5cuYJnnnkGwMj+bjVBPbBhasOGDTh58iTOnz/PmyJo7NixMDExwaRJk3jlvb29uTtljo6OaG1tRV1dHa9MVVUV9y+4o6MjKisre7zvr7/+yivT/V/6uro6tLW19VumqqoKAHr0HgzF43y3vXnmmWdgamqKgoICACP7u9UUBbBhhjGG9evX4/jx4/j+++/h7u7OO25mZgY/P78et//z8/Ph6uoKAJg2bRpMTU2Rnp7OHS8vL0dOTg78/f0BADNnzkRDQwOysrK4Mv/617/Q0NDAK5OTk4Py8nKuTFpaGsRiMaZNm8aV+eGHH3i3/9PS0uDk5AQ3NzctfCPao43vtje5ubloa2uDVCoFMDK/20HT080DoiP/7//9P2Zra8syMjJ4t+mbm5u5MsePH2empqYsMTGRFRQUsE8//ZQZGxuzH3/8kSvz3nvvMWdnZ3b27Fl25coV9sILL/Q6jOKpp55ily5dYpcuXWJTpkzp9Vb/b37zG3blyhV29uxZ5uzszLvVX19fzxwcHNiSJUvY9evX2fHjx5mNjY1B3urXxnd7+/Zttm3bNnb58mVWVFTEvvnmG+bl5cV8fX1H9Hc7WBTAhhkAvb5SUlJ45ZKTk9mECROYubk5e/rpp9mJEyd4x1taWtj69euZnZ0ds7CwYAsXLmQlJSW8MjU1NWzZsmXM2tqaWVtbs2XLlrG6ujpembt377KXXnqJWVhYMDs7O7Z+/XrebX3GGPvll1/YrFmzmFgsZo6Ojiw6Otogb/Nr47stKSlhzz//PLOzs2NmZmbMw8ODbdy4kdXU1PDOMdK+28Gi6XQIIYJFOTBCiGBRACOECBYFMEKIYFEAI4QIFgUwQohgUQAjhAgWBTBCiGBRACOECBYFMEKIYFEAI4QIFgUwQohgUQAjhAjW/wdNgqJMmtH0zgAAAABJRU5ErkJggg==",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plott alle rutenettcellene, og rutenettcellene som har 15 innbyggere\n",
"ax = dissolved.plot(facecolor=\"gray\")\n",
"selection.plot(ax=ax, facecolor=\"red\")"
]
},
{
"cell_type": "markdown",
"id": "b7421fab",
"metadata": {},
"source": [
"En annen måte å visualisere befolkningen i hele GeoDataFrame på er å plott ved hjelp av en spesifikk kolonne. For å bruke vår `pop_tot` kolonne, som nå er indeksen i GeoDataFrame, må vi tilbakestille indeksen:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "ab8d8424",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"