library(dplyr) # CRAN
library(sf) # CRAN
library(fs) # CRAN
library(glue) # CRAN
library(archive) # remotes::install_github("jimhester/archive")
library(jsonlite) # CRAN
# Aluksi ladataan zipattu paketti levylle, puretaan se kansioon sekä listataan paketista löytyvät data.
<- './finland_addresses_2024-11-14.7z'
datazip # Ladataan paketti
download.file("https://www.avoindata.fi/data/en_GB/dataset/941b70c8-3bd4-4b4e-a8fb-0ae29d2647a1/resource/3c277957-9b25-403d-b160-b61fdb47002f/download/finland_addresses_2024-11-14_json.7z",
destfile = datazip)
# Puretaan paketti
archive_extract(datazip, dir = "./")
# Listataan paketin tiedostot
dir_info("./", recurse = TRUE) %>%
select(path,size,modification_time) %>%
arrange(size) -> flies
flies
# Paketissa siis on 46 tiedostoa ja yksi kansio `./data`.
# Paketissa on `.json`-tiedostoa ja katsotaan ensin niiden sisältö.
# Printataan .JSON tiedostojen sisältö
%>%
flies filter(grepl("json", path)) %>%
pull(path) -> jsons
%>% sub("^.+dvv_", "dvv_", .)
jsons
# finland_addresses_2024-11-14_json/csv_dialect.json
# finland_addresses_2024-11-14_json/json_table_schema.json
# finland_addresses_2024-11-14_json/datapackage.json
# finland_addresses_2024-11-14_json
# finland_addresses_2024-11-14_json/data
# finland_addresses_2024-11-14_json/data/19_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/15_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/17_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/08_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/07_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/04_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/06_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/13_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/14_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/11_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/09_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/03_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/18_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/12_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/10_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/16_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/05_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/02_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/01_addresses_2024-11-14.csv
# finland_addresses_2024-11-14_json/data/Finland_addresses_2024-11-14.csv
# `json_table_schema.json` -tiedostossa taas kerrotaan datatiedostojen sarakkeiden nimet, datatyypit ja kuvaukset.
::ldply(fromJSON(jsons[2]), data.frame) %>%
plyras_tibble()
# `datapackage.json` -tiedostossa puolestaan on yleistä metatietoa datasta ja julkaisijasta kuten datan lisenssi.
::prettify(readLines(jsons[3]))
jsonlite
# {
# "name": "finnish-addresses-postalcodes-and-coordinates",
# "title": "Data of finnish addresses with postal codes and coordinates",
# "description": "The data is provided for separately for each region (e.g.: xx_addresses_yyyy-mm-dd.csv) and alternatively as a single csv file (e.g.: Finland_addresses_yyyy-mm-dd.csv). See this link for region codes: https://dvv.fi/tilastot-ja-luettelot, file Maakunnat.xlsx",
# "licenses": [
# {
# "url": "https://creativecommons.org/licenses/by/4.0/",
# "name": "Creative Commons Attribution 4.0 International",
# "version": "4.0"
# },
# {
# "url": "http://www.jhs-suositukset.fi/suomi/jhs189",
# "name": "Finnish public sector open data license"
# }
# ],
# Nyt kun on tiedossa datojen sijainnit, voimme ladata datat R:ään. Sivun alussa olevasta tiedostolistauksesta saattoi huomata että datat ovat sekä maakunnittaisina tiedostoina maakuntakoodilla merkittynä sekä koko maan tiedostona.
# Maakuntatatoista suurin on Uudenmaan data ja tehdään sen pohjalta pieni kartta.
# Koska sarake-erottimena on pilkku, R:ssä meille riittää kun luetaan data normaalilla `read.csv`-funktiolla. Koska datat ovat melko suuria, käytän `readr`-paketin funktioita tässä esimerkissä
# Ja siis valitaan paketin suurin csv-tiedosto, joka siis pitää sisällään koko Suomen rakennukset.
library(readr)
<- read_csv(flies %>% filter(size == max(size)) %>% pull(path))
drakennukset head(drakennukset)
# Lopuksi tehdään data.frame objektista sf-objekti
<- st_as_sf(drakennukset,
rak_sf coords = c("longitude_wgs84",
"latitude_wgs84"),
crs = "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
# ja talletaan se geopackage-muotoon ja viedään internetiin jaettavaksi!
::st_write(rak_sf, dsn = "finland_addresses_2024-11-14.gpkg")
sffile_delete(dir_ls("./", glob = "*.csv", ))
Digi- ja väestövirasto (DVV) on julkaissut viimeisen kerran uuden version Suomalaisten rakennusten osoitteet, postinumerot ja WGS84-koordinaatit-aineistosta. Julkaisun https://www.avoindata.fi/data/fi/dataset/postcodes yhteydessä ilmoitetaan
Koko Suomen rakennusten osoitetiedot sisältävän väestötietojärjestelmästä poimitun rakennustietoaineiston jakelu päättyy 14.3.2025. Aineisto päivitetään vielä kerran 14.2.2025, jonka jälkeen se on ladattavissa kuukauden ajan.
Viimeisimmäksi jäänyt aineisto ladattavissa tästä linkistä:
Arkistoin kyseisin datan tähän blogipostaukseen ja kirjoitan lyhyesti miten käsitellä aineisto Geopackage
-muotoon R-kielellä, jotta dataa voi käsitellä eri paikkatieto-ohjelmissa. Yksityiskohtaisempi läpikäynti viiden vuoden takaa: https://markuskainu.fi/posts/2020-08-02-dvv-kitkatondata-r/
Uudelleenkäyttö
Viittaus
@online{kainu2025,
author = {Kainu, Markus},
title = {Suomalaisten rakennusten osoitteet, postinumerot ja
WGS84-koordinaatit},
date = {2025-02-03},
url = {https://markuskainu.fi/posts/2025-02-03-dvv-rakennusten-osoitetiedot/},
langid = {fi}
}