Datahub API Tutorial
27 de novembro de 2023The purpose of this short tutorial is to demonstrate how to retrieve data from the datahub and how to integrate it into your analysis workflows. 😊
The Yaoundé datahub was built with the CKAN framework, the de-facto standard of open data portals. This makes it super easy to import data from, as well as to add new data onto the hub via an application programming interface (API). Moreover, this allso enables you to integrate data from the hub easily into your own applications.If you want to learn more about the CKAN API, please also have a look here 😉
🔧 What you will need: 🔧
%pip install pandas ckanapi openpyxl matplotlib folium --quiet
Note: you may need to restart the kernel to use updated packages.
Retrieval from data on the hub via the API 🌐¶
The following code chunk connects to the CKAN-API to query the datahub for all available datasets. The result is a list of identifiers of the datasets. The identifiers can then be used to retrieve the data of the respective datasets. But let's first have a look at the datasets that are available... 🤔
import pprint
import ckanapi
import pandas as pd
ckan = ckanapi.RemoteCKAN("https://yaounde.tumidata.org/")
datasets = ckan.action.package_list()
print(datasets)
['comptages-routiers', 'enquete-menages-deplacements', 'enquete-origine-destination']
At the time of writing, there are three datasets available on the datahub: 🙌
- comptages-routiers
- enquete-origine-destination
- enquete-menages-deplacements
The identifiers already give us a general idea of what the individual datasets are about. But let's have a closer look at the datasets. This can be performed by ckan.action.package_show(id='dataset-identifier')
, which returns a dictionary containing the metadata of the dataset. The metadata includes the name of the dataset, the name of the organization, the name of the maintainer, the date of the last update, the license, the tags, the resources (i.e. the data) and much more.
🔍📊
datainfo = ckan.action.package_show(id=datasets[0])
pprint.pprint(datainfo)
{'author': '', 'author_email': '', 'creator_user_id': '3e1eca8d-63be-4d6b-847f-c544940b53df', 'extras': [], 'groups': [{'description': 'This category covers data related to private ' 'transportation, such as driving license ownership ' 'rates, parking availability, traffic volumes, ' 'traffic control systems, street network ' 'geometries, and other relevant information.', 'display_name': 'Individual Transport', 'id': 'individual_transport', 'image_display_url': 'https://yaounde.tumidata.org/uploads/group/Icon_Individual_transport.svg', 'name': 'individual_transport', 'title': 'Individual Transport'}, {'description': 'This category focuses on various aspects of ' 'public transportation systems, including ' 'timetable-bound and on-demand services, transport ' 'network geometries, and other related data.', 'display_name': 'Public Transport', 'id': 'public_transport', 'image_display_url': 'https://yaounde.tumidata.org/uploads/group/Icon_Public_transport.svg', 'name': 'public_transport', 'title': 'Public Transport'}, {'description': 'DCAT Transport is a widely-used vocabulary for ' 'describing transportation-related resources on ' 'the web, providing a standardized set of concepts ' 'and properties for data discovery and ' 'integration. It subsumes other individual ' 'categories like Public Transport by providing a ' 'more comprehensive and flexible framework. \n' 'DCAT-URL: ' 'https://op.europa.eu/web/eu-vocabularies/concept/-/resource?uri=http://publications.europa.eu/resource/authority/data-theme/tran&lang=en \n' 'DCAT-URI: ' 'http://publications.europa.eu/resource/authority/data-theme/tran', 'display_name': 'Transport', 'id': 'tran', 'image_display_url': 'https://yaounde.tumidata.org/uploads/group/Icon_Transport.svg', 'name': 'tran', 'title': 'Transport'}], 'id': '93326fcd-3d2e-459e-ab83-8320b4f75119', 'isopen': False, 'license_id': 'notspecified', 'license_title': 'License not specified', 'maintainer': '', 'maintainer_email': '', 'metadata_created': '2023-11-24T16:43:43.823093', 'metadata_modified': '2023-11-30T16:46:43.169329', 'name': 'comptages-routiers', 'notes': '# Français\r\n' '##Attribution et informations de contexte\r\n' '\r\n' 'Cette base de données vise à supporter la Communauté Urbaine de ' "Yaoundé dans la rédaction d'un rapport technique de Plan de " 'Mobilité Urbaine Soutenable pour la Communauté Urbaine de Yaoundé ' 'publié en novembre 2018 pour le compte de MobiliseYourCity et ' "financé par l'Agence Française de Développement. L'enquête " 'Origine-Déplacements et les comptages de trafic routier dans la ' 'ville de Yaoundé ont été réalisées par le cabinet d’enquête Groupe ' "Cible et l'Enquête Ménage-Déplacements a été réalisée par les " "cabinets d'enquête Transamo et Des Villes et Des Hommes.\r\n" '\r\n' 'Mobilise Your City est une démarche visant à réduire les émissions ' "de GES à travers l'amélioration des conditions de mobilité, en " 'renforçant entre autres les services de transports en commun et la ' "sécurité routière, en cherchant à mettre l'usager au centre des " "réflexions. Cette démarche est conjointement portée par l'Union " 'Européenne, les gouvernements français et allemands et leurs ' 'agences de développement, à savoir l’AFD et la GIZ.\r\n' '\r\n' '## Objectif \r\n' 'Afin de valoriser l’ensemble des données de comptages routiers ' 'disponibles sur l’agglomération, 6 sites de comptages ont été ' 'retenus pour redresser l’ensemble des autres sites disponibles. Sur ' 'chaque poste de comptage sont dénombrés de manière exhaustive le ' 'nombre de véhicule par sens empruntant l’axe investigué. Sont ' 'dissociés les modes suivants :\r\n' '\r\n' '- Motos\r\n' '- Véhicule particulier\r\n' '- Taxis\r\n' '- Minibus\r\n' '- Bus de la STACY et cars\r\n' '- Camion\r\n' '- Grumiers et ensemble articulés\r\n' '\r\n' 'Les comptages routiers ont été réalisés 6 points suivants :\r\n' '\r\n' '- Elig essono pont de la gare\r\n' '- Route essomba\r\n' '- Avenue Kenedy (Vers Magasin GS Electronique)\r\n' '- Carrefour MVONG-MBI allant vers la Poste Centrale\r\n' '- Biyem assi, carrefour Accacia\r\n' "- Jean Abanda devant l'hôtel Dasso Palace.\r\n" '\r\n' 'A ces comptages exhaustifs sont associés des comptages d’occupation ' 'des véhicules motorisés afin de se rendre compte du taux ' 'd’occupation et d’avoir des indications précises sur les ratios de ' 'passage du véhicule aux passagers.\r\n' '\r\n' 'L’ensemble des données quantitatives permettra de dresser les ' 'volumes de véhicules et de passagers concernés par les différents ' 'écrans et de les comparer aux déplacements enquêtés précédemment ' 'décris pour pouvoir les redressés sur la base des données routières ' 'produites. \r\n' '\r\n' 'En complément de cette investigation portant sur les transports ' 'partagés, nous proposons de compléter ces démarches par la ' 'réalisation d’une enquête qualitative auprès des ménages de ' 'l’agglomération pour mieux appréhender les aspects comportementaux ' 'liés aux déplacements en général et non motorisés en particulier ' '(temps de marche à pied moyen, diversification des modes de ' 'déplacement selon le motif, taux de motorisation des ménages, …). ' 'Nous prévoyons d’interroger \r\n' '1 500 ménages sur les éléments socioéconomiques de leur ménage ' 'pouvant influencer sur les moda\x02lités de déplacements.\r\n' '\r\n' '## Bilan de comptage routier\r\n' '\r\n' '- Nombre d’enquêteurs: 48\r\n' '- Nombre de superviseurs: 6\r\n' '- Nombre de points d’enquête total: 6x2\r\n' '- Nombre d’enquêteurs par point par jour: 4 X2 (2 de chaque côté de ' 'la route)\r\n' '- Tranche horaire définies (4 enquêteurs par tranche horaire) par ' 'point d’enquête: 6h à 12h59 (7 heures) et 13h – 19h59 (7 heures)\r\n' '- Nombre de jours d’enquête: 1 jour\r\n' '\r\n' '## Constats et difficultés rencontrées\r\n' '- Dans certaines zones de la villes, les taxi informels ' '(communément appelés ‘’opep’’) et les bus informels (communément ' 'appelés ‘’cargo’’) sont plus utilisés que les moyens de transport ' 'formels, c’est le cas des carrefour MEC, Nkolbisson, Ekounou, ' 'Awae,.. Ces moyens de déplacement sont pris en compte dans les ' 'comptages.\r\n' '- Les après-midis, les stations de ramassage ne sont pas « bondées ' '», les quotas sont rarement atteints, contrairement aux matinées où ' 'ils sont parfois dépassés.\r\n' '- Aux heures de pointe, il y a une très grande affluence d’usagers, ' 'ce qui a perturbé quelques fois l’enquêteur en charge du ' 'comptage.\r\n' '- Aux heures creuses par contre, les stations de taxi sont ' 'désertes, les quotas sont rarement atteints.\r\n' '- Les problèmes techniques de certaines tablettes le premier jour ' 'qui ont été résolus pour la suite du travail.\r\n' '- La multitude des fériés qui a rallongé la durée du terrain.\r\n' '- La substitution d’un point à cause des préparatifs de la fête ' 'nationale du 20 mai (texaco omnisport).\r\n' '- Certains points qui avaient une grande affluence au point où les ' 'enquêteurs ne parvenaient pas à faire le comptage des personnes ' 'descendant et montant.\r\n' '- A contrario, d’autres points à certaines heures étaient ' 'complètement vides, ce qui empêchait les agents de collecte ' 'd’atteindre leur quota.\r\n' '\r\n' '\r\n' '# English\r\n' '\r\n' '# Attribution and background information\r\n' '\r\n' 'This database aims to support the Urban Community of Yaoundé in ' 'drafting a technical report on Sustainable Urban Mobility Plan for ' 'the Urban Community of Yaoundé, published in November 2018 on ' "behalf of Mobilise Your City and funded by l'Agence Française de " 'Développement. The Origine-Déplacements Survey and road traffic ' 'counts in the city of Yaoundé were conducted by the survey firm ' 'Groupe Cible, and the Ménage-Déplacements Survey was carried out by ' 'the survey firms Transamo and Des Villes et Des Hommes.\r\n' '\r\n' 'Mobilise Your City is an initiative aimed at reducing greenhouse ' 'gas emissions through improving mobility conditions, including ' 'strengthening public transportation services and road safety, with ' 'a focus on placing the user at the center of considerations. This ' 'initiative is jointly supported by the European Union, the French ' 'and German governments, and their development agencies, namely AFD ' 'and GIZ .\r\n' '\r\n' '## Objective\r\n' 'In order to enhance the overall road counting data available in the ' 'urban area, 6 counting sites were selected to adjust all the other ' 'available sites. At each counting station, the number of vehicles ' 'per direction using the investigated axis is exhaustively counted. ' 'The following modes are distinguished:\r\n' '\r\n' '- Motorcycles\r\n' '- Private vehicles\r\n' '- Taxis\r\n' '- Minibuses\r\n' '- STACY buses and coaches\r\n' '- Trucks\r\n' '- Timber trucks and articulated vehicles\r\n' '\r\n' 'The road counts were conducted at the following 6 points:\r\n' '\r\n' '- Elig Essono, Gare Bridge\r\n' '- Essomba Road\r\n' '- Kennedy Avenue (Towards GS Electronic Store)\r\n' '- MVONG-MBI Intersection going towards the Central Post Office\r\n' '- Biyem Assi, Accacia Intersection\r\n' '- Jean Abanda in front of Dasso Palace Hotel\r\n' '\r\n' 'Comprehensive vehicle occupancy counts are associated with these ' 'exhaustive counts to understand the occupancy rates and obtain ' 'precise indications on vehicle-to-passenger ratios.\r\n' '\r\n' 'All the quantitative data will help compile the volumes of vehicles ' 'and passengers concerned by the different screens and compare them ' 'to previously described surveyed trips in order to adjust them ' 'based on the produced road data.\r\n' '\r\n' 'In addition to this investigation on shared transport, we propose ' 'to complement these efforts by conducting a qualitative survey ' 'among households in the agglomeration to better understand ' 'behavioral aspects related to general and non-motorized travel ' '(average walking time, diversification of transportation modes ' 'according to purpose, household motorization rate, etc.). We plan ' 'to survey 1,500 households on the socioeconomic elements that may ' 'influence travel modalities.\r\n' '\r\n' '## Road Counting Summary\r\n' '- Number of interviewers: 48\r\n' '- Number of supervisors: 6\r\n' '- Total number of survey points: 6x2\r\n' '- Number of interviewers per point per day: 4 X2 (2 on each side of ' 'the road)\r\n' '- Defined time slots (4 interviewers per time slot) per survey ' 'point: 6 am to 12:59 pm (7 hours) and 1 pm to 7:59 pm (7 hours)\r\n' '- Number of survey days: 1 day\r\n' '\r\n' '## Findings and Encountered Challenges\r\n' '- In certain areas of the city, informal taxis (commonly called ' "'opep') and informal buses (commonly called 'cargo') are more " 'commonly used than formal means of transportation, such as at MEC, ' 'Nkolbisson, Ekounou, Awae junctions. These modes of transportation ' 'are taken into account in the counts.\r\n' '- In the afternoons, the pickup stations are not "crowded," quotas ' 'are rarely reached, unlike in the mornings where they are sometimes ' 'exceeded.\r\n' '- During peak hours, there is a very high influx of users, which ' 'sometimes disrupted the counter responsible for the counting.\r\n' '- During off-peak hours, on the contrary, taxi stations are ' 'deserted, and quotas are rarely met.\r\n' '- Technical problems with certain tablets on the first day were ' 'resolved for the remainder of the work.\r\n' '- The multitude of public holidays extended the fieldwork ' 'duration.\r\n' '- Substitution of a point due to preparations for the national ' 'holiday on May 20th (Texaco Omnisport).\r\n' "- Some points had high attendance where enumerators couldn't count " 'the people getting on and off.\r\n' '- Conversely, other points at certain times were completely empty, ' 'preventing data collectors from reaching their quotas.', 'num_resources': 2, 'num_tags': 0, 'organization': {'approval_status': 'approved', 'created': '2023-11-21T14:58:08.281335', 'description': '', 'id': '745f7956-1204-4a65-9ddc-ecef551c6f5e', 'image_url': '2023-11-21-135808.271514AFD-logo.jpg', 'is_organization': True, 'name': 'agence-francaise-de-developpement', 'state': 'active', 'title': 'Agence française de développement', 'type': 'organization'}, 'owner_org': '745f7956-1204-4a65-9ddc-ecef551c6f5e', 'private': False, 'relationships_as_object': [], 'relationships_as_subject': [], 'resources': [{'cache_last_updated': None, 'cache_url': None, 'created': '2023-11-24T16:45:45.372775', 'datastore_active': False, 'datastore_contains_all_records_of_source_file': False, 'description': '', 'format': 'XLSX', 'hash': '', 'id': '7fa46225-b187-490b-833c-5432fdde6625', 'last_modified': '2023-11-24T16:45:45.364859', 'metadata_modified': '2023-11-24T16:46:36.555316', 'mimetype': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'mimetype_inner': None, 'name': 'Comptage passagers', 'package_id': '93326fcd-3d2e-459e-ab83-8320b4f75119', 'position': 0, 'resource_type': None, 'size': 243577, 'state': 'active', 'url': 'https://yaounde.tumidata.org/dataset/93326fcd-3d2e-459e-ab83-8320b4f75119/resource/7fa46225-b187-490b-833c-5432fdde6625/download/comptage_point_passager_final.xlsx', 'url_type': 'upload'}, {'cache_last_updated': None, 'cache_url': None, 'created': '2023-11-24T16:46:36.557863', 'datastore_active': True, 'datastore_contains_all_records_of_source_file': False, 'description': '', 'format': 'XLSX', 'hash': '0e7e1fdfacc5b1e54402f6cdae637d37', 'id': '6c704b71-9d06-42be-9ac8-1c35c0d9d53e', 'last_modified': '2023-11-24T16:46:36.547639', 'metadata_modified': '2023-11-24T16:49:55.434650', 'mimetype': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'mimetype_inner': None, 'name': 'Comptage vehicules', 'package_id': '93326fcd-3d2e-459e-ab83-8320b4f75119', 'position': 1, 'resource_id': '6c704b71-9d06-42be-9ac8-1c35c0d9d53e', 'resource_type': None, 'size': 62214, 'state': 'active', 'url': 'https://yaounde.tumidata.org/dataset/93326fcd-3d2e-459e-ab83-8320b4f75119/resource/6c704b71-9d06-42be-9ac8-1c35c0d9d53e/download/comptage_point_vehicules_final.xlsx', 'url_type': 'upload'}], 'state': 'active', 'tags': [], 'title': 'Comptages routiers', 'type': 'dataset', 'url': '', 'version': ''}
Wow, this is a lot of information 😲
Let's focus on four things here: The name of the dataset, its description, the organization, and the number of resources. The name of the dataset is the identifier that we already know. The description gives us a short summary of what the dataset is about. But what are the resources and the organization? 🤔
In CKAN, data is organized in datasets (also referred to as packages) and resources. Datasets are owned by organizations. The organization is the entity that is responsible for the data. In our case, the organization is the French development agency Agence Française de Développement (AFD). Thank you AFD for providing the data! 🙏🎉
Each Dataset can have multiple resources. A resource is a file that is attached to a dataset. The resources can be of different types, e.g. csv, json, pdf, etc. The resources are also the files that we want to retrieve. 📁
With this in mind, let's now loop through all datasets on the hub and print the name of the dataset, its number of resources and description, and the name of the resources along with some additional metadata. 📝
for dataset in datasets:
datainfo = ckan.action.package_show(id=dataset)
print(datainfo['title'])
print(f"Number of resources: {datainfo['num_resources']}")
print(datainfo['notes'])
print('_____________________')
for resource in datainfo['resources']:
print(resource['name'])
print(resource['url'])
print(resource['format'])
print(resource['created'])
print('- - - - - - - - - - -')
Comptages routiers Number of resources: 2 # Français ##Attribution et informations de contexte Cette base de données vise à supporter la Communauté Urbaine de Yaoundé dans la rédaction d'un rapport technique de Plan de Mobilité Urbaine Soutenable pour la Communauté Urbaine de Yaoundé publié en novembre 2018 pour le compte de MobiliseYourCity et financé par l'Agence Française de Développement. L'enquête Origine-Déplacements et les comptages de trafic routier dans la ville de Yaoundé ont été réalisées par le cabinet d’enquête Groupe Cible et l'Enquête Ménage-Déplacements a été réalisée par les cabinets d'enquête Transamo et Des Villes et Des Hommes. Mobilise Your City est une démarche visant à réduire les émissions de GES à travers l'amélioration des conditions de mobilité, en renforçant entre autres les services de transports en commun et la sécurité routière, en cherchant à mettre l'usager au centre des réflexions. Cette démarche est conjointement portée par l'Union Européenne, les gouvernements français et allemands et leurs agences de développement, à savoir l’AFD et la GIZ. ## Objectif Afin de valoriser l’ensemble des données de comptages routiers disponibles sur l’agglomération, 6 sites de comptages ont été retenus pour redresser l’ensemble des autres sites disponibles. Sur chaque poste de comptage sont dénombrés de manière exhaustive le nombre de véhicule par sens empruntant l’axe investigué. Sont dissociés les modes suivants : - Motos - Véhicule particulier - Taxis - Minibus - Bus de la STACY et cars - Camion - Grumiers et ensemble articulés Les comptages routiers ont été réalisés 6 points suivants : - Elig essono pont de la gare - Route essomba - Avenue Kenedy (Vers Magasin GS Electronique) - Carrefour MVONG-MBI allant vers la Poste Centrale - Biyem assi, carrefour Accacia - Jean Abanda devant l'hôtel Dasso Palace. A ces comptages exhaustifs sont associés des comptages d’occupation des véhicules motorisés afin de se rendre compte du taux d’occupation et d’avoir des indications précises sur les ratios de passage du véhicule aux passagers. L’ensemble des données quantitatives permettra de dresser les volumes de véhicules et de passagers concernés par les différents écrans et de les comparer aux déplacements enquêtés précédemment décris pour pouvoir les redressés sur la base des données routières produites. En complément de cette investigation portant sur les transports partagés, nous proposons de compléter ces démarches par la réalisation d’une enquête qualitative auprès des ménages de l’agglomération pour mieux appréhender les aspects comportementaux liés aux déplacements en général et non motorisés en particulier (temps de marche à pied moyen, diversification des modes de déplacement selon le motif, taux de motorisation des ménages, …). Nous prévoyons d’interroger 1 500 ménages sur les éléments socioéconomiques de leur ménage pouvant influencer sur les modalités de déplacements. ## Bilan de comptage routier - Nombre d’enquêteurs: 48 - Nombre de superviseurs: 6 - Nombre de points d’enquête total: 6x2 - Nombre d’enquêteurs par point par jour: 4 X2 (2 de chaque côté de la route) - Tranche horaire définies (4 enquêteurs par tranche horaire) par point d’enquête: 6h à 12h59 (7 heures) et 13h – 19h59 (7 heures) - Nombre de jours d’enquête: 1 jour ## Constats et difficultés rencontrées - Dans certaines zones de la villes, les taxi informels (communément appelés ‘’opep’’) et les bus informels (communément appelés ‘’cargo’’) sont plus utilisés que les moyens de transport formels, c’est le cas des carrefour MEC, Nkolbisson, Ekounou, Awae,.. Ces moyens de déplacement sont pris en compte dans les comptages. - Les après-midis, les stations de ramassage ne sont pas « bondées », les quotas sont rarement atteints, contrairement aux matinées où ils sont parfois dépassés. - Aux heures de pointe, il y a une très grande affluence d’usagers, ce qui a perturbé quelques fois l’enquêteur en charge du comptage. - Aux heures creuses par contre, les stations de taxi sont désertes, les quotas sont rarement atteints. - Les problèmes techniques de certaines tablettes le premier jour qui ont été résolus pour la suite du travail. - La multitude des fériés qui a rallongé la durée du terrain. - La substitution d’un point à cause des préparatifs de la fête nationale du 20 mai (texaco omnisport). - Certains points qui avaient une grande affluence au point où les enquêteurs ne parvenaient pas à faire le comptage des personnes descendant et montant. - A contrario, d’autres points à certaines heures étaient complètement vides, ce qui empêchait les agents de collecte d’atteindre leur quota. # English # Attribution and background information This database aims to support the Urban Community of Yaoundé in drafting a technical report on Sustainable Urban Mobility Plan for the Urban Community of Yaoundé, published in November 2018 on behalf of Mobilise Your City and funded by l'Agence Française de Développement. The Origine-Déplacements Survey and road traffic counts in the city of Yaoundé were conducted by the survey firm Groupe Cible, and the Ménage-Déplacements Survey was carried out by the survey firms Transamo and Des Villes et Des Hommes. Mobilise Your City is an initiative aimed at reducing greenhouse gas emissions through improving mobility conditions, including strengthening public transportation services and road safety, with a focus on placing the user at the center of considerations. This initiative is jointly supported by the European Union, the French and German governments, and their development agencies, namely AFD and GIZ . ## Objective In order to enhance the overall road counting data available in the urban area, 6 counting sites were selected to adjust all the other available sites. At each counting station, the number of vehicles per direction using the investigated axis is exhaustively counted. The following modes are distinguished: - Motorcycles - Private vehicles - Taxis - Minibuses - STACY buses and coaches - Trucks - Timber trucks and articulated vehicles The road counts were conducted at the following 6 points: - Elig Essono, Gare Bridge - Essomba Road - Kennedy Avenue (Towards GS Electronic Store) - MVONG-MBI Intersection going towards the Central Post Office - Biyem Assi, Accacia Intersection - Jean Abanda in front of Dasso Palace Hotel Comprehensive vehicle occupancy counts are associated with these exhaustive counts to understand the occupancy rates and obtain precise indications on vehicle-to-passenger ratios. All the quantitative data will help compile the volumes of vehicles and passengers concerned by the different screens and compare them to previously described surveyed trips in order to adjust them based on the produced road data. In addition to this investigation on shared transport, we propose to complement these efforts by conducting a qualitative survey among households in the agglomeration to better understand behavioral aspects related to general and non-motorized travel (average walking time, diversification of transportation modes according to purpose, household motorization rate, etc.). We plan to survey 1,500 households on the socioeconomic elements that may influence travel modalities. ## Road Counting Summary - Number of interviewers: 48 - Number of supervisors: 6 - Total number of survey points: 6x2 - Number of interviewers per point per day: 4 X2 (2 on each side of the road) - Defined time slots (4 interviewers per time slot) per survey point: 6 am to 12:59 pm (7 hours) and 1 pm to 7:59 pm (7 hours) - Number of survey days: 1 day ## Findings and Encountered Challenges - In certain areas of the city, informal taxis (commonly called 'opep') and informal buses (commonly called 'cargo') are more commonly used than formal means of transportation, such as at MEC, Nkolbisson, Ekounou, Awae junctions. These modes of transportation are taken into account in the counts. - In the afternoons, the pickup stations are not "crowded," quotas are rarely reached, unlike in the mornings where they are sometimes exceeded. - During peak hours, there is a very high influx of users, which sometimes disrupted the counter responsible for the counting. - During off-peak hours, on the contrary, taxi stations are deserted, and quotas are rarely met. - Technical problems with certain tablets on the first day were resolved for the remainder of the work. - The multitude of public holidays extended the fieldwork duration. - Substitution of a point due to preparations for the national holiday on May 20th (Texaco Omnisport). - Some points had high attendance where enumerators couldn't count the people getting on and off. - Conversely, other points at certain times were completely empty, preventing data collectors from reaching their quotas. _____________________ Comptage passagers https://yaounde.tumidata.org/dataset/93326fcd-3d2e-459e-ab83-8320b4f75119/resource/7fa46225-b187-490b-833c-5432fdde6625/download/comptage_point_passager_final.xlsx XLSX 2023-11-24T16:45:45.372775 - - - - - - - - - - - Comptage vehicules https://yaounde.tumidata.org/dataset/93326fcd-3d2e-459e-ab83-8320b4f75119/resource/6c704b71-9d06-42be-9ac8-1c35c0d9d53e/download/comptage_point_vehicules_final.xlsx XLSX 2023-11-24T16:46:36.557863 - - - - - - - - - - - Enquête Ménages Déplacements Number of resources: 6 # Français ## Attribution et informations de contexte Cette base de données vise à supporter la Communauté Urbaine de Yaoundé dans la rédaction d'un rapport technique de Plan de Mobilité Urbaine Soutenable pour la Communauté Urbaine de Yaoundé publié en novembre 2018 pour le compte de MobiliseYourCity et financé par l'Agence Française de Développement. L'enquête Origine-Déplacements et les comptages de trafic routier dans la ville de Yaoundé ont été réalisées par le cabinet d’enquête Groupe Cible et l'Enquête Ménage-Déplacements a été réalisée par les cabinets d'enquête Transamo et Des Villes et Des Hommes. Mobilise Your City est une démarche visant à réduire les émissions de GES à travers l'amélioration des conditions de mobilité, en renforçant entre autres les services de transports en commun et la sécurité routière, en cherchant à mettre l'usager au centre des réflexions. Cette démarche est conjointement portée par l'Union Européenne, les gouvernements français et allemands et leurs agences de développement, à savoir l’AFD et la GIZ. ## Eléments de cadrage L’objectif de l’Enquête Ménages Déplacements est de recueillir des informations sur les pratiques de déplacements de la population de l’aire urbaine de Yaoundé : les 7 arrondissements de la ville de Yaoundé et les communes limitrophes. Cette enquête a été réalisée conformément à la méthodologie développée par le CERTU en France, afin de permettre de : - Constituer une situation de référence fiable et comparable avec d’autres villes camerounaises, Douala en l’occurrence. - Disposer d’informations statistiques standardisées, exploitables par tous les services publics d’études. Le champ d’une EMD porte sur l’ensemble des occupants des résidences principales du périmètre d’enquête. L’objectif d’une EMD étant de recueillir les pratiques de déplacements des personnes pour un jour « normal et moyen de semaine », il faut recenser tous les déplacements effectués par chaque membre du ménage interrogé âgé d’au moins 6 ans. Tous les modes sont pris en compte, y compris la marche à pied. L’Enquête Ménages Déplacements a été réalisée au cours du mois de juillet 2018. Un total de 1 502 ménages a été enquêté, pour 5664 personnes interrogées (âgées de 6 ans ou plus). Cette enquête a porté sur des déplacements réalisés du lundi au vendredi. ## Zonage et échantillonnage L'échantillon de ménages est tiré de manière aléatoire sans remise et est stratifié géographiquement. - Taille de l’échantillon : 1500 ménages. Ceci constitue le minimum requis par le CERTU pour garantir une analyse significative. - Population cible : Personnes âgées de 6 ans et plus. - Nombre de zones : 105. Ces 105 zones sont été regroupées en 21 zones de tirage d’au moins 70 ménages chacune (et 160 personnes), conformément aux règles de représentativité établies par le CERTU. - Source d’échantillonnage : Recensement de 2005 (données publiées par l’Institut National de la Statistique du Cameroun) Ne disposant pas d’une base de données des ménages sur la CUY, l’échantillonnage au sein de chaque zone a été réalisé selon la méthode de la marche aléatoire. Notre approche consiste à réaliser, dans chaque zone, un random route basé sur la méthode de la date. Chaque superviseur, dans chaque zone d’échantillonnage, aura une liste de point de départ (appelés également points d’échantillonnage). A partir de chaque point de départ (ou centroïde), les enquêteurs seront envoyés en direction des différents points cardinaux afin de sélectionner les foyers à interroger selon un pas de sondage. Le pas de sondage sera défini en fonction de la méthode de la date. Cette méthode consiste à définir le pas de sondage, chaque jour en fonction de la date. Par exemple, si nous sommes le 15 Mai, le pas de sondage pour sélectionner les foyers sera : 1 + 6 = 7. Le lendemain, le 16, le pas de sondage sera de 1 + 7 = 8, etc. Dans cet exemple, les enquêteurs interrogerons donc le premier foyer rencontré puis compteront huit maisons et interrogerons le 8ème foyer, et ainsi de suite. ## Traitement et redressement Les données brutes issues des entretiens ont été apurées et traitées afin de constituer les tables Ménages, Personnes, Déplacements et Opinions. Le redressement de l’enquête est établi en considérant qu’un ménage interrogé est représentatif de la zone dans laquelle il réside. Le facteur de redressement appliqué correspond ainsi à la population de la zone estimée en 2018 (voir partie 1.3.1) sur le nombre de personnes interrogées. Le même facteur est appliqué aux déplacements. # English ## Attribution and background information This database aims to support the Urban Community of Yaoundé in drafting a technical report on Sustainable Urban Mobility Plan for the Urban Community of Yaoundé, published in November 2018 on behalf of Mobilise Your City and funded by l'Agence Française de Développement. The Origine-Déplacements Survey and road traffic counts in the city of Yaoundé were conducted by the survey firm Groupe Cible, and the Ménage-Déplacements Survey was carried out by the survey firms Transamo and Des Villes et Des Hommes. Mobilise Your City is an initiative aimed at reducing greenhouse gas emissions through improving mobility conditions, including strengthening public transportation services and road safety, with a focus on placing the user at the center of considerations. This initiative is jointly supported by the European Union, the French and German governments, and their development agencies, namely AFD and GIZ . ## Framing Elements The objective of the Household Travel Survey is to collect information on the travel practices of the population in the urban area of Yaoundé: the 7 districts of the city of Yaoundé and neighboring municipalities. This survey was conducted following the methodology developed by CERTU in France, aiming to: - Establish a reliable reference situation comparable to other Cameroonian cities, specifically Douala. - Have standardized statistical information exploitable by all public study services. The scope of a Household Travel Survey covers all occupants of the main residences within the survey area. The objective of such a survey is to gather travel practices of individuals for a "normal and average weekday," requiring the recording of all journeys made by each household member aged 6 years or older. All modes of transportation are considered, including walking. The Household Travel Survey was conducted during July 2018. A total of 1,502 households were surveyed, comprising 5,664 respondents (aged 6 years or older). This survey covered trips made from Monday to Friday. ## Zoning and Sampling The household sample is randomly drawn without replacement and is geographically stratified. - Sample size: 1500 households. This constitutes the minimum requirement by CERTU to ensure a meaningful analysis. - Target population: Individuals aged 6 years and above. - Number of zones: 105. These 105 zones have been grouped into 21 sampling areas, each with at least 70 households (and 160 individuals), in accordance with the representativity rules established by CERTU. - Sampling source: 2005 Census (data published by the National Institute of Statistics of Cameroon) Due to the absence of a household database in the CUY (urban community of Yaoundé), the sampling within each zone was carried out using the random walk method. Our approach involves conducting a random route within each zone, based on the date method. Each supervisor, in each sampling zone, will have a list of starting points (also called sampling points). From each starting point (or centroid), the investigators will be sent in different cardinal directions to select households to be surveyed using a sampling interval. The sampling interval will be defined based on the date method. This method defines the sampling interval every day according to the date. For example, if it's May 15, the sampling interval for selecting households will be: 1 + 6 = 7. The next day, on the 16th, the sampling interval will be 1 + 7 = 8, and so on. In this example, the investigators will survey the first encountered household and then count eight houses and survey the 8th household, and so on. ## Processing and Weighting The raw data from the interviews were cleaned and processed to establish Household, Person, Travel, and Opinion tables. The survey weighting is established considering that a surveyed household represents the zone in which it resides. The weighting factor applied corresponds to the estimated population of the zone in 2018 (see section 1.3.1) divided by the number of persons surveyed. The same factor is applied to travel data. _____________________ Résultats ménages https://yaounde.tumidata.org/dataset/0ad7d737-cca4-4527-b01c-0808bbc584c3/resource/56b6db12-7dda-4e1c-88da-537b1b085691/download/emd-yaounde-2018-resultats-menages.xlsx XLSX 2023-11-29T22:29:44.724838 - - - - - - - - - - - Codebook pour le fichier ménage https://yaounde.tumidata.org/dataset/0ad7d737-cca4-4527-b01c-0808bbc584c3/resource/a9996f60-f5b0-43e1-a5c5-9e841b2b2936/download/resultats-menages-codebook.xlsx XLSX 2023-11-29T22:39:30.238267 - - - - - - - - - - - Résultats Déplacements https://yaounde.tumidata.org/dataset/0ad7d737-cca4-4527-b01c-0808bbc584c3/resource/85708f83-e856-40db-b3e3-4639f039159a/download/resultats-deplacements.xlsx XLSX 2023-11-30T17:29:01.297501 - - - - - - - - - - - Codebook pour le fichier déplacements https://yaounde.tumidata.org/dataset/0ad7d737-cca4-4527-b01c-0808bbc584c3/resource/fe199001-9d5b-4d19-8587-26a4e8a440ea/download/resultats-deplacements-codebook.xlsx XLSX 2023-11-30T17:29:54.687230 - - - - - - - - - - - Résultats personnes https://yaounde.tumidata.org/dataset/0ad7d737-cca4-4527-b01c-0808bbc584c3/resource/d68aa1eb-5530-4e5a-a270-e26c2e55f5e7/download/resultats-personnes.xlsx XLSX 2023-11-30T18:06:06.192746 - - - - - - - - - - - Codebook pour le fichier personne https://yaounde.tumidata.org/dataset/0ad7d737-cca4-4527-b01c-0808bbc584c3/resource/d1754071-2a8c-4e3a-8ff7-38cd98eb852d/download/resultats-personnes-codebook.xlsx XLSX 2023-11-30T18:06:51.296484 - - - - - - - - - - - Enquête Origine-Destination Number of resources: 1 # Français ## Attribution et informations de contexte Cette base de données vise à supporter la Communauté Urbaine de Yaoundé dans la rédaction d'un rapport technique de Plan de Mobilité Urbaine Soutenable pour la Communauté Urbaine de Yaoundé publié en novembre 2018 pour le compte de MobiliseYourCity et financé par l'Agence Française de Développement. L'enquête Origine-Déplacements et les comptages de trafic routier dans la ville de Yaoundé ont été réalisées par le cabinet d’enquête Groupe Cible et l'Enquête Ménage-Déplacements a été réalisée par les cabinets d'enquête Transamo et Des Villes et Des Hommes. Mobilise Your City est une démarche visant à réduire les émissions de GES à travers l'amélioration des conditions de mobilité, en renforçant entre autres les services de transports en commun et la sécurité routière, en cherchant à mettre l'usager au centre des réflexions. Cette démarche est conjointement portée par l'Union Européenne, les gouvernements français et allemands et leurs agences de développement, à savoir l’AFD et la GIZ. ## Objectif L’objectif de l’enquête OD était d’interroger les voyageurs sur leur déplacement (en cours) afin de connaître leurs itinéraires et leurs habitudes de déplacement. En complément, les 100 principaux sites de prise en charge du territoire ont été identifiés et cartographiés. A partir de cette liste 54 points d’enquête ont été retenus de manière à quadriller l’ensemble du territoire sur une amplitude de 14 heures (6h - 20h). Ces enquêtes ayant pour but de retracer l’ensemble des chaines de déplacements utilisés par les personnes interviewées, il sera ainsi possible d’avoir une diversité géographique des lieux d’origine et de destination avec ces 54 points et une diversité temporelle des motifs de déplacements au fil de la journée. Le questionnaire administré, présenté en annexe, a pour objectif initial d’inventorier l’ensemble des déplacements réalisés par les personnes enquêtées. D’où viennent-ils et où vont-ils ? Comment sont-ils arrivés jusqu’ici ? Comment se rendront-ils à leur destination finale ? A ces questions typiques des enquêtes ayant pour objectif de produire les matrices Origines / Destination par mode d’un territoire, nous avons ajouté au questionnaire des éléments plus qualitatif permettant d’investiguer les dimensions socioéconomiques relatives au déplacement. Nous interrogeons donc tant les caractéristiques de l’enquêté (âge, sexe, niveau de revenus, motif de déplacement) que le coût-généralisé de son trajet (prix estimé, temps d’attente du taxi, temps de trajet complet). Les résultats permettront de reconstituer l’ensemble du déplacement que l’usager effectue : (origine-destination, trajets de rabattement et de diffusion, motif du déplacement, âge et profil de l’enquêté, revenus du ménage.) Pour la partie quantitative, l’ensemble des personnes montant à bord de taxis, motos-taxis et autres transports collectifs aux 54 points d’enquête sont comptés afin de redresser les déplacements enquêtés . ## Bilan de l’enquête OD Un récapitulatif de l’enquête OD donne un total de 10 509 enquêtés. - Nombre d’enquêteurs: 20 - Nombre de superviseurs: 6 - Nombre de points d’enquête total: 54 - Nombre de questionnaire OD par heure: 8 en moyenne - Nombre de questionnaire OD par point par jour: (56x2) x2 en moyenne - Nombre de points d’enquête par jour: 10 # English ## Attribution and background information This database aims to support the Urban Community of Yaoundé in drafting a technical report on Sustainable Urban Mobility Plan for the Urban Community of Yaoundé, published in November 2018 on behalf of Mobilise Your City and funded by l'Agence Française de Développement. The Origine-Déplacements Survey and road traffic counts in the city of Yaoundé were conducted by the survey firm Groupe Cible, and the Ménage-Déplacements Survey was carried out by the survey firms Transamo and Des Villes et Des Hommes. Mobilise Your City is an initiative aimed at reducing greenhouse gas emissions through improving mobility conditions, including strengthening public transportation services and road safety, with a focus on placing the user at the center of considerations. This initiative is jointly supported by the European Union, the French and German governments, and their development agencies, namely AFD and GIZ . ## Objective The objective of the OD survey was to interview travelers about their current travel in order to understand their itineraries and travel habits. In addition, the 100 main pickup sites in the territory were identified and mapped. Based on this list, 54 survey points were selected to cover the entire territory over a 14-hour period (6 am - 8 pm). These surveys aimed to trace all the travel chains used by the interviewees, thereby allowing a geographical diversity of origins and destinations with these 54 points, and a temporal diversity of travel purposes throughout the day. The administered questionnaire, presented in the annex, initially aimed to inventory all the movements made by the surveyed individuals. Where do they come from, and where are they going? How did they get here? How will they reach their final destination? To these typical questions of surveys aiming to produce Origin/Destination matrices by mode of transport of a territory, we have added more qualitative elements to the questionnaire to investigate the socio-economic dimensions related to travel. Therefore, we inquire about both the characteristics of the interviewee (age, gender, income level, reason for travel) and the generalized cost of their journey (estimated price, waiting time for the taxi, total travel time). The results will enable the reconstruction of the entire journey made by the user: (origin-destination, feeder and distributor routes, purpose of the trip, age and profile of the respondent, household income.) For the quantitative part, all individuals boarding taxis, motorcycle-taxis, and other collective transports at the 54 survey points are counted to adjust the surveyed trips. ## Origin-Destination Survey Summary A summary of the OD survey shows a total of 10,509 surveyed individuals. - Number of interviewers: 20 - Number of supervisors: 6 - Total number of survey points: 54 - Number of OD questionnaires per hour: 8 on average - Number of OD questionnaires per point per day: (56x2) x2 on average - Number of survey points per day: 10 _____________________ Data_OD_Yaounde https://yaounde.tumidata.org/dataset/feeadbbe-9b90-40cd-a415-25b66f0c64b9/resource/2c3dc1e8-480e-4e26-b959-195d256d2089/download/data_pmus_od_yaounde.xlsx XLSX 2023-11-24T16:11:27.989648 - - - - - - - - - - -
The dataset comptages-routiers
has two resources, Comptage passagers
and Comptage vehicules
. The other dataset, Enquête Origine-Destination
, has only one resource, Data_OD_Yaounde
. Let's retrieve the data of the second dataset, Enquête Origine-Destination
. As we learned from the description, the dataset is based on a survey of passengers waiting at bus stops in Yaoundé. Let's retrieve the data and do some analysis! 📥
Retrieving the data can be performed by simply passing the url of the resource to the pd.read_excel()
function (note that this requires the openpyxl
dependency) The result is a pandas dataframe containing the data of the resource. 📊
This allows us to easily integrate the data in any of our workflows! 🥳
datainfo = ckan.action.package_show(id='enquete-origine-destination')
df = pd.read_excel(datainfo['resources'][0]['url'])
Analysis and visualization of the data 🗺️📍¶
In this second part of the tutorial, we will do some basic analysis and visualization of the data. This requires some prior knowledge of the pandas
and folium
, which we will not cover here. If you are not familiar with these libraries, you can find some great tutorials here and here. 📚
To understand the data, let's first have a look at the columns of the dataframe. 📝
print(df.columns)
Index(['ID', 'PASSANT_SURVEY_ID', 'CENTRE VILLE', 'DATE_ENTRETIEN', 'ENQUETEUR', 'SUPERVISEUR', 'HEURE_DEBUT', 'HEURE_FIN', 'LATITUDE', 'LONGITUDE', 'POINT_ENQUETE', 'Q1_1', 'Q1_1_A', 'Q1_1_B', 'Q1_1_C', 'Q1_2', 'Q1_2_A', 'Q1_2_B', 'Q1_3_C', 'Q2_1', 'Q2_2_1', 'Q2_2_2', 'Q2_3_1', 'Q2_3_2', 'Q2_3', 'Q2_4', 'Q2_5_1', 'Q2_5_2', 'Q2_6_1', 'Q2_6_2', 'Q3_1', 'Q3_2', 'Q3_3_1', 'Q3_3_2', 'Q4_1_A', 'Q4_1_B', 'Q4_2_A', 'Q4_2_B', 'Q4_3', 'Q4_4', 'Q4_4_AUTRES', 'Q5_1', 'Q5_2', 'Q5_3'], dtype='object')
Many of these column names are not very helpful - especially if you are not familiar with the survey. The excel-Workbook that we loaded into pandas actually has a second sheet, which contains the column names and their descriptions. Let's load this sheet as well, to get a better understanding of what we're looking at. 🧐
var_codes = pd.read_excel(datainfo['resources'][0]['url'], sheet_name=1)
var_codes.head(20)
Nom de la variable | Designation de la variable | |
---|---|---|
0 | ID | Comptage_passant_survey_id |
1 | PASSANT_SURVEY_ID | Comptage_passant_survey_id |
2 | VILLE | Ville : |
3 | DATE_ENTRETIEN | Date de l'entretien : |
4 | ENQUETEUR | Enquêteur : |
5 | SUPERVISEUR | Superviseur : |
6 | INTRO | Introduction |
7 | HEURE_DEBUT | Heure debut |
8 | HEURE_FIN | Heure fin |
9 | START_TIME | Start time |
10 | END_TIME | End time |
11 | DATE_INTERVIEW | DATE INTERVIEW |
12 | LATITUDE | Latitude |
13 | LONGITUDE | Longitude |
14 | POINT_ENQUETE | Nom du point d'enquête |
15 | Q1_1 | Q1. Lieu de provenance du repondant |
16 | Q1_1_A | Q1.1 Nom du quartier de la ville de Yaoundé |
17 | Q1_1_B | Q1.1 Lieu dit dans ce quartier de la ville de ... |
18 | Q1_1_C | Q1.2 Nom de la ville en dehors de Yaoundé |
19 | Q1_2 | Q2. Lieu de destination du repondant |
Great, this is much better! 🙌 Some of the columns are still not very clear, but we can now at least understand the majority of the columns. AFD conducted very interesting research here! 🤓 We could focus the analysis on multiple aspects of the data, but let's simply create a map of the estimated waiting times at the individual bus stops. 🗺️
For this we will clean the longitude and latitude columns, merge bus stops that are close to each other (e.g. the stop at the other side of the road), and create a map with folium. 📍
df = df[df['LONGITUDE'].map(type) != str]
df = df[(df['LONGITUDE'] != 0) & (df['LATITUDE'] != 0)]
# aggregate those bus stops that are at the same location
df['POINT_ENQUETE'] = df['POINT_ENQUETE'].apply(lambda x: x.split(' (')[0])
# replace Acacias with ACACIA
df['POINT_ENQUETE'] = df['POINT_ENQUETE'].apply(lambda x: x.replace('Acacias', 'ACACIA'))
# capitalice Carrefour
df['POINT_ENQUETE'] = df['POINT_ENQUETE'].apply(lambda x: x.replace('carrefour', 'Carrefour'))
# Q4_1_B contains data on the respondents' expected waiting time for the bus
grouped = df.groupby(['POINT_ENQUETE', 'Q4_1_B']).size().reset_index(name='counts')
grouped.head(6)
POINT_ENQUETE | Q4_1_B | counts | |
---|---|---|---|
0 | ACACIA | 10 à 20 minutes | 109 |
1 | ACACIA | 5 à 10 minutes | 170 |
2 | ACACIA | Moins de 5 min | 251 |
3 | ACACIA | Plus de 20 minutes | 45 |
4 | Awae escalier | 10 à 20 minutes | 72 |
5 | Awae escalier | 5 à 10 minutes | 83 |
# get unique latitudes and longitudes with POINT_ENQUETE, drop duplicates
latlong = df[['POINT_ENQUETE', 'LATITUDE', 'LONGITUDE']].drop_duplicates()
latlong['LONGITUDE'] = latlong['LONGITUDE'].astype(float)
latlong_unique = latlong.groupby('POINT_ENQUETE').agg({'LATITUDE': 'mean', 'LONGITUDE': 'mean'}).reset_index()
# pivot Q4_1_B to columns
pivot = grouped.pivot(index='POINT_ENQUETE', columns='Q4_1_B', values='counts').reset_index()
# merge pivot with latlong
pivot = pd.merge(pivot, latlong_unique, on='POINT_ENQUETE')
pivot = pivot.fillna(0)
# get center of map
center = [pivot['LATITUDE'].mean(), pivot['LONGITUDE'].mean()]
Let's use open satellite imagery for the map. 🛰️ We do so by using the World Imagery Tile Service from ESRI. 🌍
# Custom tileset with open satellite imagery
attr = 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
tiles = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}'
The data on the waiting time is grouped into a categorical variable with four intervals: 0-5 minutes, 5-10 minutes, 10-20 minutes, and more than 20 minutes. How can we display this information on the map? 🤔 How about we create pie charts and then display them on the map, at the location of the bus stop? 🤓
To do so, we will first create the pie charts with matplotlib
, then convert them to a png image, and finally display them on the map with folium
. 📊
import io
import matplotlib.pyplot as plt
pie_charts_data = zip(
pivot['Moins de 5 min'],
pivot['5 à 10 minutes'],
pivot['10 à 20 minutes'],
pivot['Plus de 20 minutes'],
)
fig = plt.figure(figsize=(1, 1))
fig.patch.set_alpha(0)
ax = fig.add_subplot(111)
plots = []
for sizes in pie_charts_data:
ax.pie(
sizes,
colors=(
'#3d8ac9',
'#2fbfc8',
'#f1b823',
'#f29985',
# '#1d1b5c',
# '#a19bbc'
)
),
buff = io.StringIO()
plt.savefig(buff, format='SVG')
buff.seek(0)
svg = buff.read()
svg.replace("\n", "")
plots.append(svg)
plt.cla()
plt.clf()
plt.close()
One of the problems with combining these two visualization libraries is that we do not have a legend for the different categories in the pie charts. Let's therefore create a legend as an html object for the pie charts and display it on the map. 📊🔍
import branca
legend_html = """
{% macro html(this, kwargs) %}
<div style="
position: fixed;
bottom: 50px;
left: 50px;
width: 130px;
height: 110px;
z-index:9999;
font-size:14px;
">
<p><a style="color:#3d8ac9;font-size:60%;margin-left:10px;">◼</a> Moins de 5 min</p>
<p><a style="color:#2fbfc8;font-size:60%;margin-left:10px;">◼</a> 5 à 10 min</p>
<p><a style="color:#f1b823;font-size:60%;margin-left:10px;">◼</a> 10 à 20 min</p>
<p><a style="color:#f29985;font-size:60%;margin-left:10px;">◼</a> Plus de 20 min</p>
</div>
<div style="
position: fixed;
bottom: 50px;
left: 50px;
width: 130px;
height: 110px;
z-index:9998;
font-size:14px;
background-color: #ffffff;
filter: blur(8px);
-webkit-filter: blur(8px);
opacity: 0.7;
">
</div>
{% endmacro %}
"""
legend = branca.element.MacroElement()
legend._template = branca.element.Template(legend_html)
import folium
m = folium.Map(
location=[center[0], center[1]],
zoom_start=12,
tiles=tiles,
attr=attr
)
pivot['latlon'] = [(row['LATITUDE'], row['LONGITUDE']) for _, row in pivot.iterrows()]
for i, coord in enumerate(pivot.latlon):
marker = folium.Marker(coord)
icon = folium.DivIcon(html=plots[i])
marker.add_child(icon)
popup = folium.Popup(
f"""
<span style="color: white">
<h5> <b>{pivot['POINT_ENQUETE'][i]}:</h4> </b>
<br>Moins de 5 min: <b>{pivot['Moins de 5 min'][i]}</b>
<br>5 à 10 min: <b>{pivot['5 à 10 minutes'][i]}</b>
<br>10 à 20 min: <b>{pivot['10 à 20 minutes'][i]}</b>
<br>Plus de 20 min: <b>{pivot['Plus de 20 minutes'][i]}</b>
</span>
""",
min_width=200,
max_width=200
)
marker.add_child(popup)
m.add_child(marker)
html_to_insert = "<style>.leaflet-popup-content-wrapper, .leaflet-popup.tip {background-color: rgba(0,0,0,.5) !important; }</style>"
m.get_root().header.add_child(folium.Element(html_to_insert))
m.get_root().add_child(legend)