diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..ee105cc33 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +CI_BiodiversityHotspots_Mapped.geojson +IPCC_ClimateZoneMap_Vector.geojson +TerrestrialEcoregionsoftheWorld_WWF.geojson \ No newline at end of file diff --git a/.ipynb_checkpoints/README-checkpoint.md b/.ipynb_checkpoints/README-checkpoint.md new file mode 100644 index 000000000..d389873bd --- /dev/null +++ b/.ipynb_checkpoints/README-checkpoint.md @@ -0,0 +1,25 @@ +# Land Sector Datasets +This Repo is bringing together datasets that can be useful for land sector management. The range of datasets is going beyond what is needed to run FLINT. For each dataset information is provided on content and licence. + + +## Maintainers Reviewers Ambassadors Coaches + +The following people are Maintainers Reviewers Ambassadors or Coaches + +
Guy Janssen
Guy Janssen

🚧
mtbdeligt
mtbdeligt

đź“–
+ +**Maintainers** review and accept proposed changes +**Reviewers** check proposed changes before they go to the Maintainers +**Ambassadors** are available to provide training related to this repository +**Coaches** are available to provide information to new contributors to this repository + +## Processed datasets +FLINT ready processed vector (json) and raster/grid (tiff) data described in this repo can be downloaded from Moja Global [Land Sector Datasets](https://datasets.mojaglobal.workers.dev/) data library. + +### Formats +To be FLINT ready, vector datasets must be in geoJSON vector format, with no overlapping parts or topological error such as self intersections. Code is provided to systematically process the original data sources into this format, but please note this may change the content of the data e.g. where there are two overlapping polygons with different attribution, one will arbitrarily win over the other. We have also attempted to clean up small gaps and slithers systematically, but it is still recommended that manual checking and editing is completed depending on your project requirements. + +To be FLINT ready, rasters or grids must be in tiff or geoTiff format, with the same extent and resolution equal to or a multiple of the overall simulation resolution, padded to the nearest 1 degree lat/lon. These can be mosaic or tiled. We provide gdal code to resample the grids and tiles to different extents and resolutions. There are a range of continous and discrete grids available in the data library. + +## Licence information +Please review individual dataset licence terms and conditions. Please note, while all care has been taken to ensure data is open data available for use, individual datasets will have their own licence conditions and citation requirements. diff --git a/Data/Administrative/.ipynb_checkpoints/WorldDatabaseProtectedAreas_WDPA-checkpoint.ipynb b/Data/Administrative/.ipynb_checkpoints/WorldDatabaseProtectedAreas_WDPA-checkpoint.ipynb new file mode 100644 index 000000000..088200d83 --- /dev/null +++ b/Data/Administrative/.ipynb_checkpoints/WorldDatabaseProtectedAreas_WDPA-checkpoint.ipynb @@ -0,0 +1,265 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Title: The World Database on Protected Areas (WDPA)\n", + "\n", + "### Description\n", + "The World Database on Protected Areas (WDPA) is the most comprehensive global database of marine and terrestrial protected areas. It is a joint project between UN Environment Programme and the International Union for Conservation of Nature (IUCN), and is managed by UN Environment Programme World Conservation Monitoring Centre (UNEP-WCMC), in collaboration with governments, non-governmental organisations, academia and industry.The WDPA is updated on a monthly basis, and can be downloaded using the button in the top right of this page.
\n", + "\n", + "As the data collates many different reserve types from many different sources, there are a range of topological issues including significant duplication and overlapping of reserve areas. There are over 150,000 overlapping polygons in the National cateogry alone. To simplify this dataset for use in FLINT, only National reserves are shown, excluding Marine, Regional and International reserve areas.\n", + "\n", + "### Format\n", + "Extent: Global coverage
\n", + "Format: polygon geoJSON .json
\n", + "Cordinate system: EPSG:4326 (WGS84)
\n", + "Temporal Resolution: 2020 as at 29/12/2020. Please note, updates to this dataset are likely and will require re-processing for up to date use.
\n", + "Size: 700MB\n", + "\n", + "\n", + "### Original source\n", + "Original Source: https://www.protectedplanet.net/en/thematic-areas/wdpa Accessed 29/12/2020. Shapefile, geodatabase or feature service.\n", + "\n", + "### FLINT\n", + "This dataset has been pre-processed/checked and is suitable for use in FLINT as at 29/12/2020. Please adhere to individual dataset licence conditions and citations. Processed data can be accessed here: https://datasets.mojaglobal.workers.dev/.\n", + "\n", + "### Licence\n", + "Read and accept terms and conditions information here: https://www.protectedplanet.net/en/legal\n", + "- Credit source
\n", + "- Only most recent version can be used
\n", + "- For Commercial use use subscription via https://www.ibat-alliance.org/
\n", + "- No sub-licensing, No redistribution, No distribution of derivative work, except with permission from protectedareas@unep-wcmc.org
\n", + "- No publication in downloadable format except with permission from protectedareas@unep-wcmc.org
\n", + "\n", + "See [Additional permissions](https://github.com/moja-global/Land-Sector-Datasets/blob/master/Additional-Permissions/Gmail%20-%20Thank%20you%20for%20useful%20input%20and%20follow%20up.pdf) related to this project.\n", + "\n", + "### Citation\n", + "UNEP-WCMC and IUCN (2020), Protected Planet: The World Database on Protected Areas (WDPA) [Online], September 2020, Cambridge, UK: UNEP-WCMC and IUCN. Available at: www.protectedplanet.net.\n", + "\n", + "### Original format\n", + "Global coverage, vector, shapefile
\n", + "Cordinate system EPSG: 4326 (WGS84)\n", + "\n", + "### Metadata\n", + "The WDPA is a joint project between UN Environment Programme and the International Union for Conservation of Nature (IUCN). The compilation and management of the WDPA is carried out by UN Environment Programme World Conservation Monitoring Centre (UNEP-WCMC), in collaboration with governments, non-governmental organisations, academia and industry. There are monthly updates of the data which are made available online through the ProtectedPlanet website where the data is both viewable and downloadable.
\n", + "\n", + "Data and information on the world's protected areas compiled in the WDPA are used for reporting to the Convention on Biological Diversity on progress towards reaching the Aichi Biodiversity Targets (particularly Target 11), to the UN to track progress towards the 2030 Sustainable Development Goals, to some of the Intergovernmental Science-Policy Platform on Biodiversity and Ecosystem Services (IPBES) core indicators, and other international assessments and reports including the Global Biodiversity Outlook, as well as for the publication of the United Nations List of Protected Areas. Every two years, UNEP-WCMC releases the Protected Planet Report on the status of the world's protected areas and recommendations on how to meet international goals and targets.
\n", + "\n", + "For more details on the WDPA please read through the [User Manual](http://wcmc.io/WDPA_Manual).\n", + "\n", + "### Notes\n", + "There are significant topological issues in this dataset including significant duplication and overlapping of reserve area types (National, International, Regional and Marine). Reserve areas vary from stratigh eco protection to sustainable game management and indigenous lands. To simplify this dataset for use in FLINT, only National reserves are included, excluding Marine, Regional and International reserve areas. Reserves are then split into IUCN Cateogory. Processing time is lengthy as the dataset is 200,000+ attributes. Processing this layer to suit your individual project needs is recommended.\n", + "\n", + "Gaps and overlaps are evident and can be fixed with code below. Please note, only gaps smaller than 0.1ha will be fixed as gaps larger than this could be valid.\n", + "\n", + "### Processing\n", + "Query National Reserves only and non-marine. Repair geometry, fix topologial error (remove overlaps), convert to geojson, EPSG:4326 (WGS84), remove/disable Z values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Import arcpy module\n", + "import arcpy\n", + "import os\n", + "\n", + "# Input variables\n", + "in_folder = r\"C:\\Data\\WDPA\"\n", + "scr_folder = r\"C:\\Data\\scratch.gdb\"\n", + "out_folder = r\"C:\\Data\\json\"\n", + "field = \"NAME IS NULL or WDPA_PID = ''\" #field that will be blank on appended gaps (any field will do)\n", + "smallest = \"1000\"\n", + "\n", + "# Input variables\n", + "in_folder = r\"C:\\Data\\WDPA\"\n", + "out_folder = r\"C:\\Data\\json\"\n", + "fullfield = \"NAME\" #this needs to be a field in the original table that is fully populated\n", + "smallest = \"20000\" #smallest area to be fixed in m2 - gaps and slithers\n", + "scr = arcpy.CreateFileGDB_management(out_folder, \"scratch\")\n", + "scr_folder = os.path.join(out_folder, \"scratch.gdb\")\n", + "\n", + "# Environments\n", + "workspace = in_folder\n", + "arcpy.env.workspace = workspace\n", + "arcpy.env.outputCoordinateSystem = arcpy.SpatialReference(4326)\n", + "arcpy.env.outputZFlag = \"Disabled\"\n", + "arcpy.env.overwriteOutput = True\n", + "field = fullfield + \" IS NULL or \" + fullfield + \" = ''\"\n", + "arcpy.env.parallelProcessingFactor = \"100%\"\n", + "\n", + "# List features to process\n", + "featureclasses = arcpy.ListFeatureClasses()\n", + "print(featureclasses)\n", + "\n", + "# Repair/check topology and make FLINT ready\n", + "for fc in featureclasses:\n", + " fcname = os.path.join(os.path.splitext(fc)[0])\n", + " outjson = os.path.join(out_folder, fcname)\n", + " whereclause = \"FID_\" + fcname + \" =-1 AND AREA_GEO <= \" + smallest\n", + " print(fcname + ' processing...')\n", + " \n", + " fLayer = \"project_Layer\"\n", + " arcpy.management.MakeFeatureLayer(fc, fLayer)\n", + " geomRepair = arcpy.management.RepairGeometry(fLayer, \"DELETE_NULL\", \"OGC\")[0]\n", + " arcpy.management.DeleteIdentical(fLayer, \"Shape\")\n", + " \n", + " projectIntersect = os.path.join(scr_folder, \"projectIntersect\")\n", + " arcpy.analysis.Intersect(fLayer, projectIntersect, \"ONLY_FID\")\n", + " \n", + " projectSingle = os.path.join(scr_folder, \"projectSingle\")\n", + " arcpy.management.MultipartToSinglepart(projectIntersect, projectSingle)\n", + "\n", + " dissolveSlither = os.path.join(scr_folder, \"dissolveSlither\")\n", + " arcpy.management.Dissolve(projectSingle, dissolveSlither, None, None,\"SINGLE_PART\")\n", + " \n", + " # Take action if no overlaps\n", + " if arcpy.management.GetCount(dissolveSlither)[0] == \"0\":\n", + " print('no overlaps detected...checking for gaps...')\n", + " \n", + " projectUnion = os.path.join(scr_folder, \"projectUnion\")\n", + " arcpy.analysis.Union(fLayer,projectUnion, \"ALL\", None, \"NO_GAPS\")\n", + " \n", + " unionSingle = os.path.join(scr_folder, \"unionSingle\")\n", + " arcpy.management.MultipartToSinglepart(projectUnion, unionSingle)\n", + " \n", + " arcpy.management.DeleteIdentical(unionSingle, \"Shape\")\n", + " arcpy.management.AddGeometryAttributes(unionSingle, \"AREA_GEODESIC\", None, \"SQUARE_METERS\")\n", + " \n", + " \n", + " uniSelect = os.path.join(scr_folder, \"uniSelect\")\n", + " arcpy.analysis.Select(unionSingle, uniSelect, whereclause)\n", + " \n", + " if arcpy.management.GetCount(uniSelect)[0] == \"0\":\n", + " \n", + " # Progress report no error\n", + " print(fcname, 'No gaps and overlaps. Repairing geometry and conversion to json...')\n", + " \n", + " # Process: Repair Geometry (non-simple geometry)\n", + " geomRepair = arcpy.management.RepairGeometry(fLayer, \"DELETE_NULL\", \"OGC\")[0]\n", + "\n", + " # Process: Features To JSON\n", + " arcpy.conversion.FeaturesToJSON(fLayer, outjson, \"NOT_FORMATTED\", \"NO_Z_VALUES\", \"NO_M_VALUES\", \"GEOJSON\", \"WGS84\", \"USE_FIELD_NAME\")\n", + "\n", + " print(outjson, '.geojson complete')\n", + " \n", + " else:\n", + " # Take action if gaps\n", + " print('gaps detected')\n", + "\n", + " appendGap = arcpy.management.Append(uniSelect, fLayer, \"NO_TEST\") \n", + " selectGap = arcpy.management.SelectLayerByAttribute(fLayer, \"NEW_SELECTION\", field)\n", + "\n", + " fixedlyr = os.path.join(scr_folder, \"fixedlyr\")\n", + " arcpy.management.Eliminate(selectGap, fixedlyr, \"LENGTH\")\n", + "\n", + " # Progress report \n", + " print(fcname, 'No overlaps but gaps detected and repaired. Repairing geometry and conversion to json...')\n", + "\n", + " # Process: Repair Geometry (non-simple geometry)\n", + " geomRepair = arcpy.management.RepairGeometry(fixedlyr, \"DELETE_NULL\", \"OGC\")[0]\n", + "\n", + " # Process: Features To JSON\n", + " arcpy.conversion.FeaturesToJSON(fixedlyr, outjson, \"NOT_FORMATTED\", \"NO_Z_VALUES\", \"NO_M_VALUES\", \"GEOJSON\", \"WGS84\", \"USE_FIELD_NAME\")\n", + "\n", + "\n", + " else:\n", + " print('Overlaps detected...')\n", + " # Fix overlaps\n", + " projectErase = os.path.join(scr_folder, \"projectErase\")\n", + " arcpy.analysis.Erase(fLayer, dissolveSlither, projectErase)\n", + " \n", + " arcpy.management.Append(dissolveSlither, projectErase, \"NO_TEST\")\n", + " \n", + " selectSlither = arcpy.management.SelectLayerByAttribute(projectErase, \"NEW_SELECTION\", field)\n", + " \n", + " eliminateSlither = os.path.join(scr_folder, \"eliminateSlither\")\n", + " arcpy.management.Eliminate(selectSlither, eliminateSlither, \"LENGTH\")\n", + " \n", + " print('Overlaps detected and fixed...checking for gaps...')\n", + " \n", + " projectUnion = os.path.join(scr_folder, \"projectUnion\")\n", + " arcpy.analysis.Union(eliminateSlither, projectUnion, \"ALL\", None, \"NO_GAPS\")\n", + " \n", + " unionSingle = os.path.join(scr_folder, \"unionSingle\")\n", + " arcpy.management.MultipartToSinglepart(projectUnion, unionSingle)\n", + " arcpy.management.DeleteIdentical(unionSingle, \"Shape\")\n", + " \n", + " arcpy.management.AddGeometryAttributes(unionSingle, \"AREA_GEODESIC\", None, \"SQUARE_METERS\")\n", + " \n", + " uniSelect = os.path.join(scr_folder, \"uniSelect\")\n", + " whereUnion= \"FID_eliminateSlither = -1 AND AREA_GEO <= \" + smallest\n", + " arcpy.analysis.Select(unionSingle, uniSelect, whereUnion)\n", + " \n", + " if arcpy.management.GetCount(uniSelect)[0] == \"0\":\n", + " \n", + " # Progress report no error\n", + " print(fcname, ' No gaps detected. Repairing geometry and conversion to json...')\n", + " \n", + " # Process: Repair Geometry (non-simple geometry)\n", + " geomRepair = arcpy.management.RepairGeometry(eliminateSlither, \"DELETE_NULL\", \"OGC\")[0]\n", + "\n", + " # Process: Features To JSON\n", + " arcpy.conversion.FeaturesToJSON(eliminateSlither, outjson, \"NOT_FORMATTED\", \"NO_Z_VALUES\", \"NO_M_VALUES\", \"GEOJSON\", \"WGS84\", \"USE_FIELD_NAME\")\n", + "\n", + " print(outjson, '.geojson complete')\n", + " \n", + " else:\n", + " # Take action if gaps\n", + " appendGap = arcpy.management.Append(uniSelect, eliminateSlither, \"NO_TEST\")\n", + " \n", + " selectGap = arcpy.management.SelectLayerByAttribute(eliminateSlither, \"NEW_SELECTION\", field)\n", + " \n", + " fixedlyr = os.path.join(scr_folder, \"fixedlyr\")\n", + " \n", + " arcpy.management.Eliminate(selectGap, fixedlyr, \"LENGTH\")\n", + " \n", + " print('gaps detected and repaired')\n", + " \n", + " # Progress report\n", + " print(fcname, 'Gaps and overlaps fixed. Repairing geometry and conversion to json...')\n", + " \n", + " # Process: Repair Geometry (non-simple geometry)\n", + " geomRepair = arcpy.management.RepairGeometry(fixedlyr, \"DELETE_NULL\", \"OGC\")[0]\n", + " \n", + " \n", + " # Process: Features To JSON\n", + " arcpy.conversion.FeaturesToJSON(fixedlyr, outjson, \"NOT_FORMATTED\", \"NO_Z_VALUES\", \"NO_M_VALUES\", \"GEOJSON\", \"WGS84\", \"USE_FIELD_NAME\")\n", + " print(outjson)\n", + "\n", + " # Process: Features To JSON\n", + " arcpy.conversion.FeaturesToJSON(fixedlyr, outjson, \"NOT_FORMATTED\", \"NO_Z_VALUES\", \"NO_M_VALUES\", \"GEOJSON\", \"WGS84\", \"USE_FIELD_NAME\")\n", + "\n", + "arcpy.management.Delete(scr_folder)\n", + "\n", + "arcpy.AddMessage(\"All done!\")\n", + "print('done')" + ] + } + ], + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Data/Climate/.ipynb_checkpoints/IPCC_ClimateZoneMap-checkpoint.ipynb b/Data/Climate/.ipynb_checkpoints/IPCC_ClimateZoneMap-checkpoint.ipynb new file mode 100644 index 000000000..6d197d363 --- /dev/null +++ b/Data/Climate/.ipynb_checkpoints/IPCC_ClimateZoneMap-checkpoint.ipynb @@ -0,0 +1,98 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Title: IPCC Climate Zone Map\n", + "\n", + "### Description\n", + "The Climatic Zone layer is defined based on the classification of IPCC (IPCC, 2006). The zones are defined by a set of rules based on:
\n", + "\n", + "- annual mean daily temperature,\n", + "- total annual precipitation,\n", + "- total annual potential evapo-transpiration (PET) and\n", + "- elevation.
\n", + "\n", + "The classification presented as Figure 3A.5.1 Classification scheme for default climate regions” (IPCC, 2006) could not be accessed in electronic form and generated from an independently developed set of base data layers. Climatic information on temperature and precipitation was provided by the 5 arc min. dataset Version 1.4 from the WorldClim project (Hijmans et al., 2005). PET was computed according to the temperature-based formula investigated by Oudin et al. (2005) and used by Kay & Davis (2008). The computation of the extraterrestrial radiation was based on Duffie & Beckman (1991) and Allen et al. (1994). The formulas were supplemented by the information provided by the “Solar Radiation Basis” Web-page of the University of Oregon: http://solardat.uoregon.edu/SolarRadiationBasics.html.\n", + "\n", + "### FLINT\n", + "This dataset has been checked/pre-processed and is suitable for use in FLINT. Please adhere to individual dataset licence conditions and citations. Processed data can be accessed here: [Land Sector Datasets](https://datasets.mojaglobal.workers.dev/) https://datasets.mojaglobal.workers.dev/
\n", + "\n", + "### Format\n", + "Extent: Global coverage
\n", + "Resolution: Raster 0.05-degree resolution (this can be resampled to any resolution)
\n", + "File type: geotiff (.tif) and geojson (.json)
\n", + "Cordinate system: EPSG:4326 (WGS84)
\n", + "Year: 2006
\n", + "Size: 24MB
\n", + "\n", + "### Original source\n", + "Downloaded from: https://esdac.jrc.ec.europa.eu/projects/RenewableEnergy/ Accessed 20/12/2020.
\n", + "Raster .rst 0.0833333333333333 degree pixels
\n", + "\n", + "### Licence\n", + "Creative Commons Attribution 4.0 International License\n", + "\n", + "### Citation\n", + "Intergovernmental Panel on Climate Change, (IPCC), (2006)., 2006 IPCC Guidelines for National Greenhouse Gas Inventories Volume 4: Agriculture, Forestry and Other Land Use. Available at: https://www.ipcc-nggip.iges.or.jp/public/2006gl/vol4.html\n", + "\n", + "### Metadata\n", + "More information: https://esdac.jrc.ec.europa.eu/projects/RenewableEnergy/\n", + "Value\tClass_name
\n", + "1\tWarm Temperate Moist
\n", + "2\tWarm Temperate Dry
\n", + "3\tCool Temperate Moist
\n", + "4\tCool Temperate Dry
\n", + "5\tPolar Moist
\n", + "6\tPolar Dry
\n", + "7\tBoreal Moist
\n", + "8\tBoreal Dry
\n", + "9\tTropical Montane
\n", + "\n", + "### Notes\n", + "Both raster and vector versions provided.\n", + "\n", + "\n", + "### Processing\n", + "Dataset converted to tiff, projection WGS84, and converted to vector (note Value and Class_name table above to matach codes. Code is provided below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Convert from .rst to tif and apply WGS84 and resample to 0.005\n", + "gdalwarp -t_srs EPSG:4326 -dstnodata 255.0 -tr 0.05 0.05 -r near -te -180.0 -90.0 180.0 90.0 -te_srs EPSG:4326 -of GTiff \"C:/Data/CLIMATE_ZONE.rst\" \"C:/Data/IPCC_ClimateZoneMap.tif\"\n", + "\n", + "# Convert to polygon\n", + "python3 -m gdal_polygonize C:/Data/tiff/IPCC_ClimateZoneMap.tif C:/Data/tiff/IPCC_ClimateZoneMap.geojson -b 1 -f \"GeoJSON\" IPCC_ClimateZoneMap CLASS_NAME \n", + "\n", + "# Check Topology - Run fix geometries in QGIS" + ] + } + ], + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Data/Climate/.ipynb_checkpoints/KoppenGeigerClimateChanges1901_2100-checkpoint.ipynb b/Data/Climate/.ipynb_checkpoints/KoppenGeigerClimateChanges1901_2100-checkpoint.ipynb new file mode 100644 index 000000000..a26120be3 --- /dev/null +++ b/Data/Climate/.ipynb_checkpoints/KoppenGeigerClimateChanges1901_2100-checkpoint.ipynb @@ -0,0 +1,192 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Title: Koppen-Geiger Climate Changes - 1901 - 2100\n", + "\n", + "### Description\n", + "Köppen climate classification is a widely used vegetation-based empirical climate classification system developed by German botanist-climatologist Wladimir Köppen. It's based on the idea that climate is best defined by native vegetation. This particular version of Köppen-Geiger shows the changes in the climate regions and biomes over time (from 1901 - 2100) using observations for 1901 - 2000 and the A1F1 IPCC climate scenario for 2001 - 2100. A1F1 is the worst case scenario future projection for climate change modeling. You can find out more information on how this was made by visiting World Maps of Köppen-Geiger Climate Classisification website.\n", + "\n", + "### FLINT\n", + "This dataset has been pre-processed/checked and is suitable for use in FLINT. Please adhere to individual dataset licence conditions and citations. Processed data can be accessed here: https://datasets.mojaglobal.workers.dev/
\n", + "\n", + "### Format\n", + "Extent: Global coverage
\n", + "Format: polygon geoJSON .json
\n", + "Cordinate system: EPSG:4326 (WGS84)
\n", + "Temporal Resolution: 1901-2100
\n", + "Size: 40 MB
\n", + "\n", + "### Original source\n", + "Original Source: http://koeppen-geiger.vu-wien.ac.at/shifts.htm or https://sos.noaa.gov/datasets/koppen-geiger-climate-changes-1901-2100/ Accessed 13/12/2020
\n", + "Viewer: https://www.arcgis.com/home/item.html?id=7a53584fa55643df969f93cec83788e1\n", + "\n", + "### Licence\n", + "Only non-commercial scientific or educational use. Please attribute using citation.\n", + "\n", + "### Citation\n", + "Rubel, F., and M. Kottek, 2010: Observed and projected climate shifts 1901-2100 depicted by world maps of the Köppen-Geiger climate classification. Meteorol. Z. , 19, 135-141. DOI: 10.1127/0941-2948/2010/0430. http://koeppen-geiger.vu-wien.ac.at/pdf/Paper_2010.pdf\n", + "\n", + "### Original format\n", + "Global coverage, vector, shapefile
\n", + "Cordinate system: Bassel\n", + "\n", + "### Metadata\n", + "http://koeppen-geiger.vu-wien.ac.at/shifts.htm or https://sos.noaa.gov/datasets/koppen-geiger-climate-changes-1901-2100/
\n", + "Climate scenarios available
\n", + "Observed: 1901-1925 1926-1950 1951-1975 1976-2000
\n", + "A1FI: 2001-2025 2026-2050 2051-2075 2076-2100
\n", + "A2: 2001-2025 2026-2050 2051-2075 2076-2100
\n", + "B1: 2001-2025 2026-2050 2051-2075 2076-2100
\n", + "B2: 2001-2025 2026-2050 2051-2075 2076-2100
\n", + "Each contains vector data for the respective period and emission scenario. Use the scheme below to convert the integers to climate classes:
\n", + "11 ... Af
\n", + "12 ... Am
\n", + "13 ... As
\n", + "14 ... Aw
\n", + "21 ... BWk
\n", + "22 ... BWh
\n", + "26 ... BSk
\n", + "27 ... BSh
\n", + "31 ... Cfa
\n", + "32 ... Cfb
\n", + "33 ... Cfc
\n", + "34 ... Csa
\n", + "35 ... Csb
\n", + "36 ... Csc
\n", + "37 ... Cwa
\n", + "38 ... Cwb
\n", + "39 ... Cwc
\n", + "41 ... Dfa
\n", + "42 ... Dfb
\n", + "43 ... Dfc
\n", + "44 ... Dfd
\n", + "45 ... Dsa
\n", + "46 ... Dsb
\n", + "47 ... Dsc
\n", + "48 ... Dsd
\n", + "49 ... Dwa
\n", + "50 ... Dwb
\n", + "51 ... Dwc
\n", + "52 ... Dwd
\n", + "61 ... EF
\n", + "62 ... ET
\n", + "\n", + "### Notes\n", + "The original layers contain topological errors (non-simple geometry) - and an overlapping region at the international time/date line in three of the climate models that are fixed in the json using the below code. Also note, some scenario datasets are simplified polygon type converted from grid, others are direct polygon conversion from grid - as per original downloaded 19/12/2020. Gaps in data are water bodies and are valid.\n", + "\n", + "### Processing\n", + "Repair geometry, fix topologial error (remove overlaps), convert to geojson, EPSG:4326 (WGS84), remove/disable Z values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import arcpy\n", + "import os\n", + "\n", + "#folder of feature classes to process\n", + "in_folder = r\"C:\\data\\KoeppenGeiger\\all\"\n", + "scr_folder = r\"C:\\data\\scratch.gdb\"\n", + "out_folder = r\"C:\\data\\json\\KoeppenGeiger\"\n", + "\n", + "# Set environments\n", + "workspace = in_folder\n", + "arcpy.env.workspace = workspace\n", + "arcpy.env.outputCoordinateSystem = arcpy.SpatialReference(4326)\n", + "arcpy.env.outputZFlag = \"Disabled\"\n", + "arcpy.env.overwriteOutput = True\n", + "\n", + "# Execute CreateFileGDB\n", + "if os.path.exists(r\"C:\\data\\scratch.gdb\"):\n", + " arcpy.Delete_management(r\"C:\\data\\scratch.gdb\")\n", + " scr = arcpy.CreateFileGDB_management(r\"C:\\data\", \"scratch\")\n", + "\n", + "featureclasses = arcpy.ListFeatureClasses()\n", + "print(featureclasses)\n", + "\n", + "# Iterate through all datasets, repair and convert to json\n", + "for fc in featureclasses:\n", + " fcname = os.path.join(os.path.splitext(fc)[0])\n", + " outjson = os.path.join(out_folder, fcname)\n", + " \n", + " # Process: Make Feature Layer\n", + " fLayer = \"project_Layer\"\n", + " arcpy.management.MakeFeatureLayer(fc, fLayer)\n", + "\n", + " # Process: Union - fill gaps and find overlaps\n", + " projectIntersect = os.path.join(scr_folder, \"projectIntersect\")\n", + " arcpy.analysis.Intersect(fLayer, projectIntersect, \"ONLY_FID\")\n", + "\n", + " # Process: Multipart To Singlepart - explode into single parts\n", + " projectSingle = os.path.join(scr_folder, \"projectSingle\")\n", + " arcpy.management.MultipartToSinglepart(projectIntersect, projectSingle)\n", + "\n", + " # Process: Select - select overlaps and slithers smaller than 0.00001 degrees (this may need to be checked)\n", + " intSelect = os.path.join(scr_folder, \"intSelect\")\n", + " arcpy.analysis.Select(projectSingle, intSelect)\n", + "\n", + " # Process: Dissolve - dissolve slithers and overlaps to single features\n", + " dissolveSlither = os.path.join(scr_folder, \"dissolveSlither\")\n", + " arcpy.management.Dissolve(intSelect, dissolveSlither, None, None,\"SINGLE_PART\")\n", + "\n", + " # Process: Erase overlaps\n", + " removeSlither = os.path.join(scr_folder, \"removeSlither\")\n", + " arcpy.analysis.Erase(fLayer, dissolveSlither, removeSlither)\n", + "\n", + " # Process: Append small slithers and gap fills to be merged into coincident polygons with largest boundary\n", + " appendSlither = arcpy.management.Append(dissolveSlither, removeSlither, \"NO_TEST\")\n", + "\n", + " # Process: Eliminate slither by merge into coincident polygons with largest boundary\n", + " eliminateSlither = os.path.join(scr_folder, \"eliminateSlither\")\n", + " selectSlither = arcpy.management.SelectLayerByAttribute(appendSlither, \"NEW_SELECTION\", \"OBJECTID IS NULL\")\n", + " arcpy.management.Eliminate(selectSlither, eliminateSlither, \"LENGTH\")\n", + " print(fcname, ' repairing...')\n", + "\n", + " # Process: Repair Geometry (non-simple geometry)\n", + " geomRepair = arcpy.management.RepairGeometry(eliminateSlither, \"DELETE_NULL\", \"OGC\")[0]\n", + "\n", + " # Process: Features To JSON\n", + " arcpy.conversion.FeaturesToJSON(eliminateSlither, outjson, \"NOT_FORMATTED\", \"NO_Z_VALUES\", \"NO_M_VALUES\", \"GEOJSON\", \"WGS84\", \"USE_FIELD_NAME\")\n", + " print(outjson, '.geojson complete')\n", + " \n", + "\n", + "arcpy.AddMessage(\"All done!\")\n", + "print('done')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Data/Climate/IPCC_ClimateZoneMap.ipynb b/Data/Climate/IPCC_ClimateZoneMap.ipynb index 6d197d363..8e757f855 100644 --- a/Data/Climate/IPCC_ClimateZoneMap.ipynb +++ b/Data/Climate/IPCC_ClimateZoneMap.ipynb @@ -76,7 +76,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -90,7 +90,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/Data/Climate/KoppenGeigerClimateChanges1901_2100.ipynb b/Data/Climate/KoppenGeigerClimateChanges1901_2100.ipynb index a26120be3..e15a971f3 100644 --- a/Data/Climate/KoppenGeigerClimateChanges1901_2100.ipynb +++ b/Data/Climate/KoppenGeigerClimateChanges1901_2100.ipynb @@ -170,7 +170,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -184,7 +184,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/Data/Soil/.ipynb_checkpoints/WorldSoilResources_FAO-checkpoint.ipynb b/Data/Soil/.ipynb_checkpoints/WorldSoilResources_FAO-checkpoint.ipynb new file mode 100644 index 000000000..51c639d54 --- /dev/null +++ b/Data/Soil/.ipynb_checkpoints/WorldSoilResources_FAO-checkpoint.ipynb @@ -0,0 +1,110 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Title: World Soil Resources Base Map FAO 2014\n", + "\n", + "### Description\n", + "The World Resource Base Map of World Soil Resources is available at 1:25 000 000 scale. This is the most general digital map of the World's soils, now using the international standard soil classification WRB. Available as a graphic or digital coverage.\n", + "Soil Type underpins the processes for estimating the changes in SOC as a result of changes to land use. Soil Type, when used in conjunction with climate data, is used for determining the IPCC Tier 1 SOC reference levels.\n", + "\n", + "### FLINT\n", + "This dataset has been pre-processed/checked and is suitable for use in FLINT. Please adhere to individual dataset licence conditions and citations. Processed data can be accessed here: https://datasets.mojaglobal.workers.dev/\n", + "\n", + "### Original source\n", + "Original spatial data sourced from: http://www.fao.org/soils-portal/data-hub/soil-maps-and-databases/other-global-soil-maps-and-databases/\n", + "World Soil Resources Coverage in Geographic Projection (ARC/Info Export format) \"wsrll\"\n", + "Reports: http://www.fao.org/soils-portal/data-hub/soil-classification/world-reference-base/en/\n", + "\n", + "### Licence\n", + "FAO encourages the use, reproduction and dissemination of material in this information product. Except where otherwise indicated, material may be copied, downloaded and printed for private study, research and teaching purposes, or for use in non-commercial products or services, provided that appropriate acknowledgement of FAO as the source and copyright holder is given and that FAO’s endorsement of users’ views, products or services is not implied in any way.\n", + "\n", + "### Citation\n", + "IUSS Working Group WRB. 2015. World Reference Base for Soil Resources 2014, update 2015. International soil classification system for naming soils and creating legends for soil maps. World Soil Resources Reports No. 106. FAO, Rome.\n", + "\n", + "### Format\n", + "Global coverage, vector, .geojson\n", + "Cordinate system EPSG: 4326 (WGS84)\n", + "Size: 237 MB\n", + "\n", + "### Metadata\n", + "http://www.fao.org/geonetwork/srv/en/main.home?uuid=2fb209d0-fd34-4e5e-a3d8-a13c241eb61b#\n", + "tags: climate , FRA , forests , ecological zone , land cover\n", + "\n", + "### Notes\n", + "Note the vector data is coarse resolution in some instances, with some detail in coastlines and some islands missing.\n", + "\n", + "### Processing\n", + "Repair geometry, fix topologial error (remove overlaps), convert to geojson, EPSG:4326 (WGS84), remove/disable Z values. View code below - originally processed in ArcGIS but can be converted to open source QGIS or GDAL (or others)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Import arcpy module\n", + "import arcpy\n", + "\n", + "# Local variables:\n", + "in_shp = r\"C:/Users/LennyJenny/Documents/ArcGIS/world/UNFCCC/downloads/test/wsrll.shp\"\n", + "Output_Coordinate_System = \"GCS_WGS_1984\"\n", + "output = \"C:/data/WorldSoilResources.geojson\"\n", + "\n", + "# output topological fix shapefile if topological error (optional)\n", + "in_shp_fix = r\"C:/data/wsrll_fix.shp\"\n", + "\n", + "# Set environments\n", + "arcpy.env.workspace = \"c:/data\"\n", + "arcpy.env.outputCoordinateSystem = arcpy.SpatialReference(4326)\n", + "arcpy.env.outputZFlag = \"Disabled\"\n", + "\n", + "# Process: Repair Geometry to remove self intersections and non-simple geometry\n", + "arcpy.RepairGeometry_management(in_shp, \"DELETE_NULL\")\n", + "\n", + "# Process: Count Overlapping Features to determine topological error\n", + "# Where count<2 = topological error which will require manual fix or batch clip overlapping areas\n", + "countname = r\"C:/data/overlap_count.shp\"\n", + "arcpy.analysis.CountOverlappingFeatures(in_shp, countname, min_overlap_count=2)\n", + "\n", + "# Process: Topoloogical fix: Find overlaps and clip from layer (non-manual, will produce gaps, this can be coded to not leave gaps later)\n", + "arcpy.analysis.Intersect(in_shp, \"in_memory/intersectbits\")\n", + "arcpy.analysis.Clip(in_shp, \"in_memory/intersectbits\", in_shp_fix)\n", + "\n", + "# Process: Features To JSON\n", + "arcpy.FeaturesToJSON_conversion(input, output, \"NOT_FORMATTED\", \"NO_Z_VALUES\", \"NO_M_VALUES\", \"GEOJSON\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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.7.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Data/Soil/WorldSoilResources_FAO.ipynb b/Data/Soil/WorldSoilResources_FAO.ipynb index 51c639d54..456d4590c 100644 --- a/Data/Soil/WorldSoilResources_FAO.ipynb +++ b/Data/Soil/WorldSoilResources_FAO.ipynb @@ -88,7 +88,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -102,7 +102,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.9" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/Oureachy_Naz_Task2/.ipynb_checkpoints/Naz_SDG_Mapping_Prototype_Documentation_Task2-checkpoint.md b/Oureachy_Naz_Task2/.ipynb_checkpoints/Naz_SDG_Mapping_Prototype_Documentation_Task2-checkpoint.md new file mode 100644 index 000000000..e4fab5f3e --- /dev/null +++ b/Oureachy_Naz_Task2/.ipynb_checkpoints/Naz_SDG_Mapping_Prototype_Documentation_Task2-checkpoint.md @@ -0,0 +1,36 @@ +# Sustainable Development Goals (SDG) Mapping Prototype + +This prototype provides a comprehensive overview of the mapping process, encompassing the dataset specifics, attributes under scrutiny, the reasoning behind the mapping, and the resultant findings. Within this document, we will employ datasets from diverse land sectors to delineate prototype mappings for the SDGs. + +In this prototype, the focus will be on these three SDGs below in relation to the chosen Datasets (Global Biodiversity Hotspot dataset, World Protected Areas dataset, and Climate dataset); +### - Global Biodiversity Hotspot Dataset - SDG 15 (Life on Land) and SDG 14 (Life Below Water) +#### Dataset Attributes: +The dataset utilized in this analysis has been responsibly provided by Conservation International (CI), a globally recognized environmental organization committed to safeguarding and preserving natural habitats and biodiversity on a global scale. + +#### Mapping Explanation: +The datasets included here hold particular relevance to two key Sustainable Development Goals (SDGs); the first is SDG 15 - Life on Land: This dataset contributes to SDG 15, which focuses on protecting and restoring life on land, including terrestrial ecosystems and biodiversity. The information contained within these datasets aids in the assessment and preservation of critical terrestrial habitats, which is essential for achieving SDG 15's objectives. The second is SDG 14 - Life Below Water: While the dataset primarily addresses terrestrial ecoregions, it indirectly impacts SDG 14 as well. The health of terrestrial ecosystems influences the quality and sustainability of adjacent marine environments, highlighting the interconnectedness of terrestrial and aquatic life. Protecting land-based habitats can have positive ripple effects on life below water, making it relevant to SDG 14. + +By mapping and analyzing the world's biodiversity hotspots and ecoregions, these datasets play a vital role in advancing these Sustainable Development Goals and promoting global biodiversity conservation and sustainability efforts. + +### - World Terrestrial Eco Regions Dataset - SDG 15 (Life on Land) and SDG 13 (Climate Actions) +#### Dataset Attributes: +The dataset used in this analysis has been obtained from the World Wide Fund (WWF) database, and it pertains to the mapping of Terrestrial Eco Regions worldwide. + +#### Mapping Explanation: +Both the Neotropic and Nearctic regions are home to a wide range of terrestrial ecosystems and species. SDG 15 focuses on protecting, restoring, and promoting sustainable use of terrestrial ecosystems and biodiversity. The conservation efforts in these regions contribute significantly to this goal. Also, Climate action (SDG 13) is relevant as these regions play a role in climate change mitigation and adaptation. Preservation of forests and other ecosystems in these regions can help sequester carbon and contribute to climate resilience. + +### - Climate Dataset - SDG 13 (Climate Action) +#### Dataset Attributes: +The values in this dataset attribute represent the different climate zones. They are defined by the Intergovernmental Panel on Climate Change (IPCC), the United Nations body for assessing the science related to climate change. The values to be considered include; +1. Warm Temperate Moist +2. Warm Temperate Dry +3. Cool Temperate Moist +4. Cool Temperate Dry +5. Polar Moist +6. Polar Dry +7. Boreal Moist +8. Boreal Dry +9. Tropical Montane + +#### Mapping Explanation: +The dataset has been correlated with the Sustainable Development Goal (SDG) focused on Climate Action (SDG 13). This particular SDG is dedicated to addressing and mitigating the impact of climate change on the planet and its ecosystems. It emphasizes the need for immediate and concerted efforts to combat climate change and its detrimental effects on life \ No newline at end of file diff --git a/Oureachy_Naz_Task2/.ipynb_checkpoints/Naz_SDG_Mapping_Task2-checkpoint.ipynb b/Oureachy_Naz_Task2/.ipynb_checkpoints/Naz_SDG_Mapping_Task2-checkpoint.ipynb new file mode 100644 index 000000000..363fcab7e --- /dev/null +++ b/Oureachy_Naz_Task2/.ipynb_checkpoints/Naz_SDG_Mapping_Task2-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Oureachy_Naz_Task2/Naz_SDG_Mapping_Prototype_Documentation_Task2.md b/Oureachy_Naz_Task2/Naz_SDG_Mapping_Prototype_Documentation_Task2.md new file mode 100644 index 000000000..e4fab5f3e --- /dev/null +++ b/Oureachy_Naz_Task2/Naz_SDG_Mapping_Prototype_Documentation_Task2.md @@ -0,0 +1,36 @@ +# Sustainable Development Goals (SDG) Mapping Prototype + +This prototype provides a comprehensive overview of the mapping process, encompassing the dataset specifics, attributes under scrutiny, the reasoning behind the mapping, and the resultant findings. Within this document, we will employ datasets from diverse land sectors to delineate prototype mappings for the SDGs. + +In this prototype, the focus will be on these three SDGs below in relation to the chosen Datasets (Global Biodiversity Hotspot dataset, World Protected Areas dataset, and Climate dataset); +### - Global Biodiversity Hotspot Dataset - SDG 15 (Life on Land) and SDG 14 (Life Below Water) +#### Dataset Attributes: +The dataset utilized in this analysis has been responsibly provided by Conservation International (CI), a globally recognized environmental organization committed to safeguarding and preserving natural habitats and biodiversity on a global scale. + +#### Mapping Explanation: +The datasets included here hold particular relevance to two key Sustainable Development Goals (SDGs); the first is SDG 15 - Life on Land: This dataset contributes to SDG 15, which focuses on protecting and restoring life on land, including terrestrial ecosystems and biodiversity. The information contained within these datasets aids in the assessment and preservation of critical terrestrial habitats, which is essential for achieving SDG 15's objectives. The second is SDG 14 - Life Below Water: While the dataset primarily addresses terrestrial ecoregions, it indirectly impacts SDG 14 as well. The health of terrestrial ecosystems influences the quality and sustainability of adjacent marine environments, highlighting the interconnectedness of terrestrial and aquatic life. Protecting land-based habitats can have positive ripple effects on life below water, making it relevant to SDG 14. + +By mapping and analyzing the world's biodiversity hotspots and ecoregions, these datasets play a vital role in advancing these Sustainable Development Goals and promoting global biodiversity conservation and sustainability efforts. + +### - World Terrestrial Eco Regions Dataset - SDG 15 (Life on Land) and SDG 13 (Climate Actions) +#### Dataset Attributes: +The dataset used in this analysis has been obtained from the World Wide Fund (WWF) database, and it pertains to the mapping of Terrestrial Eco Regions worldwide. + +#### Mapping Explanation: +Both the Neotropic and Nearctic regions are home to a wide range of terrestrial ecosystems and species. SDG 15 focuses on protecting, restoring, and promoting sustainable use of terrestrial ecosystems and biodiversity. The conservation efforts in these regions contribute significantly to this goal. Also, Climate action (SDG 13) is relevant as these regions play a role in climate change mitigation and adaptation. Preservation of forests and other ecosystems in these regions can help sequester carbon and contribute to climate resilience. + +### - Climate Dataset - SDG 13 (Climate Action) +#### Dataset Attributes: +The values in this dataset attribute represent the different climate zones. They are defined by the Intergovernmental Panel on Climate Change (IPCC), the United Nations body for assessing the science related to climate change. The values to be considered include; +1. Warm Temperate Moist +2. Warm Temperate Dry +3. Cool Temperate Moist +4. Cool Temperate Dry +5. Polar Moist +6. Polar Dry +7. Boreal Moist +8. Boreal Dry +9. Tropical Montane + +#### Mapping Explanation: +The dataset has been correlated with the Sustainable Development Goal (SDG) focused on Climate Action (SDG 13). This particular SDG is dedicated to addressing and mitigating the impact of climate change on the planet and its ecosystems. It emphasizes the need for immediate and concerted efforts to combat climate change and its detrimental effects on life \ No newline at end of file diff --git a/Oureachy_Naz_Task2/Naz_SDG_Mapping_Task2.ipynb b/Oureachy_Naz_Task2/Naz_SDG_Mapping_Task2.ipynb new file mode 100644 index 000000000..7048932f5 --- /dev/null +++ b/Oureachy_Naz_Task2/Naz_SDG_Mapping_Task2.ipynb @@ -0,0 +1,2285 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e37226e0-7a5b-4df6-98e9-811960ae352d", + "metadata": {}, + "source": [ + "# SDGs Prototype Mapping to bridge the Gap Between Land Sector Data and SDGs\n", + "\n", + "### Introduction\n", + "The 2030 Agenda for Sustainable Development, adopted by all United Nations Member States in 2015, provides a comprehensive framework for global peace and prosperity. Central to this agenda are the 17 Sustainable Development Goals (SDGs), representing a call to action for all nations, developed and developing, to work together. These goals encompass poverty eradication, improved health and education, reduced inequality, economic growth, climate change mitigation, and environmental preservation.\n", + "\n", + "The SDGs, established by the United Nations in 2015, aim to address global needs and ensure a sustainable future for generations to come.\n", + "\n", + "### Goal of this Prototype Mapping\n", + "The SDG prototype mapping seeks to analyze provided datasets to determine their alignment with specific SDGs. This alignment is a critical step in enabling informed decision-making to tackle global challenges effectively. \n", + "##### Below are the lists of the 17 United Nations' SDGs;\n", + "\n", + "GOAL 1: No Poverty\n", + "\n", + "GOAL 2: Zero Hunger\n", + "\n", + "GOAL 3: Good Health and Well-being\n", + "\n", + "GOAL 4: Quality Education\n", + "\n", + "GOAL 5: Gender Equality\n", + "\n", + "GOAL 6: Clean Water and Sanitation\n", + "\n", + "GOAL 7: Affordable and Clean Energy\n", + "\n", + "GOAL 8: Decent Work and Economic Growth\n", + "\n", + "GOAL 9: Industry, Innovation, and Infrastructure\n", + "\n", + "GOAL 10: Reduced Inequalities\n", + "\n", + "GOAL 11: Sustainable Cities and Communities\n", + "\n", + "GOAL 12: Responsible Consumption and Production\n", + "\n", + "GOAL 13: Climate Action\n", + "\n", + "GOAL 14: Life below Water\n", + "\n", + "GOAL 15: Life on Land\n", + "\n", + "GOAL 16: Peace, Justice, and Strong Institution\n", + "\n", + "GOAL 17: Partnerships for the Goals\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "535e2c4b-4d71-4dfc-91d6-0c1cdaa01a56", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialising and importing libraries used\n", + "\n", + "import geopandas as gpd\n", + "import io, requests\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "id": "98f1ab33-f75a-4f6a-8d35-c4898eb462bd", + "metadata": {}, + "source": [ + "### WORLD BIODIVERSITY HOTSPOT" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "6bd475c6-d81c-40de-8b21-5e6aa9014fea", + "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", + "
OBJECTIDNAMETypeShape_LengthShape_Areageometry
01Chilean Winter Rainfall and Valdivian Forestshotspot area200.70689140.754665MULTIPOLYGON (((-74.59792 -46.92502, -74.61111...
12Chilean Winter Rainfall and Valdivian Forestsouter limit191.174978186.085694POLYGON ((-70.30946 -22.96028, -70.48596 -22.7...
23Cape Floristic Regionhotspot area93.7901237.610383MULTIPOLYGON (((23.08672 -34.07310, 23.08538 -...
34Maputaland-Pondoland-Albanyhotspot area49.63141925.366584MULTIPOLYGON (((24.48767 -34.10045, 24.48800 -...
45New Caledoniahotspot area24.6371001.646954MULTIPOLYGON (((167.46053 -22.71228, 167.46161...
\n", + "
" + ], + "text/plain": [ + " OBJECTID NAME Type \\\n", + "0 1 Chilean Winter Rainfall and Valdivian Forests hotspot area \n", + "1 2 Chilean Winter Rainfall and Valdivian Forests outer limit \n", + "2 3 Cape Floristic Region hotspot area \n", + "3 4 Maputaland-Pondoland-Albany hotspot area \n", + "4 5 New Caledonia hotspot area \n", + "\n", + " Shape_Length Shape_Area geometry \n", + "0 200.706891 40.754665 MULTIPOLYGON (((-74.59792 -46.92502, -74.61111... \n", + "1 191.174978 186.085694 POLYGON ((-70.30946 -22.96028, -70.48596 -22.7... \n", + "2 93.790123 7.610383 MULTIPOLYGON (((23.08672 -34.07310, 23.08538 -... \n", + "3 49.631419 25.366584 MULTIPOLYGON (((24.48767 -34.10045, 24.48800 -... \n", + "4 24.637100 1.646954 MULTIPOLYGON (((167.46053 -22.71228, 167.46161... " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "world_biodiversity = gpd.read_file(r'/home/naza/Downloads/CI_BiodiversityHotspots.geojson')\n", + "world_biodiversity.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e27078b3-9685-486e-a1fa-75162ade7d04", + "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", + "
OBJECTIDNAMETypeShape_LengthShape_Areageometry
01Chilean Winter Rainfall and Valdivian Forestshotspot area200.70689140.754665MULTIPOLYGON (((-74.59792 -46.92502, -74.61111...
12Chilean Winter Rainfall and Valdivian Forestsouter limit191.174978186.085694POLYGON ((-70.30946 -22.96028, -70.48596 -22.7...
23Cape Floristic Regionhotspot area93.7901237.610383MULTIPOLYGON (((23.08672 -34.07310, 23.08538 -...
34Maputaland-Pondoland-Albanyhotspot area49.63141925.366584MULTIPOLYGON (((24.48767 -34.10045, 24.48800 -...
45New Caledoniahotspot area24.6371001.646954MULTIPOLYGON (((167.46053 -22.71228, 167.46161...
56New Caledoniaouter limit57.30471738.222164POLYGON ((164.35824 -19.10137, 164.32053 -19.0...
67Southwest Australiahotspot area60.85967233.934367MULTIPOLYGON (((117.88123 -35.17920, 117.87544...
78Succulent Karoohotspot area79.1178969.648439MULTIPOLYGON (((19.94758 -33.85045, 19.94773 -...
89Forests of East Australiahotspot area88.12899223.473995MULTIPOLYGON (((153.49344 -27.42185, 153.48857...
910Caucasushotspot area90.68990958.514955MULTIPOLYGON (((53.64732 36.85539, 53.64686 36...
1011Himalayahotspot area146.42066669.043477MULTIPOLYGON (((83.63718 29.26756, 83.64967 29...
1112Horn of Africaouter limit120.27468273.220040MULTIPOLYGON (((39.89708 16.32164, 39.90083 16...
1213Indo-Burmahotspot area402.030896203.319990MULTIPOLYGON (((100.57087 4.86481, 100.55511 4...
1314Indo-Burmaouter limit379.920372173.578229MULTIPOLYGON (((94.68272 16.29783, 94.68811 16...
1415Irano-Anatolianhotspot area184.77229090.307526MULTIPOLYGON (((56.54563 27.72321, 56.51865 27...
1516Japanhotspot area219.24289338.182343MULTIPOLYGON (((123.79903 24.03953, 123.80211 ...
1617Japanouter limit297.049059245.457896POLYGON ((143.38627 45.62484, 142.97525 45.662...
1718Mountains of Central Asiahotspot area107.06562493.244489MULTIPOLYGON (((75.66653 36.76604, 75.63583 36...
1819Mountains of Southwest Chinahotspot area116.78685224.424047MULTIPOLYGON (((94.36492 31.26755, 94.35851 31...
1920Philippineshotspot area241.95316524.601083MULTIPOLYGON (((119.39130 4.61894, 119.39078 4...
2021Philippinesouter limit295.862968137.641924POLYGON ((127.01715 4.93909, 127.02402 4.94458...
2122Western Ghats and Sri Lankahotspot area46.06144415.733402MULTIPOLYGON (((79.82289 7.94472, 79.82361 7.9...
2223California Floristic Provincehotspot area55.59927430.098119MULTIPOLYGON (((-115.37624 28.10790, -115.3693...
2324California Floristic Provinceouter limit53.23421735.372344POLYGON ((-116.73013 31.73940, -116.73152 31.7...
2425Caribbean Islandshotspot area230.58512419.818704MULTIPOLYGON (((-64.39832 11.72028, -64.39622 ...
2526Caribbean Islandsouter limit299.257659214.384415POLYGON ((-84.28348 17.55457, -84.19510 17.471...
2627Madrean Pine-Oak Woodlandshotspot area546.30072940.848314MULTIPOLYGON (((-96.61650 15.88247, -96.62143 ...
2728Mesoamericahotspot area451.71915295.763513MULTIPOLYGON (((-87.04617 5.55242, -87.04675 5...
2829Mesoamericaouter limit242.571690342.466874MULTIPOLYGON (((-106.80501 23.66897, -106.8008...
2930North American Coastal Plainhotspot area342.674109117.522193MULTIPOLYGON (((-97.73414 24.07666, -97.73487 ...
3031New Zealandouter limit278.308656557.797119MULTIPOLYGON (((180.00000 -28.51559, 180.00000...
3132Tumbes-Choco-Magdalenahotspot area187.60969322.329914MULTIPOLYGON (((-80.20981 -3.43196, -80.20917 ...
3233East Melanesian Islandsouter limit225.092613186.226067POLYGON ((150.43369 -0.87323, 150.38155 -0.860...
3334Sundalandhotspot area339.989621121.642368MULTIPOLYGON (((96.93003 -12.16986, 96.93164 -...
3435Eastern Afromontanehotspot area274.76666382.812834MULTIPOLYGON (((32.87497 -20.07615, 32.88673 -...
3536Atlantic Foresthotspot area300.835113107.978149MULTIPOLYGON (((-52.09801 -32.09873, -52.09585...
3637Polynesia-Micronesiahotspot area147.0189234.015096MULTIPOLYGON (((-144.32992 -27.57666, -144.331...
3738Tumbes-Choco-Magdalenaouter limit85.277625104.249366POLYGON ((-78.29707 7.68989, -78.29916 7.69846...
3839Horn of Africahotspot area248.899010137.275957MULTIPOLYGON (((39.93373 -6.90581, 39.93459 -6...
3940Sundalandouter limit427.143229328.745439MULTIPOLYGON (((118.53144 2.15269, 118.53130 2...
4041Guinean Forests of West Africahotspot area133.08195050.525510MULTIPOLYGON (((5.62957 -1.45728, 5.63351 -1.4...
4142Cerradohotspot area340.748166170.556404MULTIPOLYGON (((-55.29527 -22.90017, -55.31034...
4243Polynesia-Micronesiaouter limit413.9334701909.519333MULTIPOLYGON (((-140.60948 -21.71556, -140.606...
4344Coastal Forests of Eastern Africahotspot area140.78168224.271498MULTIPOLYGON (((35.44340 -23.86182, 35.44595 -...
4445Madagascar and the Indian Ocean Islandshotspot area85.87149951.558044MULTIPOLYGON (((44.22776 -25.22229, 44.23248 -...
4546Wallaceahotspot area277.27971827.491158MULTIPOLYGON (((122.85761 -10.96322, 122.85345...
4647Mediterranean Basinhotspot area681.817768212.727774MULTIPOLYGON (((-24.69949 14.89513, -24.70035 ...
4748New Zealandhotspot area129.42800529.364356MULTIPOLYGON (((158.96280 -54.49958, 158.96266...
4849Tropical Andeshotspot area411.682107129.491625MULTIPOLYGON (((-65.01836 -25.67424, -64.93745...
4950East Melanesian Islandshotspot area150.5677898.130046MULTIPOLYGON (((169.85451 -20.14125, 169.84250...
5051Madagascar and the Indian Ocean Islandsouter limit164.210642350.358797POLYGON ((58.15548 -3.70879, 58.13793 -3.66995...
5152Wallaceaouter limit334.190436170.498109POLYGON ((127.47139 4.80923, 127.44697 4.81936...
5253Mediterranean Basinouter limit564.971151676.679648POLYGON ((13.54803 45.79731, 13.54669 45.79722...
\n", + "
" + ], + "text/plain": [ + " OBJECTID NAME Type \\\n", + "0 1 Chilean Winter Rainfall and Valdivian Forests hotspot area \n", + "1 2 Chilean Winter Rainfall and Valdivian Forests outer limit \n", + "2 3 Cape Floristic Region hotspot area \n", + "3 4 Maputaland-Pondoland-Albany hotspot area \n", + "4 5 New Caledonia hotspot area \n", + "5 6 New Caledonia outer limit \n", + "6 7 Southwest Australia hotspot area \n", + "7 8 Succulent Karoo hotspot area \n", + "8 9 Forests of East Australia hotspot area \n", + "9 10 Caucasus hotspot area \n", + "10 11 Himalaya hotspot area \n", + "11 12 Horn of Africa outer limit \n", + "12 13 Indo-Burma hotspot area \n", + "13 14 Indo-Burma outer limit \n", + "14 15 Irano-Anatolian hotspot area \n", + "15 16 Japan hotspot area \n", + "16 17 Japan outer limit \n", + "17 18 Mountains of Central Asia hotspot area \n", + "18 19 Mountains of Southwest China hotspot area \n", + "19 20 Philippines hotspot area \n", + "20 21 Philippines outer limit \n", + "21 22 Western Ghats and Sri Lanka hotspot area \n", + "22 23 California Floristic Province hotspot area \n", + "23 24 California Floristic Province outer limit \n", + "24 25 Caribbean Islands hotspot area \n", + "25 26 Caribbean Islands outer limit \n", + "26 27 Madrean Pine-Oak Woodlands hotspot area \n", + "27 28 Mesoamerica hotspot area \n", + "28 29 Mesoamerica outer limit \n", + "29 30 North American Coastal Plain hotspot area \n", + "30 31 New Zealand outer limit \n", + "31 32 Tumbes-Choco-Magdalena hotspot area \n", + "32 33 East Melanesian Islands outer limit \n", + "33 34 Sundaland hotspot area \n", + "34 35 Eastern Afromontane hotspot area \n", + "35 36 Atlantic Forest hotspot area \n", + "36 37 Polynesia-Micronesia hotspot area \n", + "37 38 Tumbes-Choco-Magdalena outer limit \n", + "38 39 Horn of Africa hotspot area \n", + "39 40 Sundaland outer limit \n", + "40 41 Guinean Forests of West Africa hotspot area \n", + "41 42 Cerrado hotspot area \n", + "42 43 Polynesia-Micronesia outer limit \n", + "43 44 Coastal Forests of Eastern Africa hotspot area \n", + "44 45 Madagascar and the Indian Ocean Islands hotspot area \n", + "45 46 Wallacea hotspot area \n", + "46 47 Mediterranean Basin hotspot area \n", + "47 48 New Zealand hotspot area \n", + "48 49 Tropical Andes hotspot area \n", + "49 50 East Melanesian Islands hotspot area \n", + "50 51 Madagascar and the Indian Ocean Islands outer limit \n", + "51 52 Wallacea outer limit \n", + "52 53 Mediterranean Basin outer limit \n", + "\n", + " Shape_Length Shape_Area \\\n", + "0 200.706891 40.754665 \n", + "1 191.174978 186.085694 \n", + "2 93.790123 7.610383 \n", + "3 49.631419 25.366584 \n", + "4 24.637100 1.646954 \n", + "5 57.304717 38.222164 \n", + "6 60.859672 33.934367 \n", + "7 79.117896 9.648439 \n", + "8 88.128992 23.473995 \n", + "9 90.689909 58.514955 \n", + "10 146.420666 69.043477 \n", + "11 120.274682 73.220040 \n", + "12 402.030896 203.319990 \n", + "13 379.920372 173.578229 \n", + "14 184.772290 90.307526 \n", + "15 219.242893 38.182343 \n", + "16 297.049059 245.457896 \n", + "17 107.065624 93.244489 \n", + "18 116.786852 24.424047 \n", + "19 241.953165 24.601083 \n", + "20 295.862968 137.641924 \n", + "21 46.061444 15.733402 \n", + "22 55.599274 30.098119 \n", + "23 53.234217 35.372344 \n", + "24 230.585124 19.818704 \n", + "25 299.257659 214.384415 \n", + "26 546.300729 40.848314 \n", + "27 451.719152 95.763513 \n", + "28 242.571690 342.466874 \n", + "29 342.674109 117.522193 \n", + "30 278.308656 557.797119 \n", + "31 187.609693 22.329914 \n", + "32 225.092613 186.226067 \n", + "33 339.989621 121.642368 \n", + "34 274.766663 82.812834 \n", + "35 300.835113 107.978149 \n", + "36 147.018923 4.015096 \n", + "37 85.277625 104.249366 \n", + "38 248.899010 137.275957 \n", + "39 427.143229 328.745439 \n", + "40 133.081950 50.525510 \n", + "41 340.748166 170.556404 \n", + "42 413.933470 1909.519333 \n", + "43 140.781682 24.271498 \n", + "44 85.871499 51.558044 \n", + "45 277.279718 27.491158 \n", + "46 681.817768 212.727774 \n", + "47 129.428005 29.364356 \n", + "48 411.682107 129.491625 \n", + "49 150.567789 8.130046 \n", + "50 164.210642 350.358797 \n", + "51 334.190436 170.498109 \n", + "52 564.971151 676.679648 \n", + "\n", + " geometry \n", + "0 MULTIPOLYGON (((-74.59792 -46.92502, -74.61111... \n", + "1 POLYGON ((-70.30946 -22.96028, -70.48596 -22.7... \n", + "2 MULTIPOLYGON (((23.08672 -34.07310, 23.08538 -... \n", + "3 MULTIPOLYGON (((24.48767 -34.10045, 24.48800 -... \n", + "4 MULTIPOLYGON (((167.46053 -22.71228, 167.46161... \n", + "5 POLYGON ((164.35824 -19.10137, 164.32053 -19.0... \n", + "6 MULTIPOLYGON (((117.88123 -35.17920, 117.87544... \n", + "7 MULTIPOLYGON (((19.94758 -33.85045, 19.94773 -... \n", + "8 MULTIPOLYGON (((153.49344 -27.42185, 153.48857... \n", + "9 MULTIPOLYGON (((53.64732 36.85539, 53.64686 36... \n", + "10 MULTIPOLYGON (((83.63718 29.26756, 83.64967 29... \n", + "11 MULTIPOLYGON (((39.89708 16.32164, 39.90083 16... \n", + "12 MULTIPOLYGON (((100.57087 4.86481, 100.55511 4... \n", + "13 MULTIPOLYGON (((94.68272 16.29783, 94.68811 16... \n", + "14 MULTIPOLYGON (((56.54563 27.72321, 56.51865 27... \n", + "15 MULTIPOLYGON (((123.79903 24.03953, 123.80211 ... \n", + "16 POLYGON ((143.38627 45.62484, 142.97525 45.662... \n", + "17 MULTIPOLYGON (((75.66653 36.76604, 75.63583 36... \n", + "18 MULTIPOLYGON (((94.36492 31.26755, 94.35851 31... \n", + "19 MULTIPOLYGON (((119.39130 4.61894, 119.39078 4... \n", + "20 POLYGON ((127.01715 4.93909, 127.02402 4.94458... \n", + "21 MULTIPOLYGON (((79.82289 7.94472, 79.82361 7.9... \n", + "22 MULTIPOLYGON (((-115.37624 28.10790, -115.3693... \n", + "23 POLYGON ((-116.73013 31.73940, -116.73152 31.7... \n", + "24 MULTIPOLYGON (((-64.39832 11.72028, -64.39622 ... \n", + "25 POLYGON ((-84.28348 17.55457, -84.19510 17.471... \n", + "26 MULTIPOLYGON (((-96.61650 15.88247, -96.62143 ... \n", + "27 MULTIPOLYGON (((-87.04617 5.55242, -87.04675 5... \n", + "28 MULTIPOLYGON (((-106.80501 23.66897, -106.8008... \n", + "29 MULTIPOLYGON (((-97.73414 24.07666, -97.73487 ... \n", + "30 MULTIPOLYGON (((180.00000 -28.51559, 180.00000... \n", + "31 MULTIPOLYGON (((-80.20981 -3.43196, -80.20917 ... \n", + "32 POLYGON ((150.43369 -0.87323, 150.38155 -0.860... \n", + "33 MULTIPOLYGON (((96.93003 -12.16986, 96.93164 -... \n", + "34 MULTIPOLYGON (((32.87497 -20.07615, 32.88673 -... \n", + "35 MULTIPOLYGON (((-52.09801 -32.09873, -52.09585... \n", + "36 MULTIPOLYGON (((-144.32992 -27.57666, -144.331... \n", + "37 POLYGON ((-78.29707 7.68989, -78.29916 7.69846... \n", + "38 MULTIPOLYGON (((39.93373 -6.90581, 39.93459 -6... \n", + "39 MULTIPOLYGON (((118.53144 2.15269, 118.53130 2... \n", + "40 MULTIPOLYGON (((5.62957 -1.45728, 5.63351 -1.4... \n", + "41 MULTIPOLYGON (((-55.29527 -22.90017, -55.31034... \n", + "42 MULTIPOLYGON (((-140.60948 -21.71556, -140.606... \n", + "43 MULTIPOLYGON (((35.44340 -23.86182, 35.44595 -... \n", + "44 MULTIPOLYGON (((44.22776 -25.22229, 44.23248 -... \n", + "45 MULTIPOLYGON (((122.85761 -10.96322, 122.85345... \n", + "46 MULTIPOLYGON (((-24.69949 14.89513, -24.70035 ... \n", + "47 MULTIPOLYGON (((158.96280 -54.49958, 158.96266... \n", + "48 MULTIPOLYGON (((-65.01836 -25.67424, -64.93745... \n", + "49 MULTIPOLYGON (((169.85451 -20.14125, 169.84250... \n", + "50 POLYGON ((58.15548 -3.70879, 58.13793 -3.66995... \n", + "51 POLYGON ((127.47139 4.80923, 127.44697 4.81936... \n", + "52 POLYGON ((13.54803 45.79731, 13.54669 45.79722... " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "world_biodiversity = gpd.read_file(r'/home/naza/Downloads/CI_BiodiversityHotspots.geojson')\n", + "world_biodiversity" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "8076eb2c-0f04-4a4a-a9f5-50773c94e296", + "metadata": {}, + "outputs": [], + "source": [ + "# Functions defined for mapping each datasets\n", + "# For Biodiversity Hotspot\n", + "def map_biodiversity_hotspot_to_sdg(row):\n", + " # Some biodiversity hotspots using the \"NAME\" row from the list above\n", + " marine_biodiversity_hotspots = [\n", + " 'Chilean Winter Rainfall and Valdivian Forests', \n", + " 'Indo-Burma', \n", + " 'Japan', \n", + " 'Mesoamerica', \n", + " 'Horn of Africa',\n", + " 'Sundaland',\n", + " 'Mediterranean Basin',\n", + " 'Coastal Forests of Eastern Africa'\n", + " ]\n", + " \n", + " # verify whether this hotspot is known for marine or land biodiversity\n", + " if row['NAME'] in marine_biodiversity_hotspots:\n", + " return \"SDG #14: Life below Water\"\n", + " else:\n", + " return \"SDG #15: Life on Land\"" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "fddd9c80-96be-44d8-b9d8-030003f0e7c5", + "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", + "
OBJECTIDNAMETypeShape_LengthShape_AreageometrySDG_MAPPING
01Chilean Winter Rainfall and Valdivian Forestshotspot area200.70689140.754665MULTIPOLYGON (((-74.59792 -46.92502, -74.61111...SDG #14: Life below Water
12Chilean Winter Rainfall and Valdivian Forestsouter limit191.174978186.085694POLYGON ((-70.30946 -22.96028, -70.48596 -22.7...SDG #14: Life below Water
23Cape Floristic Regionhotspot area93.7901237.610383MULTIPOLYGON (((23.08672 -34.07310, 23.08538 -...SDG #15: Life on Land
34Maputaland-Pondoland-Albanyhotspot area49.63141925.366584MULTIPOLYGON (((24.48767 -34.10045, 24.48800 -...SDG #15: Life on Land
45New Caledoniahotspot area24.6371001.646954MULTIPOLYGON (((167.46053 -22.71228, 167.46161...SDG #15: Life on Land
\n", + "
" + ], + "text/plain": [ + " OBJECTID NAME Type \\\n", + "0 1 Chilean Winter Rainfall and Valdivian Forests hotspot area \n", + "1 2 Chilean Winter Rainfall and Valdivian Forests outer limit \n", + "2 3 Cape Floristic Region hotspot area \n", + "3 4 Maputaland-Pondoland-Albany hotspot area \n", + "4 5 New Caledonia hotspot area \n", + "\n", + " Shape_Length Shape_Area \\\n", + "0 200.706891 40.754665 \n", + "1 191.174978 186.085694 \n", + "2 93.790123 7.610383 \n", + "3 49.631419 25.366584 \n", + "4 24.637100 1.646954 \n", + "\n", + " geometry \\\n", + "0 MULTIPOLYGON (((-74.59792 -46.92502, -74.61111... \n", + "1 POLYGON ((-70.30946 -22.96028, -70.48596 -22.7... \n", + "2 MULTIPOLYGON (((23.08672 -34.07310, 23.08538 -... \n", + "3 MULTIPOLYGON (((24.48767 -34.10045, 24.48800 -... \n", + "4 MULTIPOLYGON (((167.46053 -22.71228, 167.46161... \n", + "\n", + " SDG_MAPPING \n", + "0 SDG #14: Life below Water \n", + "1 SDG #14: Life below Water \n", + "2 SDG #15: Life on Land \n", + "3 SDG #15: Life on Land \n", + "4 SDG #15: Life on Land " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Implement the mapping function defined and save the datasets \n", + "world_biodiversity['SDG_MAPPING'] = world_biodiversity.apply(map_biodiversity_hotspot_to_sdg, axis=1)\n", + "world_biodiversity.to_file('CI_BiodiversityHotspots_Mapped.geojson', driver='GeoJSON')\n", + "#world_biodiversity\n", + "world_biodiversity.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "afbee9dc-d3a2-4a4c-aa1d-1520cb4a0b37", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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qZEjR8rHx0f79u3T+vXrJUkVK1bUyJEj9cYbb+i5557Tww8/LEl68MEHrWOcPn1aTZo0Udu2bfX000+rSJEiN6xr9OjRslgsGjx4sE6dOqWJEyeqYcOGio+Pt87csYc9tV3LGKPmzZtr9erV6tatm6pXr67ly5fr5Zdf1tGjRzVhwgSb/uvWrdOCBQvUs2dPBQYG6v3331erVq106NChG4ZAFy9eVExMjPbt26fevXurZMmS+uqrr9S5c2edO3dO/fr1U8WKFTVr1iz1799fxYsX18CBAyVJhQoVynLM8PBwSdLs2bNVp06d25rtdv3r4sKFC1q1apViYmJUvHhxu8a4fPmyYmNjlZqaqj59+ig0NFRHjx7VkiVLdO7cOQUHBztc15w5c5ScnKznn39eFotF77zzjp544gkdOHDArplHycnJ+ueffyRJZ86csV6ONnXq1Bvud/LkST344IO6cOGC+vbtqwIFCmjGjBlq3ry55s+fr5YtW0r693lt0KCBDh06pL59+6pYsWKaNWuWVq1adcPxvby81LJlSy1YsECffPKJzQzChQsXKjU1VW3btpX072yn5s2ba926dXruuedUsWJF/fHHH5owYYL27t2rhQsX2oy9atUqffnll+rdu7cKFiyoiIgIrVixQu3atVODBg309ttvS5J27dql9evXZxkuSdKrr76qxMREHTlyxPp7EBAQoICAALVs2VLz5s3T+PHjbULJuXPnyhijDh063PDxS9KlS5esz821UlJSMrWtXLlSTZo0UalSpTR8+HBdvHhRH3zwgerUqaMtW7YoIiJCTzzxhPbu3au5c+dqwoQJKliwoKR/f39u9p52LXvei6ZPn64uXbqodu3aGjNmjE6ePKlJkyZp/fr12rp1q0JCQvT888/r2LFjWrFihWbNmmVzjFt5PgAAdwkDAMD/sGnTphlJZuPGjdn2CQ4ONjVq1LDeHzZsmLn2n8AJEyYYSebvv//OdoyNGzcaSWbatGmZtkVHRxtJZsqUKVlui46Ott5fvXq1kWTuuecek5SUZG3/8ssvjSQzadIka1t4eLjp1KnTTce8UW2dOnUy4eHh1vsLFy40ksyoUaNs+j355JPGYrGYffv2WdskGW9vb5u233//3UgyH3zwQaZjXWvixIlGkvnvf/9rbbt8+bKJiooyAQEBNo89PDzcPProozcczxhj0tPTree6SJEipl27dmby5Mnm4MGDmfo6+rrIeFwvvvhipn6nT582f//9t/WWmppqjDFm69atRpL56quvblr79a5/XhISEowkU6BAAXPmzBlr+6JFi4wk8+23395wvIzX1fU3Dw8PM3r06Ez9r39tvfjii0aSWbt2rbUtOTnZlCxZ0kRERJi0tDRjzP89r19++aW13/nz502ZMmWMJLN69epsH+Py5cuzfCxNmzY1pUqVst6fNWuW8fDwsKnFGGOmTJliJJn169db2zIe444dO2z69uvXzwQFBZmrV6/e9JxdW/Ojjz5qU/P1tS9dutSmPTIy0uZ3MTtZPTfX3659rVavXt0ULlzYnD592tr2+++/Gw8PD9OxY0dr27vvvmskmYSEBJvj2fOeZu970eXLl03hwoVNlSpVzMWLF639lixZYiSZN954w9rWq1cvm/fWDPY8HwCAuxOX7wEA3F5AQMANv20tY4HgRYsW3fLCzD4+PllempSdjh072lwi9uSTT6po0aL6/vvvb+n49vr++++VJ08e9e3b16Z94MCBMsZo6dKlNu0NGzZU6dKlrfcjIyMVFBR002+h+/777xUaGqp27dpZ27y8vNS3b1+lpKRozZo1DtdusVi0fPlyjRo1Svny5dPcuXPVq1cvhYeHq02bNg5/A9m1r4ukpCRr2/VKlSqlQoUKWW+LFy+WJOtMqOXLl+vChQsOP56stGnTRvny5bPez5j5Zu+3/r3xxhtasWKFVqxYoXnz5qldu3Z69dVXb3qZ1Pfff6/77rtPDz30kLUtICBAzz33nP766y/t3LnT2q9o0aI261blzZtXzz333E1rq1+/vgoWLKh58+ZZ286ePasVK1aoTZs21ravvvpKFStWVIUKFfTPP/9Yb/Xr15ckrV692mbc6OjoTGuShYSE6Pz581qxYsVN67JHw4YNVaxYMZtvMty+fbu2bdump59+2q4xWrRoYX1urr1lXIKX4fjx44qPj1fnzp2VP39+a3tkZKQaNWpk13uEI+9pN3sv2rRpk06dOqWePXvarMH16KOPqkKFClle4plVPc58PgAA7oNQCgDg9lJSUrJcIyhDmzZtVKdOHT377LMqUqSI2rZtqy+//NKhgOqee+5xaFHzsmXL2ty3WCwqU6ZMtuspOcvBgwdVrFixTOejYsWK1u3XKlGiRKYx8uXLp7Nnz970OGXLls30DW/ZHcdePj4+evXVV7Vr1y4dO3ZMc+fO1QMPPGC9fMsR174uMv6b1aVUixYt0ooVK/Tee+/ZtJcsWVIDBgzQ559/roIFCyo2NlaTJ0++6XpSN3L9+c4IqG52vjNUrVpVDRs2VMOGDfXUU0/pv//9rx577DENGTJEf//9d7b7HTx4UOXLl8/Ufv3zdfDgQZUpUybTmmxZ7Xs9T09PtWrVSosWLbKuDbVgwQJduXLFJpT6888/tWPHDpsgsFChQipXrpykf9cqu1bJkiUzHatnz54qV66cmjRpouLFi6tr1652r4WWFQ8PD3Xo0EELFy60BpCzZ8+Wr6+vWrdubdcYxYsXtz43196uD9QyznV2z8c///yj8+fP3/BYjryn3ey96Eb1VKhQwa7fZWc/HwAA90EoBQBwa0eOHFFiYqLKlCmTbR8/Pz/99NNPWrlypZ555hlt27ZNbdq0UaNGjZSWlmbXcRxZB8pe1/+PfwZ7a3KGa9fPuZa5blH03FC0aFG1bdtWP/30k8qWLasvv/xSV69etWvf618XZcqUkaenp7Zv356pb3R0tBo2bKhatWpl2jZu3Dht27ZNr7zyii5evKi+ffuqcuXKOnLkyC09ppw43w0aNNClS5f022+/3fIYztK2bVslJydbZ+R9+eWXqlChgqpVq2btk56erqpVq2Y5q2jFihXq2bOnzZhZ/e4VLlxY8fHxWrx4sXUNtSZNmqhTp063XHvHjh2VkpKihQsXyhijOXPm6LHHHrultcNymjPe05wpJ54PAIB7IJQCALi1jAV3Y2Njb9jPw8NDDRo00Pjx47Vz506NHj1aq1atsl4qlF1AdKv+/PNPm/vGGO3bt8/mG9ny5cuX5SVp189McKS28PBwHTt2LNPljLt377Zud4bw8HD9+eefmWZmOPs40r+XBUZGRurKlStZLiSdletfF/7+/oqJidGaNWtsvlHMHlWrVtVrr72mn376SWvXrtXRo0c1ZcoUxx5EDsoI6rKaBZYhPDxce/bsydR+/fMVHh6u/fv3ZwrJsto3K3Xr1lXRokU1b948/fPPP1q1apXNLClJKl26tM6cOaMGDRpkObPInllZ0r/fPNisWTN99NFH2r9/v55//nnNnDlT+/bty3afG/0uValSRTVq1NDs2bO1du1aHTp0SM8884xdtTgi41xn93wULFhQ/v7+N633Zu9pGW72XnSjevbs2WPzu3yjem7l+QAAuD9CKQCA21q1apXefPNNlSxZ8obfjnXmzJlMbdWrV5ck62VGGf8T6Oi6RdmZOXOmTTA0f/58HT9+XE2aNLG2lS5dWr/88osuX75sbVuyZEmmr2t3pLamTZsqLS1NH374oU37hAkTZLFYbI5/O5o2baoTJ07YrB909epVffDBBwoICFB0dLTDY/755586dOhQpvZz585pw4YNypcvX7bf3Het7F4Xb7zxhtLS0vT0009nGeBcH8QkJSVlmplVtWpVeXh4WF83d4IlS5ZIks1spOs1bdpUv/32mzZs2GBtO3/+vD799FNFRERYLzFr2rSpjh07pvnz51v7XbhwQZ9++qldtXh4eOjJJ5/Ut99+q1mzZunq1auZQqmnnnpKR48e1WeffZZp/4sXL9700jXp32/DvP64kZGRknTD58bf3/+Gl18+88wz+uGHHzRx4kQVKFDAab8v1ypatKiqV6+uGTNm2PxOb9++XT/88IOaNm1qU6+U+Xffnve0DDd7L7r33ntVuHBhTZkyxWbfpUuXateuXXr00UdvWs+tPh8AAPd369+lDADAHWTp0qXavXu3rl69qpMnT2rVqlVasWKFwsPDtXjxYpsFeq83cuRI/fTTT3r00UcVHh6uU6dO6aOPPlLx4sWtCz+XLl1aISEhmjJligIDA+Xv76/7778/y/Vs7JE/f3499NBD6tKli06ePKmJEyeqTJky6t69u7XPs88+q/nz56tx48Z66qmntH//fv33v/+1WXjc0dqaNWumevXq6dVXX9Vff/2latWq6YcfftCiRYv04osvZhr7Vj333HP65JNP1LlzZ23evFkRERGaP3++1q9fr4kTJ95wja/s/P7772rfvr2aNGmihx9+WPnz59fRo0c1Y8YMHTt2TBMnTsx0+Zsjr4uHH35YH374ofr06aOyZcuqQ4cOqlChgi5fvqy9e/dq9uzZ8vb2VmhoqKR/w63evXurdevWKleunK5evapZs2YpT548atWq1e2dwFu0du1aXbp0SdK/wcTixYu1Zs0atW3bVhUqVMh2vyFDhmju3Llq0qSJ+vbtq/z582vGjBlKSEjQ119/bV0brHv37vrwww/VsWNHbd68WUWLFtWsWbOUN29eu2ts06aNPvjgAw0bNkxVq1a1rluV4ZlnntGXX36pF154QatXr1adOnWUlpam3bt368svv9Ty5ct177333vAYzz77rM6cOaP69eurePHiOnjwoD744ANVr1490/GuVatWLc2bN08DBgxQ7dq1FRAQoGbNmlm3t2/fXoMGDdI333yjHj16yMvLy+7H7Yh3331XTZo0UVRUlLp166aLFy/qgw8+UHBwsIYPH25TryS9+uqratu2rby8vNSsWTO73tMy3Oy9yMvLS2+//ba6dOmi6OhotWvXTidPntSkSZMUERGh/v37Z6qnb9++io2NVZ48edS2bdtbfj4AAHeB3PviPwAAbt+0adNsvlbd29vbhIaGmkaNGplJkybZfNV5hmHDhtl8bfmPP/5oWrRoYYoVK2a8vb1NsWLFTLt27czevXtt9lu0aJGpVKmS8fT0NJLMtGnTjDHGREdHm8qVK2dZX3R0tM1Xxmd8DfvcuXPN0KFDTeHChY2fn5959NFHzcGDBzPtP27cOHPPPfcYHx8fU6dOHbNp06ZMY96otk6dOmX6ivvk5GTTv39/U6xYMePl5WXKli1r3n33XZOenm7TT5Lp1atXpprCw8NNp06dsny81zp58qTp0qWLKViwoPH29jZVq1a11nX9eI8++qhd440dO9ZER0ebokWLGk9PT5MvXz5Tv359M3/+fJu+t/K6yLB161bTsWNHU6JECePt7W38/f1NZGSkGThwoNm3b5+134EDB0zXrl1N6dKlja+vr8mfP7+pV6+eWbly5U0fy/XPS0JCgpFk3n333Ux9JZlhw4bdcLyM19X1j7lChQpm9OjR5vLlyzb9s3oO9+/fb5588kkTEhJifH19zX333WeWLFmS6VgHDx40zZs3N3nz5jUFCxY0/fr1M8uWLTOSzOrVq7N9jBnS09NNWFiYkWRGjRqV5eO5fPmyefvtt03lypWNj4+PyZcvn6lVq5YZMWKESUxMtDk3Wb1G58+fbx555BFTuHBh4+3tbUqUKGGef/55c/z48Uzn7NqaU1JSTPv27U1ISIiRlGX9TZs2NZLMzz//nGXtWcmuTmP+77W6ceNGm/aVK1eaOnXqGD8/PxMUFGSaNWtmdu7cmWn/N99809xzzz3Gw8PDSDIJCQl2vac5+l40b948U6NGDePj42Py589vOnToYI4cOWLT5+rVq6ZPnz6mUKFCxmKxWN9n7Xk+AAB3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JOXPn1+StHnzZl25ckUNGza09qlQoYJKlCihDRs23NaxAAAAAAAAkHscninVtm1bLVmyRHnz5tVTTz2l119/XVFRUbddSHp6ul588UXVqVNHVapUkSSdOHFC3t7eCgkJselbpEgRnThxIstxUlNTlZqaar2flJR027UBAAAAAADAuRwOpfLkyaMvv/xSsbGxypMnj9MK6dWrl7Zv365169bd1jhjxozRiBEjnFQVAAAAAAAAcoLDl+9lXLbnzECqd+/eWrJkiVavXq3ixYtb20NDQ3X58mWdO3fOpv/JkycVGhqa5VhDhw5VYmKi9Xb48GGn1QkAAAAAAADnsGum1Pvvv6/nnntOvr6+ev/992/Yt2/fvnYf3BijPn366JtvvlFcXJxKlixps71WrVry8vLSjz/+qFatWkmS9uzZo0OHDmV7yaCPj498fHzsrgEAAAAAAACuZzHGmJt1KlmypDZt2qQCBQpkCo5sBrNYdODAAbsP3rNnT82ZM0eLFi1S+fLlre3BwcHy8/OTJPXo0UPff/+9pk+frqCgIPXp00eS9PPPP9t1jKSkJAUHBysxMVFBQUF214a715zKlXO7BABurP1tfikIAAAAcKezN4uxa6ZUQkJClj/fro8//liSFBMTY9M+bdo0de7cWZI0YcIEeXh4qFWrVkpNTVVsbKw++ugjp9UAAAAAAAAA13N4oXNnsmOSlnx9fTV58mRNnjzZBRUBAAAAAADAFewKpQYMGGD3gOPHj7/lYgAAAAAAAHB3sCuU2rp1q839LVu26OrVq9Z1oPbu3as8efKoVq1azq8QAAAAAAAAbseuUGr16tXWn8ePH6/AwEDNmDFD+fLlkySdPXtWXbp00cMPP5wzVQIAAAAAAMCteDi6w7hx4zRmzBhrICVJ+fLl06hRozRu3DinFgcAAAAAAAD35HAolZSUpL///jtT+99//63k5GSnFAUAAAAAAAD35nAo1bJlS3Xp0kULFizQkSNHdOTIEX399dfq1q2bnnjiiZyoEQAAAAAAAG7GrjWlrjVlyhS99NJLat++va5cufLvIJ6e6tatm959912nFwgAAAAAAAD343AolTdvXn300Ud69913tX//fklS6dKl5e/v7/TiAAAAAAAA4J4cDqUy+Pv7K3/+/NafAQAAAAAAAHs5vKZUenq6Ro4cqeDgYIWHhys8PFwh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c+aoVKlSGjp0qN11bdiwQXXq1JEkrV271vpzhrS0NPn5+alv375q2LDhDcfas2ePjh8/br0VLlzY7jrsERoaavMtNvv379dDDz2k8PBwFShQwKnHAgDAndwNn0POnTunjh07qkGDBnYf3xF8DvlXvXr1lJKSok2bNlnb1q5dq9DQUP3666+6dOmStX316tUqUaKESpcu7bL6jDE2gRlwVzMAYIw5e/askWTi4uJu2C88PNxMmDAhU/sbb7xhPDw8zO7du40xxmzYsMFIMpMmTcpynPT0dLtrCw0NNVu3bjXGGFOlShWzdOnSbPt26tTJtGjRIlP76tWrjSRz9uxZu4/ryPgZJJlvvvnG+vO1t2HDhhljjDl06JBp3bq1CQ4ONvny5TPNmzc3CQkJNzxuXFycqV27tvH29jahoaFm8ODB5sqVK9bt0dHRpk+fPubll182+fLlM0WKFLEeLzvDhg0z1apVy3b7zJkzTa1atUxAQIApUqSIadeunTl58qR1e8Y5XblypalVq5bx8/MzUVFR1tdAhjFjxpjChQubgIAA07VrVzN48OAbHhcAcPdx988hGdq0aWNee+21m/4bfKvj58TnkIx/75csWWKqVq1qfHx8zP3332/++OMPm35r1641Dz30kPH19TXFixc3ffr0MSkpKdbt1z93Bw8eNM2bNzf+/v4mMDDQtG7d2pw4ccIYY8y5c+eMh4eH2bhxozHGmLS0NJMvXz5z//33W/efNWuWKV68eLZ1Fy1a1IwZM8Z6f9CgQaZXr16mYsWKZvXq1db2unXrmk6dOhljbvzZJyEhIdM5zdgvLS3NvPXWWyYiIsL4+vqayMhI89VXX2U6h99//72pWbOm8fLysqkBuJsxUwqAJCkgIEABAQFauHChUlNTHd6/X79+MsZo0aJFkqS5c+cqICBAPXv2zLK/xWK54Xhjx45VSEiIQkJCdOLECUVHRyskJETbt2/XU089pZCQEK1bt87hOqtXr66iRYuqUaNGNpcDSNL06dNvWpcjjh8/rsqVK2vgwIE6fvy4XnrpJV25ckWxsbEKDAzU2rVrtX79egUEBKhx48a6fPlyluMcPXpUTZs2Ve3atfX777/r448/1tSpUzVq1CibfjNmzJC/v79+/fVXvfPOOxo5cqRWrFhxy/VfuXJFb775pn7//XctXLhQf/31lzp37pyp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eUTz589Xhw4d1Lt3b509e9bab926dXr44Yfl5+ensLAw9e3bV+fPn5ckvfLKK7r//vszjV2tWjWNHDnSev/zzz9XxYoV5evrqwoVKuijjz66YW1r1qzRfffdJx8fHxUtWlRDhgzR1atXrdtjYmLUu3fvG56niIgIjRo1Sh07dlRAQIDCw8O1ePFi/f3332rRooUCAgIUGRmpTZs22Rz7Ro83Y9y33npLXbt2VWBgoEqUKKFPP/3Uuj2719T1fvnlF73zzjsaP368xo8fr4cfflglSpRQrVq19Nprr2np0qU2/T/++GOVLl1a3t7eKl++vGbNmmWzffz48apatar8/f0VFhamnj17KiUlJdtz/Pvvv6tevXoKDAxUUFCQatWqlelcAACArBFKAQDg5gICAhQQEKCFCxcqNTX1lsd5/fXXtXPnTi1dulS7du3Sxx9/rIIFC0qSfvvtN0nSypUrdfz4cS1YsECSlJycrE6dOmndunX65ZdfVLZsWTVt2lTJyck3PNarr76ql156SfHx8SpXrpzatWtnDVMuXbqkWrVq6bvvvtP27dv13HPP6ZlnnrHWkGHGjBny9PTUb7/9pkmTJmn8+PH6/PPPsz1m69atderUKS1dulSbN29WzZo11aBBA505c8bhc9W/f38lJydrxYoVkqT9+/ercePGatWqlbZt26Z58+Zp3bp16t27tySpQ4cO+u2337R//37rGDt27NC2bdvUvn17SdLs2bP1xhtvaPTo0dq1a5feeustvf7665oxY0aWNRw9elRNmzZV7dq19fvvv+vjjz/W1KlTNWrUKIfP04QJE1SnTh1t3bpVjz76qJ555hl17NhRTz/9tLZs2aLSpUurY8eO1jDrZo83w7hx43Tvvfdq69at6tmzp3r06KE9e/ZIyv41db25c+cqICBAPXv2zHK7xWKx/vzNN9+oX79+GjhwoLZv367nn39eXbp00erVq619PDw89P7772vHjh2aMWOGVq1apUGDBmU5tvTvc1e8eHFt3LhRmzdv1pAhQ+Tl5ZVtfwAAcA0DAADc3vz5802+fPmMr6+vefDBB83QoUPN77//bt2ekJBgJJmtW7da286ePWskmdWrVxtjjGnWrJnp0qVLluNntX9W0tLSTGBgoPn222+tbZLMN998YzPO559/bt2+Y8cOI8ns2rUr23EfffRRM3DgQOv96OhoU7FiRZOenm5tGzx4sKlYsaL1fnh4uJkwYYIxxpi1a9eaoKAgc+nSJZtxS5cubT755JNsj3tt7de6ePGikWTefvttY4wx3bp1M88995xNn7Vr1xoPDw9z8eJFY4wx1apVMyNHjrRuHzp0qLn//vttapkzZ47NGG+++aaJiooyxmR+Dl555RVTvnx5m3MwefJkExAQYNLS0hw6T08//bT1/vHjx40k8/rrr1vbNmzYYCSZ48eP2/14rx83PT3dFC5c2Hz88cdZPp7sNG7c2ERGRtq0jRs3zvj7+1tv586dM8YY8+CDD5ru3bvb9G3durVp2rRptuN/9dVXpkCBAtb706ZNM8HBwdb7gYGBZvr06TesEQAAZI2ZUgAA3AVatWqlY8eOafHixWrcuLHi4uJUs2ZNTZ8+3e4xevTooS+++ELVq1fXoEGD9PPPP990n5MnT6p79+4qW7asgoODFRQUpJSUFB06dOiG+0VGRlp/Llq0qCTp1KlTkqS0tDS9+eabqlq1qvLnz6+AgAAtX74805gPPPCAzSyZqKgo/fnnn0pLS8t0vN9//10pKSkqUKCAdWZZQECAEhISbGYv2cv8/xlDGcf//fffNX36dJuxY2NjlZ6eroSEBEn/zriZM2eOdf+5c+eqQ4cOkqTz589r//796tatm80Yo0aNyra+Xbt2KSoqyuYc1KlTRykpKTpy5IhD5+na56NIkSKSpKpVq2Zqy3iO7Hm8149rsVgUGhpqHeN2dO3aVfHx8frkk090/vx56/Oxa9cu1alTx6ZvnTp1tGvXLuv9lStXqkGDBrrnnnsUGBioZ555RqdPn9aFCxeyPNaAAQP07LPPqmHDhho7duwtvV4AALhbeeZ2AQAAwDV8fX3VqFEjNWrUSK+//rqeffZZDRs2TJ07d5aHx79/pzLXrCV05coVm/2bNGmigwcP6vvvv9eKFSvUoEED9erVS++99162x+zUqZNOnz6tSZMmKTw8XD4+PoqKitLly5dvWOu1lz9lBCbp6emSpHfffVeTJk3SxIkTrWv/vPjiizcd80ZSUlJUtGhR6/pZ1woJCXF4vIyQI2NdpJSUFD3//PPq27dvpr4lSpSQJLVr106DBw/Wli1bdPHiRR0+fFht2rSx7i9Jn332Waa1p/LkyeNwfY7K6vm40XNkz+O9foyMcTLGsFfZsmW1bt06XblyxTpeSEiIQkJCbMI3e/z111967LHH1KNHD40ePVr58+fXunXr1K1bN12+fFl58+bNtM/w4cPVvn17fffdd1q6dKmGDRumL774Qi1btnTo2AAA3I0IpQAAuEtVqlTJusB4oUKFJEnHjx9XjRo1JMlm0fMMhQoVUqdOndSpUyc9/PDDevnll/Xee+/J29tbkjLNQlq/fr0++ugjNW3aVJJ0+PBh/fPPP7dV9/r169WiRQs9/fTTkv4NQvbu3atKlSrZ9Pv1119t7mesaZVViFOzZk2dOHFCnp6eioiIuK36JGnixIkKCgpSw4YNrePv3LlTZcqUyXaf4sWLKzo6WrNnz9bFixfVqFEjFS5cWNK/M5GKFSumAwcOWGdP3UzFihX19ddfyxhjDY3Wr1+vwMBAFS9e3NrPkfNkL3se781k95q6Xrt27fTBBx/oo48+Ur9+/W7Yt2LFilq/fr06depkbVu/fr31tbN582alp6dr3Lhx1qD2yy+/vGmt5cqVU7ly5dS/f3+1a9dO06ZNI5QCAMAOhFIAALi506dPq3Xr1uratasiIyMVGBioTZs26Z133lGLFi0kSX5+fnrggQc0duxYlSxZUqdOndJrr71mM84bb7yhWrVqqXLlykpNTdWSJUtUsWJFSVLhwoXl5+enZcuWqXjx4vL19VVwcLDKli2rWbNm6d5771VSUpJefvll+fn53dbjKVu2rObPn6+ff/5Z+fLl0/jx43Xy5MlModShQ4c0YMAAPf/889qyZYs++OADjRs3LssxGzZsqKioKD3++ON65513VK5cOR07dkzfffedWrZsqXvvvTfbes6dO6cTJ04oNTVVe/fu1SeffKKFCxdq5syZ1llWgwcP1gMPPKDevXvr2Weflb+/v3bu3KkVK1boww8/tI7VoUMHDRs2TJcvX9aECRNsjjNixAj17dtXwcHBaty4sVJTU7Vp0yadPXtWAwYMyFRXz549NXHiRPXp00e9e/fWnj17NGzYMA0YMMAauDh6nuxl7+O9kexeU9eLiorSwIEDNXDgQB08eFBPPPGEwsLCdPz4cU2dOlUWi8X6eF9++WU99dRTqlGjhho2bKhvv/1WCxYs0MqVKyVJZcqU0ZUrV/TBBx+oWbNmWr9+vaZMmZJtjRcvXtTLL7+sJ598UiVLltSRI0e0ceNGtWrV6hbOGgAAd6FcXdEKAADkuEuXLpkhQ4aYmjVrmuDgYJM3b15Tvnx589prr5kLFy5Y++3cudNERUUZPz8/U716dfPDDz/YLHT+5ptvmooVKxo/Pz+TP39+06JFC3PgwAHr/p999pkJCwszHh4eJjo62hhjzJYtW8y9995rfH19TdmyZc1XX31ls8C4MVkvdH6jBddPnz5tWrRoYQICAkzhwoXNa6+9Zjp27GhatGhh3Sc6Otr07NnTvPDCCyYoKMjky5fPvPLKKzYLel9fR1JSkunTp48pVqyY8fLyMmFhYaZDhw7m0KFD2Z5bSdabr6+vKV26tOnUqZPZvHlzpr6//fabadSokQkICDD+/v4mMjLSjB492qbP2bNnjY+Pj8mbN69JTk7ONMbs2bNN9erVjbe3t8mXL5+pW7euWbBgQbbnLi4uztSuXdt4e3ub0NBQM3jwYHPlypXbOk8Zj/vaBd6zOvbNHm9W41arVs0MGzbMej+r11R25s2bZ2JiYkxwcLDx8vIyxYsXN+3btze//PKLTb+PPvrIlCpVynh5eZly5cqZmTNn2mwfP368KVq0qPHz8zOxsbFm5syZRpI5e/asMcZ2ofPU1FTTtm1bExYWZry9vU2xYsVM7969rYu5AwCAG7MYc83iEQAAALhrxMTEqHr16po4cWJulwIAAO5CfPseAAAAAAAAXI5QCgAAAAAAAC7H5XsAAAAAAABwOWZKAQAAAAAAwOUIpQAAAAAAAOByhFIAAAAAAABwOUIpAAAAAAAAuByhFAAAAAAAAFyOUAoAAAAAAAAuRygFAAAAAAAAlyOUAgAAAAAAgMsRSgEAAAAAAMDl/h/53Qh65knnUAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Data visualisation using Bar Chart\n", + "sdg_biodiversity_count = world_biodiversity['SDG_MAPPING'].value_counts()\n", + "plt.figure(figsize=(12, 6))\n", + "sdg_biodiversity_count.plot(kind='bar', color=['brown', 'peru'])\n", + "plt.title('Distribution of SDGs in Biodiversity Hotspots')\n", + "plt.xlabel('Sustainable Development Goals')\n", + "plt.ylabel('Number of Biodiversity Hotspots')\n", + "plt.xticks(rotation=0)\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "691e81ea-aa33-4aab-a7c2-877b93557ec6", + "metadata": {}, + "source": [ + "### TERRESTRIAL ECOLOGICAL REGIONS" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "9a67d32c-8d35-48ee-a347-ecd2eacffd59", + "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", + "
OBJECTID_1OBJECTIDAREAECO_NAMEREALMBIOMEECO_NUMECO_IDECO_SYMGBL_STAT...G200_BIOMEG200_STATarea_km2eco_codeBIOME_1GBL_STAT_1REALM_1Shape_LengthShape_Areageometry
01129.802942Northern Mesoamerican Pacific mangrovesNT144614041191...008174NT1404Neotropics0.2194750.002769POLYGON ((-112.30433 29.33480, -112.29035 29.3...
12211.977824Northern Mesoamerican Pacific mangrovesNT144614041191...008174NT1404Neotropics0.1932890.001111POLYGON ((-112.19639 29.20719, -112.19669 29.2...
23377301.372760Sinaloan dry forestsNT22860228981...2177362NT0228Neotropics111.9514146.879188POLYGON ((-108.40314 28.29783, -108.41069 28.3...
344215.489182Northern Mesoamerican Pacific mangrovesNT144614041191...008174NT1404Neotropics1.2736540.019701POLYGON ((-110.58808 27.85878, -110.59068 27.8...
45519.639089Northern Mesoamerican Pacific mangrovesNT144614041191...008174NT1404Neotropics0.3630680.001791POLYGON ((-110.53048 27.31542, -110.55385 27.3...
..................................................................
1434614347149191.688307Aleutian Islands tundraNA11251102533...0012141NA1102Nearctic0.0618220.000221POLYGON ((178.30938 51.98459, 178.30050 51.992...
14347143481492010.182745Aleutian Islands tundraNA11251102533...0012141NA1102Nearctic0.1953310.001331POLYGON ((177.71160 51.95987, 177.71102 51.964...
1434814349149214.357807Aleutian Islands tundraNA11251102533...0012141NA1102Nearctic0.1200400.000570POLYGON ((178.36743 51.96625, 178.37353 51.969...
14349143501492230.425075Aleutian Islands tundraNA11251102533...0012141NA1102Nearctic0.3952230.003964POLYGON ((178.33270 51.82403, 178.32769 51.827...
143501435114923307.562192Aleutian Islands tundraNA11251102533...0012141NA1102Nearctic2.0511910.039813POLYGON ((178.72436 51.64820, 178.71963 51.652...
\n", + "

14351 rows Ă— 22 columns

\n", + "
" + ], + "text/plain": [ + " OBJECTID_1 OBJECTID AREA \\\n", + "0 1 1 29.802942 \n", + "1 2 2 11.977824 \n", + "2 3 3 77301.372760 \n", + "3 4 4 215.489182 \n", + "4 5 5 19.639089 \n", + "... ... ... ... \n", + "14346 14347 14919 1.688307 \n", + "14347 14348 14920 10.182745 \n", + "14348 14349 14921 4.357807 \n", + "14349 14350 14922 30.425075 \n", + "14350 14351 14923 307.562192 \n", + "\n", + " ECO_NAME REALM BIOME ECO_NUM ECO_ID \\\n", + "0 Northern Mesoamerican Pacific mangroves NT 14 4 61404 \n", + "1 Northern Mesoamerican Pacific mangroves NT 14 4 61404 \n", + "2 Sinaloan dry forests NT 2 28 60228 \n", + "3 Northern Mesoamerican Pacific mangroves NT 14 4 61404 \n", + "4 Northern Mesoamerican Pacific mangroves NT 14 4 61404 \n", + "... ... ... ... ... ... \n", + "14346 Aleutian Islands tundra NA 11 2 51102 \n", + "14347 Aleutian Islands tundra NA 11 2 51102 \n", + "14348 Aleutian Islands tundra NA 11 2 51102 \n", + "14349 Aleutian Islands tundra NA 11 2 51102 \n", + "14350 Aleutian Islands tundra NA 11 2 51102 \n", + "\n", + " ECO_SYM GBL_STAT ... G200_BIOME G200_STAT area_km2 eco_code \\\n", + "0 119 1 ... 0 0 8174 NT1404 \n", + "1 119 1 ... 0 0 8174 NT1404 \n", + "2 98 1 ... 2 1 77362 NT0228 \n", + "3 119 1 ... 0 0 8174 NT1404 \n", + "4 119 1 ... 0 0 8174 NT1404 \n", + "... ... ... ... ... ... ... ... \n", + "14346 53 3 ... 0 0 12141 NA1102 \n", + "14347 53 3 ... 0 0 12141 NA1102 \n", + "14348 53 3 ... 0 0 12141 NA1102 \n", + "14349 53 3 ... 0 0 12141 NA1102 \n", + "14350 53 3 ... 0 0 12141 NA1102 \n", + "\n", + " BIOME_1 GBL_STAT_1 REALM_1 Shape_Length Shape_Area \\\n", + "0 Neotropics 0.219475 0.002769 \n", + "1 Neotropics 0.193289 0.001111 \n", + "2 Neotropics 111.951414 6.879188 \n", + "3 Neotropics 1.273654 0.019701 \n", + "4 Neotropics 0.363068 0.001791 \n", + "... ... ... ... ... ... \n", + "14346 Nearctic 0.061822 0.000221 \n", + "14347 Nearctic 0.195331 0.001331 \n", + "14348 Nearctic 0.120040 0.000570 \n", + "14349 Nearctic 0.395223 0.003964 \n", + "14350 Nearctic 2.051191 0.039813 \n", + "\n", + " geometry \n", + "0 POLYGON ((-112.30433 29.33480, -112.29035 29.3... \n", + "1 POLYGON ((-112.19639 29.20719, -112.19669 29.2... \n", + "2 POLYGON ((-108.40314 28.29783, -108.41069 28.3... \n", + "3 POLYGON ((-110.58808 27.85878, -110.59068 27.8... \n", + "4 POLYGON ((-110.53048 27.31542, -110.55385 27.3... \n", + "... ... \n", + "14346 POLYGON ((178.30938 51.98459, 178.30050 51.992... \n", + "14347 POLYGON ((177.71160 51.95987, 177.71102 51.964... \n", + "14348 POLYGON ((178.36743 51.96625, 178.37353 51.969... \n", + "14349 POLYGON ((178.33270 51.82403, 178.32769 51.827... \n", + "14350 POLYGON ((178.72436 51.64820, 178.71963 51.652... \n", + "\n", + "[14351 rows x 22 columns]" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "terrestrial_eco_regions = gpd.read_file(r'/home/naza/Downloads/TerrestrialEcoregionsoftheWorld_WWF.geojson')\n", + "terrestrial_eco_regions" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "18b67a42-f8a3-43ac-8f6b-2699ebfc737e", + "metadata": {}, + "outputs": [], + "source": [ + "# Functions defined for mapping each datasets (terrestrial ecological regions)\n", + "def map_terrestrial_regions_to_sdg(row):\n", + " return \"SDG #15: Life on Land & SDG #13: Climate Actions\"\n", + "# This is because all the zones mapped are most relevant to the SDG; Life on Land" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "6ab3a05d-4cc5-457e-884c-cb8b947f5ab3", + "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", + "
OBJECTID_1OBJECTIDAREAECO_NAMEREALMBIOMEECO_NUMECO_IDECO_SYMGBL_STAT...G200_STATarea_km2eco_codeBIOME_1GBL_STAT_1REALM_1Shape_LengthShape_AreageometrySDG_MAPPING
01129.802942Northern Mesoamerican Pacific mangrovesNT144614041191...08174NT1404Neotropics0.2194750.002769POLYGON ((-112.30433 29.33480, -112.29035 29.3...SDG #15: Life on Land & SDG #13: Climate Actions
12211.977824Northern Mesoamerican Pacific mangrovesNT144614041191...08174NT1404Neotropics0.1932890.001111POLYGON ((-112.19639 29.20719, -112.19669 29.2...SDG #15: Life on Land & SDG #13: Climate Actions
23377301.372760Sinaloan dry forestsNT22860228981...177362NT0228Neotropics111.9514146.879188POLYGON ((-108.40314 28.29783, -108.41069 28.3...SDG #15: Life on Land & SDG #13: Climate Actions
344215.489182Northern Mesoamerican Pacific mangrovesNT144614041191...08174NT1404Neotropics1.2736540.019701POLYGON ((-110.58808 27.85878, -110.59068 27.8...SDG #15: Life on Land & SDG #13: Climate Actions
45519.639089Northern Mesoamerican Pacific mangrovesNT144614041191...08174NT1404Neotropics0.3630680.001791POLYGON ((-110.53048 27.31542, -110.55385 27.3...SDG #15: Life on Land & SDG #13: Climate Actions
..................................................................
1434614347149191.688307Aleutian Islands tundraNA11251102533...012141NA1102Nearctic0.0618220.000221POLYGON ((178.30938 51.98459, 178.30050 51.992...SDG #15: Life on Land & SDG #13: Climate Actions
14347143481492010.182745Aleutian Islands tundraNA11251102533...012141NA1102Nearctic0.1953310.001331POLYGON ((177.71160 51.95987, 177.71102 51.964...SDG #15: Life on Land & SDG #13: Climate Actions
1434814349149214.357807Aleutian Islands tundraNA11251102533...012141NA1102Nearctic0.1200400.000570POLYGON ((178.36743 51.96625, 178.37353 51.969...SDG #15: Life on Land & SDG #13: Climate Actions
14349143501492230.425075Aleutian Islands tundraNA11251102533...012141NA1102Nearctic0.3952230.003964POLYGON ((178.33270 51.82403, 178.32769 51.827...SDG #15: Life on Land & SDG #13: Climate Actions
143501435114923307.562192Aleutian Islands tundraNA11251102533...012141NA1102Nearctic2.0511910.039813POLYGON ((178.72436 51.64820, 178.71963 51.652...SDG #15: Life on Land & SDG #13: Climate Actions
\n", + "

14351 rows Ă— 23 columns

\n", + "
" + ], + "text/plain": [ + " OBJECTID_1 OBJECTID AREA \\\n", + "0 1 1 29.802942 \n", + "1 2 2 11.977824 \n", + "2 3 3 77301.372760 \n", + "3 4 4 215.489182 \n", + "4 5 5 19.639089 \n", + "... ... ... ... \n", + "14346 14347 14919 1.688307 \n", + "14347 14348 14920 10.182745 \n", + "14348 14349 14921 4.357807 \n", + "14349 14350 14922 30.425075 \n", + "14350 14351 14923 307.562192 \n", + "\n", + " ECO_NAME REALM BIOME ECO_NUM ECO_ID \\\n", + "0 Northern Mesoamerican Pacific mangroves NT 14 4 61404 \n", + "1 Northern Mesoamerican Pacific mangroves NT 14 4 61404 \n", + "2 Sinaloan dry forests NT 2 28 60228 \n", + "3 Northern Mesoamerican Pacific mangroves NT 14 4 61404 \n", + "4 Northern Mesoamerican Pacific mangroves NT 14 4 61404 \n", + "... ... ... ... ... ... \n", + "14346 Aleutian Islands tundra NA 11 2 51102 \n", + "14347 Aleutian Islands tundra NA 11 2 51102 \n", + "14348 Aleutian Islands tundra NA 11 2 51102 \n", + "14349 Aleutian Islands tundra NA 11 2 51102 \n", + "14350 Aleutian Islands tundra NA 11 2 51102 \n", + "\n", + " ECO_SYM GBL_STAT ... G200_STAT area_km2 eco_code BIOME_1 \\\n", + "0 119 1 ... 0 8174 NT1404 \n", + "1 119 1 ... 0 8174 NT1404 \n", + "2 98 1 ... 1 77362 NT0228 \n", + "3 119 1 ... 0 8174 NT1404 \n", + "4 119 1 ... 0 8174 NT1404 \n", + "... ... ... ... ... ... ... ... \n", + "14346 53 3 ... 0 12141 NA1102 \n", + "14347 53 3 ... 0 12141 NA1102 \n", + "14348 53 3 ... 0 12141 NA1102 \n", + "14349 53 3 ... 0 12141 NA1102 \n", + "14350 53 3 ... 0 12141 NA1102 \n", + "\n", + " GBL_STAT_1 REALM_1 Shape_Length Shape_Area \\\n", + "0 Neotropics 0.219475 0.002769 \n", + "1 Neotropics 0.193289 0.001111 \n", + "2 Neotropics 111.951414 6.879188 \n", + "3 Neotropics 1.273654 0.019701 \n", + "4 Neotropics 0.363068 0.001791 \n", + "... ... ... ... ... \n", + "14346 Nearctic 0.061822 0.000221 \n", + "14347 Nearctic 0.195331 0.001331 \n", + "14348 Nearctic 0.120040 0.000570 \n", + "14349 Nearctic 0.395223 0.003964 \n", + "14350 Nearctic 2.051191 0.039813 \n", + "\n", + " geometry \\\n", + "0 POLYGON ((-112.30433 29.33480, -112.29035 29.3... \n", + "1 POLYGON ((-112.19639 29.20719, -112.19669 29.2... \n", + "2 POLYGON ((-108.40314 28.29783, -108.41069 28.3... \n", + "3 POLYGON ((-110.58808 27.85878, -110.59068 27.8... \n", + "4 POLYGON ((-110.53048 27.31542, -110.55385 27.3... \n", + "... ... \n", + "14346 POLYGON ((178.30938 51.98459, 178.30050 51.992... \n", + "14347 POLYGON ((177.71160 51.95987, 177.71102 51.964... \n", + "14348 POLYGON ((178.36743 51.96625, 178.37353 51.969... \n", + "14349 POLYGON ((178.33270 51.82403, 178.32769 51.827... \n", + "14350 POLYGON ((178.72436 51.64820, 178.71963 51.652... \n", + "\n", + " SDG_MAPPING \n", + "0 SDG #15: Life on Land & SDG #13: Climate Actions \n", + "1 SDG #15: Life on Land & SDG #13: Climate Actions \n", + "2 SDG #15: Life on Land & SDG #13: Climate Actions \n", + "3 SDG #15: Life on Land & SDG #13: Climate Actions \n", + "4 SDG #15: Life on Land & SDG #13: Climate Actions \n", + "... ... \n", + "14346 SDG #15: Life on Land & SDG #13: Climate Actions \n", + "14347 SDG #15: Life on Land & SDG #13: Climate Actions \n", + "14348 SDG #15: Life on Land & SDG #13: Climate Actions \n", + "14349 SDG #15: Life on Land & SDG #13: Climate Actions \n", + "14350 SDG #15: Life on Land & SDG #13: Climate Actions \n", + "\n", + "[14351 rows x 23 columns]" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Implement the mapping function defined and save the datasets \n", + "terrestrial_eco_regions['SDG_MAPPING'] = terrestrial_eco_regions.apply(map_terrestrial_regions_to_sdg, axis=1)\n", + "terrestrial_eco_regions.to_file('TerrestrialEcoregionsoftheWorld_WWF.geojson', driver='GeoJSON')\n", + "terrestrial_eco_regions" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "af00d96e-80b0-4a2f-a0df-c1c83884381c", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAACLdElEQVR4nOzdeVwVZf//8fdBZBcQF5BcU3Pf0lLcsiQxraQswyzXtEVzzyXLrcWyXMvUNs1us7LSzHIhNS0lt8Qt90hzQUwEFDeE6/dHX+bnEVSOHQ4Gr+fjcR63c801M585zDnE+77mGpsxxggAAAAAAABwIbe8LgAAAAAAAAAFD6EUAAAAAAAAXI5QCgAAAAAAAC5HKAUAAAAAAACXI5QCAAAAAACAyxFKAQAAAAAAwOUIpQAAAAAAAOByhFIAAAAAAABwOUIpAAAAAAAAuByhFAAUUKNHj5bNZnPJsVq0aKEWLVpYyz/99JNsNpu++uorlxy/a9euKl++vEuOdaPOnDmjp556SiEhIbLZbOrfv39el5Tr/gs/l/+KP//8UzabTbNnz3Z429mzZ8tms+nPP/90el35lc1m0+jRo/O6jFznyt8TAICCiVAKAPKBzD8qM19eXl4KDQ1VRESEpk6dqtOnTzvlOEePHtXo0aMVGxvrlP05081cW068/vrrmj17tp599ll9+umnevLJJ6/a9+LFi5oyZYrq1asnf39/BQYGqkaNGurVq5d2795t9fs318W2bdvUrVs3VahQQV5eXvLz81PdunU1ZMgQ/fHHH049d2coX7683ble7XUjoY2r/fDDDzdl4JEZUFztFR8f77JaunbtandsT09P3XbbbRo5cqTOnz/vsjqQO5577jm5ubkpMTHRrj0xMVFubm7y9PTM8nP+448/ZLPZ9OKLLyohIUE2m039+vXLsu9+/frJZrNp1KhRWdZ17txZhQsX1tmzZyVlvc4ufy1dutSJZwwABZd7XhcAAHCesWPHqkKFCkpLS1N8fLx++ukn9e/fXxMnTtSiRYtUu3Ztq+9LL72kYcOGObT/o0ePasyYMSpfvrzq1q2b4+2WL1/u0HFuxLVq++CDD5SRkZHrNfwbK1euVKNGjbL9Q+lK7du315IlS9SxY0f17NlTaWlp2r17txYvXqzGjRuratWqdv0duS6kf96vZ599VsWLF1enTp1UtWpVXbp0STt27NCcOXM0efJknTt3ToUKFfpX5+zMn8vkyZN15swZa/mHH37QvHnzNGnSJBUvXtxqb9y4sVOOl5t++OEHTZs2zaFgqly5cjp37pwKFy6ce4X9n+nTp8vPzy9Le2BgYK4f+3Kenp768MMPJUnJycn69ttv9corr+jAgQOaO3durh773LlzcnfP//8ZfSO/J5yhadOmmj59utauXasHHnjAal+3bp3c3NyUlpamTZs2qWnTpta6tWvXWtuWLFlSlStX1i+//JJl32vXrpW7u7vV/8p19erVk4+Pj9V2+XV2uTp16vyrcwQA/CP//zYFgALkvvvuU4MGDazl4cOHa+XKlbr//vv14IMPateuXfL29pYkubu75/ofVWfPnpWPj488PDxy9TjX44o/1P+thIQEVa9e/br9Nm7cqMWLF+u1117Tiy++aLfu3XffVVJSUpZtHLku1q1bp2effVZNmjTR4sWLVaRIEbt9TZgwQa+99toNnGFWzvy5REZG2i3Hx8dr3rx5ioyMdMotgpnX8pUuXbqkjIyMPLvGLz++l5eXS475yCOP2AV9ecXd3V1PPPGEtfzcc8+pcePGmjdvniZOnKjg4OBcO7ar3uu85orfE9nJDJt++eUXu1Bq7dq1ql27ts6dO6dffvnFLpT65Zdf5ObmZgXPTZs21Zw5c3TmzBkrRE1NTdXWrVvVoUMHLVq0SOnp6Va4fuzYMf3xxx9q166dXS1XXmcAAOfi9j0AyOfuuecevfzyyzp48KD+97//We3ZzRUSHR2tpk2bKjAwUH5+fqpSpYoVfPz000+64447JEndunXLcjtUixYtVLNmTW3evFnNmzeXj4+Pte2Vc0plSk9P14svvqiQkBD5+vrqwQcf1F9//WXXp3z58uratWuWbS/f5/Vqy27uotTUVA0aNEhlypSRp6enqlSporffflvGGLt+NptNffr00cKFC1WzZk15enqqRo0aOb51IyEhQT169FBwcLC8vLxUp04dffLJJ9b6zPm14uLi9P3331u1X21+nwMHDkiSmjRpkmVdoUKFVKxYsRzVdbXrYsyYMbLZbJo7d26WQEr654/xV155xW6U1L59+9S+fXuFhITIy8tLpUuXVlRUlJKTk69Zw5U/l8x5kd5++229//77qlixojw9PXXHHXdo48aNOTqv6/nf//6n+vXry9vbW0FBQYqKispyzV3tWr68vsmTJ1v1/f7775Kk3bt365FHHlFQUJC8vLzUoEEDLVq0yG7faWlpGjNmjCpXriwvLy8VK1ZMTZs2VXR0tPWeTJs2TZLsbhW68v258vjZzSm1bds2de3aVbfeequ8vLwUEhKi7t276+TJk055L6/l/PnzGj16tG677TZ5eXmpVKlSevjhh63rV8r5ZzCnbDabmjZtKmNMlltMlyxZombNmsnX11dFihRR27ZttXPnziz7mD9/vqpXry4vLy/VrFlTCxYsyPb7I7s5pbZs2aL77rtP/v7+8vPzU8uWLfXrr7/a9cm8pXbt2rUaOHCgSpQoIV9fXz300EM6ceKEXd9NmzYpIiJCxYsXl7e3typUqKDu3bvn6H3IbpTdld+l17sWpex/TzjynfjTTz+pQYMG8vLyUsWKFTVz5swczVNVtmxZlSlTJstoprVr16pJkyZq3Lhxtutq1Khhjdhr2rSp0tPT7X4G69ev16VLlzR48GCdOXPG7nbvy0daOUPm+5R5TXl7eyssLEzbt2+XJM2cOVOVKlWSl5eXWrRokeU7/+eff9ajjz6qsmXLytPTU2XKlNGAAQN07tw5u35du3aVn5+f/vjjD0VERMjX11ehoaEaO3bsDX+WAMCVGCkFAAXAk08+qRdffFHLly9Xz549s+2zc+dO3X///apdu7bGjh0rT09P7d+/3/oP9WrVqmns2LEaOXKkevXqpWbNmkmyvx3q5MmTuu+++xQVFaUnnnjiuiMVXnvtNdlsNg0dOlQJCQmaPHmywsPDFRsba43cyYmc1HY5Y4wefPBBrVq1Sj169FDdunW1bNkyvfDCCzpy5IgmTZpk1/+XX37RN998o+eee05FihTR1KlT1b59ex06dOiaIdC5c+fUokUL7d+/X3369FGFChU0f/58de3aVUlJSerXr5+qVaumTz/9VAMGDFDp0qU1aNAgSVKJEiWy3We5cuUkSXPnzlWTJk3+1SiGK6+Ls2fPauXKlWrRooVKly6do31cvHhRERERunDhgp5//nmFhIToyJEjWrx4sZKSkhQQEOBwXZ999plOnz6tp59+WjabTePHj9fDDz+sP/7441+Nrnrttdf08ssvq0OHDnrqqad04sQJvfPOO2revLm2bNlid/vZta7lWbNm6fz58+rVq5c8PT0VFBSknTt3qkmTJrrllls0bNgw+fr66ssvv1RkZKS+/vprPfTQQ5L++SN/3Lhxeuqpp3TnnXcqJSVFmzZt0m+//aZ7771XTz/9tI4eParo6Gh9+umn2Z5HdsfP7jbI6Oho/fHHH+rWrZtCQkK0c+dOvf/++9q5c6d+/fXXG57A+sp5fqR/RpNkvn/p6em6//77tWLFCkVFRalfv346ffq0oqOjtWPHDlWsWNHhz2BOZf5hX7RoUavt008/VZcuXRQREaE333xTZ8+e1fTp09W0aVNt2bLFCpy+//57PfbYY6pVq5bGjRunU6dOqUePHrrllluue9ydO3eqWbNm8vf315AhQ1S4cGHNnDlTLVq00OrVq9WwYUO7/s8//7yKFi2qUaNG6c8//9TkyZPVp08fffHFF5L+CbNbtWqlEiVKaNiwYQoMDNSff/6pb7755obel+xc71q8lpx8J27ZskWtW7dWqVKlNGbMGKWnp2vs2LFX/W67UtOmTfXNN9/owoUL8vT01MWLF7Vx40Y9++yzOnv2rIYMGSJjjGw2m06dOqXff/9dzzzzjN32mbWGh4dL+id4uu2221SvXj2VLl1aa9euVf369a11l293ub///ttuuXDhwjn6bvv555+1aNEi9e7dW5I0btw43X///RoyZIjee+89Pffcczp16pTGjx+v7t27a+XKlda28+fP19mzZ/Xss8+qWLFi2rBhg9555x0dPnxY8+fPtztOenq6WrdurUaNGmn8+PFaunSpRo0apUuXLmns2LHXrRMA8pQBAPznzZo1y0gyGzduvGqfgIAAU69ePWt51KhR5vJfA5MmTTKSzIkTJ666j40bNxpJZtasWVnW3XXXXUaSmTFjRrbr7rrrLmt51apVRpK55ZZbTEpKitX+5ZdfGklmypQpVlu5cuVMly5drrvPa9XWpUsXU65cOWt54cKFRpJ59dVX7fo98sgjxmazmf3791ttkoyHh4dd29atW40k884772Q51uUmT55sJJn//e9/VtvFixdNWFiY8fPzszv3cuXKmbZt215zf8YYk5GRYb3XwcHBpmPHjmbatGnm4MGDWfo6el1knlf//v2z9Dt58qQ5ceKE9bpw4YIxxpgtW7YYSWb+/PnXrf1KV/5c4uLijCRTrFgxk5iYaLV/++23RpL57rvvcrzvt956y0gycXFxxhhj/vzzT1OoUCHz2muv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s2fnaK6pK6+LSpUqyd3dXTt27MjSN/OPoez2O2HCBHXt2lXffvutli9frr59+2rcuHH69ddfczw31eVy4/3OyMiQzWbTkiVLst3/laPDrnUtX7kuM7gdPHiwIiIist0m8z1u3ry5Dhw4YL1XH374oSZNmqQZM2boqaeeytG55PRz1qFDB61bt04vvPCC6tatKz8/P2VkZKh169Y3PBryZpIZFmSKiIhQ1apV9fTTT1sj+TLP89NPP1VISEiWfeTFk+Wk61/jNptNX331lX799Vd99913WrZsmbp3764JEybo119/zXY04/Wkp6fbLf+ba9EV34lubm4KCwvTunXrZIzR2rVr7Z442rhxY3388cfWXFNXPoFTsh9t5eHhoaCgIFWtWlWSVLduXfn4+OiXX35RXFycXX9nudr7dL33Lz09Xffee68SExM1dOhQVa1aVb6+vjpy5Ii6du2aLz6/AJCJUAoACoDMCZOv9gdzJjc3N7Vs2VItW7bUxIkT9frrr2vEiBFatWqVwsPDb3hi5Ku58rYRY4z279+v2rVrW21FixbN9pa0gwcP2v0/w47UVq5cOf344486ffq03UiN3bt3W+udoVy5ctq2bZsyMjLsRks5+zjSP7cF1q5dW/v27bNuS7ueK68LX19fa2LmI0eO5GiC50y1atVSrVq19NJLL2ndunVq0qSJZsyYoVdfffXGTsjJMifXrlChgjWCwFkyr8PChQvbhSRXExQUpG7duqlbt246c+aMmjdvrtGjR1tBgDM+Z6dOndKKFSs0ZswYjRw50mr/N7cN5lTFihW1fv16paWlXXVi+tz4DJYqVUoDBgzQmDFj9Ouvv6pRo0bWLWYlS5a85s8m83j79+/Psi67tsuVKFFCPj4+2rNnT5Z1u3fvlpubW5aRMTnVqFEjNWrUSK+99po+++wzderUSZ9//vk1Q6PsvjMvXryoY8eOZel7vWvxRpUsWVJeXl439H5ermnTplqyZIkWLVqkhIQEu6eONm7cWCNGjNAPP/ygc+fOZRso3X777Vbw5OnpqbCwMOvz5e7urjvuuENr165VXFycSpYs6fTvhhu1fft27d27V5988ok6d+5stV/+ZMTLZWRk6I8//rCrf+/evZKU5cmRAHCz4fY9AMjnVq5cqVdeeUUVKlRQp06drtovuydq1a1bV5KsW0Z8fX0lyeF5i65mzpw5dvNcffXVVzp27JjdnCMVK1bUr7/+qosXL1ptixcvznI7jCO1tWnTRunp6Xr33Xft2idNmiSbzZbjOU9ycpz4+HjriVqSdOnSJb3zzjvy8/OzRh85Yt++fTp06FCW9qSkJMXExKho0aI5mm/oatfFyJEjlZ6erieeeCLb2/iuHAmRkpKiS5cu2bXVqlVLbm5uTr3V6N96+OGHVahQIY0ZMybLORhjdPLkyRved8mSJdWiRQvNnDkz2z/8T5w4Yf37yuP4+fmpUqVKdu+VMz5nmSMxrjzXyZMn3/A+c6p9+/b6+++/s3y+Lq8ntz6Dzz//vHx8fPTGG29I+idw9ff31+uvv57t3EyZP5vQ0FDVrFlTc+bMsbvuV69ere3bt1/zmIUKFVKrVq307bff2t0qdfz4cX322Wdq2rSp/P39HTqPU6dOZfnZXfl9fDUVK1bUmjVr7Nref//9LCOlcnIt3qjMUWwLFy7U0aNHrfb9+/fnaL6wTJlB05tvvikfHx/rPZCkO++8U+7u7ho/frxd38u5u7urYcOGWrt2rdauXZvliayNGzfWmjVr9Ouvv9oFXnktu8+vMUZTpky56jaXf5aMMXr33XdVuHBhtWzZMvcKBQAnYKQUAOQjS5Ys0e7du3Xp0iUdP35cK1euVHR0tMqVK6dFixbJy8vrqtuOHTtWa9asUdu2bVWuXDklJCTovffeU+nSpa3/2K9YsaICAwM1Y8YMFSlSRL6+vmrYsGGO57i5UlBQkJo2bapu3brp+PHjmjx5sipVqqSePXtafZ566il99dVXat26tTp06KADBw7of//7n90ku47W9sADD+juu+/WiBEj9Oeff6pOnTpavny5vv32W/Xv3z/Lvm9Ur169NHPmTHXt2lWbN29W+fLl9dVXX2nt2rWaPHnyNef4upqtW7fq8ccf13333admzZopKChIR44c0SeffKKjR49q8uTJWW4NceS6aNasmd599109//zzqly5sjp16qSqVavq4sWL2rt3r+bOnSsPDw9rJNbKlSvVp08fPfroo7rtttt06dIlffrppypUqJDat2//795AJ6pYsaJeffVVDR8+XH/++aciIyNVpEgRxcXFacGCBerVq5cGDx58w/ufNm2amjZtqlq1aqlnz5669dZbdfz4ccXExOjw4cPaunWrJKl69epq0aKF6tevr6CgIG3atElfffWV3VxgmfPV9O3bVxERESpUqJCioqIcqsff31/NmzfX+PHjlZaWpltuuUXLly+3blP6N7766qtsbx+79957FRwcrM6dO2vOnDkaOHCgNmzYoGbNmik1NVU//vijnnvuObVr1y7XPoPFihVTt27d9N5772nXrl2qVq2apk+frieffFK33367oqKiVKJECR06dEjff/+9mjRpYv0x//rrr6tdu3Zq0qSJunXrplOnTundd99VzZo1sw1oL/fqq68qOjpaTZs21XPPPSd3d3fNnDlTFy5csEITR3zyySd677339NBDD6lixYo6ffq0PvjgA/n7+6tNmzbX3Papp57SM888o/bt2+vee+/V1q1btWzZMhUvXtyuX06uxX9j9OjRWr58uZo0aaJnn33WCiFr1qyp2NjYHO3jzjvvlIeHh2JiYtSiRQu72y19fHxUp04dxcTEKDAwUDVr1sx2H02bNrUmtL8yeGrcuLHGjRtn9btZVK1aVRUrVtTgwYN15MgR+fv76+uvv77qvHpeXl5aunSpunTpooYNG2rJkiX6/vvv9eKLL+bo/6QAgDzlykf9AQByR+ZjxjNfHh4eJiQkxNx7771mypQpdo+eznTlo75XrFhh2rVrZ0JDQ42Hh4cJDQ01HTt2NHv37rXb7ttvvzXVq1e3Huud+Qj6u+66y9SoUSPb+u666y67R2ivWrXKSDLz5s0zw4cPNyVLljTe3t6mbdu2do+6zjRhwgRzyy23GE9PT9OkSROzadOmLPu8Vm1dunTJ8kj306dPmwEDBpjQ0FBTuHBhU7lyZfPWW2/ZPabdmH8e6927d+8sNV35ePWrOX78uOnWrZspXry48fDwMLVq1bLqunJ/13s8e+b+3njjDXPXXXeZUqVKGXd3d1O0aFFzzz33mK+++squ741cF5m2bNliOnfubMqWLWs8PDyMr6+vqV27thk0aJDdo+D/+OMP0717d1OxYkXj5eVlgoKCzN13321+/PHH657LlT+XuLg4I8m89dZbWfrqKo+5v5q33noryyPWjTHm66+/Nk2bNjW+vr7G19fXVK1a1fTu3dvs2bPH6nO1a/la9RljzIEDB0znzp1NSEiIKVy4sLnlllvM/fffb/dzefXVV82dd95pAgMDjbe3t6latap57bXXzMWLF60+ly5dMs8//7wpUaKEsdls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YSE2btwIlUqlzDcyMhLjxo1Dt27dMGjQIHz11VfYu3cvjhw5AgBwdHTE48ePsWbNGgwfPhwpKSn4+9//Xm+OFRUViIyMxJgxY9CuXTvcuHEDZ86cwejRo3/AqhEREf3CvdKOVkRERPSz9PDhQ5k3b564u7uLTqcTExMT6dixoyxcuFAePHigjLtw4YJ4eHiIRqORrl27yqFDh/QanS9ZskRcXFxEo9FIixYtxNfXV65cuaLs/8knn4itra00a9ZMvLy8REQkIyNDevToIcbGxuLk5CS7d+/WazAuUnej84YarhcXF4uvr69otVpp3bq1LFy4UAICAsTX11fZx8vLS0JDQ+VPf/qTmJmZiYWFhcyfP1+voffzedy7d09mzJghbdq0EUNDQ7G1tRU/Pz+5du1avWsLQHkZGxtLhw4dJDAwUNLT02uNPX36tAwePFi0Wq00b95cXF1dZdmyZXpjSkpKxMjISExMTKSsrKxWjG3btknXrl1FrVaLhYWF9OvXT/bu3Vvv2h0/flx69uwparVarKysJCoqSh4/fvyj1ql63jUbvNd17BfNt664bm5uEhsbq7yv65qqz65du8Tb21t0Op0YGhqKjY2NTJw4UdLS0vTGrV27Vtq3by+Ghobi7OwsW7du1dseFxcn1tbWotFoxMfHR7Zu3SoApKSkRET0G51XVlbKH//4R7G1tRW1Wi1t2rSRsLAwpZk7ERHRb4lKpEYjCCIiIiKiBnh7e6Nr165ISEh41akQERHRLxyfvkdERERERERERE2ORSkiIiIiIiIiImpy/PoeERERERERERE1Od4pRURERERERERETY5FKSIiIiIiIiIianIsShERERERERERUZNjUYqIiIiIiIiIiJoci1JERERERERERNTkWJQiIiIiIiIiIqImx6IUERERERERERE1ORaliIiIiIiIiIioybEoRURERERERERETe7/AErlkibsZiflAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Data visualisation using Bar Chart\n", + "sdg_terrestrial_region_count = terrestrial_eco_regions['SDG_MAPPING'].value_counts()\n", + "plt.figure(figsize=(12, 6))\n", + "sdg_terrestrial_region_count.plot(kind='bar', color=['seagreen'])\n", + "plt.title('Distribution of SDGs in Terrestrial Eco Regions using WWF map')\n", + "plt.xlabel('Sustainable Development Goals')\n", + "plt.ylabel('Number of Terrestrial Eco Regions')\n", + "plt.xticks(rotation=0)\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "869b336a-c797-4a4a-9987-ae8df3b15120", + "metadata": {}, + "source": [ + "### CLIMATE" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "25303253-55db-455f-862b-3c9d609035bd", + "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", + "
CLASS_NAMEgeometry
00MULTIPOLYGON (((-37.65000 83.50000, -37.65000 ...
10MULTIPOLYGON (((-38.75000 83.40000, -38.75000 ...
20MULTIPOLYGON (((-38.60000 83.40000, -38.60000 ...
30MULTIPOLYGON (((-37.15000 83.40000, -37.15000 ...
45MULTIPOLYGON (((-40.40000 83.40000, -40.40000 ...
.........
261601MULTIPOLYGON (((-26.35000 -58.40000, -26.35000...
261611MULTIPOLYGON (((-26.65000 -59.00000, -26.65000...
261621MULTIPOLYGON (((-27.40000 -59.40000, -27.40000...
261631MULTIPOLYGON (((-27.25000 -59.40000, -27.25000...
261640MULTIPOLYGON (((172.85000 61.35000, 172.85000 ...
\n", + "

26165 rows Ă— 2 columns

\n", + "
" + ], + "text/plain": [ + " CLASS_NAME geometry\n", + "0 0 MULTIPOLYGON (((-37.65000 83.50000, -37.65000 ...\n", + "1 0 MULTIPOLYGON (((-38.75000 83.40000, -38.75000 ...\n", + "2 0 MULTIPOLYGON (((-38.60000 83.40000, -38.60000 ...\n", + "3 0 MULTIPOLYGON (((-37.15000 83.40000, -37.15000 ...\n", + "4 5 MULTIPOLYGON (((-40.40000 83.40000, -40.40000 ...\n", + "... ... ...\n", + "26160 1 MULTIPOLYGON (((-26.35000 -58.40000, -26.35000...\n", + "26161 1 MULTIPOLYGON (((-26.65000 -59.00000, -26.65000...\n", + "26162 1 MULTIPOLYGON (((-27.40000 -59.40000, -27.40000...\n", + "26163 1 MULTIPOLYGON (((-27.25000 -59.40000, -27.25000...\n", + "26164 0 MULTIPOLYGON (((172.85000 61.35000, 172.85000 ...\n", + "\n", + "[26165 rows x 2 columns]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "climate_data = gpd.read_file(r'/home/naza/Downloads/IPCC_ClimateZoneMap_Vector.geojson')\n", + "climate_data" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "328e3d4c-55c1-44c1-a7bf-c02d3dc70ed9", + "metadata": {}, + "outputs": [], + "source": [ + "# Functions defined for mapping each datasets (climate)\n", + "def map_climate_to_sdg(row):\n", + " return \"SDG #13: Climate Actions\"\n", + "# This is because all the zones mapped are relevant for the SDG Climate Actions" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "8ec7a8ac-2f1f-4537-a139-f9cf6e29d1e5", + "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", + "
CLASS_NAMEgeometrySDG_MAPPING
00MULTIPOLYGON (((-37.65000 83.50000, -37.65000 ...SDG #13: Climate Actions
10MULTIPOLYGON (((-38.75000 83.40000, -38.75000 ...SDG #13: Climate Actions
20MULTIPOLYGON (((-38.60000 83.40000, -38.60000 ...SDG #13: Climate Actions
30MULTIPOLYGON (((-37.15000 83.40000, -37.15000 ...SDG #13: Climate Actions
45MULTIPOLYGON (((-40.40000 83.40000, -40.40000 ...SDG #13: Climate Actions
............
261601MULTIPOLYGON (((-26.35000 -58.40000, -26.35000...SDG #13: Climate Actions
261611MULTIPOLYGON (((-26.65000 -59.00000, -26.65000...SDG #13: Climate Actions
261621MULTIPOLYGON (((-27.40000 -59.40000, -27.40000...SDG #13: Climate Actions
261631MULTIPOLYGON (((-27.25000 -59.40000, -27.25000...SDG #13: Climate Actions
261640MULTIPOLYGON (((172.85000 61.35000, 172.85000 ...SDG #13: Climate Actions
\n", + "

26165 rows Ă— 3 columns

\n", + "
" + ], + "text/plain": [ + " CLASS_NAME geometry \\\n", + "0 0 MULTIPOLYGON (((-37.65000 83.50000, -37.65000 ... \n", + "1 0 MULTIPOLYGON (((-38.75000 83.40000, -38.75000 ... \n", + "2 0 MULTIPOLYGON (((-38.60000 83.40000, -38.60000 ... \n", + "3 0 MULTIPOLYGON (((-37.15000 83.40000, -37.15000 ... \n", + "4 5 MULTIPOLYGON (((-40.40000 83.40000, -40.40000 ... \n", + "... ... ... \n", + "26160 1 MULTIPOLYGON (((-26.35000 -58.40000, -26.35000... \n", + "26161 1 MULTIPOLYGON (((-26.65000 -59.00000, -26.65000... \n", + "26162 1 MULTIPOLYGON (((-27.40000 -59.40000, -27.40000... \n", + "26163 1 MULTIPOLYGON (((-27.25000 -59.40000, -27.25000... \n", + "26164 0 MULTIPOLYGON (((172.85000 61.35000, 172.85000 ... \n", + "\n", + " SDG_MAPPING \n", + "0 SDG #13: Climate Actions \n", + "1 SDG #13: Climate Actions \n", + "2 SDG #13: Climate Actions \n", + "3 SDG #13: Climate Actions \n", + "4 SDG #13: Climate Actions \n", + "... ... \n", + "26160 SDG #13: Climate Actions \n", + "26161 SDG #13: Climate Actions \n", + "26162 SDG #13: Climate Actions \n", + "26163 SDG #13: Climate Actions \n", + "26164 SDG #13: Climate Actions \n", + "\n", + "[26165 rows x 3 columns]" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Implement the mapping function defined and save the datasets \n", + "climate_data['SDG_MAPPING'] = climate_data.apply(map_climate_to_sdg, axis=1)\n", + "climate_data.to_file('IPCC_ClimateZoneMap_Vector.geojson', driver='GeoJSON')\n", + "climate_data" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "40c03650-7690-4ade-9754-02eabed16dfc", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJOCAYAAABm7rQwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAABu1klEQVR4nO3deXgNd///8dcJshBJ7BHS2MUWKVpS1VhSsbQova1t7VqlarlVtfZWqdbW2tpSwV1dKKq21q622vetSKstQQkhSEg+vz/6zfk5EpxDTNp4Pq7rXHdm5j0z75kzJ7m9OvM5NmOMEQAAAAAAAGAht4xuAAAAAAAAAA8fQikAAAAAAABYjlAKAAAAAAAAliOUAgAAAAAAgOUIpQAAAAAAAGA5QikAAAAAAABYjlAKAAAAAAAAliOUAgAAAAAAgOUIpQAAAAAAAGA5QikAwD/GkCFDZLPZLNlXzZo1VbNmTfv0mjVrZLPZNHfuXEv2365dOxUpUsSSfd2ry5cvq1OnTvL395fNZlPPnj0zuqUHLqPfl1uvy19//VU2m01RUVEZ1hMyVkZfkwAAPEiEUgCAByIqKko2m83+8vT0VEBAgCIjI/XRRx/p0qVL6bKfkydPasiQIdq1a1e6bC89/ZN7c8Z7772nqKgode3aVbNmzdKLL75429rExESNHz9ejz76qHx8fOTn56dy5cqpS5cuOnTokL3ufq6LPXv2qH379ipatKg8PT3l7e2t0NBQvfHGGzp+/Hi6Hnt6O336tP773/8qODhY2bNnV44cOVS5cmW9++67unDhQka3l6YHdf3WrFnT4RpI63VzMIeMU7NmTZUvX95hXpEiRRzeq/z586tGjRqaP39+mtuYP3++6tevr7x588rd3V0BAQFq3ry5Vq1alar23/g5AQDcn6wZ3QAAIHMbNmyYihYtquvXrysmJkZr1qxRz549NWbMGC1cuFAhISH22gEDBujNN990afsnT57U0KFDVaRIEYWGhjq93o8//ujSfu7FnXr77LPPlJyc/MB7uB+rVq1StWrVNHjw4LvWNmvWTEuXLlWrVq3UuXNnXb9+XYcOHdKiRYv0xBNPKDg42KHeletC+vt8de3aVXnz5lWbNm0UHBysGzduaN++fZo5c6bGjRunq1evKkuWLPd1zA/ifdm6dasaNGigy5cv64UXXlDlypUlSdu2bdPIkSO1bt26216PQUFBunr1qrJly5auPTnjXj9bd/P222+rU6dOaS77+uuvtWjRIlWrVi3d9vdv90/8XREaGqo+ffpI+vs6+eSTT9S0aVNNnjxZr7zyiiTJGKMOHTooKipKjz76qHr37i1/f3+dOnVK8+fPV506dbRhwwY98cQTku7vcwIA+PcilAIAPFD169dXlSpV7NP9+/fXqlWr9Mwzz6hRo0Y6ePCgvLy8JElZs2ZV1qwP9k/TlStXlD17drm7uz/Q/dxNRoQMrjpz5ozKli1717qtW7dq0aJFGj58uN566y2HZRMmTEjzDgdXrouNGzeqa9euql69uhYtWqScOXM6bGv06NEaPnz4PRxhaun9vly4cEHPPfecsmTJop07d6YK54YPH67PPvvstuun3E2WmTz99NNpzt+7d686d+6sypUra9iwYRZ39c/1T/xdUahQIb3wwgv26ZdeekklSpTQ2LFj7aHU6NGjFRUVZQ+bb340++2339asWbPsv+/v93MCAPj34vE9AIDlateurYEDB+q3337T//73P/v8tMaUWr58uZ588kn5+fnJ29tbpUuXtgcfa9as0WOPPSZJat++vf1xkpTxd1IePdm+fbueeuopZc+e3b7urWP3pEhKStJbb70lf39/5ciRQ40aNdLvv//uUFOkSBG1a9cu1bo3b/NuvaU1Tkx8fLz69OmjwMBAeXh4qHTp0vrwww9ljHGos9ls6t69uxYsWKDy5cvLw8ND5cqV07Jly9I+4bc4c+aMOnbsqAIFCsjT01MVK1bUjBkz7MtTxteKjo7W4sWL7b3/+uuvaW7v2LFjkqTq1aunWpYlSxblyZPHqb5ud10MHTpUNptNX3zxRapASpI8PT31zjvvONwl9csvv6hZs2by9/eXp6enChcurJYtW+rixYt37OHW9yVlTKcPP/xQn376qYoXLy4PDw899thj2rp1612P6ZNPPtGff/6pMWPGpPqHtiQVKFBAAwYMuO36aY0p1a5dO3l7e+vEiRN65pln5O3trUKFCmnixImS/g53ateurRw5cigoKEizZ8922Ob58+f13//+VxUqVJC3t7d8fHxUv3597d69215zt+tXkn7++WfVq1dPvr6+yp49u8LDw7Vhw4a7npO0xMfHq0WLFsqWLZu+/vrrVKHxpEmTVK5cOXl4eCggIEDdunVL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H5ckzZs3T4ULF7bfVXfq1Kk09zF//ny9/vrr6tOnj/bt26eXX35Z7du31+rVqx3qhg4dqubNm2vPnj1q0KCB2rRpo/Pnz0uSBg4cqAMHDmjp0qU6ePCgJk+erLx587ryVgAAgLRkdCoGAAAeHnPnzjW5cuUynp6e5oknnjD9+/c3u3fvdqi53Z1SxhhToEAB07VrV2OMMfXq1TMhISEOy0ePHm1y5Mhhf124cOG2vcTGxpro6GgzePBgExkZaaKjo83EiRPNY489ZqKjo010dLS5evVqqvXudqdUoUKFjLu7u3FzczPDhg1zWDZv3jxTunTp2677888/G0lm3rx5t61JISfulFqxYoW9fsSIEUaSOXbsmH3eyy+/bCIjI2+7j7NnzxpJZu/evWnuJ0Xx4sXN7NmzHea98847Jiws7I7H8MQTT5hx48YZY4y5fv26yZs3r1m9erV9eVhYmGnTps1t10/rWrn1TqknnnjCdO7c2aHmP//5j2nQoIF9WpIZMGCAffry5ctGkv2OuWeffda0b9/+jscCAABcx51SAADAMs2aNdPJkye1cOFC1atXT2vWrFGlSpUUFRXl1PrGmDveadShQwft2rVLn3zyieLj4x3uurmVn5+fihQpoi1btqhZs2YqUqSIdu7cqUaNGqlIkSIqUqSIPD09XT1E/fTTT9q2bZumTJmicePG6csvv7Qve+6553To0KE7Hl96CgkJsf9coEABZc+eXcWKFXOYd+bMGfv0L7/8olatWqlYsWLy8fFRkSJFJEknTpy47T7i4+N17NgxdezY0X43nLe3t959910dO3bstusdPnxYW7ZsUatWrSRJWbNmVYsWLTRt2jR7za5du1SnTh2Xj/tmBw8eTDVGWPXq1XXw4EGHeTefqxw5csjHx8d+brp27aqvvvpKoaGheuONN7Rx48b76gkAAPzt3zcaJgAA+Ffz9PTU008/raeffloDBw5Up06dNHjwYLVr1+6O6507d05nz55V0aJFJUklS5bU+vXrdf36dWXLlk2S7I/j/fHHH3fc1k8//aT69etLkq5cuaI1a9aoV69eunr1qrJly6aRI0fqrbfe0ltvveXy8aX0V6FCBZ0+fVpDhgyxBy93U7JkSdlstjsGV65IOS/S348z3jydMi/l0TxJevbZZxUUFKTPPvtMAQEBSk5OVvny5ZWYmHjb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FBgYqB49eig+Pl6S9NZbb6lq1aqptl2xYkUNGzbMPj116lSVKVNGnp6eCg4O1qRJk+7Y29q1a/X444/Lw8NDBQsW1JtvvqkbN27Yl9esWVPdu3e/43kqUqSI3n33Xb300kvy9vZWUFCQFi5cqLNnz6px48by9vZWSEiItm3b5rDvOx1vynbfe+89dejQQTlz5tQjjzyiTz/91L78dtfUrTZv3qxRo0ZpzJgxGjNmjGrUqKFHHnlElStX1oABA7R06VKH+smTJ6t48eJyd3dX6dKlNWvWLIflY8aMUYUKFZQjRw4FBgbq1Vdf1eXLl297jnfv3q1atWopZ86c8vHxUeXKlVOdCwAAHgaEUgAAIBVvb295e3trwYIFSkhIuOftDBw4UAcOHNDSpUt18OBBTZ48WXnz5pUkbdmyRZK0YsUKnTp1SvPmzZMkXbp0SW3bttX69eu1efNmlSxZUg0aNNClS5fuuK+3335b//3vf7Vr1y6VKlVKrVq1socp165dU+XKlbV48WLt27dPXbp00YsvvmjvIcWMGTOUNWtWbdmyRePHj9eYMWM0derU2+7zP//5j86cOaOlS5dq+/btqlSpkurUqaPz58+7fK569eqlS5cuafny5ZKkY8eOqV69emrWrJn27Nmjr7/+WuvXr1f37t0lSW3atNGWLVt07Ngx+zb279+vPXv2qHXr1pKkL774QoMGDdLw4cN18OBBvffeexo4cKBmzJiRZg9//vmnGjRooMcee0y7d+/W5MmTNW3aNL377rsun6exY8eqevXq2rlzpxo2bKgXX3xRL730kl544QXt2LFDxYsX10svvWQPs+52vClGjx6tKlWqaOfOnXr11VfVtWtXHT58WNLtr6lbffnll/L29tarr76a5nKbzWb/ef78+Xr99dfVp08f7du3Ty+//LLat2+v1atX22vc3Nz00Ucfaf/+/ZoxY4ZWrVqlN954I81tS3+/d4ULF9bWrVu1fft2vfnmm8qWLdtt6wEAyLQMAABAGubOnWty5cplPD09zRNPPGH69+9vdu/ebV8eHR1tJJmdO3fa58XGxhpJZvXq1cYYY5599lnTvn37NLef1vppSUpKMjlz5jTff/+9fZ4kM3/+fIftTJ061b58//79RpI5ePDgbbfbsGFD06dPH/t0eHi4KVOmjElOTrbP69evnylTpox9OigoyIwdO9YYY8xPP/1kfHx8zLVr1xy2W7x4cfPJJ5/cdr83936zq1evGknm/fffN8YY07FjR9OlSxeHmp9++sm4ubmZq1evGmOMqVixohk2bJh9ef/+/U3VqlUdepk9e7bDNt555x0TFhZmjEn9Hrz11lumdOnSDudg4sSJxtvb2yQlJbl0nl544QX79KlTp4wkM3DgQPu8TZs2GUnm1KlTTh/vrdtNTk42+fPnN5MnT07zeG6nXr16JiQkxGHe6NGjTY4cOeyvCxcuGGOMeeKJJ0znzp0dav/zn/+YBg0a3Hb7c+bMMXny5LFPT58+3fj6+tqnc+bMaaKiou7YIwAADwPulAIAAGlq1qyZTp48qYULF6pevXpas2aNKlWqpKioKKe30bVrV3311VcKDQ3VG2+8oY0bN951ndOnT6tz584qWbKkfH195ePjo8uXL+vEiRN3XC8kJMT+c8GCBSVJZ86ckSQlJSXpnXfeUYUKFZQ7d255e3vrhx9+SLXNatWqOdwlExYWpl9++UVJSUmp9rd7925dvnxZefLksd9Z5u3trejoaIe7l5xl/u+OoZT97969W1FRUQ7bjoyMVHJysqKjoyX9fcfN7Nmz7et/+eWXatOmjSQpPj5ex44dU8eOHR228e677962v4MHDyosLMzhHFSvXl2XL1/WH3/84dJ5uvn9KFCggCSpQoUKqealvEfOHO+t27XZbPL397dv43506NBBu3bt0ieffKL4+Hj7+3Hw4EFVr17dobZ69eo6ePCgfXrFihWqU6eOChUqpJw5c+rFF1/UuXPndOXKlTT31bt3b3Xq1EkREREaOXLkPV0vAABkBlkzugEAAPDP5enpqaefflpPP/20Bg4cqE6dOmnw4MFq166d3Nz+/m9b5qaxhK5fv+6wfv369fXbb79pyZIlWr58uerUqaNu3brpww8/vO0+27Ztq3Pnzmn8+PEKCgqSh4eHwsLClJiYeMdeb378KSUwSU5OliR98MEHGj9+vMaNG2cf+6dnz5533eadXL58WQULFrSPn3UzPz8/l7eXEnKkjIt0+fJlvfzyy+rRo0eq2kceeUSS1KpVK/Xr1087duzQ1atX9fvvv6tFixb29SXps88+SzX2VJYsWVzuz1VpvR93eo+cOd5bt5GynZRtOKtkyZJav369rl+/bt+en5+f/Pz8HMI3Z/z66696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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Data visualisation using Bar Chart\n", + "sdg_climate_count = climate_data['SDG_MAPPING'].value_counts()\n", + "plt.figure(figsize=(12, 6))\n", + "sdg_climate_count.plot(kind='bar', color=['brown', 'peru'])\n", + "plt.title('Distribution of SDGs in Climate Zones using IPCC map')\n", + "plt.xlabel('Sustainable Development Goals')\n", + "plt.ylabel('Number of Climate Zones')\n", + "plt.xticks(rotation=0)\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "aa6a686e-ee66-43d0-9d24-7a2f07ff8119", + "metadata": {}, + "source": [ + "### References\n", + "Uited Nations Department of Economic and Social Affairs - Sustainable Development (https://sdgs.un.org/goals)" + ] + } + ], + "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.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}