Read Online Dataset and Make Geographical Visualization


Data Preparation

Statistisk sentralbyrå (SSB) is the Norwegian statistics bureau, it publishes about 1000 new statistical releases every year on its web site. In this practice we are examing the household income dataset per municipality, and visualize it on the map to see which municipality makes highest median income per household.

import pandas as pd
import warnings
warnings.filterwarnings('ignore')
data = pd.read_csv('https://data.ssb.no/api/v0/dataset/49678.csv?lang=no', encoding = 'iso-8859-1', delimiter = ';')
# Only select data in 2022.
data_2022 = data[data['år'] == 2022]
data_2022.head()

regionhusholdningstypestatistikkvariabelår06944: Inntekt for husholdninger, etter region, husholdningstype, statistikkvariabel og år
173001 Halden (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)2022674000
353001 Halden (2020-2023)0000 Alle husholdningerInntekt etter skatt, median (kr)2022544000
533001 Halden (2020-2023)0000 Alle husholdningerAntall husholdninger202215094
713001 Halden (2020-2023)0001 AleneboendeSamlet inntekt, median (kr)2022381000
893001 Halden (2020-2023)0001 AleneboendeInntekt etter skatt, median (kr)2022312000
# Select total income for whole household
data_2022_allhousehold = data_2022[data['husholdningstype'] == '0000 Alle husholdninger']
data_2022_allhousehold_totalincome = data_2022_allhousehold[data_2022_allhousehold['statistikkvariabel'] == 'Samlet inntekt, median (kr)']
data_2022_allhousehold_totalincome.head()

regionhusholdningstypestatistikkvariabelår06944: Inntekt for husholdninger, etter region, husholdningstype, statistikkvariabel og år
173001 Halden (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)2022674000
2873002 Moss (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)2022707000
5573003 Sarpsborg (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)2022693000
8273004 Fredrikstad (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)2022706000
10973005 Drammen (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)2022735000
def kommuneKode(text):
    return text[:4]

def kommuneNavn(text):
    
    end = text.rfind(' ')
    return text[5:end]


data_2022_allhousehold_totalincome['kommune kode'] = data_2022_allhousehold_totalincome['region'].map(kommuneKode)
data_2022_allhousehold_totalincome['kommune navn'] = data_2022_allhousehold_totalincome['region'].map(kommuneNavn)
data_2022_allhousehold_totalincome.head()

regionhusholdningstypestatistikkvariabelår06944: Inntekt for husholdninger, etter region, husholdningstype, statistikkvariabel og årkommune kodekommune navn
173001 Halden (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)20226740003001Halden
2873002 Moss (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)20227070003002Moss
5573003 Sarpsborg (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)20226930003003Sarpsborg
8273004 Fredrikstad (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)20227060003004Fredrikstad
10973005 Drammen (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)20227350003005Drammen
len(data_2022_allhousehold_totalincome['kommune navn'].unique())
388

SSB also offers map files download (https://kart.ssb.no/), here we downloaded

import geopandas as gpd

kommune = gpd.read_file('mv_kommunermednavn.shp')
kommune.head()

kommunenumnavngeometry
04646FjalerPOLYGON ((-20428.772 6832597.490, -20441.771 6...
15049FlatangerPOLYGON ((263053.690 7172624.640, 263052.270 7...
21511VanylvenPOLYGON ((1749.084 6921564.131, -1506.094 6925...
33816NomePOLYGON ((148567.840 6586720.610, 148429.240 6...
44214FrolandPOLYGON ((117922.071 6509638.209, 117937.491 6...

Data Visualization

# Merge the data to the municipality shapfile
kommune_income = kommune.merge(data_2022_allhousehold_totalincome, left_on='kommunenum', right_on='kommune kode')
kommune_income.rename(columns={'06944: Inntekt for husholdninger, etter region, husholdningstype, statistikkvariabel og år':'inntekt'}, inplace=True)
kommune_income['inntekt'] = kommune_income['inntekt'].astype(float)

kommune_income.head()

kommunenumnavngeometryregionhusholdningstypestatistikkvariabelårinntektkommune kodekommune navn
04646FjalerPOLYGON ((-20428.772 6832597.490, -20441.771 6...4646 Fjaler0000 Alle husholdningerSamlet inntekt, median (kr)2022626000.04646
15049FlatangerPOLYGON ((263053.690 7172624.640, 263052.270 7...5049 Flatanger0000 Alle husholdningerSamlet inntekt, median (kr)2022747000.05049
21511VanylvenPOLYGON ((1749.084 6921564.131, -1506.094 6925...1511 Vanylven0000 Alle husholdningerSamlet inntekt, median (kr)2022751000.01511
33816NomePOLYGON ((148567.840 6586720.610, 148429.240 6...3816 Nome (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)2022682000.03816Nome
43816NomePOLYGON ((172731.930 6573204.140, 173183.050 6...3816 Nome (2020-2023)0000 Alle husholdningerSamlet inntekt, median (kr)2022682000.03816Nome

Clearly to see rich Norwegians live on the west coast (where oil and gas industry is there) and capital region (Oslo).

import matplotlib.pyplot as plt

kommune_income.plot(column='inntekt', scheme="quantiles",figsize=(25, 15),legend=True,cmap='coolwarm')
plt.title('Househould Median Income in 2022 by Municipalities',fontsize=20)
plt.show()

Norwegian Household Median Income per Municipality

The Python module contextily could be used to add a background and make the map looks fancy.

import contextily as ctx
#Convert the data to Web Mercator
kommune_income_new = kommune_income.to_crs(epsg=3857)
ax = kommune_income_new.plot(column='inntekt',figsize=(25, 15), alpha=0.5, edgecolor='k' ,cmap='coolwarm',legend=True,scheme="quantiles")
#Add background tiles to plot
ctx.add_basemap(ax)
plt.title('Househould Median Income in 2022 by Municipalities',fontsize=20)
Text(0.5, 1.0, 'Househould Median Income in 2022 by Municipalities')

Norwegian Household Median Income per Municipality with Base Map


Author: wenvenn
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source wenvenn !