diff --git a/scripts/V2024/create_full_info_uc.py b/scripts/V2024/create_full_info_uc.py new file mode 100644 index 0000000..715154a --- /dev/null +++ b/scripts/V2024/create_full_info_uc.py @@ -0,0 +1,108 @@ +import logging +import pathlib + +import geopandas as gpd +import pandas as pd + + +def create_full_info_uc(inputfile_uc, layer_uc, inputfile_grid, layer_grid): + grid_df = gpd.read_file(inputfile_grid, layer=layer_grid) + grid_sum = ( + grid_df[ + [ + "urban_center_id", + "ghs_pop_2023", + "worldcover_2021_built_up_sqkm", + "worldcover_2021_tree_cover_sqkm", + "worldcover_2021_sparse_vegetation_sqkm", + "selected_road_length_km", + "reference_building_area_sqkm", + "prediction", + "osm_building_area_sqkm_2008_01", + "osm_building_area_sqkm_2009_01", + "osm_building_area_sqkm_2010_01", + "osm_building_area_sqkm_2011_01", + "osm_building_area_sqkm_2012_01", + "osm_building_area_sqkm_2013_01", + "osm_building_area_sqkm_2014_01", + "osm_building_area_sqkm_2015_01", + "osm_building_area_sqkm_2016_01", + "osm_building_area_sqkm_2017_01", + "osm_building_area_sqkm_2018_01", + "osm_building_area_sqkm_2019_01", + "osm_building_area_sqkm_2020_01", + "osm_building_area_sqkm_2021_01", + "osm_building_area_sqkm_2022_01", + "osm_building_area_sqkm_2023_01", + "osm_building_area_sqkm_2024_01", + "osm_building_area_sqkm_2024_05", + ] + ] + .groupby("urban_center_id") + .sum() + ) + + grid_avg = ( + grid_df[ + [ + "urban_center_id", + "shdi_2021", + "vnl_2023", + "prediction_osm_completeness_2008_01", + "prediction_osm_completeness_2009_01", + "prediction_osm_completeness_2010_01", + "prediction_osm_completeness_2011_01", + "prediction_osm_completeness_2012_01", + "prediction_osm_completeness_2013_01", + "prediction_osm_completeness_2014_01", + "prediction_osm_completeness_2015_01", + "prediction_osm_completeness_2016_01", + "prediction_osm_completeness_2017_01", + "prediction_osm_completeness_2018_01", + "prediction_osm_completeness_2019_01", + "prediction_osm_completeness_2020_01", + "prediction_osm_completeness_2021_01", + "prediction_osm_completeness_2022_01", + "prediction_osm_completeness_2023_01", + "prediction_osm_completeness_2024_01", + "prediction_osm_completeness_2024_05", + ] + ] + .groupby("urban_center_id") + .mean() + ) + del grid_df + + grid_sum = pd.merge( + grid_sum, + grid_avg, + on="urban_center_id", + how="left", + ) + del grid_avg + + uc_df = gpd.read_file(inputfile_uc, layer=layer_uc) + uc_df = pd.merge( + uc_df, + grid_sum, + on="urban_center_id", + how="left", + ) + del grid_sum + + uc_df.to_file("../abgabe.gpkg", layer="uc_full_info_V2024", driver="GPKG") + + +if __name__ == "__main__": + logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(message)s", + ) + + inputfile_uc = pathlib.Path("../abgabe.gpkg") + layer_uc = "uc_2025" + + inputfile_grid = pathlib.Path("../abgabe.gpkg") + layer_grid = "grid_full_info_V2024" + + create_full_info_uc(inputfile_uc, layer_uc, inputfile_grid, layer_grid) diff --git a/scripts/V2024/export_for_ohsome_hex_v2024.sql b/scripts/V2024/export_for_ohsome_hex_v2024.sql new file mode 100644 index 0000000..c7ead86 --- /dev/null +++ b/scripts/V2024/export_for_ohsome_hex_v2024.sql @@ -0,0 +1,439 @@ +show search_path; + +SET search_path TO benni, public; + +-- Grid geometries for very high zoom levels +-- zoom level >=12 +drop table if exists benni.urban_building_completeness_grid; +create table benni.urban_building_completeness_grid as +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2024-05-01Z'::timestamptz as timestamp + ,osm_completeness_2024_05::integer as osm_building_completeness + ,osm_building_area_sqkm_2024_05::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2024-01-01Z'::timestamptz as timestamp + ,osm_completeness_2024_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2024_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2023-01-01Z'::timestamptz as timestamp + ,osm_completeness_2023_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2023_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2022-01-01Z'::timestamptz as timestamp + ,osm_completeness_2022_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2022_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2021-01-01Z'::timestamptz as timestamp + ,osm_completeness_2021_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2021_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2020-01-01Z'::timestamptz as timestamp + ,osm_completeness_2020_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2020_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2019-01-01Z'::timestamptz as timestamp + ,osm_completeness_2019_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2019_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2018-01-01Z'::timestamptz as timestamp + ,osm_completeness_2018_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2018_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2017-01-01Z'::timestamptz as timestamp + ,osm_completeness_2017_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2017_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2016-01-01Z'::timestamptz as timestamp + ,osm_completeness_2016_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2016_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2015-01-01Z'::timestamptz as timestamp + ,osm_completeness_2015_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2015_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2014-01-01Z'::timestamptz as timestamp + ,osm_completeness_2014_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2014_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2013-01-01Z'::timestamptz as timestamp + ,osm_completeness_2013_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2013_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2012-01-01Z'::timestamptz as timestamp + ,osm_completeness_2012_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2012_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2011-01-01Z'::timestamptz as timestamp + ,osm_completeness_2011_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2011_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2010-01-01Z'::timestamptz as timestamp + ,osm_completeness_2010_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2010_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2009-01-01Z'::timestamptz as timestamp + ,osm_completeness_2009_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2009_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +union +select + identifier as id + ,"ID_UC_G0" as urban_center_id + ,'2008-01-01Z'::timestamptz as timestamp + ,osm_completeness_2008_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2008_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(a.geom, 3857) as geom +from grid_full_info_v2024 a +; + +-- Polygon boundary for higher zoom levels +-- zoom level 9-11 +drop table if exists benni.urban_building_completeness_polygon; +create table benni.urban_building_completeness_polygon as +select + "ID_UC_G0" as id + ,'2024-05-01Z'::timestamptz as timestamp + ,osm_completeness_2024_05::integer as osm_building_completeness + ,osm_building_area_sqkm_2024_05::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2024-01-01Z'::timestamptz as timestamp + ,osm_completeness_2024_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2024_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2023-01-01Z'::timestamptz as timestamp + ,osm_completeness_2023_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2023_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2022-01-01Z'::timestamptz as timestamp + ,osm_completeness_2022_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2022_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2021-01-01Z'::timestamptz as timestamp + ,osm_completeness_2021_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2021_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2020-01-01Z'::timestamptz as timestamp + ,osm_completeness_2020_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2020_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2019-01-01Z'::timestamptz as timestamp + ,osm_completeness_2019_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2019_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2018-01-01Z'::timestamptz as timestamp + ,osm_completeness_2018_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2018_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2017-01-01Z'::timestamptz as timestamp + ,osm_completeness_2017_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2017_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2016-01-01Z'::timestamptz as timestamp + ,osm_completeness_2016_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2016_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2015-01-01Z'::timestamptz as timestamp + ,osm_completeness_2015_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2015_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2014-01-01Z'::timestamptz as timestamp + ,osm_completeness_2014_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2014_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2013-01-01Z'::timestamptz as timestamp + ,osm_completeness_2013_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2013_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2012-01-01Z'::timestamptz as timestamp + ,osm_completeness_2012_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2012_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2011-01-01Z'::timestamptz as timestamp + ,osm_completeness_2011_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2011_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2010-01-01Z'::timestamptz as timestamp + ,osm_completeness_2010_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2010_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2009-01-01Z'::timestamptz as timestamp + ,osm_completeness_2009_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2009_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024 +UNION +select + "ID_UC_G0" as id + ,'2008-01-01Z'::timestamptz as timestamp + ,osm_completeness_2008_01::integer as osm_building_completeness + ,osm_building_area_sqkm_2008_01::float4 as osm_building_area_sqkm + ,prediction_improved_sqkm::float4 as predicted_building_area_sqkm + ,st_transform(geom, 3857) as geom +from uc_full_info_V2024; + +-- Centroid for lower zoom levels +-- zoom level <=8 +drop table if exists benni.urban_building_completeness_point; +create table benni.urban_building_completeness_point as +select + id + ,timestamp + ,osm_building_completeness + ,osm_building_area_sqkm + ,predicted_building_area_sqkm + ,st_centroid(geom) as geom +from benni.urban_building_completeness_polygon; + + + +------------------------ +ALTER TABLE public.urban_building_completeness_point SET SCHEMA michel_temp; +ALTER TABLE public.urban_building_completeness_polygon SET SCHEMA michel_temp; +ALTER TABLE public.urban_building_completeness_grid SET SCHEMA michel_temp; + + + +CREATE TABLE public.urban_building_completeness_point AS +SELECT + id , + "timestamp" , + osm_building_completeness AS osm_building_completeness_pc, + predicted_building_area_sqkm / 100 AS predicted_building_area_ha, + geom::geometry(POINT,3857) as geom +FROM benni.urban_building_completeness_point; + +CREATE TABLE public.urban_building_completeness_polygon AS +SELECT + id , + "timestamp" , + osm_building_completeness AS osm_building_completeness_pc, + predicted_building_area_sqkm / 100 AS predicted_building_area_ha, + geom::geometry(MULTIPOLYGON ,3857) as geom +FROM benni.urban_building_completeness_polygon; + +DROP TABLE public.urban_building_completeness_grid CASCADE; + +CREATE TABLE public.urban_building_completeness_grid AS +SELECT + id , + "timestamp" , + osm_building_completeness AS osm_building_completeness_pc, + predicted_building_area_sqkm / 100 AS predicted_building_area_ha, + (ST_DUMP(geom)).geom::geometry(POLYGON ,3857) as geom +FROM benni.urban_building_completeness_grid; + +------------- + +CREATE INDEX urban_building_completeness_point_timestamp_osm_b_compl_pc_idx ON public.urban_building_completeness_point (timestamp, osm_building_completeness_pc); +ANALYZE public.urban_building_completeness_point; +CLUSTER public.urban_building_completeness_point USING urban_building_completeness_point_timestamp_osm_b_compl_pc_idx; +CREATE INDEX urban_building_completeness_point_timestamp_idx ON public.urban_building_completeness_point (timestamp); +CREATE INDEX urban_building_completeness_point_id_idx ON public.urban_building_completeness_point (id); +CREATE INDEX urban_building_completeness_point_osm_build_compl_pc_idx ON public.urban_building_completeness_point (osm_building_completeness_pc); +CREATE INDEX urban_building_completeness_point_geom_idx ON public.urban_building_completeness_point USING gist(geom); +ANALYZE public.urban_building_completeness_point; + +-- order (CLUSTER) poylgons only by timestamp, they do not overlap on the map +CREATE INDEX urban_building_completeness_polygon_timestamp_idx ON public.urban_building_completeness_polygon (timestamp); +ANALYZE public.urban_building_completeness_polygon; +CLUSTER public.urban_building_completeness_polygon USING urban_building_completeness_polygon_timestamp_idx; +CREATE INDEX urban_building_completeness_polygon_id_idx ON public.urban_building_completeness_polygon (id); +CREATE INDEX urban_building_completeness_polygon_osm_build_compl_pc_idx ON public.urban_building_completeness_polygon (osm_building_completeness_pc); +CREATE INDEX urban_building_completeness_polygon_geom_idx ON public.urban_building_completeness_polygon USING gist(geom); +ANALYZE public.urban_building_completeness_polygon; + +-- order (CLUSTER) grid cells by timestamp and value, they do not overlap but the strokeline sometimes glitches +CREATE INDEX urban_building_completeness_grid_timestamp_osm_b_compl_pc_idx ON public.urban_building_completeness_grid (timestamp,osm_building_completeness_pc); +ANALYZE public.urban_building_completeness_grid; +CLUSTER public.urban_building_completeness_grid USING urban_building_completeness_grid_timestamp_osm_b_compl_pc_idx; +CREATE INDEX urban_building_completeness_grid_timestamp_idx ON public.urban_building_completeness_grid (timestamp); +CREATE INDEX urban_building_completeness_grid_id_idx ON public.urban_building_completeness_grid (id); +CREATE INDEX urban_building_completeness_grid_osm_build_compl_pc_idx ON public.urban_building_completeness_grid (osm_building_completeness_pc); +CREATE INDEX urban_building_completeness_grid_geom_idx ON public.urban_building_completeness_grid USING gist(geom); +ANALYZE public.urban_building_completeness_grid; + + + + diff --git a/scripts/V2024/get_jrc_wc_stats.py b/scripts/V2024/get_jrc_wc_stats.py new file mode 100644 index 0000000..fb7bb34 --- /dev/null +++ b/scripts/V2024/get_jrc_wc_stats.py @@ -0,0 +1,306 @@ +import logging +import os +import pathlib +import shutil +import time + +import geopandas as gpd +import numpy as np +import pandas as pd +import rasterio as rio +from pyproj import Transformer +from pyproj.aoi import AreaOfInterest +from pyproj.database import query_utm_crs_info +from rasterio.mask import mask +from rasterio.merge import merge +from rasterstats import zonal_stats +from shapely.geometry import box +from terracatalogueclient import Catalogue + +USERNAME = "username" +PASSWORD = "password" +NO_OF_RETRIES = 4 + + +def get_urban_center_ids(input_file: str, input_layer) -> list: + logging.info("reading urban centers") + df_uc = gpd.read_file(input_file, layer=input_layer) + urban_center_ids = df_uc["ID_UC_G0"].values + logging.info(f"got {len(urban_center_ids)} urban centers") + + return urban_center_ids + + +def download_wc_tile( + catalogue: Catalogue, + box_geom: box, + path_wc_scratch: pathlib.Path, + uc_feature: gpd.GeoSeries, +) -> None: + for tryno in range(NO_OF_RETRIES): + try: + logging.info("Downloading WC tile for 2021") + products_2021 = catalogue.get_products( + "urn:eop:VITO:ESA_WorldCover_10m_2021_V2", geometry=box_geom + ) + catalogue.download_products(products_2021, path_wc_scratch, force=True) + except Exception as e: + if tryno < NO_OF_RETRIES - 1: + logging.warning( + f"An error occured: UC {uc_feature.ID_UC_G0}. Retrying to Download. Errormessage: {e}" + ) + # wait 10 seconds before retrying + time.sleep(30) + continue + else: + logging.error( + f"Unable to Download WC Data for UC {uc_feature.ID_UC_G0}. Message: {e}" + ) + exit() + break + + logging.info(f"Finished download of WorldCover data for UC {uc_feature.ID_UC_G0}.") + + +def clip_raster( + path_wc_scratch: pathlib.Path, box_geom: box, path_wc_clipped: pathlib.Path +) -> None: + for tile in list(path_wc_scratch.rglob("*InputQuality.tif")): + os.remove(tile) + for tile in list(path_wc_scratch.rglob("*Map.tif")): + with rio.open(tile) as src: + try: + out_image, out_transform = mask( + src, [box_geom], crop=True, all_touched=True + ) + out_meta = src.meta.copy() # copy the metadata of the source Raster + except ValueError as e: + logging.error( + f"Unable to clip raster for UC {tile}. Message: {e}. Skipping and " + f"removing tile." + ) + os.remove(tile) + continue + + # update raster metadata + out_meta.update( + { + "driver": "Gtiff", + "height": out_image.shape[1], # height starts with shape[1] + "width": out_image.shape[2], # width starts with shape[2] + "transform": out_transform, + } + ) + + # store clipped raster + out_name = str(tile.name) + out_path = pathlib.Path(path_wc_clipped / out_name) + with rio.open(out_path, "w", **out_meta) as dst: + dst.write(out_image) + os.remove(tile) + + +def merge_tiles(tiles: list, outpath: pathlib.Path, uc_id: int) -> None: + raster_to_mosiac = [] + for tile in tiles: + raster = rio.open(tile) + raster_to_mosiac.append(raster) + + mosaic, output = merge(raster_to_mosiac) + + output_meta = raster.meta.copy() + output_meta.update( + { + "driver": "GTiff", + "height": mosaic.shape[1], + "width": mosaic.shape[2], + "transform": output, + } + ) + output_path = pathlib.Path(outpath / f"WorldCover_UC_{uc_id}.tif") + with rio.open(output_path, "w", **output_meta) as m: + m.write(mosaic) + + for file in tiles: + os.remove(file) + + +def calc_cell_size(tile: pathlib.Path) -> float: + with rio.open(tile) as src: + tile_corner_coords = src.bounds + # query UTM code for that coordinate + utm_crs_list = query_utm_crs_info( + datum_name="WGS 84", + area_of_interest=AreaOfInterest( + west_lon_degree=tile_corner_coords[0], + south_lat_degree=tile_corner_coords[1], + east_lon_degree=tile_corner_coords[0], + north_lat_degree=tile_corner_coords[1], + ), + ) + utm_code = utm_crs_list[0].code + + transformer = Transformer.from_crs("EPSG:4326", f"EPSG:{utm_code}") + + # cell size in degree + x_cell_size = src.res[0] + y_cell_size = src.res[1] + + # south-western point + lon1 = tile_corner_coords[0] + lat1 = tile_corner_coords[1] + + # one pixel to east + lon2 = tile_corner_coords[0] + x_cell_size + lat2 = tile_corner_coords[1] + + # one pixel to north + lon3 = tile_corner_coords[0] + lat3 = tile_corner_coords[1] + y_cell_size + + x1, y1 = transformer.transform(lat1, lon1) + x2, y2 = transformer.transform(lat2, lon2) + x3, y3 = transformer.transform(lat3, lon3) + + distance_m_lon = np.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) + distance_m_lat = np.sqrt((x3 - x1) ** 2 + (y3 - y1) ** 2) + + cell_size = distance_m_lon * distance_m_lat + + return cell_size + + +def main( + input_file: pathlib.Path, layer_uc: str, layer_grid: str, csv_output: pathlib.Path +) -> None: + # read in UC areas + df_uc = gpd.read_file(input_file, layer=layer_uc) + + ## Downloading WorldCover data for each urban center + + # Authenticate to the Terrascope platform and create catalogue object + catalogue = Catalogue().authenticate_non_interactive( + username=USERNAME, password=PASSWORD + ) + + collected_table_grid = [] + + for index in df_uc.index: + path_wc_scratch = pathlib.Path("./wc_scratch/") + if not os.path.exists(path_wc_scratch): + os.makedirs(path_wc_scratch) + + uc_feature = df_uc.loc[index] + logging.info(f"Working on urban center {uc_feature.ID_UC_G0} of {len(df_uc)}.") + bounds = uc_feature.geometry.bounds + box_geom = box(*bounds) + + # Download each WorldCover tile + download_wc_tile(catalogue, box_geom, path_wc_scratch, uc_feature) + + # Clip raster to UC Bounding Box + logging.info("Clip raster to UC Bounding Box.") + path_wc_clipped = pathlib.Path("./wc_clipped/") + if not os.path.exists(path_wc_clipped): + os.makedirs(path_wc_clipped) + clip_raster(path_wc_scratch, box_geom, path_wc_clipped) + + # Merge clipped rasters if necessary + path_wc_map = pathlib.Path("./wc_map/") + if not os.path.exists(path_wc_map): + os.makedirs(path_wc_map) + if len(list(path_wc_clipped.rglob("*Map.tif"))) > 1: + logging.info("Merging clipped rasters.") + merge_tiles( + list(path_wc_clipped.rglob("*Map.tif")), + path_wc_map, + uc_feature.ID_UC_G0, + ) + else: + for file in path_wc_clipped.rglob("*_Map.tif"): + new_name = pathlib.Path(f"WorldCover_UC_{uc_feature.ID_UC_G0}.tif") + os.rename(file, path_wc_map / new_name) + + # clean up scratch dirs + shutil.rmtree(path_wc_scratch) + shutil.rmtree(path_wc_clipped) + + logging.info(f"Finished creation of WC Map for UC {uc_feature.ID_UC_G0}.") + + # import grid for this UC + grid_df = gpd.read_file( + input_file, layer=layer_grid, where=f"ID_UC_G0='{uc_feature.ID_UC_G0}'" + ) + if len(list(path_wc_map.rglob("*.tif"))) > 1: + logging.warning( + "Multiple maps in dir for zonal stats! This should not be the case!" + ) + + ## Calculate zonal statistics per UC for each grid cell + + for tile in list(path_wc_map.rglob("*.tif")): + # get cell area for WC pixel + area_per_wc_cell = calc_cell_size(tile) + # calc pixel count per classes + stats_df = pd.DataFrame( + zonal_stats(vectors=grid_df["geometry"], raster=tile, categorical=True) + ) + # join gdf with zonal stats + gdf_temp = grid_df.join(stats_df, how="left") + # convert pixel counts to sqkm + if 50 not in gdf_temp.columns: + gdf_temp[50] = 0 + if 10 not in gdf_temp.columns: + gdf_temp[10] = 0 + if 60 not in gdf_temp.columns: + gdf_temp[60] = 0 + gdf_temp["built_up_sqkm"] = gdf_temp[50] * area_per_wc_cell / (1000 * 1000) + gdf_temp["tree_cover_sqkm"] = ( + gdf_temp[10] * area_per_wc_cell / (1000 * 1000) + ) + gdf_temp["sparse_vegetation_sqkm"] = ( + gdf_temp[60] * area_per_wc_cell / (1000 * 1000) + ) + # Fill nan values with 0 + gdf_temp["built_up_sqkm"] = gdf_temp["built_up_sqkm"].fillna(0) + gdf_temp["tree_cover_sqkm"] = gdf_temp["tree_cover_sqkm"].fillna(0) + gdf_temp["sparse_vegetation_sqkm"] = gdf_temp["sparse_vegetation_sqkm"].fillna(0) + + # drop pixel count columns + gdf_temp = gdf_temp.drop( + columns=[ + 10, + 20, + 30, + 40, + 50, + 60, + 70, + 80, + 90, + 95, + 100, + ], + errors="ignore", + ) + os.remove(tile) + collected_table_grid.append(gdf_temp) + logging.info(f"finished update for urban_center_id: {uc_feature.ID_UC_G0}") + + logging.info("Finished zonal stats calculation for all urban centers") + shutil.rmtree(path_wc_map) + uc_wc_stats = pd.concat(collected_table_grid) + uc_wc_stats.to_csv(csv_output) + + +if __name__ == "__main__": + uc_file = pathlib.Path("../jrc_uc_wgs84.gpkg") + csv_output = pathlib.Path("./uc_wc_stats.csv") + layer_UC = "uc_2025" + layer_grid = "uc_grid" + logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(message)s", + ) + + main(uc_file, layer_UC, layer_grid, csv_output) diff --git a/scripts/V2024/lara_building_per_grid.py b/scripts/V2024/lara_building_per_grid.py new file mode 100644 index 0000000..53f6ebe --- /dev/null +++ b/scripts/V2024/lara_building_per_grid.py @@ -0,0 +1,84 @@ +import logging + +import geopandas as gpd +import pandas as pd +from ohsome import OhsomeClient + +client = OhsomeClient() + +#load geopackage +uc_layers = ("../covariates/jrc_uc_wgs84.gpkg") + +def get_urban_center_ids(): + df_uc = gpd.read_file(uc_layers, layer='uc_2025') + urban_center_ids = df_uc["ID_UC_G0"].values + logging.info(f"got {len(urban_center_ids)} urban centers") + + return urban_center_ids + + +'''def get_each_grid(uc_layers, urban_center_id): + df_grid = gpd.read_file(uc_layers, layer='uc_grid') + filtered_gdf = df_grid[df_grid['ID_UC_G0'] == urban_center_id] + filtered_gdf.reset_index(inplace=True) + return filtered_gdf''' + +#try to filter while importing so it does not take as much time +#geopandas +def import_grid_layer(urban_center_id): + gdf = gpd.read_file(uc_layers, layer="uc_grid", where=f"ID_UC_G0='{urban_center_id}'") + return gdf + + +def query_ohsome_api(grid_df, filter_str): + response = client.elements.area.groupByBoundary.post( + bpolys=grid_df, + filter=filter_str, + time="2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2024-05-26" + ) + results_df = response.as_dataframe() + results_df.reset_index(inplace=True) + return results_df + + + +#run all functions + + +if __name__ == "__main__": + urban_center_ids = get_urban_center_ids() + pivot_table = [] + + for urban_center_id in urban_center_ids: + + logging.info(f"start update for urban_center_id: {urban_center_id}") + + #import grid for id + grid_df = import_grid_layer(urban_center_id) + grid_df["region"] = "region_" + grid_df["identifier"].astype(str) + grid_df.set_index("region", inplace=True) + + #calculate building area per grid + filter_str = "building=* and geometry:polygon" + result_df = query_ohsome_api(grid_df, filter_str) + logging.info(f"queried ohsome api urban centers grid for {urban_center_id}") + + #turn into dataframe + result_df.reset_index(inplace=True) + result_df.set_index("boundary", inplace=True) + + #add both df + join_df = grid_df.join(result_df) + #change unit from m to km + join_df["value"] = join_df["value"] / (1000*1000) + #create new column + join_df["year"] = "osm_building_area_sqkm_" + join_df["timestamp"].dt.strftime('%Y-%m') + + #create new table + new_df = pd.pivot_table(join_df, values='value', columns=["year"], index=['identifier', 'ID_UC_G0']) + + pivot_table.append(new_df) + print(f"Finished adding values for uc_id: {urban_center_id}.") + + uc_building_area = pd.concat(pivot_table) + uc_building_area.to_csv("../covariates/uc_building_area_per_grid.csv") diff --git a/scripts/V2024/lara_road_length.py b/scripts/V2024/lara_road_length.py new file mode 100644 index 0000000..e8881cc --- /dev/null +++ b/scripts/V2024/lara_road_length.py @@ -0,0 +1,90 @@ +import logging + +import geopandas as gpd +import pandas as pd + +#load geopackage +uc_layers = ("../data/jrc_uc_wgs84.gpkg") + +#get urban center ids +def get_urban_center_ids(): + df_uc = gpd.read_file(uc_layers, layer='uc_2025') + urban_center_ids = df_uc["ID_UC_G0"].values + logging.info(f"got {len(urban_center_ids)} urban centers") + + return urban_center_ids + +#import grid for every single id, note: takes a long time, other function is better but does not work!!! +''' only needed if python/geopaandas/fiona versions are not high enough +def get_each_grid(uc_layers, urban_center_id): + df_grid = gpd.read_file(uc_layers, layer='uc_grid') + filtered_gdf = df_grid[df_grid['ID_UC_G0'] == urban_center_id] + return filtered_gdf + filtered_gdf.reset_index(inplace=True) + return filtered_gdf + ''' + +#import grid of a single urban center id wuth gpd +def import_grid_layer(urban_center_id): + gdf = gpd.read_file(uc_layers, layer="uc_grid", where=f"ID_UC_G0='{urban_center_id}'") + return gdf + +#query ohsome api for road_length per grid +from ohsome import OhsomeClient + +client = OhsomeClient() + +def query_ohsome_api(grid_df, filter_str): + # make sure to set correct end timestamp here + response = client.elements.length.groupByBoundary.post( + bpolys=grid_df, + filter=filter_str, + #timestamps 1 year interval since 2008 AND most recent value (2024-05-26) + time="2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2024-05-26" + ) + results_df = response.as_dataframe() + results_df.reset_index(inplace=True) + return results_df + + +#define parameters +pivot_table = [] +urban_center_ids = get_urban_center_ids() + +#run all functions +for urban_center_id in urban_center_ids: + + logging.info(f"start update for urban_center_id: {urban_center_id}") + + # run query for urban centers grid + grid_df = import_grid_layer(urban_center_id) + grid_df["region"] = "region_" + grid_df["identifier"].astype(str) + grid_df.set_index("region", inplace=True) + + #query ohsome api + filter_str = "highway in (motorway, trunk, motorway_link, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential) and type:way" + results_df = query_ohsome_api(grid_df, filter_str) + logging.info(f"queried ohsome api urban centers grid for {urban_center_id}") + + #turn into df + results_df.reset_index(inplace=True) + results_df.set_index("boundary", inplace=True) + + join_df = grid_df.join(results_df) + #change unit from m to km + join_df["value"] = join_df["value"] / 1000 + #create column for every year (with month so that latest entry is included as well) + join_df["year"] = "osm_road_length_km_" + join_df["timestamp"].dt.strftime('%Y-%m') + + #add all results from the for loop to a pivot table + new_df = pd.pivot_table(join_df, values='value', columns=["year"], index=['identifier', 'ID_UC_G0']) + pivot_table.append(new_df) + logging.info(f"finished update for urban_center_id: {urban_center_id}") + + +#add each result of the for-loop to this table +uc_road_length = pd.concat(pivot_table) +#save as csv +uc_road_length.to_csv("uc_road_length_per_grid.csv") + +##later on:join identifier and fid! diff --git a/scripts/V2024/microsoft_building_area.py b/scripts/V2024/microsoft_building_area.py new file mode 100644 index 0000000..802f162 --- /dev/null +++ b/scripts/V2024/microsoft_building_area.py @@ -0,0 +1,127 @@ +import logging +import time + +import geojson +import geopandas as gpd +import pandas as pd +import psycopg2 + +uc_layers = "jrc_uc_wgs84.gpkg" + +def get_urban_center_ids(dns): + df_uc = gpd.read_file(uc_layers, layer='uc_2025') + urban_center_ids = [] + + query=""" + WITH bpoly AS ( + SELECT + ST_Setsrid (ST_GeomFromGeoJSON (%s), 4326) AS geom + ) + SELECT + -- ratio of area within coverage (empty if outside, between 0-1 if intersection) + ST_Area (ST_Intersection (bpoly.geom, coverage.geom)) / ST_Area (bpoly.geom) as area_ratio, + ST_AsGeoJSON (ST_Intersection (bpoly.geom, coverage.geom)) AS geom + FROM + bpoly, + {table_name} coverage + WHERE + ST_Intersects (bpoly.geom, coverage.geom) + """ + + for id in df_uc.index: + logging.info(f"checking coverage for UC_ID: {id}") + feature = df_uc.loc[id] + geom = geojson.dumps(feature.geometry) + for try_no in range(4): + try: + with psycopg2.connect(dns) as con: + with con.cursor() as cur: + cur.execute(query.format(table_name = "microsoft_buildings_coverage_simple"), (geom,)) + res = cur.fetchone() + if res: + urban_center_ids.append(feature.ID_UC_G0) + except Exception as e: + if try_no < 4-1: + logging.warning( + f"An error occured: UC ID {id}, Retrying. Errormessage: {e}" + ) + # wait 30 seconds before retrying + time.sleep(30) + continue + else: + logging.error( + f"Unable to query Data for: UC {id}, Message: {e}" + ) + exit() + break + logging.info(f"found {len(urban_center_ids)} urban centers withing coverage region") + return urban_center_ids + +def import_grid_layer(urban_center_id): + gdf = gpd.read_file(uc_layers, layer="uc_grid", where=f"ID_UC_G0='{urban_center_id}'") + return gdf + + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(message)s") + + dns = "postgres://{user}:{password}@{host}:{port}/{database}".format( + host="", + port="", + database="db", + user="user", + password="password", + ) + urban_center_ids = get_urban_center_ids(dns) + query = """ + WITH bpoly AS ( + SELECT + -- split mutlipolygon into list of polygons for more efficient processing + (ST_DUMP (ST_Setsrid (ST_GeomFromGeoJSON (%s), 4326))).geom AS geom + ) + SELECT + SUM({table_name}.area) as area + FROM {table_name}, + bpoly + WHERE + ST_Intersects ({table_name}.centroid, bpoly.geom); + """ + collected_table = [] + for urban_center_id in urban_center_ids: + logging.info(f"start update for urban_center_id: {urban_center_id}") + + # import grid for id + grid_df = import_grid_layer(urban_center_id) + for i in grid_df.index: + feature = grid_df.iloc[i] + + geom = geojson.dumps(feature.geometry) + for try_no in range(4): + try: + with psycopg2.connect(dns) as con: + with con.cursor() as cur: + cur.execute(query.format(table_name = "microsoft_buildings"), (geom,)) + res = cur.fetchone() + if res is None or res[0] is None: + res=0 + else: + res = res[0]/(1000*1000) + grid_df.at[i, "microsoft_area"] = res + except Exception as e: + if try_no < 4-1: + logging.warning( + f"An error occured: UC ID {urban_center_id}, Index {i}. Errormessage: {e}" + ) + # wait 30 seconds before retrying + time.sleep(30) + continue + else: + logging.error( + f"Unable to query Data for: UC {urban_center_id}, Index {i}. Message: {e}" + ) + exit() + break + collected_table.append(grid_df) + logging.info(f"finished update for urban_center_id: {urban_center_id}") + uc_ms_building_area = pd.concat(collected_table) + uc_ms_building_area.to_csv("uc_ms_building_area.csv") \ No newline at end of file diff --git a/scripts/V2024/microsoft_road_length.py b/scripts/V2024/microsoft_road_length.py new file mode 100644 index 0000000..8951f6c --- /dev/null +++ b/scripts/V2024/microsoft_road_length.py @@ -0,0 +1,126 @@ +import logging +import time + +import geojson +import geopandas as gpd +import pandas as pd +import psycopg2 + +uc_layers = "jrc_uc_wgs84.gpkg" +def get_urban_center_ids(dns): + df_uc = gpd.read_file(uc_layers, layer='uc_2025') + urban_center_ids = [] + query = """ + WITH bpoly AS ( + SELECT + ST_Setsrid (ST_GeomFromGeoJSON (%s), 4326) AS geom + ) + SELECT + -- ratio of area within coverage (empty if outside, between 0-1 if intersection) + ST_Area (ST_Intersection (bpoly.geom, coverage.geom)) / ST_Area (bpoly.geom) as area_ratio, + ST_AsGeoJSON (ST_Intersection (bpoly.geom, coverage.geom)) AS geom + FROM + bpoly, + {table_name} coverage + WHERE + ST_Intersects (bpoly.geom, coverage.geom) + """ + + for id in df_uc.index: + logging.info(f"checking coverage for UC_ID: {id}") + feature = df_uc.loc[id] + geom = geojson.dumps(feature.geometry) + for try_no in range(4): + try: + with psycopg2.connect(dns) as con: + with con.cursor() as cur: + cur.execute(query.format(table_name = "microsoft_roads_coverage_simple"), (geom,)) + res = cur.fetchone() + if res: + urban_center_ids.append(feature.ID_UC_G0) + except Exception as e: + if try_no < 4 - 1: + logging.warning( + f"An error occured: UC ID {id}, Retrying. Errormessage: {e}" + ) + # wait 30 seconds before retrying + time.sleep(30) + continue + else: + logging.error( + f"Unable to query Data for: UC {id}, Message: {e}" + ) + exit() + break + + logging.info(f"found {len(urban_center_ids)} urban centers withing coverage region") + return urban_center_ids + +def import_grid_layer(urban_center_id): + gdf = gpd.read_file(uc_layers, layer="uc_grid", where=f"ID_UC_G0='{urban_center_id}'") + return gdf + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(message)s") + + dns = "postgres://{user}:{password}@{host}:{port}/{database}".format( + host="", + port="", + database="db", + user="user", + password="password", + ) + urban_center_ids = get_urban_center_ids(dns) + query = """ + WITH bpoly AS ( + SELECT + -- split mutlipolygon into list of polygons for more efficient processing + (ST_DUMP (ST_Setsrid (ST_GeomFromGeoJSON (%s), 4326))).geom AS geom + ) + SELECT + SUM(cr.covered), + SUM(cr.length) + FROM + bpoly + LEFT JOIN {table_name} cr ON ST_Intersects (cr.midpoint, bpoly.geom); + """ + collected_table = [] + for urban_center_id in urban_center_ids: + logging.info(f"start update for urban_center_id: {urban_center_id}") + + # import grid for id + grid_df = import_grid_layer(urban_center_id) + for i in grid_df.index: + feature = grid_df.iloc[i] + + geom = geojson.dumps(feature.geometry) + for try_no in range(4): + try: + with psycopg2.connect(dns) as con: + with con.cursor() as cur: + cur.execute(query.format(table_name = "microsoft_roads_midpoint"), (geom,)) + res = cur.fetchone() + if res[1] is None or res is None: + res = 0 + else: + res = res[1]/1000 + grid_df.at[i, "microsoft_roads_length"] = res + except Exception as e: + if try_no < 4 - 1: + logging.warning( + f"An error occured: UC ID {urban_center_id}, Index {i}, Retrying. Errormessage: {e}" + ) + # wait 30 seconds before retrying + time.sleep(30) + continue + else: + logging.error( + f"Unable to query Data for: UC {urban_center_id}, Index {i}. Message: {e}" + ) + exit() + break + collected_table.append(grid_df) + logging.info(f"finished update for urban_center_id: {urban_center_id}") + uc_ms_road_length = pd.concat(collected_table) + uc_ms_road_length.to_csv("uc_ms_road_length.csv") diff --git a/scripts/V2024/model_performance.py b/scripts/V2024/model_performance.py new file mode 100644 index 0000000..cc1de78 --- /dev/null +++ b/scripts/V2024/model_performance.py @@ -0,0 +1,225 @@ +import logging +import pathlib +from random import sample + +import geopandas as gpd +import pandas as pd +from sklearn.cluster import KMeans +from sklearn.ensemble import RandomForestRegressor +from sklearn.preprocessing import RobustScaler + + +def load_urban_centers_grid(input_file, layer_grid): + df = gpd.read_file(input_file, layer=layer_grid) + + df["region_wb_cat"] = pd.Categorical(df["region_wb"]) + df["region_code"] = df.region_wb_cat.cat.codes + + df["shdi_2021"].fillna((df["shdi_2021"].mean()), inplace=True) + df["selected_road_length_km"].fillna( + (df["selected_road_length_km"].mean()), inplace=True + ) + + for column in df.columns: + if column in [ + "external_reference_building_area_sqkm", + "microsoft_building_area_sqkm", + "reference_building_area_sqkm", + "reference_completeness", + "region_wb", + "region_wb_cat", + "region_code", + ]: + continue + + df[column] = df[column].fillna(0) + + logging.info(len(df)) + return df + + +def get_urban_center_centroids(inputfile, layer_uc, grid_df): + """Get the centroids of the urban centers.""" + # returns message, that centroids are likely incorrect because the data is in a geographic CRS. is reprojecting neccessary?? + copy_df = grid_df[ + ["urban_center_id", "osm_building_area_sqkm_2024_05", "reference_building_area_sqkm"] + ] + copy_df = copy_df.groupby("urban_center_id").sum() + copy_df["reference_completeness"] = round( + copy_df["osm_building_area_sqkm_2024_05"] + / copy_df["reference_building_area_sqkm"], + 3, + ) + + uc_grid = gpd.read_file(inputfile, layer=layer_uc) + uc_grid = pd.merge( + uc_grid, + copy_df[["reference_building_area_sqkm", "reference_completeness"]], + on="urban_center_id", + how="left", + ) + + # filter the columns out, where the (training) data might not be complete + df = uc_grid[ + (uc_grid["reference_completeness"] < 1.5) + & (uc_grid["reference_building_area_sqkm"].notnull()) + ] + + # create centroids + df_reprojected = df.to_crs("+proj=cea") + df["x"] = df_reprojected.centroid.to_crs(df.crs).x + df["y"] = df_reprojected.centroid.to_crs(df.crs).y + + logging.info(f"got {len(df)} urban centers with centroid coordinates") + + return df[["urban_center_id", "x", "y"]] + + +def spatial_train_test_split_cluster(df, cluster_label, n=0): + """Split based on sample location.""" + + train_indices = df.index[ + (df["cluster"] != cluster_label) + & (df["reference_building_area_sqkm"] > 0) # this includes OSM data + ].tolist() + + test_indices = df.index[ + (df["cluster"] == cluster_label) + & ( + df["reference_building_area_sqkm"] > 0 + ) # this includes only reference data and osm data + ].tolist() + + if n > 0: + if n > len(train_indices): + n = len(train_indices) + train_indices = sample(train_indices, n) + + return train_indices, test_indices + + +def kmeans_cluster_urban_centers(df, x, y, n_clusters): + """create location based clusters""" + columns = [x, y] + kmeans = KMeans(n_clusters=n_clusters, random_state=0).fit(df[columns]) + df["cluster"] = kmeans.labels_ + return df, n_clusters + + +def estimate_model_performance(inputfile, layer_uc, layer_prediction, n_clusters=10): + df = load_urban_centers_grid(inputfile, layer_prediction) + + urban_centers_df = get_urban_center_centroids(inputfile, layer_uc, df) + cluster_df, n_clusters = kmeans_cluster_urban_centers( + urban_centers_df, "x", "y", n_clusters + ) + df = df.join(cluster_df.set_index("urban_center_id"), on="urban_center_id", how="inner") + region_groups = list(range(0, n_clusters)) + + # df for model + df_model = df.reset_index() + + # feature scaling + sc = RobustScaler() + X = sc.fit_transform(df_model[COVARIATE_COLUMNS].values) + y = df_model[REFERENCE_COLUMN].values + + for r in range(0, 5): + logging.info(f"start round: {r+1}") + for i, regions in enumerate(region_groups): + logging.info(f"processing round {r+1}: {i + 1}/{len(region_groups)}") + + # max 50k samples per split + train_indices, test_indices = spatial_train_test_split_cluster( + df_model, regions, n=50000 + ) + + X_train = X[train_indices] + y_train = y[train_indices] + + X_test = X[test_indices] + y_test = y[test_indices] + + # check if there are reference samples + if len(y_test) < 1: + logging.info(f"no test samples: {regions}") + continue + elif len(y_train) < 1: + logging.info(f"no training samples: {regions}") + continue + + regressor = RandomForestRegressor(n_estimators=50) + regressor.fit(X_train, y_train) + logging.info("fitted model") + + y_pred = regressor.predict(X_test) + logging.info("predicted model") + + df_test = df_model.iloc[test_indices] + + df_test["repeat"] = r + df_test["prediction"] = y_pred + df_test["reference_building_area_sqkm"] = y_test + df_test["split"] = i + + # save predictions to Geopackage + df_export = df_test[ + [ + "urban_center_id", + "identifier", + "region_wb", + "repeat", + "split", + "prediction", + "reference_building_area_sqkm", + "geometry", + ] + ] + if r == 0 and i == 0: + df_export.to_file( + inputfile, + layer=f"performance_{n_clusters}_clusters_reference_and_osm", + driver="GPKG", + ) + else: + df_export.to_file( + inputfile, + layer=f"performance_{n_clusters}_clusters_reference_and_osm", + driver="GPKG", + mode="a", + ) + + del df_export + + logging.info("saved predictions to Geopackage.") + + +if __name__ == "__main__": + """python scripts/model_performance.py""" + + logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(message)s", + ) + + inputfile = pathlib.Path("../abgabe.gpkg") + layer_uc = "uc_2025" + layer_grid = "grid_full_info_v2024" + layer_grid_prediction = "prediction_improved" + + COVARIATE_COLUMNS = [ + "worldcover_2021_built_up_sqkm", + "worldcover_2021_tree_cover_sqkm", + "worldcover_2021_sparse_vegetation_sqkm", + "ghs_pop_2023", + "vnl_2023", + "shdi_2021", + "selected_road_length_km", + "region_code", + ] + + REFERENCE_COLUMN = "reference_building_area_sqkm" + + estimate_model_performance( + inputfile, layer_uc, layer_grid_prediction, n_clusters=20 + ) diff --git a/scripts/V2024/pyproject.toml b/scripts/V2024/pyproject.toml new file mode 100644 index 0000000..f579da5 --- /dev/null +++ b/scripts/V2024/pyproject.toml @@ -0,0 +1,33 @@ +[tool.poetry] +name = "jrc" +version = "0.1.0" +description = "" +authors = ["Your Name "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.10" +ohsome = "^0.3.1" +geopandas = "^0.14.4" +geojson = "^3.1.0" +psycopg2 = "^2.9.9" +terracatalogueclient = "^0.1.18" +rasterio = "^1.3.10" +rasterstats = "^0.19.0" +scikit-learn = "^1.5.1" +matplotlib = "^3.9.1" +seaborn = "^0.13.2" + +[[tool.poetry.source]] +name = "terracatalogueclient" +url = "https://artifactory.vgt.vito.be/api/pypi/python-packages/simple" +default = false +secondary = true + + +[tool.poetry.group.dev.dependencies] +notebook = "^7.2.1" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/scripts/V2024/run_prediction.py b/scripts/V2024/run_prediction.py new file mode 100644 index 0000000..c2434d5 --- /dev/null +++ b/scripts/V2024/run_prediction.py @@ -0,0 +1,176 @@ +import logging +import pathlib +import sys + +import geopandas as gpd +import pandas as pd +from sklearn.ensemble import RandomForestRegressor +from sklearn.preprocessing import RobustScaler + + +def load_urban_centers_grid(input_file, layer_grid): + df = gpd.read_file(input_file, layer=layer_grid) + + df["region_wb_cat"] = pd.Categorical(df["region_wb"]) + df["region_code"] = df.region_wb_cat.cat.codes + + df["shdi_2021"].fillna((df["shdi_2021"].mean()), inplace=True) + df["selected_road_length_km"].fillna( + (df["selected_road_length_km"].mean()), inplace=True + ) + + for column in df.columns: + if column in [ + "external_reference_building_area_sqkm", + "microsoft_building_area_sqkm", + "reference_building_area_sqkm", + "reference_completeness", + "region_wb", + "region_wb_cat", + "region_code", + ]: + continue + + df[column] = df[column].fillna(0) + + logging.info(len(df)) + return df + + +def get_outliers(df, uc_file, layer_UC, threshold=0.005): + copy_df = df[["urban_center_id", "osm_building_area_sqkm_2024_05", "prediction_sqkm"]] + copy_df = copy_df.groupby("urban_center_id").sum() + + uc_df = gpd.read_file(uc_file, layer=layer_UC) + uc_df = pd.merge( + uc_df, + copy_df[["osm_building_area_sqkm_2024_05", "prediction_sqkm"]], + on="urban_center_id", + how="left", + ) + + uc_df = uc_df.to_crs("ESRI:54009") + uc_df["area"] = uc_df.geometry.area / (1000 * 1000) + + # select all rows where area is greater than threshold + uc_df_subset = uc_df[ + (uc_df["osm_building_area_sqkm_2024_05"] - uc_df["prediction_sqkm"]) + > uc_df["area"] * threshold + ] + + outliers = uc_df_subset["urban_center_id"].values + logging.info( + f"got {len(outliers)} urban center ids with prediction below threshold (th = {threshold})" + ) + return outliers + + +def run_prediction(training_data, uc_file, layer_grid, layer_UC): + logging.info("start workflow") + + df = load_urban_centers_grid(uc_file, layer_grid) + logging.info("got dataframe") + + if training_data == "reference_and_osm": + urban_center_ids = get_outliers(df, uc_file, layer_UC, threshold=0.005) + df[f"reference_building_area_sqkm_initial"] = df[f"reference_building_area_sqkm"] + df.loc[ + (df["urban_center_id"].isin(urban_center_ids)), "reference_building_area_sqkm" + ] = df["osm_building_area_sqkm_2024_05"] + + df["reference_completeness"] = round( + df["osm_building_area_sqkm_2024_05"] / df["reference_building_area_sqkm"], 3 + ) + + df_train = df[ + (df["reference_building_area_sqkm"] > 0) + & + # avoid urban centers for which training data might not be complete + (df["reference_completeness"] < 1.5) + ] + logging.info(f"training samples: {len(df_train)}") + + # Feature Scaling + X_train = df_train[COVARIATE_COLUMNS].values + y_train = df_train[REFERENCE_COLUMN].values + sc = RobustScaler() + X = df[COVARIATE_COLUMNS].values + X_input = sc.fit_transform(X) + X_train = sc.transform(X_train) + logging.info("scaled features.") + + # fit model and predict + regressor = RandomForestRegressor(n_estimators=50) + regressor.fit(X_train, y_train) + logging.info("fitted model") + + y_pred = regressor.predict(X_input) + logging.info("predicted model") + + # get importance + importance = regressor.feature_importances_ + # summarize feature importance + feature_importance = {} + for i, v in enumerate(importance): + feature_importance[COVARIATE_COLUMNS[i]] = v + logging.info(feature_importance) + + gdf_temp = df.drop( + columns=[ + "region_wb_cat", + "region_code", + ], + errors="ignore", + ) + if layer_grid != "prediction": + gdf_temp["prediction_sqkm"] = y_pred + gdf_temp.to_file(uc_file, layer="prediction", driver="GPKG") + else: + gdf_temp["prediction_improved_sqkm"] = y_pred + gdf_temp["prediction_osm_completeness_2024_05"] = ( + ( + gdf_temp["osm_building_area_sqkm_2024_05"] + / gdf_temp["prediction_improved_sqkm"] + ) + * 100 + ).round(3) + gdf_temp.to_file(uc_file, layer="prediction_improved", driver="GPKG") + logging.info("saved predictions to GPKG.") + + +if __name__ == "__main__": + logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(message)s", + ) + + uc_file = pathlib.Path("../abgabe.gpkg") + layer_UC = "uc_2025" + layer_grid = "grid_full_info_v2024" + layer_grid_prediction = "prediction" + + COVARIATE_COLUMNS = [ + "worldcover_2021_built_up_sqkm", + "worldcover_2021_tree_cover_sqkm", + "worldcover_2021_sparse_vegetation_sqkm", + "ghs_pop_2023", + "vnl_2023", + "shdi_2021", + "selected_road_length_km", + "region_code", + ] + + REFERENCE_COLUMN = "reference_building_area_sqkm" + + """python scripts/run_prediction.py reference_and_osm""" + + # training_data = sys.argv[1] + #training_data = "reference" + training_data = "reference_and_osm" + + if training_data == "reference": + run_prediction(training_data, uc_file, layer_grid, layer_UC) + elif training_data == "reference_and_osm": + run_prediction(training_data, uc_file, layer_grid_prediction, layer_UC) + else: + print("please pass a valid argument: 'reference' or 'reference_and_osm'") diff --git a/scripts/V2024/version_2_Table 4 - regional performance scores.ipynb b/scripts/V2024/version_2_Table 4 - regional performance scores.ipynb new file mode 100644 index 0000000..913cc04 --- /dev/null +++ b/scripts/V2024/version_2_Table 4 - regional performance scores.ipynb @@ -0,0 +1,556 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4726f73b", + "metadata": {}, + "source": [ + "Note: for performance scores on urban centers level check this file `Figure 7 - scatterplots of residuals`." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "79ce715f", + "metadata": {}, + "outputs": [], + "source": [ + "import sqlite3\n", + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.gridspec as gridspec\n", + "import seaborn as sns\n", + "\n", + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "af40378b", + "metadata": {}, + "outputs": [], + "source": [ + "def load_avg_prediction_dataframe():\n", + " con = sqlite3.connect(\"../global_urban_building_completeness.gpkg\")\n", + " query = f\"\"\"\n", + " with agg_prediction as (\n", + " select\n", + " a.identifier\n", + " ,a.urban_center_id\n", + " ,a.split\n", + " ,avg(a.prediction) as prediction\n", + " from performance_20_clusters_reference_and_osm_v2024 as a \n", + " group by identifier, urban_center_id, split\n", + " )\n", + " select\n", + " a.identifier\n", + " ,a.urban_center_id\n", + " ,a.region_wb\n", + " ,'rf_adjusted' as model_name\n", + " ,b.split\n", + " ,b.prediction\n", + " ,a.reference_completeness\n", + " ,a.reference_building_area_sqkm\n", + " ,a.osm_building_area_sqkm_2024_05 / b.prediction as prediction_osm_completeness\n", + " from rf_adjusted_prediction_reference_and_osm_v2024 a\n", + " left join agg_prediction b\n", + " on a.identifier = b.identifier\n", + " where\n", + " reference_building_area_sqkm is not null\n", + " and\n", + " b.prediction is not null\n", + " \"\"\"\n", + " df = pd.read_sql(query, con=con)\n", + " print(f\"got dataframe with {len(df)} samples\")\n", + " return df\n", + "\n", + "\n", + "def get_all_samples():\n", + " con = sqlite3.connect(\"../global_urban_building_completeness.gpkg\")\n", + " query = f\"\"\"\n", + " select \n", + " a.identifier as id\n", + " ,a.urban_center_id\n", + " ,b.region_wb \n", + " from rf_adjusted_prediction_reference_and_osm_v2024 a\n", + " left join ne_10m_admin_0_countries b\n", + " on a.iso_a3 = b.iso_a3\n", + " \"\"\"\n", + " df = pd.read_sql(query, con=con)\n", + " print(f\"got dataframe with {len(df)} samples from table: grid_full_info_v2024\")\n", + " return df" + ] + }, + { + "cell_type": "markdown", + "id": "ea53d8a8", + "metadata": {}, + "source": [ + "## configuration" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "61e40a41", + "metadata": {}, + "outputs": [], + "source": [ + "models = [\n", + " \"rf_adjusted\",\n", + "]\n", + "splits = [\n", + " \"cluster_20\",\n", + "]\n", + "\n", + "score_names = [\n", + " ['r2', metrics.r2_score],\n", + " ['explained_variance', metrics.explained_variance_score],\n", + " ['neg_mean_squared_error', metrics.mean_squared_error],\n", + " ['neg_mean_absolute_error', metrics.mean_absolute_error],\n", + "]\n", + "\n", + "training_data_sets = [\n", + " \"reference_and_osm\"\n", + "]\n", + "\n", + "wb_regions_groups = [\n", + " [\"Latin America & Caribbean\"],\n", + " [\"East Asia & Pacific\"],\n", + " [\"South Asia\"],\n", + " [\"Europe & Central Asia\"],\n", + " [\"North America\"],\n", + " [\"Middle East & North Africa\"],\n", + " [\"Sub-Saharan Africa\"],\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e0e19de7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "got dataframe with 684718 samples from table: grid_full_info_v2024\n", + "got dataframe with 506178 samples\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
identifierurban_center_idregion_wbmodel_namesplitpredictionreference_completenessreference_building_area_sqkmprediction_osm_completeness
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [identifier, urban_center_id, region_wb, model_name, split, prediction, reference_completeness, reference_building_area_sqkm, prediction_osm_completeness]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "rf_adjusted\n", + "[67200, 209515, 127747, 93133, 70148, 44201, 72351]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
training_datamodel_namesplitr2explained_varianceMSEMAE
0reference_and_osmrf_adjustedcluster_200.7602840.7615950.0022740.031717
\n", + "
" + ], + "text/plain": [ + " training_data model_name split r2 explained_variance \\\n", + "0 reference_and_osm rf_adjusted cluster_20 0.760284 0.761595 \n", + "\n", + " MSE MAE \n", + "0 0.002274 0.031717 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_all_samples = get_all_samples()\n", + "\n", + "results_list = []\n", + "results = {}\n", + "\n", + "for split in splits:\n", + " results[split] = {}\n", + " for training_data in training_data_sets:\n", + " results[split][training_data] = {}\n", + " avg_prediction_df = load_avg_prediction_dataframe()\n", + " \n", + " missing_data = avg_prediction_df[avg_prediction_df.isnull().any(axis=1)]\n", + " display(missing_data)\n", + " \n", + " for model_name in models:\n", + " print(model_name)\n", + " results[split][training_data][model_name] = {}\n", + " results[split][training_data][model_name][\"samples\"] = []\n", + " results[split][training_data][model_name][\"reference_samples\"] = []\n", + " for score_name, score_function in score_names:\n", + " results[split][training_data][model_name][score_name] = []\n", + " \n", + " for i, wb_regions in enumerate(wb_regions_groups):\n", + " y_test = avg_prediction_df.loc[\n", + " avg_prediction_df[\"region_wb\"].isin(wb_regions)\n", + " ][\"reference_building_area_sqkm\"]\n", + "\n", + " y_pred = avg_prediction_df.loc[\n", + " avg_prediction_df[\"region_wb\"].isin(wb_regions)\n", + " ][\"prediction\"]\n", + " \n", + " if len(y_test) < 1:\n", + " print(f\"no test samples for {wb_regions}\")\n", + " continue\n", + " \n", + " samples = len(df_all_samples.loc[\n", + " df_all_samples[\"region_wb\"].isin(wb_regions)\n", + " ])\n", + " \n", + " reference_samples = len(y_test)\n", + " \n", + " results[split][training_data][model_name][\"samples\"].append(samples)\n", + " results[split][training_data][model_name][\"reference_samples\"].append(reference_samples)\n", + "\n", + " for score_name, score in score_names:\n", + " val = score(y_test, y_pred)\n", + " results[split][training_data][model_name][score_name].append(val)\n", + "\n", + " # get weighted average global score\n", + " list_item = [training_data, model_name, split]\n", + " samples = results[split][training_data][model_name][\"samples\"]\n", + " \n", + " print(samples)\n", + " \n", + " for score_name, score in score_names:\n", + " vals = results[split][training_data][model_name][score_name]\n", + " avg_score = np.average(vals, weights=samples)\n", + " list_item.append(avg_score)\n", + " results_list.append(list_item)\n", + " \n", + "columns = [\n", + " \"training_data\",\n", + " \"model_name\",\n", + " \"split\",\n", + " \"r2\",\n", + " \"explained_variance\",\n", + " \"MSE\",\n", + " \"MAE\"\n", + "]\n", + "list_df = pd.DataFrame(results_list, columns=columns)\n", + "display(list_df.sort_values(\"model_name\", ascending=False))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "df0d4e31", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_nameregionsplitsamplesreference_samplesr2explained_varianceMSEMAE
1rf_adjusted[East Asia & Pacific]cluster_20209515900780.8111790.8119270.0020420.030913
3rf_adjusted[Europe & Central Asia]cluster_2093133832990.6995320.7012810.0022340.031619
0rf_adjusted[Latin America & Caribbean]cluster_2067200605620.6741830.6753880.0049540.048299
5rf_adjusted[Middle East & North Africa]cluster_2044201381780.7860510.7875370.0025070.034288
4rf_adjusted[North America]cluster_2070148696140.6496350.6530060.0014700.027338
2rf_adjusted[South Asia]cluster_201277471010690.8496370.8510830.0017910.025675
6rf_adjusted[Sub-Saharan Africa]cluster_2072351633780.7048500.7049760.0019970.032115
\n", + "
" + ], + "text/plain": [ + " model_name region split samples \\\n", + "1 rf_adjusted [East Asia & Pacific] cluster_20 209515 \n", + "3 rf_adjusted [Europe & Central Asia] cluster_20 93133 \n", + "0 rf_adjusted [Latin America & Caribbean] cluster_20 67200 \n", + "5 rf_adjusted [Middle East & North Africa] cluster_20 44201 \n", + "4 rf_adjusted [North America] cluster_20 70148 \n", + "2 rf_adjusted [South Asia] cluster_20 127747 \n", + "6 rf_adjusted [Sub-Saharan Africa] cluster_20 72351 \n", + "\n", + " reference_samples r2 explained_variance MSE MAE \n", + "1 90078 0.811179 0.811927 0.002042 0.030913 \n", + "3 83299 0.699532 0.701281 0.002234 0.031619 \n", + "0 60562 0.674183 0.675388 0.004954 0.048299 \n", + "5 38178 0.786051 0.787537 0.002507 0.034288 \n", + "4 69614 0.649635 0.653006 0.001470 0.027338 \n", + "2 101069 0.849637 0.851083 0.001791 0.025675 \n", + "6 63378 0.704850 0.704976 0.001997 0.032115 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "506178\n" + ] + } + ], + "source": [ + "for split in splits:\n", + " for model_name in [\n", + " \"rf_adjusted\",\n", + " ]:\n", + " results_list_regions = []\n", + " for i, wb_region in enumerate(wb_regions_groups):\n", + " results_list_regions.append([\n", + " model_name,\n", + " wb_region,\n", + " split,\n", + " results[split][\"reference_and_osm\"][model_name][\"samples\"][i],\n", + " results[split][\"reference_and_osm\"][model_name][\"reference_samples\"][i],\n", + " results[split][\"reference_and_osm\"][model_name][\"r2\"][i],\n", + " results[split][\"reference_and_osm\"][model_name][\"explained_variance\"][i],\n", + " results[split][\"reference_and_osm\"][model_name][\"neg_mean_squared_error\"][i],\n", + " results[split][\"reference_and_osm\"][model_name][\"neg_mean_absolute_error\"][i],\n", + " ])\n", + "\n", + "\n", + " columns = [\n", + " \"model_name\",\n", + " \"region\",\n", + " \"split\",\n", + " \"samples\",\n", + " \"reference_samples\",\n", + " \"r2\",\n", + " \"explained_variance\",\n", + " \"MSE\",\n", + " \"MAE\"\n", + " ]\n", + " list_df = pd.DataFrame(results_list_regions, columns=columns)\n", + " display(list_df.sort_values(\"region\", ascending=True))\n", + " \n", + " print(list_df[\"reference_samples\"].sum())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75535912-5ffe-430f-8f85-04e974dc99b8", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/scripts/V2024/version_2_figure8_table4.ipynb b/scripts/V2024/version_2_figure8_table4.ipynb new file mode 100644 index 0000000..f8d9f50 --- /dev/null +++ b/scripts/V2024/version_2_figure8_table4.ipynb @@ -0,0 +1,2787 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "db7bf1fa", + "metadata": {}, + "outputs": [], + "source": [ + "import sqlite3\n", + "import pandas as pd\n", + "import numpy as np\n", + "import geopandas as gpd\n", + "import fiona\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.gridspec as gridspec\n", + "import seaborn as sns\n", + "\n", + "from sklearn import metrics" + ] + }, + { + "cell_type": "markdown", + "id": "da5836bb", + "metadata": {}, + "source": [ + "#### import version 1 gpkg to compare column names" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a32b8bd9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Europe & Central Asia_2022-01-01',\n", + " 'Sub-Saharan Africa_2022-01-01',\n", + " 'ne_10m_admin_0_countries',\n", + " 'graticule',\n", + " 'ne_50m_land',\n", + " 'all_parameters_urban_centers',\n", + " 'all_parameters_urban_centers_grid',\n", + " 'rf_adjusted_prediction_reference_and_osm',\n", + " 'rf_adjusted_prediction_reference_and_osm_urban_centers',\n", + " 'inequality_measures_urban_centers',\n", + " 'performance_20_clusters_reference_and_osm',\n", + " 'Europe & Central Asia_2010-01-01',\n", + " 'Europe & Central Asia_2014-01-01',\n", + " 'Europe & Central Asia_2023-01-01',\n", + " 'Sub-Saharan Africa_2010-01-01',\n", + " 'Sub-Saharan Africa_2014-01-01',\n", + " 'Sub-Saharan Africa_2023-01-01',\n", + " 'geowiki_grids_final',\n", + " 'rf_adjusted_prediction_reference_and_osm_urban_centers_v2024',\n", + " 'rf_adjusted_prediction_reference_and_osm_v2024',\n", + " 'performance_20_clusters_reference_and_osm_v2024',\n", + " 'model_performance_cluster_20_reference_and_osm',\n", + " 'osm_user_contributions_per_urban_center_with_data_teams_csv',\n", + " 'intra_urban_completeness_stats_clusters',\n", + " 'osm_user_contributions_per_urban_center_per_day_with_flag']" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "urban_completeness = (\"../global_urban_building_completeness.gpkg\")\n", + "fiona.listlayers(urban_completeness)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "79630fc0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
urban_center_idname_mainiso_a3country_idcontinentregion_wbtotal_area_sqkmghspop_2020ghspop_2020_classshdi_2019shdi_2019_classosm_building_area_sqkm_2023osm_building_area_sqkm_2022osm_building_area_sqkm_2021osm_building_area_sqkm_2020osm_building_area_sqkm_2019osm_building_area_sqkm_2018osm_building_area_sqkm_2017osm_building_area_sqkm_2016osm_building_area_sqkm_2015osm_building_area_sqkm_2014osm_building_area_sqkm_2013osm_building_area_sqkm_2012osm_building_area_sqkm_2011osm_building_area_sqkm_2010osm_building_area_sqkm_2009osm_building_area_sqkm_2008external_reference_building_area_sqkmexternal_reference_sourcesmicrosoft_building_area_sqkmreference_building_area_sqkmreference_building_area_sqkm_strictreference_osm_completenessreference_osm_completeness_strictgeowikigeometry
03369AjdabiyaLBY73AfricaMiddle East & North Africa19.93575050136.0small urban areas0.700medium0.2255100.2221180.2221210.2076530.1972740.1972740.3224610.2987980.1625470.1388660.0000000.0000000.0000000.0000000.0000000.0NaNNoneNaNNaNNaNNaNNaNNaNPOLYGON ((20.23413 30.77126, 20.24510 30.77126...
110716MengziCHN10AsiaEast Asia & Pacific27.871990115875.0small urban areas0.672medium0.0208910.0146130.0093190.0093190.0093190.0093190.0093190.0639940.0639940.0639940.0639940.0639200.0639200.0639200.0000000.0NaNNoneNaNNaNNaNNaNNaNNaNPOLYGON ((103.40718 23.38063, 103.41770 23.380...
22PapeetePYF191OceaniaEast Asia & Pacific41.76845976627.0small urban areasNaNNone5.5029465.4989625.4976475.4923941.3279081.2416760.9713730.9184430.6408160.4507890.1208530.0875400.0040190.0040190.0000000.0NaNNoneNaNNaNNaNNaNNaNNaNPOLYGON ((-149.51221 -17.52587, -149.52249 -17...
34417BaalbekLBN13AsiaMiddle East & North Africa15.95863170800.0small urban areas0.718high0.0392480.0392480.0392480.0296660.0294810.0251650.0182590.0169820.0169820.0116370.0010270.0000000.0000000.0781910.0781910.0NaNNone2.4212522.421252NaN0.0162100.016210NaNPOLYGON ((36.21625 34.01444, 36.23867 34.01444...
49657KharagpurIND9AsiaSouth Asia53.743784692966.0metropolitan areas0.641medium0.4135840.4259570.4191520.4179690.5799340.5665310.3631380.3521890.3251660.0269804.2547664.2547660.0000000.0000000.0000000.0NaNNone6.2686846.268684NaN0.0659760.065976NaNPOLYGON ((87.34264 22.35427, 87.35311 22.35427...
...............................................................................................................
1318413186BuinPNG160OceaniaEast Asia & Pacific2.9805504288.0small urban areas0.580medium0.0338400.0331810.0327370.0327370.0223350.0223350.0223350.0223350.0223350.0223350.0000000.0000000.0000000.0000000.0000000.0NaNNoneNaNNaNNaNNaNNaNNaNPOLYGON ((155.70324 -6.75922, 155.69322 -6.759...
1318513187HoniaraSLB234OceaniaEast Asia & Pacific22.85406285539.0small urban areas0.557medium1.7880771.7793761.7150761.6979690.9472130.8738810.8396290.7518700.6972810.0042000.0042000.0042000.0042000.0000000.0000000.0NaNNoneNaNNaNNaNNaNNaNNaNPOLYGON ((160.00675 -9.43852, 159.99669 -9.438...
1318613188NouméaNCL178OceaniaEast Asia & Pacific26.87095367497.0small urban areasNaNNone3.5091953.5084103.4984603.4990123.3962942.7074842.4526762.1832202.1520092.0956691.3504710.4927100.1513570.0690270.0000000.0NaNNoneNaNNaNNaNNaNNaNNaNPOLYGON ((166.48123 -22.26262, 166.47076 -22.2...
1318713189SuvaFJI176OceaniaEast Asia & Pacific63.653669206566.0medium-size urban areas0.743high5.4462515.3729635.0676434.4103550.3466800.7384120.1464780.0787970.0749750.0545830.0272550.0272550.0272550.0000000.0000000.0NaNNoneNaNNaNNaNNaNNaNNaNPOLYGON ((178.50540 -18.05327, 178.51570 -18.0...
1318813184HillcrestNZL177OceaniaEast Asia & Pacific114.779406247536.0medium-size urban areas0.941very high14.56243914.53678612.2905609.6598549.0435435.5500295.4782525.8245571.7969081.1027801.0512111.0295840.2490990.0479960.0472280.015.553192(1:lds)NaN15.55319215.5531920.9362990.9362991.0POLYGON ((174.76874 -36.69730, 174.75729 -36.6...
\n", + "

13189 rows × 36 columns

\n", + "
" + ], + "text/plain": [ + " urban_center_id name_main iso_a3 country_id continent \\\n", + "0 3369 Ajdabiya LBY 73 Africa \n", + "1 10716 Mengzi CHN 10 Asia \n", + "2 2 Papeete PYF 191 Oceania \n", + "3 4417 Baalbek LBN 13 Asia \n", + "4 9657 Kharagpur IND 9 Asia \n", + "... ... ... ... ... ... \n", + "13184 13186 Buin PNG 160 Oceania \n", + "13185 13187 Honiara SLB 234 Oceania \n", + "13186 13188 Nouméa NCL 178 Oceania \n", + "13187 13189 Suva FJI 176 Oceania \n", + "13188 13184 Hillcrest NZL 177 Oceania \n", + "\n", + " region_wb total_area_sqkm ghspop_2020 \\\n", + "0 Middle East & North Africa 19.935750 50136.0 \n", + "1 East Asia & Pacific 27.871990 115875.0 \n", + "2 East Asia & Pacific 41.768459 76627.0 \n", + "3 Middle East & North Africa 15.958631 70800.0 \n", + "4 South Asia 53.743784 692966.0 \n", + "... ... ... ... \n", + "13184 East Asia & Pacific 2.980550 4288.0 \n", + "13185 East Asia & Pacific 22.854062 85539.0 \n", + "13186 East Asia & Pacific 26.870953 67497.0 \n", + "13187 East Asia & Pacific 63.653669 206566.0 \n", + "13188 East Asia & Pacific 114.779406 247536.0 \n", + "\n", + " ghspop_2020_class shdi_2019 shdi_2019_class \\\n", + "0 small urban areas 0.700 medium \n", + "1 small urban areas 0.672 medium \n", + "2 small urban areas NaN None \n", + "3 small urban areas 0.718 high \n", + "4 metropolitan areas 0.641 medium \n", + "... ... ... ... \n", + "13184 small urban areas 0.580 medium \n", + "13185 small urban areas 0.557 medium \n", + "13186 small urban areas NaN None \n", + "13187 medium-size urban areas 0.743 high \n", + "13188 medium-size urban areas 0.941 very high \n", + "\n", + " osm_building_area_sqkm_2023 osm_building_area_sqkm_2022 \\\n", + "0 0.225510 0.222118 \n", + "1 0.020891 0.014613 \n", + "2 5.502946 5.498962 \n", + "3 0.039248 0.039248 \n", + "4 0.413584 0.425957 \n", + "... ... ... \n", + "13184 0.033840 0.033181 \n", + "13185 1.788077 1.779376 \n", + "13186 3.509195 3.508410 \n", + "13187 5.446251 5.372963 \n", + "13188 14.562439 14.536786 \n", + "\n", + " osm_building_area_sqkm_2021 osm_building_area_sqkm_2020 \\\n", + "0 0.222121 0.207653 \n", + "1 0.009319 0.009319 \n", + "2 5.497647 5.492394 \n", + "3 0.039248 0.029666 \n", + "4 0.419152 0.417969 \n", + "... ... ... \n", + "13184 0.032737 0.032737 \n", + "13185 1.715076 1.697969 \n", + "13186 3.498460 3.499012 \n", + "13187 5.067643 4.410355 \n", + "13188 12.290560 9.659854 \n", + "\n", + " osm_building_area_sqkm_2019 osm_building_area_sqkm_2018 \\\n", + "0 0.197274 0.197274 \n", + "1 0.009319 0.009319 \n", + "2 1.327908 1.241676 \n", + "3 0.029481 0.025165 \n", + "4 0.579934 0.566531 \n", + "... ... ... \n", + "13184 0.022335 0.022335 \n", + "13185 0.947213 0.873881 \n", + "13186 3.396294 2.707484 \n", + "13187 0.346680 0.738412 \n", + "13188 9.043543 5.550029 \n", + "\n", + " osm_building_area_sqkm_2017 osm_building_area_sqkm_2016 \\\n", + "0 0.322461 0.298798 \n", + "1 0.009319 0.063994 \n", + "2 0.971373 0.918443 \n", + "3 0.018259 0.016982 \n", + "4 0.363138 0.352189 \n", + "... ... ... \n", + "13184 0.022335 0.022335 \n", + "13185 0.839629 0.751870 \n", + "13186 2.452676 2.183220 \n", + "13187 0.146478 0.078797 \n", + "13188 5.478252 5.824557 \n", + "\n", + " osm_building_area_sqkm_2015 osm_building_area_sqkm_2014 \\\n", + "0 0.162547 0.138866 \n", + "1 0.063994 0.063994 \n", + "2 0.640816 0.450789 \n", + "3 0.016982 0.011637 \n", + "4 0.325166 0.026980 \n", + "... ... ... \n", + "13184 0.022335 0.022335 \n", + "13185 0.697281 0.004200 \n", + "13186 2.152009 2.095669 \n", + "13187 0.074975 0.054583 \n", + "13188 1.796908 1.102780 \n", + "\n", + " osm_building_area_sqkm_2013 osm_building_area_sqkm_2012 \\\n", + "0 0.000000 0.000000 \n", + "1 0.063994 0.063920 \n", + "2 0.120853 0.087540 \n", + "3 0.001027 0.000000 \n", + "4 4.254766 4.254766 \n", + "... ... ... \n", + "13184 0.000000 0.000000 \n", + "13185 0.004200 0.004200 \n", + "13186 1.350471 0.492710 \n", + "13187 0.027255 0.027255 \n", + "13188 1.051211 1.029584 \n", + "\n", + " osm_building_area_sqkm_2011 osm_building_area_sqkm_2010 \\\n", + "0 0.000000 0.000000 \n", + "1 0.063920 0.063920 \n", + "2 0.004019 0.004019 \n", + "3 0.000000 0.078191 \n", + "4 0.000000 0.000000 \n", + "... ... ... \n", + "13184 0.000000 0.000000 \n", + "13185 0.004200 0.000000 \n", + "13186 0.151357 0.069027 \n", + "13187 0.027255 0.000000 \n", + "13188 0.249099 0.047996 \n", + "\n", + " osm_building_area_sqkm_2009 osm_building_area_sqkm_2008 \\\n", + "0 0.000000 0.0 \n", + "1 0.000000 0.0 \n", + "2 0.000000 0.0 \n", + "3 0.078191 0.0 \n", + "4 0.000000 0.0 \n", + "... ... ... \n", + "13184 0.000000 0.0 \n", + "13185 0.000000 0.0 \n", + "13186 0.000000 0.0 \n", + "13187 0.000000 0.0 \n", + "13188 0.047228 0.0 \n", + "\n", + " external_reference_building_area_sqkm external_reference_sources \\\n", + "0 NaN None \n", + "1 NaN None \n", + "2 NaN None \n", + "3 NaN None \n", + "4 NaN None \n", + "... ... ... \n", + "13184 NaN None \n", + "13185 NaN None \n", + "13186 NaN None \n", + "13187 NaN None \n", + "13188 15.553192 (1:lds) \n", + "\n", + " microsoft_building_area_sqkm reference_building_area_sqkm \\\n", + "0 NaN NaN \n", + "1 NaN NaN \n", + "2 NaN NaN \n", + "3 2.421252 2.421252 \n", + "4 6.268684 6.268684 \n", + "... ... ... \n", + "13184 NaN NaN \n", + "13185 NaN NaN \n", + "13186 NaN NaN \n", + "13187 NaN NaN \n", + "13188 NaN 15.553192 \n", + "\n", + " reference_building_area_sqkm_strict reference_osm_completeness \\\n", + "0 NaN NaN \n", + "1 NaN NaN \n", + "2 NaN NaN \n", + "3 NaN 0.016210 \n", + "4 NaN 0.065976 \n", + "... ... ... \n", + "13184 NaN NaN \n", + "13185 NaN NaN \n", + "13186 NaN NaN \n", + "13187 NaN NaN \n", + "13188 15.553192 0.936299 \n", + "\n", + " reference_osm_completeness_strict geowiki \\\n", + "0 NaN NaN \n", + "1 NaN NaN \n", + "2 NaN NaN \n", + "3 0.016210 NaN \n", + "4 0.065976 NaN \n", + "... ... ... \n", + "13184 NaN NaN \n", + "13185 NaN NaN \n", + "13186 NaN NaN \n", + "13187 NaN NaN \n", + "13188 0.936299 1.0 \n", + "\n", + " geometry \n", + "0 POLYGON ((20.23413 30.77126, 20.24510 30.77126... \n", + "1 POLYGON ((103.40718 23.38063, 103.41770 23.380... \n", + "2 POLYGON ((-149.51221 -17.52587, -149.52249 -17... \n", + "3 POLYGON ((36.21625 34.01444, 36.23867 34.01444... \n", + "4 POLYGON ((87.34264 22.35427, 87.35311 22.35427... \n", + "... ... \n", + "13184 POLYGON ((155.70324 -6.75922, 155.69322 -6.759... \n", + "13185 POLYGON ((160.00675 -9.43852, 159.99669 -9.438... \n", + "13186 POLYGON ((166.48123 -22.26262, 166.47076 -22.2... \n", + "13187 POLYGON ((178.50540 -18.05327, 178.51570 -18.0... \n", + "13188 POLYGON ((174.76874 -36.69730, 174.75729 -36.6... \n", + "\n", + "[13189 rows x 36 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf1 = gpd.read_file(urban_completeness, layer=\"all_parameters_urban_centers\")\n", + "pd.set_option('display.max_columns', None)\n", + "gdf1" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "de86eb84", + "metadata": {}, + "outputs": [], + "source": [ + "gdf2 = gpd.read_file(urban_completeness, layer=\"performance_20_clusters_reference_and_osm\")" + ] + }, + { + "cell_type": "markdown", + "id": "78e412e0", + "metadata": {}, + "source": [ + "#### import version 2 (2024-05) to compare column names" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "69f2675a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Europe & Central Asia_2022-01-01',\n", + " 'Sub-Saharan Africa_2022-01-01',\n", + " 'ne_10m_admin_0_countries',\n", + " 'graticule',\n", + " 'ne_50m_land',\n", + " 'all_parameters_urban_centers',\n", + " 'all_parameters_urban_centers_grid',\n", + " 'rf_adjusted_prediction_reference_and_osm',\n", + " 'rf_adjusted_prediction_reference_and_osm_urban_centers',\n", + " 'inequality_measures_urban_centers',\n", + " 'performance_20_clusters_reference_and_osm',\n", + " 'Europe & Central Asia_2010-01-01',\n", + " 'Europe & Central Asia_2014-01-01',\n", + " 'Europe & Central Asia_2023-01-01',\n", + " 'Sub-Saharan Africa_2010-01-01',\n", + " 'Sub-Saharan Africa_2014-01-01',\n", + " 'Sub-Saharan Africa_2023-01-01',\n", + " 'geowiki_grids_final',\n", + " 'rf_adjusted_prediction_reference_and_osm_urban_centers_v2024',\n", + " 'rf_adjusted_prediction_reference_and_osm_v2024',\n", + " 'performance_20_clusters_reference_and_osm_v2024',\n", + " 'model_performance_cluster_20_reference_and_osm',\n", + " 'osm_user_contributions_per_urban_center_with_data_teams_csv',\n", + " 'intra_urban_completeness_stats_clusters',\n", + " 'osm_user_contributions_per_urban_center_per_day_with_flag']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "uc_layers = (\"../global_urban_building_completeness.gpkg\")\n", + "fiona.listlayers(uc_layers)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "0f7e218d", + "metadata": {}, + "outputs": [], + "source": [ + "#same layer name benni original & version 2\n", + "uc_l1 = gpd.read_file(uc_layers, layer=\"performance_20_clusters_reference_and_osm_v2024\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a647e9f5", + "metadata": {}, + "outputs": [], + "source": [ + "# equivalent to bennis all_parameters_urban_centers layer\n", + "uc_l2 = gpd.read_file(uc_layers, layer=\"rf_adjusted_prediction_reference_and_osm_urban_centers_v2024\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "18f809dc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
urban_center_idghs_pop_2023worldcover_2021_built_up_sqkmworldcover_2021_tree_cover_sqkmworldcover_2021_sparse_vegetation_sqkmselected_road_length_kmreference_building_area_sqkmpredictionosm_building_area_sqkm_2008_01osm_building_area_sqkm_2009_01osm_building_area_sqkm_2010_01osm_building_area_sqkm_2011_01osm_building_area_sqkm_2012_01osm_building_area_sqkm_2013_01osm_building_area_sqkm_2014_01osm_building_area_sqkm_2015_01osm_building_area_sqkm_2016_01osm_building_area_sqkm_2017_01osm_building_area_sqkm_2018_01osm_building_area_sqkm_2019_01osm_building_area_sqkm_2020_01osm_building_area_sqkm_2021_01osm_building_area_sqkm_2022_01osm_building_area_sqkm_2023_01osm_building_area_sqkm_2024_01osm_building_area_sqkm_2024_05shdi_2021vnl_2023prediction_osm_completeness_2008_01prediction_osm_completeness_2009_01prediction_osm_completeness_2010_01prediction_osm_completeness_2011_01prediction_osm_completeness_2012_01prediction_osm_completeness_2013_01prediction_osm_completeness_2014_01prediction_osm_completeness_2015_01prediction_osm_completeness_2016_01prediction_osm_completeness_2017_01prediction_osm_completeness_2018_01prediction_osm_completeness_2019_01prediction_osm_completeness_2020_01prediction_osm_completeness_2021_01prediction_osm_completeness_2022_01prediction_osm_completeness_2023_01prediction_osm_completeness_2024_01prediction_osm_completeness_2024_05total_area_sqkmreference_osm_completeness_2024_05region_wbiso_a3ghs_pop_2023_classshdi_2021_classgeometry
01600435.98838912.5555780.027807159.732680.0000002.3243820.00.00.0000000.0000000.0620510.2731180.2915880.2991600.3440580.3663250.3707770.4755030.5618690.6317070.6659651.5201921.5593491.5685210.7074.3514510.00.00.0000000.0000000.0637670.1637300.1667160.1713110.1885760.2021160.2036990.2373290.2643900.3137220.3367340.7209240.7443980.74710634.792NaNEast Asia & PacificWSMsmall urban areashighMULTIPOLYGON (((-171.77356 -13.82480, -171.763...
12519925.9153532.5443460.065721144.964380.0000001.8433580.00.00.0000000.0000000.0032240.0033700.0274910.3070891.4255601.4267261.4248541.6261451.6255751.6287371.6292071.6339501.6417201.6858830.7454.9391290.00.00.0000000.0000000.0008220.0008830.0186370.1525960.7831010.7837340.7832730.9010630.9008280.9010670.9021210.9044370.9079500.93505319.901NaNEast Asia & PacificTONsmall urban areashighMULTIPOLYGON (((-175.19374 -21.13139, -175.172...
23537217.7656871.5490710.245182134.503591.6701021.8310280.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0374620.0459460.0990800.0842060.1395490.1398630.1419950.94014.9992930.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0150710.0206220.0488170.0431240.0772360.0773560.07904714.9260.085North AmericaUSAsmall urban areasvery highMULTIPOLYGON (((-158.01943 21.33908, -158.0090...
3410974818.00734713.9021340.154894512.068846.2876056.1016990.00.00.0040190.0040190.0875400.1446450.4897770.6881020.9917391.0348221.3219851.4107476.2243636.2296156.2323446.2389176.2484346.287605NaN6.7945960.00.00.0002530.0002530.0068590.0129420.1326070.1567950.2073170.2107150.2504200.2603571.0206831.0209211.0188521.0209111.0255251.02909149.7251.000East Asia & PacificPYFsmall urban areasvery highMULTIPOLYGON (((-149.52669 -17.53410, -149.516...
457670716.1667970.6151212.574366425.725893.2031753.4259730.00.00.1198480.1252420.1252420.1581660.1579460.0708250.0781290.0784760.0799490.4657260.4654860.5377530.5672860.5651020.5676260.5831130.78823.7023130.00.00.0324860.0337100.0337100.0443610.0442960.0186240.0241470.0243270.0230590.1323460.1323190.1458840.1688100.1682140.1686440.17256228.9170.182Latin America & CaribbeanMEXsmall urban areashighMULTIPOLYGON (((-117.04765 32.41323, -117.0254...
..................................................................................................................................................................
116811168225206721.81565813.7338942.040092279.394880.0000007.1377080.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0251250.0347230.0783850.3284220.3284210.3641930.3739210.3764690.3777850.80111.5076720.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0023200.0029860.0059980.0328580.0328580.0399570.0406090.0416990.04178053.798NaNEast Asia & PacificCHNmedium-size urban areasvery highMULTIPOLYGON (((121.25828 28.16228, 121.26906 ...
1168211683542425.8230003.4200400.29077873.626970.0000001.9164500.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0219100.0219100.0219100.0219100.0219100.80112.2500770.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0125590.0125590.0125590.0125590.01255910.958NaNEast Asia & PacificCHNsmall urban areasvery highMULTIPOLYGON (((121.15658 27.83154, 121.16734 ...
11683116848016210.8610622.8799760.633112105.846040.0000003.1375520.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0092700.0092700.0092700.0092700.0092700.80111.5038860.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0020440.0020440.0020440.0020440.00204423.913NaNEast Asia & PacificCHNsmall urban areasvery highMULTIPOLYGON (((121.60975 28.32355, 121.59895 ...
1168411685734188.6916716.0553320.81504980.817590.0000002.5166360.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0150210.0284000.0261330.0261330.0261330.8016.4233870.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0040040.0075710.0069670.0069670.00696731.881NaNEast Asia & PacificCHNsmall urban areasvery highMULTIPOLYGON (((121.60246 28.29808, 121.61325 ...
11685116861070868.6360533.1792740.615766109.686130.0000002.8378750.00.00.0000000.0000000.0000000.0016690.0016690.0016690.0016690.0016690.0164820.0337620.0337620.0337620.0893380.0893380.0896230.0896230.77526.4807000.00.00.0000000.0000000.0000000.0003100.0003100.0003100.0003100.0003100.0061740.0079790.0079790.0079790.0242980.0242980.0243600.02436014.937NaNEast Asia & PacificCHNsmall urban areashighMULTIPOLYGON (((119.80544 25.50990, 119.81608 ...
\n", + "

11686 rows × 53 columns

\n", + "
" + ], + "text/plain": [ + " urban_center_id ghs_pop_2023 worldcover_2021_built_up_sqkm \\\n", + "0 1 60043 5.988389 \n", + "1 2 51992 5.915353 \n", + "2 3 53721 7.765687 \n", + "3 4 109748 18.007347 \n", + "4 5 76707 16.166797 \n", + "... ... ... ... \n", + "11681 11682 252067 21.815658 \n", + "11682 11683 54242 5.823000 \n", + "11683 11684 80162 10.861062 \n", + "11684 11685 73418 8.691671 \n", + "11685 11686 107086 8.636053 \n", + "\n", + " worldcover_2021_tree_cover_sqkm \\\n", + "0 12.555578 \n", + "1 2.544346 \n", + "2 1.549071 \n", + "3 13.902134 \n", + "4 0.615121 \n", + "... ... \n", + "11681 13.733894 \n", + "11682 3.420040 \n", + "11683 2.879976 \n", + "11684 6.055332 \n", + "11685 3.179274 \n", + "\n", + " worldcover_2021_sparse_vegetation_sqkm selected_road_length_km \\\n", + "0 0.027807 159.73268 \n", + "1 0.065721 144.96438 \n", + "2 0.245182 134.50359 \n", + "3 0.154894 512.06884 \n", + "4 2.574366 425.72589 \n", + "... ... ... \n", + "11681 2.040092 279.39488 \n", + "11682 0.290778 73.62697 \n", + "11683 0.633112 105.84604 \n", + "11684 0.815049 80.81759 \n", + "11685 0.615766 109.68613 \n", + "\n", + " reference_building_area_sqkm prediction \\\n", + "0 0.000000 2.324382 \n", + "1 0.000000 1.843358 \n", + "2 1.670102 1.831028 \n", + "3 6.287605 6.101699 \n", + "4 3.203175 3.425973 \n", + "... ... ... \n", + "11681 0.000000 7.137708 \n", + "11682 0.000000 1.916450 \n", + "11683 0.000000 3.137552 \n", + "11684 0.000000 2.516636 \n", + "11685 0.000000 2.837875 \n", + "\n", + " osm_building_area_sqkm_2008_01 osm_building_area_sqkm_2009_01 \\\n", + "0 0.0 0.0 \n", + "1 0.0 0.0 \n", + "2 0.0 0.0 \n", + "3 0.0 0.0 \n", + "4 0.0 0.0 \n", + "... ... ... \n", + "11681 0.0 0.0 \n", + "11682 0.0 0.0 \n", + "11683 0.0 0.0 \n", + "11684 0.0 0.0 \n", + "11685 0.0 0.0 \n", + "\n", + " osm_building_area_sqkm_2010_01 osm_building_area_sqkm_2011_01 \\\n", + "0 0.000000 0.000000 \n", + "1 0.000000 0.000000 \n", + "2 0.000000 0.000000 \n", + "3 0.004019 0.004019 \n", + "4 0.119848 0.125242 \n", + "... ... ... \n", + "11681 0.000000 0.000000 \n", + "11682 0.000000 0.000000 \n", + "11683 0.000000 0.000000 \n", + "11684 0.000000 0.000000 \n", + "11685 0.000000 0.000000 \n", + "\n", + " osm_building_area_sqkm_2012_01 osm_building_area_sqkm_2013_01 \\\n", + "0 0.062051 0.273118 \n", + "1 0.003224 0.003370 \n", + "2 0.000000 0.000000 \n", + "3 0.087540 0.144645 \n", + "4 0.125242 0.158166 \n", + "... ... ... \n", + "11681 0.000000 0.000000 \n", + "11682 0.000000 0.000000 \n", + "11683 0.000000 0.000000 \n", + "11684 0.000000 0.000000 \n", + "11685 0.000000 0.001669 \n", + "\n", + " osm_building_area_sqkm_2014_01 osm_building_area_sqkm_2015_01 \\\n", + "0 0.291588 0.299160 \n", + "1 0.027491 0.307089 \n", + "2 0.000000 0.000000 \n", + "3 0.489777 0.688102 \n", + "4 0.157946 0.070825 \n", + "... ... ... \n", + "11681 0.000000 0.000000 \n", + "11682 0.000000 0.000000 \n", + "11683 0.000000 0.000000 \n", + "11684 0.000000 0.000000 \n", + "11685 0.001669 0.001669 \n", + "\n", + " osm_building_area_sqkm_2016_01 osm_building_area_sqkm_2017_01 \\\n", + "0 0.344058 0.366325 \n", + "1 1.425560 1.426726 \n", + "2 0.000000 0.000000 \n", + "3 0.991739 1.034822 \n", + "4 0.078129 0.078476 \n", + "... ... ... \n", + "11681 0.000000 0.025125 \n", + "11682 0.000000 0.000000 \n", + "11683 0.000000 0.000000 \n", + "11684 0.000000 0.000000 \n", + "11685 0.001669 0.001669 \n", + "\n", + " osm_building_area_sqkm_2018_01 osm_building_area_sqkm_2019_01 \\\n", + "0 0.370777 0.475503 \n", + "1 1.424854 1.626145 \n", + "2 0.000000 0.037462 \n", + "3 1.321985 1.410747 \n", + "4 0.079949 0.465726 \n", + "... ... ... \n", + "11681 0.034723 0.078385 \n", + "11682 0.000000 0.000000 \n", + "11683 0.000000 0.000000 \n", + "11684 0.000000 0.000000 \n", + "11685 0.016482 0.033762 \n", + "\n", + " osm_building_area_sqkm_2020_01 osm_building_area_sqkm_2021_01 \\\n", + "0 0.561869 0.631707 \n", + "1 1.625575 1.628737 \n", + "2 0.045946 0.099080 \n", + "3 6.224363 6.229615 \n", + "4 0.465486 0.537753 \n", + "... ... ... \n", + "11681 0.328422 0.328421 \n", + "11682 0.000000 0.021910 \n", + "11683 0.000000 0.009270 \n", + "11684 0.000000 0.015021 \n", + "11685 0.033762 0.033762 \n", + "\n", + " osm_building_area_sqkm_2022_01 osm_building_area_sqkm_2023_01 \\\n", + "0 0.665965 1.520192 \n", + "1 1.629207 1.633950 \n", + "2 0.084206 0.139549 \n", + "3 6.232344 6.238917 \n", + "4 0.567286 0.565102 \n", + "... ... ... \n", + "11681 0.364193 0.373921 \n", + "11682 0.021910 0.021910 \n", + "11683 0.009270 0.009270 \n", + "11684 0.028400 0.026133 \n", + "11685 0.089338 0.089338 \n", + "\n", + " osm_building_area_sqkm_2024_01 osm_building_area_sqkm_2024_05 \\\n", + "0 1.559349 1.568521 \n", + "1 1.641720 1.685883 \n", + "2 0.139863 0.141995 \n", + "3 6.248434 6.287605 \n", + "4 0.567626 0.583113 \n", + "... ... ... \n", + "11681 0.376469 0.377785 \n", + "11682 0.021910 0.021910 \n", + "11683 0.009270 0.009270 \n", + "11684 0.026133 0.026133 \n", + "11685 0.089623 0.089623 \n", + "\n", + " shdi_2021 vnl_2023 prediction_osm_completeness_2008_01 \\\n", + "0 0.707 4.351451 0.0 \n", + "1 0.745 4.939129 0.0 \n", + "2 0.940 14.999293 0.0 \n", + "3 NaN 6.794596 0.0 \n", + "4 0.788 23.702313 0.0 \n", + "... ... ... ... \n", + "11681 0.801 11.507672 0.0 \n", + "11682 0.801 12.250077 0.0 \n", + "11683 0.801 11.503886 0.0 \n", + "11684 0.801 6.423387 0.0 \n", + "11685 0.775 26.480700 0.0 \n", + "\n", + " prediction_osm_completeness_2009_01 \\\n", + "0 0.0 \n", + "1 0.0 \n", + "2 0.0 \n", + "3 0.0 \n", + "4 0.0 \n", + "... ... \n", + "11681 0.0 \n", + "11682 0.0 \n", + "11683 0.0 \n", + "11684 0.0 \n", + "11685 0.0 \n", + "\n", + " prediction_osm_completeness_2010_01 \\\n", + "0 0.000000 \n", + "1 0.000000 \n", + "2 0.000000 \n", + "3 0.000253 \n", + "4 0.032486 \n", + "... ... \n", + "11681 0.000000 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.000000 \n", + "\n", + " prediction_osm_completeness_2011_01 \\\n", + "0 0.000000 \n", + "1 0.000000 \n", + "2 0.000000 \n", + "3 0.000253 \n", + "4 0.033710 \n", + "... ... \n", + "11681 0.000000 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.000000 \n", + "\n", + " prediction_osm_completeness_2012_01 \\\n", + "0 0.063767 \n", + "1 0.000822 \n", + "2 0.000000 \n", + "3 0.006859 \n", + "4 0.033710 \n", + "... ... \n", + "11681 0.000000 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.000000 \n", + "\n", + " prediction_osm_completeness_2013_01 \\\n", + "0 0.163730 \n", + "1 0.000883 \n", + "2 0.000000 \n", + "3 0.012942 \n", + "4 0.044361 \n", + "... ... \n", + "11681 0.000000 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.000310 \n", + "\n", + " prediction_osm_completeness_2014_01 \\\n", + "0 0.166716 \n", + "1 0.018637 \n", + "2 0.000000 \n", + "3 0.132607 \n", + "4 0.044296 \n", + "... ... \n", + "11681 0.000000 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.000310 \n", + "\n", + " prediction_osm_completeness_2015_01 \\\n", + "0 0.171311 \n", + "1 0.152596 \n", + "2 0.000000 \n", + "3 0.156795 \n", + "4 0.018624 \n", + "... ... \n", + "11681 0.000000 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.000310 \n", + "\n", + " prediction_osm_completeness_2016_01 \\\n", + "0 0.188576 \n", + "1 0.783101 \n", + "2 0.000000 \n", + "3 0.207317 \n", + "4 0.024147 \n", + "... ... \n", + "11681 0.000000 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.000310 \n", + "\n", + " prediction_osm_completeness_2017_01 \\\n", + "0 0.202116 \n", + "1 0.783734 \n", + "2 0.000000 \n", + "3 0.210715 \n", + "4 0.024327 \n", + "... ... \n", + "11681 0.002320 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.000310 \n", + "\n", + " prediction_osm_completeness_2018_01 \\\n", + "0 0.203699 \n", + "1 0.783273 \n", + "2 0.000000 \n", + "3 0.250420 \n", + "4 0.023059 \n", + "... ... \n", + "11681 0.002986 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.006174 \n", + "\n", + " prediction_osm_completeness_2019_01 \\\n", + "0 0.237329 \n", + "1 0.901063 \n", + "2 0.015071 \n", + "3 0.260357 \n", + "4 0.132346 \n", + "... ... \n", + "11681 0.005998 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.007979 \n", + "\n", + " prediction_osm_completeness_2020_01 \\\n", + "0 0.264390 \n", + "1 0.900828 \n", + "2 0.020622 \n", + "3 1.020683 \n", + "4 0.132319 \n", + "... ... \n", + "11681 0.032858 \n", + "11682 0.000000 \n", + "11683 0.000000 \n", + "11684 0.000000 \n", + "11685 0.007979 \n", + "\n", + " prediction_osm_completeness_2021_01 \\\n", + "0 0.313722 \n", + "1 0.901067 \n", + "2 0.048817 \n", + "3 1.020921 \n", + "4 0.145884 \n", + "... ... \n", + "11681 0.032858 \n", + "11682 0.012559 \n", + "11683 0.002044 \n", + "11684 0.004004 \n", + "11685 0.007979 \n", + "\n", + " prediction_osm_completeness_2022_01 \\\n", + "0 0.336734 \n", + "1 0.902121 \n", + "2 0.043124 \n", + "3 1.018852 \n", + "4 0.168810 \n", + "... ... \n", + "11681 0.039957 \n", + "11682 0.012559 \n", + "11683 0.002044 \n", + "11684 0.007571 \n", + "11685 0.024298 \n", + "\n", + " prediction_osm_completeness_2023_01 \\\n", + "0 0.720924 \n", + "1 0.904437 \n", + "2 0.077236 \n", + "3 1.020911 \n", + "4 0.168214 \n", + "... ... \n", + "11681 0.040609 \n", + "11682 0.012559 \n", + "11683 0.002044 \n", + "11684 0.006967 \n", + "11685 0.024298 \n", + "\n", + " prediction_osm_completeness_2024_01 \\\n", + "0 0.744398 \n", + "1 0.907950 \n", + "2 0.077356 \n", + "3 1.025525 \n", + "4 0.168644 \n", + "... ... \n", + "11681 0.041699 \n", + "11682 0.012559 \n", + "11683 0.002044 \n", + "11684 0.006967 \n", + "11685 0.024360 \n", + "\n", + " prediction_osm_completeness_2024_05 total_area_sqkm \\\n", + "0 0.747106 34.792 \n", + "1 0.935053 19.901 \n", + "2 0.079047 14.926 \n", + "3 1.029091 49.725 \n", + "4 0.172562 28.917 \n", + "... ... ... \n", + "11681 0.041780 53.798 \n", + "11682 0.012559 10.958 \n", + "11683 0.002044 23.913 \n", + "11684 0.006967 31.881 \n", + "11685 0.024360 14.937 \n", + "\n", + " reference_osm_completeness_2024_05 region_wb iso_a3 \\\n", + "0 NaN East Asia & Pacific WSM \n", + "1 NaN East Asia & Pacific TON \n", + "2 0.085 North America USA \n", + "3 1.000 East Asia & Pacific PYF \n", + "4 0.182 Latin America & Caribbean MEX \n", + "... ... ... ... \n", + "11681 NaN East Asia & Pacific CHN \n", + "11682 NaN East Asia & Pacific CHN \n", + "11683 NaN East Asia & Pacific CHN \n", + "11684 NaN East Asia & Pacific CHN \n", + "11685 NaN East Asia & Pacific CHN \n", + "\n", + " ghs_pop_2023_class shdi_2021_class \\\n", + "0 small urban areas high \n", + "1 small urban areas high \n", + "2 small urban areas very high \n", + "3 small urban areas very high \n", + "4 small urban areas high \n", + "... ... ... \n", + "11681 medium-size urban areas very high \n", + "11682 small urban areas very high \n", + "11683 small urban areas very high \n", + "11684 small urban areas very high \n", + "11685 small urban areas high \n", + "\n", + " geometry \n", + "0 MULTIPOLYGON (((-171.77356 -13.82480, -171.763... \n", + "1 MULTIPOLYGON (((-175.19374 -21.13139, -175.172... \n", + "2 MULTIPOLYGON (((-158.01943 21.33908, -158.0090... \n", + "3 MULTIPOLYGON (((-149.52669 -17.53410, -149.516... \n", + "4 MULTIPOLYGON (((-117.04765 32.41323, -117.0254... \n", + "... ... \n", + "11681 MULTIPOLYGON (((121.25828 28.16228, 121.26906 ... \n", + "11682 MULTIPOLYGON (((121.15658 27.83154, 121.16734 ... \n", + "11683 MULTIPOLYGON (((121.60975 28.32355, 121.59895 ... \n", + "11684 MULTIPOLYGON (((121.60246 28.29808, 121.61325 ... \n", + "11685 MULTIPOLYGON (((119.80544 25.50990, 119.81608 ... \n", + "\n", + "[11686 rows x 53 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pd.set_option('display.max_columns', None)\n", + "uc_l2" + ] + }, + { + "cell_type": "markdown", + "id": "258a161e", + "metadata": {}, + "source": [ + "### adjust script " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "7e43f297", + "metadata": {}, + "outputs": [], + "source": [ + "#nach load data nichts verändert, da kein harter code mehr" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "b805b4bf", + "metadata": {}, + "outputs": [], + "source": [ + "def load_dataframe_avg_urban_centers():\n", + " con = sqlite3.connect(\"../global_urban_building_completeness.gpkg\")\n", + " query = f\"\"\"\n", + " with agg_prediction as (\n", + " select\n", + " a.identifier\n", + " ,a.urban_center_id\n", + " ,'rf_adjusted' as model_name\n", + " ,split\n", + " ,avg(a.prediction) as prediction\n", + " from performance_20_clusters_reference_and_osm_v2024 as a \n", + " group by urban_center_id, identifier, split, model_name\n", + " )\n", + " select\n", + " a.urban_center_id\n", + " ,a.total_area_sqkm\n", + " ,a.reference_osm_completeness_2024_05\n", + " ,a.region_wb\n", + " ,b.model_name\n", + " ,b.split\n", + " ,SUM(b.prediction) as sum_prediction_sqkm\n", + " ,case\n", + " when a.osm_building_area_sqkm_2024_05 / SUM(b.prediction) < 0 then 0\n", + " when a.osm_building_area_sqkm_2024_05 / SUM(b.prediction) > 1.5 then 1.5\n", + " else a.osm_building_area_sqkm_2024_05 / SUM(b.prediction)\n", + " end as prediction_osm_completeness\n", + " from rf_adjusted_prediction_reference_and_osm_urban_centers_v2024 a\n", + " left join agg_prediction b\n", + " on a.urban_center_id = b.urban_center_id\n", + " where\n", + " reference_building_area_sqkm is not null\n", + " and\n", + " reference_osm_completeness_2024_05 < 1.5\n", + " group by\n", + " a.urban_center_id\n", + " ,reference_osm_completeness_2024_05\n", + " ,b.model_name\n", + " ,a.osm_building_area_sqkm_2024_05\n", + " ,b.split\n", + " ,a.region_wb\n", + " ,a.total_area_sqkm\n", + " \"\"\"\n", + " df = pd.read_sql_query(query, con=con)\n", + " df.dropna(inplace=True)\n", + " print(f\"got dataframe with {len(df)} samples.\") \n", + " return df\n", + "\n", + "\n", + "def get_all_samples():\n", + " con = sqlite3.connect(\"../global_urban_building_completeness.gpkg\")\n", + " query = f\"\"\"\n", + " select \n", + " a.identifier as id\n", + " ,a.urban_center_id\n", + " ,a.region_wb \n", + " from rf_adjusted_prediction_reference_and_osm_v2024 a\n", + " \"\"\"\n", + " df = pd.read_sql(query, con=con)\n", + " print(f\"got dataframe with {len(df)} samples from table: rf_adjusted_prediction_reference_and_osm_v2024\")\n", + " return df" + ] + }, + { + "cell_type": "markdown", + "id": "b617d36a", + "metadata": {}, + "source": [ + "## Load data" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "90f667e8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "got dataframe with 7757 samples.\n", + "got dataframe with 677806 samples from table: rf_adjusted_prediction_reference_and_osm_v2024\n" + ] + } + ], + "source": [ + "model_name = \"rf_adjusted\"\n", + "split = \"cluster_20\"\n", + "training_data = \"reference_and_osm\"\n", + "\n", + "avg_prediction_df = load_dataframe_avg_urban_centers()\n", + "\n", + "df_all_samples = get_all_samples()" + ] + }, + { + "cell_type": "markdown", + "id": "a29c50e1", + "metadata": {}, + "source": [ + "## Create Scatterplot for residuals for urban centers" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "4e081dbf", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_17183/2200566900.py:30: MatplotlibDeprecationWarning: The get_cmap function was deprecated in Matplotlib 3.7 and will be removed in 3.11. Use ``matplotlib.colormaps[name]`` or ``matplotlib.colormaps.get_cmap()`` or ``pyplot.get_cmap()`` instead.\n", + " cmap = matplotlib.cm.get_cmap('tab10')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "27 0.830\n", + "32 0.757\n", + "38 1.020\n", + "41 0.855\n", + "45 1.000\n", + " ... \n", + "6199 0.871\n", + "6207 0.902\n", + "6221 0.761\n", + "6239 1.000\n", + "6267 1.078\n", + "Name: reference_osm_completeness_2024_05, Length: 1376, dtype: float64 0.0 1.438\n", + "27 0.815030\n", + "32 0.922054\n", + "38 0.893098\n", + "41 1.136587\n", + "45 1.123000\n", + " ... \n", + "6199 0.784621\n", + "6207 0.828293\n", + "6221 0.645118\n", + "6239 1.011687\n", + "6267 0.792918\n", + "Name: prediction_osm_completeness, Length: 1376, dtype: float64 0.0 1.5\n" + ] + }, + { + "data": { + "image/png": "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q9UcP36cbdu28dhjj+Hu7i4avgg3NLtu7q09BKGJ9O/fH4VCYdGQICoqivDwcHOmWlXLrkelpaXmawpXV9dG709kprUBpumabaH7pklVnULrIjU1lcOHD5OUlMSyZcsICQnBxsammUYpCI1kqpEWtb7SU3q9noSEBNasWcP999/PM888g729fYsPURDqIjc3l6KiIvPjY8eOsWrVKl588UW6du0KgEwmw9f3+r9pI9xc0tPT0Wg0ZGdns2DBAj755JPWHpIgWNDr9cTHx7Nw4UI2bNiATqcTddKEG57cQ9HaQxAawdR8QKlUmjPUTEEyUy218p06q1p2vTHVdDc1lJsyZUqj9ymCaUKVGjL1NDs7G5VKxfDhw9m1axcDBgzA2dm5GUcptAnKaNj3kfH79aD8eMOnQe/7KtVIg7Isn19++YXFixeLc1loszQaTaUpcP369eOLL74wd+6USCT4+flhZWXVGkMUhAbJy8ujoKAAnU7Hc889h0aj4e23327tYQmChczMTD744AOuXLnCJ598QnBwMNbW1q09LEEQhGpFRUVx4sQJNm/ejFKpNC9XKpWoVCo6depk0YwgPDyc3r17N1n3zqZWPjhYnczMTNLT05k5cyZff/11kxxXBNOEKk3u4cvsfoF1nnpaXFzM0aNH+eKLL9DpdPj4+IgOnjeLGrK72qTy462iRhrAhQsXmD17NvHx8fj6+oqaf0KbZbrLZmrvrdFoOHHiBFKplHHjxpkzIzw9PcUUT+G6UlJSYu609fnnn3P06FGWLl0qri2ENqWwsJANGzbw008/sWjRIgYNGiTqpAmC0OaZpmuapm+aREVFcenSJRQKhcV0zorZa21NbZlz+fn5ZGVlsXDhQnJycpg0aVKTvFeLmmlClerTKVSv1xMTE8N//vMfAObOnYufn59Ib79ZVNMBs82qZbyZmZncc889JCYm4uTkJAJpQptmKnhtsnjxYlavXs3u3bvNFzxOTk64uLi00ggFof7KB4nz8/NZvXo1Tz/9NIMHD0av17f28AQBMNbeSU9PZ+fOndxyyy3MnTtXBHuFm4bpJp5wffLw8GDKlCnmOmgmpn/XNwOttWuq1TTu4uJi0tPT+fjjjzlw4ADfffcdnTp1apJZRyKYJjRaWloar776KsnJyaxdu5b27duLNuA3E1N21/WihvGq1Woefvhhzp8/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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(figsize=(15, 4.5))\n", + "gs1 = gridspec.GridSpec(2, 7)\n", + "gs1.update(wspace=0.8, hspace=0.4) # set the spacing between axes.\n", + "\n", + "\n", + "titles = [\n", + " \"a)\", \"b)\", \"c)\", \"d)\", \"e)\", \"f)\", \"g)\"\n", + "]\n", + "\n", + "wb_regions_groups = [\n", + " [\"East Asia & Pacific\"],\n", + " [\"Europe & Central Asia\"],\n", + " [\"Latin America & Caribbean\"],\n", + " [\"Middle East & North Africa\"],\n", + " [\"North America\"],\n", + " [\"South Asia\"],\n", + " [\"Sub-Saharan Africa\"],\n", + "]\n", + "label_strings = [\n", + " \"East Asia &\\n Pacific\",\n", + " \"Europe &\\n Central Asia\",\n", + " \"Latin America &\\nCaribbean\",\n", + " \"Middle East &\\nNorth Africa\",\n", + " \"North America\",\n", + " \"South Asia\",\n", + " \"Sub-Saharan\\nAfrica\",\n", + " \"all\"\n", + "]\n", + "\n", + "cmap = matplotlib.cm.get_cmap('tab10')\n", + "colors_dict = {\n", + " \"East Asia & Pacific\": cmap(0),\n", + " \"Europe & Central Asia\": cmap(0.125),\n", + " \"Latin America & Caribbean\": cmap(0.25),\n", + " \"Middle East & North Africa\": cmap(0.375),\n", + " \"North America\": cmap(0.5),\n", + " \"South Asia\": cmap(0.625),\n", + " \"Sub-Saharan Africa\": cmap(0.75),\n", + " \"all\": \"black\",\n", + "}\n", + "\n", + "all_handles = []\n", + "all_labels = []\n", + "for i, wb_regions in enumerate(wb_regions_groups):\n", + " y_test = avg_prediction_df.loc[\n", + " (avg_prediction_df[\"region_wb\"].isin(wb_regions))\n", + " &\n", + " (avg_prediction_df[\"model_name\"] == model_name) \n", + " ][\"reference_osm_completeness_2024_05\"]\n", + "\n", + " y_pred = avg_prediction_df.loc[\n", + " avg_prediction_df[\"region_wb\"].isin(wb_regions)\n", + " &\n", + " (avg_prediction_df[\"model_name\"] == model_name)\n", + " ][\"prediction_osm_completeness\"]\n", + " \n", + " weights = avg_prediction_df.loc[\n", + " avg_prediction_df[\"region_wb\"].isin(wb_regions)\n", + " &\n", + " (avg_prediction_df[\"model_name\"] == model_name)\n", + " ][\"total_area_sqkm\"]\n", + "\n", + " samples = len(df_all_samples.loc[\n", + " df_all_samples[\"region_wb\"].isin(wb_regions)\n", + " ])\n", + " if i == 1:\n", + " print(y_test, min(y_test), max(y_test))\n", + " print(y_pred, min(y_pred), max(y_pred))\n", + " \n", + " \n", + " ax1 = plt.subplot(gs1[i]) # top\n", + " ax2 = plt.subplot(gs1[i + 7]) # bottom\n", + " \n", + " limit = 0.6\n", + " \n", + " sns.regplot(\n", + " x=y_pred,\n", + " y=y_test,\n", + " ax=ax1,\n", + " scatter_kws={\n", + " \"s\":0.5,\n", + " \"alpha\":0.75,\n", + " \"color\":colors_dict[wb_regions[0]]\n", + " },\n", + " line_kws={\n", + " \"linestyle\":'--',\n", + " \"linewidth\": 1.0,\n", + " \"color\":\"black\"\n", + " },\n", + " ci=95\n", + " )\n", + " ax1.set_xlim([0, 1.5])\n", + " ax1.set_xlabel(\"prediction\")\n", + " \n", + " ax1.set_ylim([0.0, 1.5])\n", + " ax1.set_yticks([0, 1])\n", + " ax1.set_yticklabels([0,1])\n", + " ax1.grid()\n", + " \n", + " if i in [0, 4]:\n", + " ax1.set_ylabel(\"reference\")\n", + " else:\n", + " ax1.set_ylabel(\"\")\n", + " ax1.set_title(label_strings[i], color=colors_dict[wb_regions[0]])\n", + "\n", + " ax2.hist(\n", + " y_pred - y_test,\n", + " bins=40,\n", + " #weights=weights,\n", + " range=[-0.5, 0.5],\n", + " density=True,\n", + " color=colors_dict[wb_regions[0]],\n", + " label=label_strings[i]\n", + " )\n", + " ax2.set_ylim([0, 25])\n", + " if i in [0, 4]:\n", + " ax2.set_ylabel(\"distribution density\")\n", + " else:\n", + " ax2.set_ylabel(\"\")\n", + " ax2.set_xlabel(\"residual\")\n", + " \n", + "plt.savefig(\n", + " f\"../figures/performance_by_region_{model_name}_{split}_urban_centers.pdf\",\n", + " dpi=300,\n", + " bbox_inches = 'tight',\n", + " pad_inches = 0.25\n", + ")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "c9ea2b9d", + "metadata": {}, + "source": [ + "## regional performance scores urban center level (for Table 5)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "faba974f", + "metadata": {}, + "outputs": [], + "source": [ + "models = [\n", + " \"rf_adjusted\",\n", + "]\n", + "splits = [\n", + " \"cluster_20\",\n", + "]\n", + "\n", + "score_names = [\n", + " ['r2', metrics.r2_score],\n", + " ['explained_variance', metrics.explained_variance_score],\n", + " ['neg_mean_squared_error', metrics.mean_squared_error],\n", + " ['neg_mean_absolute_error', metrics.mean_absolute_error],\n", + "]\n", + "\n", + "training_data_sets = [\n", + " \"reference_and_osm\"\n", + "]\n", + "\n", + "wb_regions_groups = [\n", + " [\"Latin America & Caribbean\"],\n", + " [\"East Asia & Pacific\"],\n", + " [\"South Asia\"],\n", + " [\"Europe & Central Asia\"],\n", + " [\"North America\"],\n", + " [\"Middle East & North Africa\"],\n", + " [\"Sub-Saharan Africa\"],\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "f99ce446", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "got dataframe with 7757 samples.\n", + "rf_adjusted\n", + "[65549, 207618, 127334, 90835, 70115, 44219, 72136]\n", + "677806\n", + "[939, 1042, 1781, 1376, 397, 794, 1428]\n", + "7757\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
training_datamodel_namesplitr2explained_varianceMSEMAE
0reference_and_osmrf_adjustedcluster_200.8355060.8369390.0187250.073298
\n", + "
" + ], + "text/plain": [ + " training_data model_name split r2 explained_variance \\\n", + "0 reference_and_osm rf_adjusted cluster_20 0.835506 0.836939 \n", + "\n", + " MSE MAE \n", + "0 0.018725 0.073298 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "results_list = []\n", + "results = {}\n", + "\n", + "for split in splits:\n", + " results[split] = {}\n", + " for training_data in training_data_sets:\n", + " results[split][training_data] = {}\n", + " avg_prediction_df = load_dataframe_avg_urban_centers()\n", + " \n", + " for model_name in models:\n", + " print(model_name)\n", + " results[split][training_data][model_name] = {}\n", + " results[split][training_data][model_name][\"samples\"] = []\n", + " results[split][training_data][model_name][\"reference_samples\"] = []\n", + " for score_name, score_function in score_names:\n", + " results[split][training_data][model_name][score_name] = []\n", + " \n", + " for i, wb_regions in enumerate(wb_regions_groups):\n", + " y_test = avg_prediction_df.loc[\n", + " (avg_prediction_df[\"region_wb\"].isin(wb_regions))\n", + " &\n", + " (avg_prediction_df[\"model_name\"] == model_name) \n", + " ][\"reference_osm_completeness_2024_05\"]\n", + "\n", + " y_pred = avg_prediction_df.loc[\n", + " avg_prediction_df[\"region_wb\"].isin(wb_regions)\n", + " &\n", + " (avg_prediction_df[\"model_name\"] == model_name)\n", + " ][\"prediction_osm_completeness\"]\n", + " \n", + " weights = avg_prediction_df.loc[\n", + " avg_prediction_df[\"region_wb\"].isin(wb_regions)\n", + " &\n", + " (avg_prediction_df[\"model_name\"] == model_name)\n", + " ][\"total_area_sqkm\"]\n", + " \n", + " if len(y_test) < 1:\n", + " print(f\"no test samples for {wb_regions}\")\n", + " continue\n", + " \n", + " samples = len(df_all_samples.loc[\n", + " df_all_samples[\"region_wb\"].isin(wb_regions)\n", + " ])\n", + " \n", + " reference_samples = len(y_test)\n", + " \n", + " results[split][training_data][model_name][\"samples\"].append(samples)\n", + " results[split][training_data][model_name][\"reference_samples\"].append(reference_samples)\n", + "\n", + " for score_name, score in score_names:\n", + " val = score(\n", + " y_test,\n", + " y_pred,\n", + " #sample_weight=weights\n", + " )\n", + " results[split][training_data][model_name][score_name].append(val)\n", + "\n", + " # get weighted average global score\n", + " list_item = [training_data, model_name, split]\n", + " samples = results[split][training_data][model_name][\"samples\"]\n", + " \n", + " print(samples)\n", + " print(sum(samples))\n", + " \n", + " reference_samples = results[split][training_data][model_name][\"reference_samples\"]\n", + " print(reference_samples)\n", + " print(sum(reference_samples))\n", + " \n", + " for score_name, score in score_names:\n", + " vals = results[split][training_data][model_name][score_name]\n", + " avg_score = np.average(\n", + " vals,\n", + " weights=samples\n", + " )\n", + " list_item.append(avg_score)\n", + " results_list.append(list_item)\n", + " \n", + "columns = [\n", + " \"training_data\",\n", + " \"model_name\",\n", + " \"split\",\n", + " \"r2\",\n", + " \"explained_variance\",\n", + " \"MSE\",\n", + " \"MAE\"\n", + "]\n", + "list_df = pd.DataFrame(results_list, columns=columns)\n", + "display(list_df.sort_values(\"model_name\", ascending=False)) \n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "e10e916b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
model_nameregionsplitsamplesreference_samplesr2explained_varianceMSEMAE
1rf_adjusted[East Asia & Pacific]cluster_2020761810420.8886200.8889370.0159670.073877
3rf_adjusted[Europe & Central Asia]cluster_209083513760.7532820.7536790.0233020.108071
0rf_adjusted[Latin America & Caribbean]cluster_20655499390.7838140.7845040.0196400.060427
5rf_adjusted[Middle East & North Africa]cluster_20442197940.9231100.9243920.0079580.037453
4rf_adjusted[North America]cluster_20701153970.8877640.8911530.0103260.072835
2rf_adjusted[South Asia]cluster_2012733417810.8251740.8280240.0123810.038803
6rf_adjusted[Sub-Saharan Africa]cluster_207213614280.7468850.7492100.0460250.122853
\n", + "
" + ], + "text/plain": [ + " model_name region split samples \\\n", + "1 rf_adjusted [East Asia & Pacific] cluster_20 207618 \n", + "3 rf_adjusted [Europe & Central Asia] cluster_20 90835 \n", + "0 rf_adjusted [Latin America & Caribbean] cluster_20 65549 \n", + "5 rf_adjusted [Middle East & North Africa] cluster_20 44219 \n", + "4 rf_adjusted [North America] cluster_20 70115 \n", + "2 rf_adjusted [South Asia] cluster_20 127334 \n", + "6 rf_adjusted [Sub-Saharan Africa] cluster_20 72136 \n", + "\n", + " reference_samples r2 explained_variance MSE MAE \n", + "1 1042 0.888620 0.888937 0.015967 0.073877 \n", + "3 1376 0.753282 0.753679 0.023302 0.108071 \n", + "0 939 0.783814 0.784504 0.019640 0.060427 \n", + "5 794 0.923110 0.924392 0.007958 0.037453 \n", + "4 397 0.887764 0.891153 0.010326 0.072835 \n", + "2 1781 0.825174 0.828024 0.012381 0.038803 \n", + "6 1428 0.746885 0.749210 0.046025 0.122853 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for split in splits:\n", + " for model_name in [\n", + " \"rf_adjusted\",\n", + " ]:\n", + " results_list_regions = []\n", + " for i, wb_region in enumerate(wb_regions_groups):\n", + " results_list_regions.append([\n", + " model_name,\n", + " wb_region,\n", + " split,\n", + " results[split][\"reference_and_osm\"][model_name][\"samples\"][i],\n", + " results[split][\"reference_and_osm\"][model_name][\"reference_samples\"][i],\n", + " results[split][\"reference_and_osm\"][model_name][\"r2\"][i],\n", + " results[split][\"reference_and_osm\"][model_name][\"explained_variance\"][i],\n", + " results[split][\"reference_and_osm\"][model_name][\"neg_mean_squared_error\"][i],\n", + " results[split][\"reference_and_osm\"][model_name][\"neg_mean_absolute_error\"][i],\n", + " ])\n", + "\n", + "\n", + " columns = [\n", + " \"model_name\",\n", + " \"region\",\n", + " \"split\",\n", + " \"samples\",\n", + " \"reference_samples\",\n", + " \"r2\",\n", + " \"explained_variance\",\n", + " \"MSE\",\n", + " \"MAE\"\n", + " ]\n", + " list_df = pd.DataFrame(results_list_regions, columns=columns)\n", + " display(list_df.sort_values(\"region\", ascending=True))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cf23b38a-6811-4569-ab5c-4da37d4080f8", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/scripts/V2024/version_2_figure_1.ipynb b/scripts/V2024/version_2_figure_1.ipynb new file mode 100644 index 0000000..55567f5 --- /dev/null +++ b/scripts/V2024/version_2_figure_1.ipynb @@ -0,0 +1,908 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "db7bf1fa", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "PROJ: proj_create_from_database: Cannot find proj.db\n" + ] + } + ], + "source": [ + "import sqlite3\n", + "import pandas as pd\n", + "import numpy as np\n", + "import geopandas as gpd\n", + "import fiona\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.gridspec as gridspec\n", + "import seaborn as sns\n", + "\n", + "from sklearn import metrics" + ] + }, + { + "cell_type": "markdown", + "id": "76de4e94", + "metadata": {}, + "source": [ + "### Copy Figure 1\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bb6679e8", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "PROJ: proj_create_from_database: Cannot find proj.db\n" + ] + } + ], + "source": [ + "import datetime\n", + "import string\n", + "\n", + "import pandas as pd\n", + "import sqlite3\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.gridspec as gridspec\n", + "import seaborn as sns\n", + "import geopandas as gpd\n", + "import fiona" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d128aa73", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Europe & Central Asia_2022-01-01',\n", + " 'Sub-Saharan Africa_2022-01-01',\n", + " 'ne_10m_admin_0_countries',\n", + " 'graticule',\n", + " 'ne_50m_land',\n", + " 'all_parameters_urban_centers',\n", + " 'all_parameters_urban_centers_grid',\n", + " 'rf_adjusted_prediction_reference_and_osm',\n", + " 'rf_adjusted_prediction_reference_and_osm_urban_centers',\n", + " 'inequality_measures_urban_centers',\n", + " 'performance_20_clusters_reference_and_osm',\n", + " 'Europe & Central Asia_2010-01-01',\n", + " 'Europe & Central Asia_2014-01-01',\n", + " 'Europe & Central Asia_2023-01-01',\n", + " 'Sub-Saharan Africa_2010-01-01',\n", + " 'Sub-Saharan Africa_2014-01-01',\n", + " 'Sub-Saharan Africa_2023-01-01',\n", + " 'geowiki_grids_final',\n", + " 'performance_20_clusters_reference_and_osm_v2024',\n", + " 'rf_adjusted_prediction_reference_and_osm_urban_centers_v2024',\n", + " 'rf_adjusted_prediction_reference_and_osm_v2024',\n", + " 'model_performance_cluster_20_reference_and_osm',\n", + " 'osm_user_contributions_per_urban_center_with_data_teams_csv',\n", + " 'intra_urban_completeness_stats_clusters',\n", + " 'osm_user_contributions_per_urban_center_per_day_with_flag']" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "urban_completeness = (\"../data/global_urban_building_completeness.gpkg\")\n", + "fiona.listlayers(urban_completeness)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "57384a4d", + "metadata": {}, + "outputs": [], + "source": [ + "def load_dataframe(column):\n", + " con = sqlite3.connect(\"../data/global_urban_building_completeness.gpkg\")\n", + " query = f\"\"\"\n", + " select \n", + " {column} as group_name,\n", + " urban_center_id,\n", + " 100*prediction_osm_completeness_2008_01 as \"2008\",\n", + " 100*prediction_osm_completeness_2009_01 as \"2009\",\n", + " 100*prediction_osm_completeness_2010_01 as \"2010\",\n", + " 100*prediction_osm_completeness_2011_01 as \"2011\",\n", + " 100*prediction_osm_completeness_2012_01 as \"2012\",\n", + " 100*prediction_osm_completeness_2013_01 as \"2013\",\n", + " 100*prediction_osm_completeness_2014_01 as \"2014\",\n", + " 100*prediction_osm_completeness_2015_01 as \"2015\",\n", + " 100*prediction_osm_completeness_2016_01 as \"2016\",\n", + " 100*prediction_osm_completeness_2017_01 as \"2017\",\n", + " 100*prediction_osm_completeness_2018_01 as \"2018\",\n", + " 100*prediction_osm_completeness_2019_01 as \"2019\",\n", + " 100*prediction_osm_completeness_2020_01 as \"2020\",\n", + " 100*prediction_osm_completeness_2021_01 as \"2021\",\n", + " 100*prediction_osm_completeness_2022_01 as \"2022\",\n", + " 100*prediction_osm_completeness_2023_01 as \"2023\",\n", + " 100*prediction_osm_completeness_2024_05 as \"2024\"\n", + " \n", + "\n", + "\n", + " from rf_adjusted_prediction_reference_and_osm_urban_centers_v2024 as a\n", + " where {column} is not null\n", + " order by group_name \n", + " \"\"\"\n", + " df = pd.read_sql_query(query, con=con)\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "02086214", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
group_nameurban_center_idyearprediction_osm_completeness
0East Asia & Pacific12008-01-010.000000
1East Asia & Pacific22008-01-010.000000
2East Asia & Pacific42008-01-010.000000
3East Asia & Pacific1632008-01-010.000000
4East Asia & Pacific1682008-01-010.000000
...............
198657Sub-Saharan Africa85912024-01-0184.972565
198658Sub-Saharan Africa85942024-01-011.290307
198659Sub-Saharan Africa85972024-01-0142.341833
198660Sub-Saharan Africa86002024-01-0190.320593
198661Sub-Saharan Africa86032024-01-0118.460269
\n", + "

198662 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " group_name urban_center_id year \\\n", + "0 East Asia & Pacific 1 2008-01-01 \n", + "1 East Asia & Pacific 2 2008-01-01 \n", + "2 East Asia & Pacific 4 2008-01-01 \n", + "3 East Asia & Pacific 163 2008-01-01 \n", + "4 East Asia & Pacific 168 2008-01-01 \n", + "... ... ... ... \n", + "198657 Sub-Saharan Africa 8591 2024-01-01 \n", + "198658 Sub-Saharan Africa 8594 2024-01-01 \n", + "198659 Sub-Saharan Africa 8597 2024-01-01 \n", + "198660 Sub-Saharan Africa 8600 2024-01-01 \n", + "198661 Sub-Saharan Africa 8603 2024-01-01 \n", + "\n", + " prediction_osm_completeness \n", + "0 0.000000 \n", + "1 0.000000 \n", + "2 0.000000 \n", + "3 0.000000 \n", + "4 0.000000 \n", + "... ... \n", + "198657 84.972565 \n", + "198658 1.290307 \n", + "198659 42.341833 \n", + "198660 90.320593 \n", + "198661 18.460269 \n", + "\n", + "[198662 rows x 4 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['Europe & Central Asia']\n", + "['North America']\n", + "['Sub-Saharan Africa']\n", + "['Latin America & Caribbean']\n", + "['East Asia & Pacific']\n", + "['Middle East & North Africa']\n", + "['South Asia']\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
group_nameurban_center_idyearprediction_osm_completeness
0high12008-01-010.000000
1high22008-01-010.000000
2high52008-01-010.000000
3high102008-01-010.000000
4high112008-01-010.000000
...............
198657very high116812024-01-010.000000
198658very high116822024-01-014.177976
198659very high116832024-01-011.255929
198660very high116842024-01-010.204402
198661very high116852024-01-010.696673
\n", + "

198662 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " group_name urban_center_id year prediction_osm_completeness\n", + "0 high 1 2008-01-01 0.000000\n", + "1 high 2 2008-01-01 0.000000\n", + "2 high 5 2008-01-01 0.000000\n", + "3 high 10 2008-01-01 0.000000\n", + "4 high 11 2008-01-01 0.000000\n", + "... ... ... ... ...\n", + "198657 very high 11681 2024-01-01 0.000000\n", + "198658 very high 11682 2024-01-01 4.177976\n", + "198659 very high 11683 2024-01-01 1.255929\n", + "198660 very high 11684 2024-01-01 0.204402\n", + "198661 very high 11685 2024-01-01 0.696673\n", + "\n", + "[198662 rows x 4 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['low']\n", + "['medium']\n", + "['high']\n", + "['very high']\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAukAAAGDCAYAAACWQ46qAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAEAAElEQVR4nOzdd3hb1fnA8a+GLduyvHdsx87emySEkARCgAQIOy0zpUBoS6HQslpoC5RfGS2b0kJLgQKFsgNhr7BHQvbeduJty5a1x73398dNZCuS44TE+/08T57E995zdaTYR6+P3vMeg6ZpGkIIIYQQQohuw9jVHRBCCCGEEEJEkiBdCCGEEEKIbkaCdCGEEEIIIboZCdKFEEIIIYToZiRIF0IIIYQQopuRIF0IIYQQQohuRoJ0EdNvf/tbHnjggYO69qyzzuLdd9/t2A4dQElJCR9++GHMc0uXLqWwsLCTe6T7yU9+wi233NIlj91acnIyO3bs6OpuCCHEYWv93tTe+P7rX/+af/zjH53UMyGOPAnSRZS6ujr+85//cMUVVxzU9TfddBM333xzm+eHDh3Kiy++GP76yy+/xGAwRB1LTk4mFAr98I7/AAaDAavVSnJyMllZWZx33nk0NTV1ah8AZs2aRUJCQrgfZ511FlVVVUfk3i6XiwEDBhyRewkhRFc51Pem66+/nv/7v/8jEAi0ec0TTzzBsGHDsNls5Obmcsopp+B0OoHYEy27du3CYDCE36t+8pOfEB8fj81mw2azMWrUKH7729/icDjCbZ566immT59+qE9XCAnSRbSnnnqKefPmkZiYeFDXT548mebmZpYvXx7z/IwZM/j000/DX3/22WcMGzYs6ti0adMwm80H3c8jFdCvXr0al8vFjh07aGxs5NZbbz0i9z1UjzzyCC6Xi23btuFyubjuuuu6pB9CCNEdHep7U35+PsOGDeONN96Ief7TTz/ld7/7Hc8//zxOp5ONGzeyYMGCQ+7XDTfcgNPppK6ujieffJJvvvmGY445Brfbfcj3EqI1CdJFlHfeeYeZM2eGv25sbOTUU08lOzub9PR0Tj31VPbs2RPRZtasWbz11lsx7zdjxgw+++yz8Neff/45N954Y9SxGTNmAPDGG28wcuRI0tLSmDVrFhs3bgxfV1JSwt13382YMWOwWq1RgbrX6+UnP/kJ6enpjBgxgmXLlh30805JSWH+/Pls2LAhfOzJJ59k+PDh2Gw2BgwYwGOPPRY+t++j1nvvvZecnBzy8/N58sknY97b6XRy3HHHcfXVV9PeJr9paWmcccYZrFq1Knxs06ZNzJkzh4yMjKhPJhoaGjjttNNISUnhqKOO4pZbbomYtTEYDGzbtg0Ah8PBxRdfTHZ2Nv379+eOO+5AVVWgZbbnuuuuIz09ndLSUt55552Dfv2EEKIj7f/etM+f//xnsrKyKCkp4bnnnos4d6D3pmXLlnH00Uczfvx4ADIyMli4cCE2m+0H9S8hIYGjjjqKN954g4aGhjbfD4Q4WBKkiyhr165l6NCh4a9VVeWSSy6hrKyM8vJyEhMT+eUvfxnRZvjw4axevTrm/WbOnMn69eux2+2oqsry5cv50Y9+RFNTU/jYV199xYwZM9iyZQvnnXceDzzwAHV1dcybN4/TTjst4uPK559/nrfeeoumpqaomffbbruN7du3s337dt577z2efvrpg37ejY2NvP7660ydOjV8LCcnhyVLltDc3MyTTz7Jtddey4oVK8Lnq6urcTgcVFRU8MQTT3DllVfS2NgYcd+GhgZmz57NMcccw0MPPYTBYDhgPxoaGnj11VcZNGgQAG63mzlz5nD++edTW1vL888/zy9+8QvWr18PwJVXXonVaqW6upqnn376gM/5qquuwuFwsGPHDj799FP+85//RLyRfPvttwwdOpT6+npuuOEGLr300nZ/qRBCiM6w/3sT6GNwfX09FRUVPP300yxatIjNmzeHzx/ovWnKlCm89957/PGPf+TLL7/E7/cfkX7abDbmzJnD559/fkTuJ/ouCdJFlKampoiZhMzMTM4++2ySkpKw2WzcfPPNEakqoA9KbeVyFxcXU1xczOeff87q1asZPHgwiYmJHHPMMeFjPp+PKVOm8L///Y9TTjmFOXPmEBcXx3XXXYfX6+Wrr74K3+/qq6+mqKgo5keeL774IjfffDMZGRkUFRVx9dVXt/t8J0yYQFpaGllZWZSXl0fkO55yyikMHDgQg8HAzJkzOfHEEyMG3ri4OP7whz8QFxfHvHnzSE5OjniDqKysZObMmZx77rnccccdB+zH1VdfTWpqKllZWdTX1/Pwww8DsGTJEkpKSrjkkkswm81MmDCBs88+m5dffhlFUXjllVe47bbbSEpKYsSIESxcuDDm/RVF4X//+x933nknNpuNkpISfvOb3/DMM8+Er+nfvz+XX345JpOJhQsXUlVVRU1NTbuvoRBCdLT935v2+dOf/oTFYmHmzJmccsopEZ80Hui96dhjj+XVV19lxYoVnHLKKWRmZvLrX/8aRVHC1/z1r38lLS0t/GfMmDEH1deCggLsdvuhPUEh9iNBuoiSnp4eXjgD4PF4uOKKK+jfvz8pKSnMmDGDpqamiIHM6XSSlpbW5j33pbx89tlnHHvssQBMnz49fGzKlClYLBYqKyvp379/uJ3RaKSoqIiKiorwsaKiojYfp7KyMuJ863u1ZcWKFTQ1NeHz+fj5z3/Osccei8/nA/SPV6dOnUpGRgZpaWm8/fbb1NfXh9tmZmZGzOYnJSXhcrnCX7/11lt4vV5+9rOftduPhx56CIfDwZo1a2hsbAynFJWVlfHtt99GvFE899xzVFdXU1dXRygUinjObb0+9fX1BAKBiNekf//+Ea9tXl5exHMBIp6PEEJ0lf3fm/Yds1qt4a/79+9PZWVl+Ov23pvmzp3Lm2++id1uZ/HixTz11FP861//Cp+/7rrraGpqCv9Zs2bNQfW1oqKCjIyMg3xmQsQmQbqIMmbMGLZs2RL++t5772Xz5s18++23NDc3h3PJW6dBbNy4kbFjx7Z5z31B+ueffx4O0o899tjwsX356AUFBZSVlYXbaZrG7t276devX/jYgdJF8vPz2b17d/jr8vLyg33axMXFcdlll7Fz507WrVuH3+/n7LPP5rrrrqOmpoampibmzZt3SOkfl19+OSeffDLz5s076EVEo0eP5pZbbuHKK69E0zSKioqYOXNmxBuFy+Xi73//O9nZ2ZjN5og1Aq2ff2tZWVnExcVFvL7l5eURr60QQnRX+783gZ6m2HpsLS8vp6CgIPx1e+9N+xiNRmbPns3xxx/PunXrDqufLpeLDz/8MPxeJ8QPJUG6iDJv3ryIdBan00liYiJpaWnY7XZuu+22qDaffvopc+fObfOeM2bMYOXKlXz66accc8wxgB6M7ty5k08++SQcpC9YsIC33nqLjz76iGAwyL333ovFYmHatGkH1fcFCxZw5513hmei96WMHAxFUXjyySdJTExkwIABBAIB/H5/OBB+5513eP/99w/6fvs88sgjDB06lFNPPRWv13tQbRYuXEhtbS1vvPEGp556Klu2bOGZZ54hGAwSDAZZtmwZGzduxGQycdZZZ3Hrrbfi8XjYtGkT//nPf2Le02QysWDBAm6++WacTidlZWXcd999XHjhhYf8nIQQorPt/960zx//+EcCgQCff/45S5Ys4dxzzw2fO9B70+LFi3nhhRdobGxE0zS+++47Pv3004h1SYfC7/fz/fffc8YZZ5Cens4ll1zyg+4jxD4SpIsoF198MW+//XY4oLzmmmvwer1kZWUxdepUTj755Ijrly1bhtVqZfLkyW3ec8iQIeEKKPs+ejQajeHyjfuC8KFDh/Lss89y1VVXkZWVxZtvvsmbb75JfHz8QfX9j3/8I/3796e0tJQTTzyRiy66qN02Y8eOJTk5mfT0dJ5++mlee+01MjIysNlsPPTQQyxYsID09HT++9//Mn/+/IPqR2sGg4HHH3+coqIiTj/99HAqzYHEx8dz9dVX86c//Qmbzcb777/PCy+8QEFBAXl5edx4443hRU6PPPIIDoeDvLw8LrroIs477zwsFkvM+z788MNYrVYGDBjA9OnTOf/88/npT396yM9JCCE62/7vTaCn6KWnp1NQUMAFF1zAP/7xD4YNGwZAVVUVGzZs4Iwzzoh5v/T0dP75z38yePBgUlJSuPDCC7n++uu54IILDqlf99xzDzabjYyMDC6++GImTpzIV199FZGGI8QPYdCkdIOI4Xe/+x05OTlcc8017V579tlnc+mllzJv3ryO75ho14033hiu9CKEEL3Jobw3/eY3v2HgwIH84he/6PiOCdEBJEgXoofbtGkTgUCA0aNHs2zZMubNm8e//vWvNmePhBBCCNH9dWi6y/3338/IkSMZNWoU5513Hj6fD7vdzpw5cxg8eDBz5syJqikthDg0TqeTs846C6vVyoIFC/jNb37D6aef3tXdEn2MjPdCCHFkddhMekVFBdOnT2fDhg0kJiayYMEC5s2bx4YNG8jIyOCmm27irrvuorGxkbvvvrsjuiCEEKITyHgvhBBHXofOpIdCIbxeL6FQCI/HQ0FBAYsXLw5vtrJw4UJef/31juyCEEKITiDjvRBCHFkdFqT369eP6667juLiYvLz80lNTeXEE0+kpqaG/Px8QK9pXVtb21FdEEII0QlkvBdCiCPP3P4lP0xjYyOLFy9m586dpKWlce655/Lss88edPvHH3+cxx9/HIANGzYc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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axs = plt.subplots(1, 2, figsize=(12.5, 6))\n", + "gs1 = gridspec.GridSpec(1, 2)\n", + "gs1.update(wspace=0.2, hspace=0.3) # set the spacing between axes.\n", + "\n", + "\n", + "all_months = [\n", + " datetime.date(2008, 1, 1),\n", + " datetime.date(2009, 1, 1),\n", + " datetime.date(2010, 1, 1),\n", + " datetime.date(2011, 1, 1),\n", + " datetime.date(2012, 1, 1),\n", + " datetime.date(2013, 1, 1),\n", + " datetime.date(2014, 1, 1),\n", + " datetime.date(2015, 1, 1),\n", + " datetime.date(2016, 1, 1),\n", + " datetime.date(2017, 1, 1),\n", + " datetime.date(2018, 1, 1),\n", + " datetime.date(2019, 1, 1),\n", + " datetime.date(2020, 1, 1),\n", + " datetime.date(2021, 1, 1),\n", + " datetime.date(2022, 1, 1),\n", + " datetime.date(2023, 1, 1),\n", + " datetime.date(2024, 1, 1)\n", + " \n", + "]\n", + " \n", + "for k, column in enumerate([\n", + " \"region_wb\",\n", + " \"shdi_2021_class\", \n", + "]):\n", + " df = load_dataframe(column)\n", + " \n", + " if column == \"region_wb\":\n", + " title = \"World Bank Region\"\n", + " groups = wb_regions_groups = [\n", + " [\"Europe & Central Asia\"],\n", + " [\"North America\"],\n", + " [\"Sub-Saharan Africa\"],\n", + " [\"Latin America & Caribbean\"],\n", + " [\"East Asia & Pacific\"],\n", + " [\"Middle East & North Africa\"],\n", + " [\"South Asia\"],\n", + "\n", + " ]\n", + "\n", + " labels = [\n", + " \"Europe & Central Asia\",\n", + " \"North America\",\n", + " \"Sub-Saharan Africa\",\n", + " \"Latin America & Caribbean\",\n", + " \"East Asia & Pacific\",\n", + " \"Middle East & North Africa\",\n", + " \"South Asia\",\n", + " ]\n", + " \n", + " cmap = matplotlib.cm.get_cmap('tab10')\n", + " colors_dict = {\n", + " \"East Asia & Pacific\": cmap(0),\n", + " \"Europe & Central Asia\": cmap(0.125),\n", + " \"Latin America & Caribbean\": cmap(0.25),\n", + " \"Middle East & North Africa\": cmap(0.375),\n", + " \"North America\": cmap(0.5),\n", + " \"South Asia\": cmap(0.625),\n", + " \"Sub-Saharan Africa\": cmap(0.75),\n", + " \"all\": \"black\",\n", + " }\n", + "\n", + " linestyles_dict = {\n", + " \"East Asia & Pacific\": ('dotted', (0, (1, 1))),\n", + " \"Europe & Central Asia\": ('densely dashed', (0, (5, 1))),\n", + " \"Latin America & Caribbean\": ('densely dashed', (0, (5, 1))),\n", + " \"Middle East & North Africa\": ('solid', (0, ())),\n", + " \"North America\": ('dotted', (0, (1, 1))),\n", + " \"South Asia\": ('solid',(0, ())),\n", + " \"Sub-Saharan Africa\": ('densely dashed', (0, (5, 1))),\n", + " \"all\": ('solid', (0, ())),\n", + " }\n", + " \n", + " fontsize = 6\n", + " \n", + " elif column == \"shdi_2021_class\":\n", + " \n", + " \n", + " title = \"SHDI\"\n", + " groups = [\n", + " [\"low\"], [\"medium\"], [\"high\"], [\"very high\"]\n", + " ]\n", + "\n", + " labels = [\n", + " \"low\",\n", + " \"medium\",\n", + " \"high\",\n", + " \"very high\",\n", + " ]\n", + " \n", + " cmap = matplotlib.cm.get_cmap('Blues')\n", + " colors_dict = {\n", + " \"low\": cmap(0.25), # low\n", + " \"medium\": cmap(0.5), # medium\n", + " \"high\": cmap(0.75), # high\n", + " \"very high\": cmap(1.0), # very high\n", + " }\n", + " \n", + " linestyles_dict = {\n", + " \"low\": ('solid', (0, ())),\n", + " \"medium\": ('solid', (0, ())),\n", + " \"high\": ('solid', (0, ())),\n", + " \"very high\": ('solid', (0, ())),\n", + " }\n", + " \n", + " fontsize = 9\n", + " \n", + " \n", + " df = df.melt(\n", + " id_vars=[\"group_name\", \"urban_center_id\"], \n", + " var_name=\"year\", \n", + " value_name=\"prediction_osm_completeness\"\n", + " )\n", + " df[\"year\"] = df[\"year\"].apply(pd.to_datetime)\n", + " display(df)\n", + " \n", + " ax = plt.subplot(gs1[k])\n", + " max_y_values = []\n", + " \n", + " for i, group in enumerate(groups):\n", + " print(group)\n", + " \n", + " region_df = df.loc[df[\"group_name\"].isin(group)]\n", + " region_df.reset_index(inplace=True)\n", + " \n", + " sns.lineplot(\n", + " data=region_df,\n", + " x=\"year\",\n", + " y=\"prediction_osm_completeness\",\n", + " color=colors_dict[group[0]],\n", + " linestyle=linestyles_dict[group[0]][1],\n", + " errorbar=('ci', 95)\n", + " )\n", + "\n", + " max_y_value = region_df.loc[region_df[\"year\"] == '2024'][\"prediction_osm_completeness\"].mean()\n", + " max_y_values.append(max_y_value)\n", + " \n", + " '''if i == 0:\n", + " label_position = max_y_values[i]\n", + " elif (abs(max_y_values[i-1] - max_y_values[i]) < 2.5) and column == \"region_wb\":\n", + " print(max_y_values[i], max_y_values[i-1], label_position)\n", + " label_position = float(max_y_values[i]) - 2.5\n", + " elif (abs(max_y_values[i-1] - max_y_values[i]) < 2.5) and column == \"shdi_class\":\n", + " print(max_y_values[i], max_y_values[i-1], label_position)\n", + " label_position = float(max_y_values[i]) + 0.5\n", + " else:\n", + " label_position = max_y_values[i]'''\n", + " \n", + " def adjust_label_positions(max_y_values, min_distance=2.5):\n", + " adjusted_positions = []\n", + " \n", + " for i in range(len(max_y_values)):\n", + " # Start with the original position\n", + " label_position = max_y_values[i]\n", + " \n", + " # Compare with all previous labels\n", + " for prev_position in adjusted_positions:\n", + " if abs(label_position - prev_position) < min_distance:\n", + " # Adjust position by moving it further away (downward in this case)\n", + " label_position = prev_position - min_distance\n", + " \n", + " # Save the adjusted position\n", + " adjusted_positions.append(label_position)\n", + " \n", + " return adjusted_positions\n", + " \n", + " # Adjust the label positions based on overlap detection\n", + " adjusted_positions = adjust_label_positions(max_y_values)\n", + " \n", + " ax.annotate(\n", + " labels[i],\n", + " (datetime.date(2024, 4, 1), adjusted_positions[i]),\n", + " fontsize=fontsize,\n", + " color=colors_dict[group[0]]\n", + " )\n", + " \n", + "\n", + " ax.set_ylim([0, 70])\n", + " ax.set_xlim([datetime.date(2008, 1, 1), datetime.date(2029, 1, 1)])\n", + " ax.set_xticks([\n", + " datetime.date(2010, 1, 1),\n", + " datetime.date(2015, 1, 1),\n", + " datetime.date(2020, 1, 1),\n", + " datetime.date(2023, 1, 1),\n", + " datetime.date(2025, 1, 1),\n", + " ])\n", + " ax.set_xticklabels([\"2010\", \"2015\", \"2020\", \"'23\", \"2025\"])\n", + " ax.set_yticks([\n", + " 0, 20, 40, 60, 80\n", + " ])\n", + " ax.plot(\n", + " [datetime.date(2020, 1, 1), datetime.date(2020, 1, 1)],\n", + " [0, 100],\n", + " color=\"black\",\n", + " alpha=0.5\n", + " )\n", + " ax.set_ylabel(\"urban OSM building completeness [%]\")\n", + " ax.grid()\n", + " ax.set_title(f\"({string.ascii_lowercase[k]}) {title}\")\n", + " \n", + "fig.patch.set_facecolor('xkcd:white')\n", + "plt.savefig(\n", + " f\"../figures/completeness_per_month_by_region_2024.png\",\n", + " dpi=300,\n", + " bbox_inches = 'tight',\n", + " pad_inches = 0.25\n", + ")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "1190d3d1", + "metadata": {}, + "source": [ + "### calculate difference between Jan 2023 and May 2024" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "f4f110cf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
region_wbdifference
0East Asia & Pacific0.015981
1Europe & Central Asia0.036755
2Latin America & Caribbean0.017562
3Middle East & North Africa0.060674
4North America0.061085
5South Asia0.011416
6Sub-Saharan Africa0.050764
\n", + "
" + ], + "text/plain": [ + " region_wb difference\n", + "0 East Asia & Pacific 0.015981\n", + "1 Europe & Central Asia 0.036755\n", + "2 Latin America & Caribbean 0.017562\n", + "3 Middle East & North Africa 0.060674\n", + "4 North America 0.061085\n", + "5 South Asia 0.011416\n", + "6 Sub-Saharan Africa 0.050764" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#grouped by region\n", + "import geopandas as gpd\n", + "gdf = gpd.read_file(\"../data/global_urban_building_completeness.gpkg\", layer=\"rf_adjusted_prediction_reference_and_osm_urban_centers_v2024\")\n", + "gdf[\"prediction_osm_completeness_2024_05\"] = gdf[\"prediction_osm_completeness_2024_05\"].apply(lambda x: 1 if x > 1 else x)\n", + "gdf[\"prediction_osm_completeness_2023_01\"] = gdf[\"prediction_osm_completeness_2023_01\"].apply(lambda x: 1 if x > 1 else x)\n", + "gdf[\"difference\"] = gdf[\"prediction_osm_completeness_2024_05\"] - gdf[\"prediction_osm_completeness_2023_01\"]\n", + "grouped = gdf.groupby('region_wb')['difference'].mean().reset_index()\n", + "grouped" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "28b60433", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "11686\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
shdi_2021_classdifference
0high0.028980
1low0.034935
2medium0.019966
3very high0.037329
\n", + "
" + ], + "text/plain": [ + " shdi_2021_class difference\n", + "0 high 0.028980\n", + "1 low 0.034935\n", + "2 medium 0.019966\n", + "3 very high 0.037329" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#grouped by shdi class\n", + "gdf = gpd.read_file(\"../data/global_urban_building_completeness.gpkg\", layer=\"rf_adjusted_prediction_reference_and_osm_urban_centers_v2024\", where=\"total_area_sqkm>150\")\n", + "print(len(gdf))\n", + "gdf[\"prediction_osm_completeness_2024_05\"] = gdf[\"prediction_osm_completeness_2024_05\"].apply(lambda x: 1 if x > 1 else x)\n", + "gdf[\"prediction_osm_completeness_2023_01\"] = gdf[\"prediction_osm_completeness_2023_01\"].apply(lambda x: 1 if x > 1 else x)\n", + "gdf[\"difference\"] = gdf[\"prediction_osm_completeness_2024_05\"] - gdf[\"prediction_osm_completeness_2023_01\"]\n", + "grouped = gdf.groupby('shdi_2021_class')['difference'].mean().reset_index()\n", + "grouped" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4504323d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}