Estimating Activity via Mobility Data at Points of Interest#
m
Analyzing the frequency of visits to or near points of interest may provide insights into the economic impacts of climate shocks. Similar to the now-discontinued Google Community Mobility Reports, this methodology tracks changes in mobility by counting visits to Overture Maps points of interest, compared to a baseline.
By tracking changes in the number of visits to points of interest (POIs) over time, we use visit counts as a proxy for activity levels. This method allows us to infer shifts in population mobility and identify social or economic trends, particularly during crises. The baseline visit count represents the typical or expected number of visits to a given POI. Subsequent visit counts are then compared to this baseline to assess changes in movement patterns. For example, a decline in visits may suggest reduced economic activity, such as fewer shoppers at retail locations, fewer workers at office spaces, or reduced commuter traffic at transit hubs.
This approach offers a more focused insight into specific types of activity, as it directly measures engagement with predefined locations of interest. However, it also has limitations similar to those of tracking device density, as detailed in mobility-activity-limitations. Mobility data is collected through convenience sampling, meaning it captures only a subset of the population that visits these POIs, rather than representing the entire population through randomized sampling. Additionally, not all visits are equal in terms of economic significance, and certain locations may see more variation in visit counts due to external factors unrelated to overall economic trends.
Data#
In this section, we import data from various sources, either publicly available or obtained through data sharing agreements.
Area of Interest#
In this step, we import the area of interest created from geoBoundaries and shown below. This area covers the countries of Bosnia and Herzegovina, North Macedonia and Serbia.
Mobility Data#
This study used longitudinal human mobility data, which includes anonymized, timestamped geographical points from GPS-enabled devices. The mobility data has been provided by Veraset Movement and obtained through the Monitoring Near-Time Changes in Urban Space Usage after Climate Shocks: ECA Urban Resilience proposal of the Development Data Partnership. This dataset covers the countries of Bosnia and Herzegovina, North Macedonia and Serbia.
Show code cell source
ddf = dd.read_parquet(
[
"../../data/final/panels/v1.1/country=BA/**/*.parquet",
"../../data/final/panels/v1.1/country=MK/**/*.parquet",
"../../data/final/panels/v1.1/country=RS/**/*.parquet",
]
)
Let’s look at the spatiotemporal distribution below. Further information, please see also Data Quality Assessment. See also Limitations.
Show code cell source
show(mobilyze.plotting.plot_temporal_distribution(ddf))
Important
Mobility data, while valuable for understanding movement patterns, suffers from significant sample bias and limitations. One prominent issue is urban skewness, where data is often disproportionately collected from urban areas with higher smartphone usage, better infrastructure, and more active digital services. This results in an overrepresentation of densely populated, affluent cities while underrepresenting rural or underserved regions where mobile device usage may be lower or less consistent. Additionally, mobility data often lacks demographic diversity, as it predominantly captures movements of individuals who have access to mobile technology, leaving out vulnerable or marginalized populations. These biases can lead to incomplete or misleading insights, especially when used to inform policy decisions or urban planning. Moreover, data privacy concerns and inconsistent data quality further limit the reliability of such datasets, necessitating careful interpretation and complementary data sources to mitigate skewed conclusions.
Points of Interest#
The project team used the Humanitarian OpenStreetMap datasets available on HDX, which includes education and health faciliates, e.g., Bosnia and Herzegovina Health Facilities (OpenStreetMap Export).
Show code cell source
POI = pd.concat(
[
dask_geopandas.read_file(p, npartitions=4).to_crs("EPSG:4326").compute()
for p in [
"https://s3.dualstack.us-east-1.amazonaws.com/production-raw-data-api/ISO3/BIH/education_facilities/polygons/hotosm_bih_education_facilities_polygons_geojson.zip!hotosm_bih_education_facilities_polygons_geojson.geojson",
"https://s3.dualstack.us-east-1.amazonaws.com/production-raw-data-api/ISO3/BIH/health_facilities/polygons/hotosm_bih_health_facilities_polygons_geojson.zip!hotosm_bih_health_facilities_polygons_geojson.geojson",
"https://s3.us-east-1.amazonaws.com/production-raw-data-api/ISO3/MKD/education_facilities/polygons/hotosm_mkd_education_facilities_polygons_geojson.zip!hotosm_mkd_education_facilities_polygons_geojson.geojson",
"https://s3.us-east-1.amazonaws.com/production-raw-data-api/ISO3/MKD/health_facilities/polygons/hotosm_mkd_health_facilities_polygons_geojson.zip!hotosm_mkd_health_facilities_polygons_geojson.geojson",
"https://s3.us-east-1.amazonaws.com/production-raw-data-api/ISO3/SRB/education_facilities/polygons/hotosm_srb_education_facilities_polygons_geojson.zip!hotosm_srb_education_facilities_polygons_geojson.geojson",
"https://s3.us-east-1.amazonaws.com/production-raw-data-api/ISO3/SRB/health_facilities/polygons/hotosm_srb_health_facilities_polygons_geojson.zip!hotosm_srb_health_facilities_polygons_geojson.geojson",
# "https://s3.us-east-1.amazonaws.com/production-raw-data-api/ISO3/TUR/education_facilities/polygons/hotosm_tur_education_facilities_polygons_geojson.zip!hotosm_tur_education_facilities_polygons_geojson.geojson",
# "https://s3.us-east-1.amazonaws.com/production-raw-data-api/ISO3/TUR/health_facilities/polygons/hotosm_tur_health_facilities_polygons_geojson.zip!hotosm_tur_health_facilities_polygons_geojson.geojson",
]
]
)
Buffering the geometries to create a buffer zone around each feature.
POI["geometry"] = POI["geometry"].to_crs("EPSG:3857").buffer(5).to_crs("EPSG:4326")
To demonstrate ain, we visualize the OpenStreetMap points of interest with the key amenity=school below.