From 0a8de2be395338e7aba7b47c79fbb620ad23c4fa Mon Sep 17 00:00:00 2001 From: SahitiSarva <55742994+SahitiSarva@users.noreply.github.com> Date: Mon, 15 Apr 2024 10:50:18 -0400 Subject: [PATCH] minor date change (#65) --- .../housing-and-community.ipynb | 2 +- .../industry-and-commerce.ipynb | 2 +- reports/sample-indicators/health.ipynb | 2096 --- .../housing-and-community.ipynb | 14515 ---------------- .../industry-and-commerce.ipynb | 13879 --------------- 5 files changed, 2 insertions(+), 30492 deletions(-) delete mode 100644 reports/sample-indicators/health.ipynb delete mode 100644 reports/sample-indicators/housing-and-community.ipynb delete mode 100644 reports/sample-indicators/industry-and-commerce.ipynb diff --git a/notebooks/sample-indicators/housing-and-community.ipynb b/notebooks/sample-indicators/housing-and-community.ipynb index fa52e85..869802a 100644 --- a/notebooks/sample-indicators/housing-and-community.ipynb +++ b/notebooks/sample-indicators/housing-and-community.ipynb @@ -6,7 +6,7 @@ "source": [ "# Impact on Housing and Community\n", "\n", - "This notebook shows an analysis of the impact of the war on Gaza for housing and communities. This is done using the following indicators as of March 17th, 2024 \n", + "This notebook shows an analysis of the impact of the war on Gaza for housing and communities. This is done using the following indicators as of April 15th, 2024 \n", "\n", "* Percentage of Residential Buildings Damaged\n", "* Percentage of Places of Worship Damaged\n", diff --git a/notebooks/sample-indicators/industry-and-commerce.ipynb b/notebooks/sample-indicators/industry-and-commerce.ipynb index c556020..62f1e0f 100644 --- a/notebooks/sample-indicators/industry-and-commerce.ipynb +++ b/notebooks/sample-indicators/industry-and-commerce.ipynb @@ -6,7 +6,7 @@ "source": [ "# Impact on Industry and Commerce\n", "\n", - "This notebook shows an analysis of the impact of the war on Gaza for industry and commerce. This is done using the following indicators as of March 17th, 2024 \n", + "This notebook shows an analysis of the impact of the war on Gaza for industry and commerce. This is done using the following indicators as of April 15th, 2024 \n", "\n", "* Percentage of commercial and commericial buildings damaged\n", "* Percentage of commercial and industrial buildings without electricity \n", diff --git a/reports/sample-indicators/health.ipynb b/reports/sample-indicators/health.ipynb deleted file mode 100644 index df8890a..0000000 --- a/reports/sample-indicators/health.ipynb +++ /dev/null @@ -1,2096 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Impact on Health" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "import geopandas\n", - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "from matplotlib.ticker import FuncFormatter\n", - "from palettable.tableau import TableauMedium_10\n", - "\n", - "%config InlineBackend.figure_formats = ['svg']\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Percentage of health related places damaged" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "# read shapefiles\n", - "PSE = geopandas.read_file(\n", - " \"../../data/boundaries/pse_adm_pamop_20231019_shp/pse_admbnda_adm1_pamop_20231019.shp\"\n", - ")\n", - "PSE = geopandas.read_file(\n", - " \"../../data/boundaries/pse_adm_pamop_20231019_shp/pse_admbnda_adm2_pamop_20231019.shp\"\n", - ")\n", - "GAZA = PSE[PSE[\"ADM1_EN\"] == \"Gaza Strip\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "POI = geopandas.read_file(\n", - " \"../../data/damage_assessment/delivery8_2Feb2024/vectors/2.5sigma/damaged_pois_1_02Feb2024_2_5sigma.shp\"\n", - ").to_crs(\"EPSG:4326\")\n", - "\n", - "POI = geopandas.sjoin(POI, GAZA)\n", - "POI[\"fclass\"] = POI[\"fclass\"].fillna(\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "def get_poi_classification(fclass):\n", - " if fclass in [\n", - " \"school\",\n", - " \"kindergarten\",\n", - " \"university\",\n", - " \"college\",\n", - " ]:\n", - " return \"Education\"\n", - " if fclass in [\n", - " \"tower\",\n", - " \"wastewater_plant\",\n", - " \"water_tower\",\n", - " \"telephone\",\n", - " \"water_well\",\n", - " \"drinking_water\",\n", - " \"recycling\",\n", - " ]:\n", - " return \"Critical Infrastructure\"\n", - " if fclass in [\n", - " \"pharmacy\",\n", - " \"dentist\",\n", - " \"doctors\",\n", - " \"hospital\",\n", - " \"clinic\",\n", - " \"nursing_home\",\n", - " ]:\n", - " return \"Health\"\n", - " if fclass in [\n", - " \"public_building\",\n", - " \"police\",\n", - " \"courthouse\",\n", - " \"library\",\n", - " \"monument\",\n", - " \"post_office\",\n", - " \"memorial\",\n", - " \"community_centre\",\n", - " \"town_hall\",\n", - " \"museum\",\n", - " \"arts_centre\",\n", - " \"sports_centre\",\n", - " \"tourist_info\",\n", - " \"fire_station\",\n", - " ]:\n", - " return \"Public Amenities\"\n", - "\n", - " elif fclass in [\n", - " \"clothes\",\n", - " \"supermarket\",\n", - " \"restaurant\",\n", - " \"laundry\",\n", - " \"cafe\",\n", - " \"computer_shop\",\n", - " \"convenience\",\n", - " \"furniture_shop\",\n", - " \"shoe_shop\",\n", - " \"bakery\",\n", - " \"hotel\",\n", - " \"hairdresser\",\n", - " \"fast_food\",\n", - " \"bank\",\n", - " \"viewpoint\",\n", - " \"artwork\",\n", - " \"picnic_site\",\n", - " \"chalet\",\n", - " \"caravan_site\",\n", - " \"greengrocer\",\n", - " \"beauty_shop\",\n", - " \"car_dealership\",\n", - " \"attraction\",\n", - " \"pub\",\n", - " \"waste_basket\",\n", - " \"nightclub\",\n", - " \"playground\",\n", - " \"department_store\",\n", - " \"outdoor_shop\",\n", - " \"atm\",\n", - " \"butcher\",\n", - " \"car_rental\",\n", - " \"doityourself\",\n", - " \"guesthouse\",\n", - " \"beverages\",\n", - " \"theatre\",\n", - " \"newsagent\",\n", - " \"cinema\",\n", - " \"mobile_phone_shop\",\n", - " \"car_wash\",\n", - " \"bookshop\",\n", - " \"hostel\",\n", - " \"sports_shop\",\n", - " \"castle\",\n", - " \"pitch\",\n", - " \"car_sharing\",\n", - " \"vending_machine\",\n", - " \"food_court\",\n", - " \"gift_shop\",\n", - " \"camp_site\",\n", - " \"veterinary\",\n", - " \"post_box\",\n", - " \"florist\",\n", - " \"jeweller\",\n", - " \"chemist\",\n", - " \"motel\",\n", - " \"alpine_hut\",\n", - " \"mall\",\n", - " \"kiosk\",\n", - " \"bicycle_shop\",\n", - " \"bench\",\n", - " \"optician\",\n", - " \"travel_agent\",\n", - " \"biergarten\",\n", - " \"toy_shop\",\n", - " \"bar\",\n", - " \"fountain\",\n", - " \"archaeological\",\n", - " \"shelter\",\n", - " \"park\",\n", - " \"stationery\",\n", - " \"market_place\",\n", - " \"zoo\",\n", - " ]:\n", - " return \"Places of Economic Activity\"" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "POI[\"type\"] = POI[\"fclass\"].apply(get_poi_classification)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "left = POI[POI[\"_up7max\"] >= 0.5].value_counts([\"ADM2_EN\", \"type\"]).to_frame(\"damaged\")\n", - "right = POI.value_counts([\"ADM2_EN\", \"type\"]).to_frame(\"total\")\n", - "\n", - "df = pd.merge(left, right, on=[\"ADM2_EN\", \"type\"]).reset_index()\n", - "df[\"perc\"] = 100 * df[\"damaged\"] / df[\"total\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "tags": [ - "remove-cell", - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-06T11:51:41.140098\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(10, 6))\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Damaged Healthcare Locations\", y=1.01, fontsize=20, x=0.47\n", - ")\n", - "\n", - "df.pivot_table(\"perc\", \"ADM2_EN\", \"type\")[[\"Health\"]].plot(\n", - " ax=ax, kind=\"barh\", color=TableauMedium_10.mpl_colors, legend=False\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% Damaged Healthcare Locations\", fontsize=12)\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{}%\".format(y)))\n", - "ax.set_ylabel(\"Adm 2\", fontsize=16)\n", - "ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.grid(which=\"both\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "# ax.legend(bbox_to_anchor=(1.01, 0.9))\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage of damaged healthcare locations for each second-level administrative division\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "ax.text(\n", - " 0,\n", - " -0.15,\n", - " \"Source: World Bank calculations derived from OpenStreetMap and Sentinel-1 data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ");" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "conflict-analyses", - "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.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/reports/sample-indicators/housing-and-community.ipynb b/reports/sample-indicators/housing-and-community.ipynb deleted file mode 100644 index 40a6b0e..0000000 --- a/reports/sample-indicators/housing-and-community.ipynb +++ /dev/null @@ -1,14515 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Impact on Housing and Community\n", - "\n", - "This notebook shows an analysis of the impact of the war on Gaza for housing and communities. This is done using the following indicators as of February 2nd, 2024 \n", - "\n", - "* Percentage of Residential Buildings Damaged\n", - "* Percentage of Places of Worship Damaged\n", - "* Percentage of People in Neighbourhoods with Damaged Buildings\n", - "* Percentage of Places of Education Damaged\n", - "* Places of Public Amenities Damaged\n", - "* Percentage of Homes without (observed) Nighttime Lights\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "import geopandas\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import pandas as pd\n", - "from matplotlib.ticker import FuncFormatter\n", - "from palettable.tableau import TableauMedium_10\n", - "\n", - "%config InlineBackend.figure_formats = ['svg']\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Overall Impact on Housing and Community" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "sort_order = [\"North Gaza\", \"Gaza\", \"Deir Al-Balah\", \"Khan Younis\", \"Rafah\"]\n", - "summary_stats.reset_index(inplace=True)\n", - "summary_stats[\"ADM2_EN\"] = pd.Categorical(\n", - " summary_stats[\"ADM2_EN\"], categories=sort_order, ordered=True\n", - ")\n", - "summary_stats.sort_values(by=\"ADM2_EN\", inplace=True)\n", - "summary_stats.rename(columns={\"ADM2_EN\": \"Governorate\"}, inplace=True)\n", - "summary_stats.set_index(\"Governorate\", inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": { - "tags": [ - "remove-input" - ] - }, - "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", - "
 % Residential Buildings Damaged% Population in Neighborhoods with Damaged Buildings% Places of Worship Damaged% Places of Education Damaged% Public Amenities Damaged% Residential Buildings without Observed Nighttime Lights
Governorate      
North Gaza35%54%80%80%80%46%
Gaza63%83%84%79%79%68%
Deir Al-Balah36%23%60%72%72%89%
Khan Younis39%55%62%74%74%66%
Rafah18%10%35%71%71%5%
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summary_stats[\n", - " [\n", - " \"% Residential Buildings Damaged\",\n", - " \"% Population in Neighborhoods with Damaged Buildings\",\n", - " \"% Places of Worship Damaged\",\n", - " \"% Places of Education Damaged\",\n", - " \"% Public Amenities Damaged\",\n", - " \"% Residential Buildings without Observed Nighttime Lights\",\n", - " ]\n", - "].style.background_gradient(cmap=\"viridis\", axis=0).format(\"{:.0f}%\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Observations\n", - "\n", - "* The Governorate of Gaza took the greatest impact in almost every indicator being measured. The biggest being the number of people potentially impacted (~720k). \n", - "* The Governorate of North Gaza took impact on Points of Interest. However, this could also be because of the low number of reported buildings in the OpenStreetMap database.\n", - "* Khan Younis, a southern Governorate, has more than half its population living in neighborhoods with damaged buildings and without observed nighttime lights." - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": { - "tags": [ - "hide-input" - ] - }, - "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", - "
 Number of Residential Buildings DamagedPeople in Neighborhoods with Damaged BuildingsNumber of Places of Worship DamagedNumber of Places of Education DamagedNumber of Public Amenities Damaged
Governorate     
North Gaza174282283204545
Gaza384720573498080
Deir Al-Balah25684988121313
Khan Younis403261190212323
Rafah272845772424
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summary_stats[\n", - " [\n", - " \"Number of Residential Buildings Damaged\",\n", - " \"People in Neighborhoods with Damaged Buildings\",\n", - " \"Number of Places of Worship Damaged\",\n", - " \"Number of Places of Education Damaged\",\n", - " \"Number of Public Amenities Damaged\",\n", - " ]\n", - "].style.background_gradient(cmap=\"viridis\", axis=0).format(\"{:.0f}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Percentage of Residential Buildings Damaged" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "# read shapefiles\n", - "PSE = geopandas.read_file(\n", - " \"../../data/boundaries/pse_adm_pamop_20231019_shp/pse_admbnda_adm1_pamop_20231019.shp\"\n", - ")\n", - "PSE = geopandas.read_file(\n", - " \"../../data/boundaries/pse_adm_pamop_20231019_shp/pse_admbnda_adm2_pamop_20231019.shp\"\n", - ")\n", - "GAZA = PSE[PSE[\"ADM1_EN\"] == \"Gaza Strip\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "BUILDINGS_OSM = geopandas.read_file(\n", - " \"../../data/damage_assessment/delivery8_2Feb2024/vectors/2.5sigma/damaged_OSM_buildings_02Feb2024_2_5sigma.shp\"\n", - ").to_crs(\"EPSG:4326\")\n", - "\n", - "BUILDINGS_OSM = geopandas.sjoin(BUILDINGS_OSM, GAZA)\n", - "BUILDINGS_OSM[\"type\"] = BUILDINGS_OSM[\"type\"].fillna(\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "def get_damage_percentage(BUILDINGS_OSM):\n", - " left = (\n", - " BUILDINGS_OSM[BUILDINGS_OSM[\"_up7mean\"] >= 0.2]\n", - " .value_counts([\"ADM2_EN\", \"type\"])\n", - " .to_frame(\"damaged\")\n", - " )\n", - " right = BUILDINGS_OSM.value_counts([\"ADM2_EN\", \"type\"]).to_frame(\"total\")\n", - "\n", - " df = pd.merge(left, right, on=[\"ADM2_EN\", \"type\"]).reset_index()\n", - " df[\"perc\"] = 100 * df[\"damaged\"] / df[\"total\"]\n", - "\n", - " sort_order = [\"North Gaza\", \"Gaza\", \"Deir Al-Balah\", \"Khan Younis\", \"Rafah\"]\n", - " df[\"ADM2_EN\"] = pd.Categorical(df[\"ADM2_EN\"], categories=sort_order, ordered=True)\n", - " df.sort_values(by=\"ADM2_EN\", inplace=True, ascending=False)\n", - "\n", - " return df" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "residential = BUILDINGS_OSM[\n", - " BUILDINGS_OSM[\"type\"].isin([\"house\", \"apartments\", \"residential\", \"yes;house\"])\n", - "]\n", - "places_of_worship = BUILDINGS_OSM[\n", - " BUILDINGS_OSM[\"type\"].isin([\"religious\", \"mosque\", \"church\"])\n", - "]\n", - "\n", - "residential.loc[:, \"type\"] = \"residential\"\n", - "residential = get_damage_percentage(residential)\n", - "\n", - "places_of_worship.loc[:, \"type\"] = \"places_of_worship\"\n", - "places_of_worship = get_damage_percentage(places_of_worship)" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": { - "tags": [ - "remove-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T10:34:15.606567\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import math\n", - "\n", - "absolute_damage_numbers = list(\n", - " residential.pivot_table(\"damaged\", \"ADM2_EN\", \"type\", observed=False).sort_values(\n", - " by=\"ADM2_EN\", ascending=False\n", - " )[\"residential\"]\n", - ")\n", - "\n", - "fig, ax = plt.subplots(figsize=(12, 6))\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Residential Buildings Damaged as of February 2nd 2024\",\n", - " y=1.03,\n", - " fontsize=20,\n", - " x=0.57,\n", - ")\n", - "\n", - "ax = (\n", - " residential.pivot_table(\"perc\", \"ADM2_EN\", \"type\", observed=False)[[\"residential\"]]\n", - " .sort_values(by=\"ADM2_EN\", ascending=False)\n", - " .plot(kind=\"barh\", legend=False, ax=ax)\n", - ")\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage (and absolute number) of residential buildings damaged in each Governorate\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% Residential Buildings Damaged\", fontsize=12)\n", - "\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "# ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{:.0f}%\".format(y)))\n", - "\n", - "ax.grid(axis=\"x\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "# ax.legend()\n", - "\n", - "for id, bar in enumerate(ax.patches):\n", - " width = bar.get_width() # Use width since the bars are horizontal\n", - " ax.annotate(\n", - " f\"{int(np.round(absolute_damage_numbers[id],0))}\",\n", - " xy=(width, bar.get_y() + bar.get_height() / 2),\n", - " xytext=(-20, 0), # Shift the text to the left of the bar's end\n", - " textcoords=\"offset points\",\n", - " color=\"white\",\n", - " ha=\"right\",\n", - " va=\"center\",\n", - " )\n", - "\n", - "\n", - "ax.text(\n", - " 0,\n", - " -0.23,\n", - " \"On X: Percentage of residential buildings damaged. Inside Bar: Absolute number of residential buildings damaged On Y: Governorate from North to South. \\nResidential buildings include all buildings tagged as 'residential', 'apartments' and 'houses' in the OpenStreetMap database\\nSource: World Bank calculations derived from OpenStreetMap and Sentinel-1 data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ");" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Observations and Limitations\n", - "\n", - "* More than 60% of residential buildings in Gaza, the second province from north, can be considered damaged. However, in absolute numbers, Khan Younis has the most number of damaged residential buildings. \n", - "* Residential buildings reported here include all th buildings atagged as 'residential', 'apartments' and 'houses'.\n", - "* In the OpenStreetMap database, Deir Al-Balah has 717 reported residential buildings. Khan Younis has 1027, Gaza has 606, North Gaza has 491 and Rafah has 150 reported residential buildings. \n", - "* Khan Younis was declared an evacuation zone by the Israeli Armed Forces which could be a potential rason for the high number of damaged buildings. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Percentage of Places of Worship Damaged" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": { - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T10:36:31.705676\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(14, 6))\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Places of Worship Damaged as of February 2nd 2024\",\n", - " y=0.99,\n", - " fontsize=20,\n", - " x=0.49,\n", - ")\n", - "\n", - "absolute_damage_numbers = list(\n", - " places_of_worship.pivot_table(\n", - " \"damaged\", \"ADM2_EN\", \"type\", observed=False\n", - " ).sort_values(by=\"ADM2_EN\", ascending=False)[\"places_of_worship\"]\n", - ")\n", - "\n", - "\n", - "ax = (\n", - " places_of_worship.pivot_table(\"perc\", \"ADM2_EN\", \"type\", observed=False)[\n", - " [\"places_of_worship\"]\n", - " ]\n", - " .sort_values(by=\"ADM2_EN\", ascending=False)\n", - " .plot(ax=ax, kind=\"barh\", legend=False)\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% Places of Worship Damaged\", fontsize=12)\n", - "\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "# ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{:.0f}%\".format(y)))\n", - "\n", - "ax.grid(axis=\"x\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "# ax.legend()\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage (and absolute number) of places of worship damaged in each Governorate\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "ax.text(\n", - " 0,\n", - " -0.23,\n", - " \"On X: Percentage of places of worship damaged. Inside Bar: Absolute number of places of worship damaged On Y: Governorate from North to South. \\nPlaces of worship include all points tagged as 'mosque', 'church' and 'religious'. 99% of the dataset is of mosques alone.\\nSource: World Bank calculations derived from OpenStreetMap and Sentinel-1 data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ")\n", - "\n", - "for id, bar in enumerate(ax.patches):\n", - " width = bar.get_width() # Use width since the bars are horizontal\n", - " ax.annotate(\n", - " f\"{int(np.round(absolute_damage_numbers[id],0))}\",\n", - " xy=(width, bar.get_y() + bar.get_height() / 2),\n", - " xytext=(-20, 0), # Shift the text to the left of the bar's end\n", - " textcoords=\"offset points\",\n", - " color=\"white\",\n", - " ha=\"right\",\n", - " va=\"center\",\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Observations and Limitations\n", - "\n", - "* Gaza had the biggest hit on places of worship both in terms of percentage and abolute numbers. \n", - "* There are a total of 58 reported places of worship in Gaza, North Gaza has 25, Deir Al-Balah has 20, Khan Younis has 34 and Rafah has 20.\n", - "* There are no reported synagogues. \n", - "* Gaza also has 195 reported ruins, of which 141 (72%) are damaged" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Percentage of People Living in Neighborhoods with Damaged Buildings" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "from shapely.geometry import Point\n", - "\n", - "\n", - "def convert_to_gdf(df, X=None, Y=None):\n", - " if \"latitude\" in df.columns:\n", - " geometry = [Point(xy) for xy in zip(df.longitude, df.latitude)]\n", - " gdf = geopandas.GeoDataFrame(df, crs=\"EPSG:4326\", geometry=geometry)\n", - " else:\n", - " geometry = [Point(xy) for xy in zip(df[Y], df[X])]\n", - " gdf = geopandas.GeoDataFrame(df, crs=\"EPSG:4326\", geometry=geometry)\n", - "\n", - " return gdf" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "POPULATION = pd.read_csv(\n", - " \"../../data/population/pse_pd_2020_1km_UNadj_ASCII_XYZ/pse_pd_2020_1km_UNadj_ASCII_XYZ.csv\"\n", - ")\n", - "POPULATION = convert_to_gdf(POPULATION, \"Y\", \"X\")\n", - "\n", - "POPULATION = POPULATION.sjoin(GAZA)\n", - "POPULATION = POPULATION[POPULATION[\"ADM1_EN\"] == \"Gaza Strip\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\sahit\\anaconda3\\envs\\conflict-analyses\\lib\\site-packages\\geopandas\\geoseries.py:645: FutureWarning: the convert_dtype parameter is deprecated and will be removed in a future version. Do ``ser.astype(object).apply()`` instead if you want ``convert_dtype=False``.\n", - " result = super().apply(func, convert_dtype=convert_dtype, args=args, **kwargs)\n" - ] - } - ], - "source": [ - "from shapely.geometry import box\n", - "\n", - "\n", - "# Function to create a 1 km^2 box around a point\n", - "def create_square_km_box(point):\n", - " lat, lon = point.y, point.x\n", - " km_in_deg_lat = 1 / 111.32 # 1 km in degrees latitude\n", - " km_in_deg_lon = 1 / (\n", - " 111.32 * math.cos(math.radians(lat))\n", - " ) # 1 km in degrees longitude at this latitude\n", - "\n", - " # Define the bottom left and top right coordinates of the box\n", - " bottom_left = (lon - km_in_deg_lon / 2, lat - km_in_deg_lat / 2)\n", - " top_right = (lon + km_in_deg_lon / 2, lat + km_in_deg_lat / 2)\n", - "\n", - " # Create and return the box\n", - " return box(*bottom_left, *top_right)\n", - "\n", - "\n", - "POPULATION[\"geometry\"] = POPULATION[\"geometry\"].apply(create_square_km_box)" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "# POPULATION.drop(columns = 'index_right', inplace=True)\n", - "# BUILDINGS_OSM.drop(columns = 'index_right', inplace=True)\n", - "population_impacted = POPULATION[\n", - " [\n", - " \"X\",\n", - " \"Y\",\n", - " \"Z\",\n", - " \"geometry\",\n", - " \"ADM2_EN\",\n", - " \"ADM2_PCODE\",\n", - " \"ADM1_EN\",\n", - " \"ADM1_PCODE\",\n", - " \"ADM0_EN\",\n", - " \"ADM0_PCODE\",\n", - " ]\n", - "].sjoin(\n", - " BUILDINGS_OSM[\n", - " BUILDINGS_OSM[\"type\"].isin([\"residential\", \"house\", \"apartments\", \"yes;house\"])\n", - " ][\n", - " [\n", - " \"osm_id\",\n", - " \"code\",\n", - " \"fclass\",\n", - " \"name\",\n", - " \"type\",\n", - " \"_max\",\n", - " \"area\",\n", - " \"_landusefc\",\n", - " \"_up7mean\",\n", - " \"geometry\",\n", - " ]\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "left = POPULATION[[\"X\", \"Y\", \"Z\", \"ADM2_EN\", \"ADM1_EN\", \"ADM0_EN\"]]\n", - "\n", - "# Getting the average damage value for each point\n", - "right = (\n", - " population_impacted[[\"X\", \"Y\", \"Z\", \"_up7mean\"]]\n", - " .groupby([\"X\", \"Y\", \"Z\"])\n", - " .mean()\n", - " .reset_index()\n", - ")\n", - "\n", - "population_impacted = left.merge(right, on=[\"X\", \"Y\", \"Z\"])\n", - "\n", - "# Threshold for damage\n", - "population_impacted = population_impacted[population_impacted[\"_up7mean\"] > 0.2]\n", - "\n", - "# Grouping by admin region and getting people living in damaged regions\n", - "population_impacted = (\n", - " population_impacted.groupby([\"ADM0_EN\", \"ADM1_EN\", \"ADM2_EN\"])[[\"Z\"]]\n", - " .sum()\n", - " .reset_index()\n", - ")\n", - "population_impacted.rename(columns={\"Z\": \"damage_population\"}, inplace=True)\n", - "\n", - "left = (\n", - " POPULATION[[\"X\", \"Y\", \"Z\", \"ADM2_EN\", \"ADM1_EN\", \"ADM0_EN\"]]\n", - " .groupby([\"ADM0_EN\", \"ADM1_EN\", \"ADM2_EN\"])[[\"Z\"]]\n", - " .sum()\n", - " .reset_index()\n", - ")\n", - "left.rename(columns={\"Z\": \"total_population\"}, inplace=True)\n", - "\n", - "population_impacted = left.merge(\n", - " population_impacted, on=[\"ADM0_EN\", \"ADM1_EN\", \"ADM2_EN\"]\n", - ")\n", - "\n", - "population_impacted[\"perc\"] = (\n", - " 100\n", - " * population_impacted[\"damage_population\"]\n", - " / population_impacted[\"total_population\"]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "sort_order = [\"North Gaza\", \"Gaza\", \"Deir Al-Balah\", \"Khan Younis\", \"Rafah\"]\n", - "population_impacted[\"ADM2_EN\"] = pd.Categorical(\n", - " population_impacted[\"ADM2_EN\"], categories=sort_order, ordered=True\n", - ")\n", - "population_impacted.sort_values(by=\"ADM2_EN\", inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": { - "tags": [ - "remove-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T10:35:53.598202\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(14, 6))\n", - "plt.suptitle(\n", - " \"Gaza: Percentage People Living in Neighborhoods with Damaged Buildings as of February 2nd 2024\",\n", - " y=0.99,\n", - " fontsize=20,\n", - " x=0.62,\n", - ")\n", - "\n", - "absolute_damage_numbers = list(\n", - " population_impacted.pivot_table(\n", - " \"damage_population\", \"ADM2_EN\", observed=False\n", - " ).sort_values(by=\"ADM2_EN\", ascending=False)[\"damage_population\"]\n", - ")\n", - "\n", - "\n", - "ax = (\n", - " population_impacted[[\"ADM2_EN\", \"perc\"]]\n", - " .pivot_table(\"perc\", \"ADM2_EN\", observed=False)\n", - " .sort_values(by=\"ADM2_EN\", ascending=False)\n", - " .plot(\n", - " ax=ax,\n", - " kind=\"barh\",\n", - " legend=False, # color=['#D62728', '#FF7F0E', '#9467BD', '#17BECF']\n", - " )\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% People living in neighborhoods with damaged buildings\", fontsize=12)\n", - "# ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{}%\".format(y)))\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "# ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{:.0f}%\".format(y)))\n", - "ax.grid(which=\"both\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "\n", - "# ax.legend(bbox_to_anchor=(1.01, 0.9))\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage (and absolute numbers) of people living in neighborhoods with damaged buildings in each Governorate\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "ax.text(\n", - " 0,\n", - " -0.18,\n", - " \"On X: Percentage of people living in neighborhoods with damaged buildings. Inside Bar: Absolute number of people living in said neighborhoods On Y: Governorate from North to South. \\nSource: Damage estimates are from World Bank calculations derived from OpenStreetMap and Sentinel-1 data. Population desntiy estimates from WorldPop.\\nSize of each neighborhood is considered to be a 1km*1km grid. Damage estimates for the neighborhood are considered as average damage estimate of all buildings within the grid. \",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=11,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ")\n", - "\n", - "for id, bar in enumerate(ax.patches):\n", - " width = bar.get_width() # Use width since the bars are horizontal\n", - " ax.annotate(\n", - " f\"{absolute_damage_numbers[id] / 1_000:.0f}k\",\n", - " xy=(width, bar.get_y() + bar.get_height() / 2),\n", - " xytext=(-20, 0), # Shift the text to the left of the bar's end\n", - " textcoords=\"offset points\",\n", - " color=\"white\",\n", - " ha=\"right\",\n", - " va=\"center\",\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Observations \n", - "\n", - "* Both North Gaza (523k) and Gaza (869k) have higher population than Khan Younis (476k). This is a potential reason for why the damage is higher in Khan Younis but the people impacted are greater in the other two administrative regions.\n", - "* The population numbers are derived from WorldPop which uses machine learning code to distribute population density top-down. This means that sometimes, in areas where there are fewer people, the number reported in WorldPop could be higher and vice versa. Therefore, the numbers reported here are the best approximation we can make with the data available. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Percentage of Schools and Public Amenities Damaged" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "POI = geopandas.read_file(\n", - " \"../../data/damage_assessment/delivery8_2Feb2024/vectors/2.5sigma/damaged_pois_1_02Feb2024_2_5sigma.shp\"\n", - ").to_crs(\"EPSG:4326\")\n", - "\n", - "POI = geopandas.sjoin(POI, GAZA)\n", - "POI[\"fclass\"] = POI[\"fclass\"].fillna(\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "def get_poi_classification(fclass):\n", - " if fclass in [\n", - " \"school\",\n", - " \"kindergarten\",\n", - " \"university\",\n", - " \"college\",\n", - " ]:\n", - " return \"Education\"\n", - " if fclass in [\n", - " \"tower\",\n", - " \"wastewater_plant\",\n", - " \"water_tower\",\n", - " \"telephone\",\n", - " \"water_well\",\n", - " \"drinking_water\",\n", - " \"recycling\",\n", - " ]:\n", - " return \"Infrastructure\"\n", - " if fclass in [\n", - " \"pharmacy\",\n", - " \"dentist\",\n", - " \"doctors\",\n", - " \"hospital\",\n", - " \"clinic\",\n", - " \"nursing_home\",\n", - " ]:\n", - " return \"Health\"\n", - " if fclass in [\n", - " \"public_building\",\n", - " \"police\",\n", - " \"courthouse\",\n", - " \"library\",\n", - " \"monument\",\n", - " \"post_office\",\n", - " \"memorial\",\n", - " \"community_centre\",\n", - " \"town_hall\",\n", - " \"museum\",\n", - " \"arts_centre\",\n", - " \"sports_centre\",\n", - " \"tourist_info\",\n", - " \"fire_station\",\n", - " ]:\n", - " return \"Public Amenities\"\n", - "\n", - " elif fclass in [\n", - " \"clothes\",\n", - " \"supermarket\",\n", - " \"restaurant\",\n", - " \"laundry\",\n", - " \"cafe\",\n", - " \"computer_shop\",\n", - " \"convenience\",\n", - " \"furniture_shop\",\n", - " \"shoe_shop\",\n", - " \"bakery\",\n", - " \"hotel\",\n", - " \"hairdresser\",\n", - " \"fast_food\",\n", - " \"bank\",\n", - " \"viewpoint\",\n", - " \"artwork\",\n", - " \"picnic_site\",\n", - " \"chalet\",\n", - " \"caravan_site\",\n", - " \"greengrocer\",\n", - " \"beauty_shop\",\n", - " \"car_dealership\",\n", - " \"attraction\",\n", - " \"pub\",\n", - " \"waste_basket\",\n", - " \"nightclub\",\n", - " \"playground\",\n", - " \"department_store\",\n", - " \"outdoor_shop\",\n", - " \"atm\",\n", - " \"butcher\",\n", - " \"car_rental\",\n", - " \"doityourself\",\n", - " \"guesthouse\",\n", - " \"beverages\",\n", - " \"theatre\",\n", - " \"newsagent\",\n", - " \"cinema\",\n", - " \"mobile_phone_shop\",\n", - " \"car_wash\",\n", - " \"bookshop\",\n", - " \"hostel\",\n", - " \"sports_shop\",\n", - " \"castle\",\n", - " \"pitch\",\n", - " \"car_sharing\",\n", - " \"vending_machine\",\n", - " \"food_court\",\n", - " \"gift_shop\",\n", - " \"camp_site\",\n", - " \"veterinary\",\n", - " \"post_box\",\n", - " \"florist\",\n", - " \"jeweller\",\n", - " \"chemist\",\n", - " \"motel\",\n", - " \"alpine_hut\",\n", - " \"mall\",\n", - " \"kiosk\",\n", - " \"bicycle_shop\",\n", - " \"bench\",\n", - " \"optician\",\n", - " \"travel_agent\",\n", - " \"biergarten\",\n", - " \"toy_shop\",\n", - " \"bar\",\n", - " \"fountain\",\n", - " \"archaeological\",\n", - " \"shelter\",\n", - " \"park\",\n", - " \"stationery\",\n", - " \"market_place\",\n", - " \"zoo\",\n", - " ]:\n", - " return \"Places of Economic Activity\"" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "POI[\"type\"] = POI[\"fclass\"].apply(get_poi_classification)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "left = POI[POI[\"_up7max\"] >= 0.5].value_counts([\"ADM2_EN\", \"type\"]).to_frame(\"damaged\")\n", - "right = POI.value_counts([\"ADM2_EN\", \"type\"]).to_frame(\"total\")\n", - "\n", - "df = pd.merge(left, right, on=[\"ADM2_EN\", \"type\"]).reset_index()\n", - "df[\"perc\"] = 100 * df[\"damaged\"] / df[\"total\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "sort_order = [\"North Gaza\", \"Gaza\", \"Deir Al-Balah\", \"Khan Younis\", \"Rafah\"]\n", - "df[\"ADM2_EN\"] = pd.Categorical(df[\"ADM2_EN\"], categories=sort_order, ordered=True)\n", - "df.sort_values(by=\"ADM2_EN\", inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "education = df[df[\"type\"] == \"Education\"]\n", - "# education = education.pivot_table(\"perc\", \"ADM2_EN\", \"type\", observed=False)[['Education']].sort_values(by='ADM2_EN', ascending = False)\n", - "education = education[[\"ADM2_EN\", \"damaged\", \"total\", \"perc\"]]\n", - "\n", - "\n", - "public_amenities = df[df[\"type\"] == \"Education\"]\n", - "# education = education.pivot_table(\"perc\", \"ADM2_EN\", \"type\", observed=False)[['Education']].sort_values(by='ADM2_EN', ascending = False)\n", - "public_amenities = public_amenities[[\"ADM2_EN\", \"damaged\", \"total\", \"perc\"]]" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": { - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T10:35:21.577339\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(12, 6), dpi=300)\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Places of Education Damaged as of February 2nd 2024\",\n", - " y=0.99,\n", - " fontsize=20,\n", - " x=0.56,\n", - ")\n", - "\n", - "absolute_damage_numbers = list(\n", - " df.pivot_table(\"damaged\", \"ADM2_EN\", \"type\", observed=False).sort_values(\n", - " by=\"ADM2_EN\", ascending=False\n", - " )[\"Education\"]\n", - ")\n", - "\n", - "\n", - "ax = (\n", - " df.pivot_table(\"perc\", \"ADM2_EN\", \"type\", observed=False)[[\"Education\"]]\n", - " .sort_values(by=\"ADM2_EN\", ascending=False)\n", - " .plot(ax=ax, kind=\"barh\", color=TableauMedium_10.mpl_colors, legend=False)\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% Places of Education Damaged\", fontsize=12)\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{}%\".format(y)))\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "# ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.grid(which=\"both\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "# ax.legend(bbox_to_anchor=(1.01, 0.9))\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage (and absolute numbers) of places of education damaged in each Governorate\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "ax.text(\n", - " 0,\n", - " -0.17,\n", - " \"On X: Percentage of places of education damaged. Inside Bar: Absolute number of places of education damaged On Y: Governorate from North to South. \\nPlaces of education consist of buildings tagged 'schools', 'colleges', 'universities', 'kindergarten'\\nSource: World Bank calculations derived from OpenStreetMap and Sentinel-1 data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ")\n", - "\n", - "for id, bar in enumerate(ax.patches):\n", - " width = bar.get_width() # Use width since the bars are horizontal\n", - " ax.annotate(\n", - " f\"{int(np.round(absolute_damage_numbers[id],0))}\",\n", - " xy=(width, bar.get_y() + bar.get_height() / 2),\n", - " xytext=(-20, 0), # Shift the text to the left of the bar's end\n", - " textcoords=\"offset points\",\n", - " color=\"white\",\n", - " ha=\"right\",\n", - " va=\"center\",\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T10:37:18.580830\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(14, 6), dpi=300)\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Public Amenities Damaged as of February 2nd 2024\",\n", - " y=0.99,\n", - " fontsize=20,\n", - " x=0.49,\n", - ")\n", - "\n", - "absolute_damage_numbers = list(\n", - " public_amenities.pivot_table(\"damaged\", \"ADM2_EN\", observed=False).sort_values(\n", - " by=\"ADM2_EN\", ascending=False\n", - " )[\"damaged\"]\n", - ")\n", - "\n", - "\n", - "ax = (\n", - " public_amenities.pivot_table(\"perc\", \"ADM2_EN\", observed=False)[[\"perc\"]]\n", - " .sort_values(by=\"ADM2_EN\", ascending=False)\n", - " .plot(ax=ax, kind=\"barh\", color=TableauMedium_10.mpl_colors, legend=False)\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% Public Amenities Damaged\", fontsize=12)\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{:.0f}%\".format(y)))\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "# ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.grid(which=\"both\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "# ax.legend(bbox_to_anchor=(1.01, 0.9))\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage (and absolute numbers) of public amenities damaged in each Governorate\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "ax.text(\n", - " 0,\n", - " -0.17,\n", - " \"On X: Percentage of public amenities damaged. Inside Bar: Absolute number of public amenities damaged On Y: Governorate from North to South. \\nPublic amenities consist of 'public_building', 'police', 'courthouse', 'library', 'monument', 'post_office', 'memorial', 'community_centre', 'town_hall', 'museum', 'arts_centre', 'sports_centre', 'tourist_info', 'fire_station'\\nSource: World Bank calculations derived from OpenStreetMap and Sentinel-1 data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ")\n", - "\n", - "for id, bar in enumerate(ax.patches):\n", - " width = bar.get_width() # Use width since the bars are horizontal\n", - " ax.annotate(\n", - " f\"{int(np.round(absolute_damage_numbers[id],0))}\",\n", - " xy=(width, bar.get_y() + bar.get_height() / 2),\n", - " xytext=(-20, 0), # Shift the text to the left of the bar's end\n", - " textcoords=\"offset points\",\n", - " color=\"white\",\n", - " ha=\"right\",\n", - " va=\"center\",\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Percentage of Residential Buildings without Observed Nighttime Lights\n", - "\n", - "Lower nighttime lights intensity indicative of darker areas may correspond to higher numbers of residential buildings without electricity. The chart below shows the percentage of residential buildings retrieved from [OpenStreetMap](https://www.hotosm.org) for which the nighttime lights intensity has decreased as of December 2023 by at least 95% compared to September 2023 for each governorate in Gaza." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T08:05:31.177485\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(12, 6))\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Residential Buildings without Observed Nighttime Lights\",\n", - " y=1.01,\n", - " fontsize=20,\n", - " x=0.45,\n", - ")\n", - "\n", - "data = pd.read_csv(\n", - " \"../../data/ntl/PSE_2-buildings_without_electricity.csv\", index_col=\"name\"\n", - ")[[\"% residential buildings without electricity\"]].plot(\n", - " ax=ax, kind=\"barh\", color=TableauMedium_10.mpl_colors[1], legend=False\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% residential buildings without electricity \", fontsize=12)\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{:.0f}%\".format(y)))\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.grid(which=\"both\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "\n", - "# ax.set_title(\n", - "# \"Estimated percentage of buildings without electricity for each governorate\",\n", - "# fontsize=14,\n", - "# )\n", - "ax.text(\n", - " 0,\n", - " -0.13,\n", - " \"Source: World Bank calculations derived from NASA Black Marble and OpenStreetMap data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ");" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "# population_impacted.rename(columns = {'perc':'% Population in Neighborhoods with Damaged Buildings','damage_population':'People in Neighborhoods with Damaged Buildings'}, inplace=True)\n", - "residential.rename(\n", - " columns={\n", - " \"damaged\": \"Number of Residential Buildings Damaged\",\n", - " \"total\": \"residential_total\",\n", - " \"perc\": \"% Residential Buildings Damaged\",\n", - " },\n", - " inplace=True,\n", - ")\n", - "places_of_worship.rename(\n", - " columns={\n", - " \"damaged\": \"Number of Places of Worship Damaged\",\n", - " \"total\": \"places_of_worship_total\",\n", - " \"perc\": \"% Places of Worship Damaged\",\n", - " },\n", - " inplace=True,\n", - ")\n", - "education.rename(\n", - " columns={\n", - " \"damaged\": \"Number of Places of Education Damaged\",\n", - " \"total\": \"education_total\",\n", - " \"perc\": \"% Places of Education Damaged\",\n", - " },\n", - " inplace=True,\n", - ")\n", - "public_amenities.rename(\n", - " columns={\n", - " \"damaged\": \"Number of Public Amenities Damaged\",\n", - " \"total\": \"public_amenities_total\",\n", - " \"perc\": \"% Public Amenities Damaged\",\n", - " },\n", - " inplace=True,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "ntl = pd.read_csv(\n", - " \"../../data/ntl/PSE_2-buildings_without_electricity.csv\", index_col=\"name\"\n", - ")[[\"% residential buildings without electricity\"]]\n", - "ntl.rename(\n", - " columns={\n", - " \"% residential buildings without electricity\": \"% Residential Buildings without Observed Nighttime Lights\"\n", - " },\n", - " inplace=True,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "ntl = ntl.reset_index()\n", - "ntl.rename(columns={\"name\": \"ADM2_EN\"}, inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "from functools import reduce\n", - "\n", - "summary_stats_list = [\n", - " residential,\n", - " places_of_worship,\n", - " population_impacted,\n", - " education,\n", - " public_amenities,\n", - " ntl,\n", - "]\n", - "summary_stats = reduce(\n", - " lambda left, right: pd.merge(left, right, on=\"ADM2_EN\", how=\"outer\"),\n", - " summary_stats_list,\n", - ")\n", - "\n", - "summary_stats.drop(columns=[\"type_x\", \"type_y\"], inplace=True)\n", - "\n", - "summary_stats.set_index(\"ADM2_EN\", inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "summary_stats.to_csv(\"../../data/summary_stats_housing_community.csv\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "lebanon-economic-monitor", - "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.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/reports/sample-indicators/industry-and-commerce.ipynb b/reports/sample-indicators/industry-and-commerce.ipynb deleted file mode 100644 index d506468..0000000 --- a/reports/sample-indicators/industry-and-commerce.ipynb +++ /dev/null @@ -1,13879 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Impact on Industry and Commerce\n", - "\n", - "* Percentage of commercial and commericial buildings damaged\n", - "* Percentage of commercial and industrial buildings without electricity \n", - "* Percentage of places of economic activity damaged" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "import geopandas\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "import pandas as pd\n", - "from matplotlib.ticker import FuncFormatter\n", - "from palettable.tableau import ColorBlind_10, TableauMedium_10\n", - "\n", - "%config InlineBackend.figure_formats = ['svg']\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Overall Impact on Industry and Commerce" - ] - }, - { - "cell_type": "code", - "execution_count": 197, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "sort_order = [\"North Gaza\", \"Gaza\", \"Deir Al-Balah\", \"Khan Younis\", \"Rafah\"]\n", - "summary_stats.reset_index(inplace=True)\n", - "summary_stats[\"ADM2_EN\"] = pd.Categorical(\n", - " summary_stats[\"ADM2_EN\"], categories=sort_order, ordered=True\n", - ")\n", - "summary_stats.sort_values(by=\"ADM2_EN\", inplace=True)\n", - "summary_stats.rename(columns={\"ADM2_EN\": \"Governorate\"}, inplace=True)\n", - "summary_stats.set_index(\"Governorate\", inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "metadata": { - "tags": [ - "hide-input" - ] - }, - "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", - "
 % Commercial Buildings Damaged% Industrial Buildings Damaged% Critical Infrastructure Damaged% Places of Economic Activity Damaged% Industrial Buildings without Observed Nighttime Lights% Commercial Buildings without Observed Nighttime Lights% Primary and Secondary Roads Damaged
Governorate       
North Gaza50%63%49%66%29%67%63%
Gaza86%59%71%76%49%96%63%
Deir Al-Balah33%40%56%34%83%100%20%
Khan Younis50%34%46%44%49%100%29%
Rafah30%44%55%49%nan%nan%33%
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 183, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summary_stats[\n", - " [\n", - " \"% Commercial Buildings Damaged\",\n", - " \"% Industrial Buildings Damaged\",\n", - " \"% Critical Infrastructure Damaged\",\n", - " \"% Places of Economic Activity Damaged\",\n", - " \"% Industrial Buildings without Observed Nighttime Lights\",\n", - " \"% Commercial Buildings without Observed Nighttime Lights\",\n", - " \"% Primary and Secondary Roads Damaged\",\n", - " ]\n", - "].style.background_gradient(cmap=\"viridis\", axis=0).format(\"{:.0f}%\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Observations\n", - "\n", - "* The Governorate of Gaza has seen the highest impact for industry and commerce.\n", - "* North Gaza has the second highest amount of roads damaged both in absolute figures and percentage values.\n", - "* While some of the industrial buildings are damaged, a higher percentage of them do not have oberserved nighttime lights. This could slow down economic activity significantly.\n", - "* Critical Infrstructure Points consist of telecommunication towers, drinking water wells and waste treatment plants. The damage to these points could imply a hit on access to drinking water for the people in Gaza. " - ] - }, - { - "cell_type": "code", - "execution_count": 202, - "metadata": { - "tags": [ - "remove-input" - ] - }, - "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", - "
 Number of Commercial Buildings DamagedNumber of Industrial Buildings DamagedNumber of Points of Critical Infrastructure DamagedNumber of Places of Economic Activity DamagedPrimary and Secondary Damaged Roads (in km)
Governorate     
North Gaza1152253183527
Gaza182773595712733
Deir Al-Balah17814191374
Khan Younis340181952062
Rafah32612742190
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 202, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "summary_stats[\n", - " [\n", - " \"Number of Commercial Buildings Damaged\",\n", - " \"Number of Industrial Buildings Damaged\",\n", - " \"Number of Points of Critical Infrastructure Damaged\",\n", - " \"Number of Places of Economic Activity Damaged\",\n", - " \"Primary and Secondary Damaged Roads (in km)\",\n", - " ]\n", - "].style.background_gradient(cmap=\"viridis\", axis=0).format(\"{:.0f}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "# read shapefiles\n", - "PSE = geopandas.read_file(\n", - " \"../../data/boundaries/pse_adm_pamop_20231019_shp/pse_admbnda_adm1_pamop_20231019.shp\"\n", - ")\n", - "PSE = geopandas.read_file(\n", - " \"../../data/boundaries/pse_adm_pamop_20231019_shp/pse_admbnda_adm2_pamop_20231019.shp\"\n", - ")\n", - "GAZA = PSE[PSE[\"ADM1_EN\"] == \"Gaza Strip\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 208, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "BUILDINGS_OSM = geopandas.read_file(\n", - " \"../../data/damage_assessment/delivery8_2Feb2024/vectors/2.5sigma/damaged_OSM_buildings_02Feb2024_2_5sigma.shp\"\n", - ").to_crs(\"EPSG:4326\")\n", - "\n", - "BUILDINGS_OSM = geopandas.sjoin(BUILDINGS_OSM, GAZA)\n", - "BUILDINGS_OSM[\"type\"] = BUILDINGS_OSM[\"type\"].fillna(\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 209, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "commerce = BUILDINGS_OSM[\n", - " BUILDINGS_OSM[\"type\"].isin(\n", - " [\n", - " \"commericial\",\n", - " \"warehouse\",\n", - " \"retail\",\n", - " \"service\",\n", - " \"hotel\",\n", - " \"yes;commercial\",\n", - " \"garage\",\n", - " ]\n", - " )\n", - "]\n", - "industry = BUILDINGS_OSM[\n", - " BUILDINGS_OSM[\"type\"].isin([\"industry\", \"construction\", \"industrial\"])\n", - "]\n", - "\n", - "commerce.loc[:, \"type\"] = \"commercial\"\n", - "industry.loc[:, \"type\"] = \"industry\"" - ] - }, - { - "cell_type": "code", - "execution_count": 210, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "def get_percentage(industry_and_commerce):\n", - " left = (\n", - " industry_and_commerce[industry_and_commerce[\"_up7mean\"] >= 0.2]\n", - " .value_counts([\"ADM2_EN\", \"type\"])\n", - " .to_frame(\"damaged\")\n", - " )\n", - " right = industry_and_commerce.value_counts([\"ADM2_EN\", \"type\"]).to_frame(\"total\")\n", - "\n", - " df = pd.merge(left, right, on=[\"ADM2_EN\", \"type\"]).reset_index()\n", - " df[\"perc\"] = 100 * df[\"damaged\"] / df[\"total\"]\n", - "\n", - " sort_order = [\"North Gaza\", \"Gaza\", \"Deir Al-Balah\", \"Khan Younis\", \"Rafah\"]\n", - " df[\"ADM2_EN\"] = pd.Categorical(df[\"ADM2_EN\"], categories=sort_order, ordered=True)\n", - " df.sort_values(by=\"ADM2_EN\", inplace=True)\n", - "\n", - " return df" - ] - }, - { - "cell_type": "code", - "execution_count": 211, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "industry = get_percentage(industry)\n", - "commerce = get_percentage(commerce)" - ] - }, - { - "cell_type": "code", - "execution_count": 215, - "metadata": { - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T10:39:52.699565\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(12, 6))\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Damaged Industrial Buildings as of February 2nd 2024\",\n", - " y=0.99,\n", - " fontsize=20,\n", - " x=0.56,\n", - ")\n", - "\n", - "absolute_damage_numbers = list(\n", - " industry.pivot_table(\"damaged\", \"ADM2_EN\", \"type\", observed=False).sort_values(\n", - " by=\"ADM2_EN\", ascending=False\n", - " )[\"industry\"]\n", - ")\n", - "\n", - "ax = (\n", - " industry[industry[\"type\"] == \"industry\"]\n", - " .pivot_table(\"perc\", \"ADM2_EN\", \"type\", observed=False)\n", - " .sort_values(by=\"ADM2_EN\", ascending=False)[\"industry\"]\n", - " .plot(ax=ax, kind=\"barh\", legend=False)\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% Industrial Buildings Damaged\", fontsize=12)\n", - "\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "# ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{:.0f}%\".format(y)))\n", - "\n", - "ax.grid(axis=\"x\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "# ax.legend()\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage (and absolute numbers) of damaged industrial buildings in each Governorate\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "ax.text(\n", - " 0,\n", - " -0.2,\n", - " \"On X: Percentage of industrial buildings damaged. Inside Bar: Absolute number of industrial buildings damaged On Y: Governorate from North to South.\\nIndustrial buildings consist of buildings tagged 'industrial', 'construction'\\nSource: World Bank calculations derived from OpenStreetMap and Sentinel-1 data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ")\n", - "\n", - "for id, bar in enumerate(ax.patches):\n", - " width = bar.get_width() # Use width since the bars are horizontal\n", - " ax.annotate(\n", - " f\"{int(np.round(absolute_damage_numbers[id],0))}\",\n", - " xy=(width, bar.get_y() + bar.get_height() / 2),\n", - " xytext=(-20, 0), # Shift the text to the left of the bar's end\n", - " textcoords=\"offset points\",\n", - " color=\"white\",\n", - " ha=\"right\",\n", - " va=\"center\",\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Observations and Limitations\n", - "\n", - "* The number of buildings tagged as industrial and commerical on the OpenStreetMap database are few, this could explain the high percentge of damage seen in the North Gaza Governorate. " - ] - }, - { - "cell_type": "code", - "execution_count": 218, - "metadata": { - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T10:40:21.336653\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(12, 6))\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Damaged Commercial Buildings as of February 2nd 2024\",\n", - " y=0.99,\n", - " fontsize=20,\n", - " x=0.57,\n", - ")\n", - "\n", - "absolute_damage_numbers = list(\n", - " commerce.pivot_table(\"damaged\", \"ADM2_EN\", \"type\", observed=False).sort_values(\n", - " by=\"ADM2_EN\", ascending=False\n", - " )[\"commercial\"]\n", - ")\n", - "\n", - "ax = (\n", - " commerce.pivot_table(\"perc\", \"ADM2_EN\", \"type\", observed=False)\n", - " .sort_values(by=\"ADM2_EN\", ascending=False)[\"commercial\"]\n", - " .plot(ax=ax, kind=\"barh\", legend=False)\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% Commercial Buildings Damaged\", fontsize=12)\n", - "\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "# ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{:.0f}%\".format(y)))\n", - "\n", - "ax.grid(axis=\"x\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "# ax.legend()\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage (and absolute numbers) of damaged commercial buildings in each Governorate\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "ax.text(\n", - " 0,\n", - " -0.2,\n", - " \"On X: Percentage of commercial buildings damaged. Inside Bar: Absolute number of commercial buildings damaged On Y: Governorate from North to South.\\nCommercial buildings consist of buildings tagged 'commercial', 'retail', 'hotel', 'service'\\nSource: World Bank calculations derived from OpenStreetMap and Sentinel-1 data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ")\n", - "\n", - "for id, bar in enumerate(ax.patches):\n", - " width = bar.get_width() # Use width since the bars are horizontal\n", - " ax.annotate(\n", - " f\"{int(np.round(absolute_damage_numbers[id],0))}\",\n", - " xy=(width, bar.get_y() + bar.get_height() / 2),\n", - " xytext=(-20, 0), # Shift the text to the left of the bar's end\n", - " textcoords=\"offset points\",\n", - " color=\"white\",\n", - " ha=\"right\",\n", - " va=\"center\",\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Percentage of Points of Interest Damaged" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "POI = geopandas.read_file(\n", - " \"../../data/damage_assessment/delivery8_2Feb2024/vectors/2.5sigma/damaged_pois_1_02Feb2024_2_5sigma.shp\"\n", - ").to_crs(\"EPSG:4326\")\n", - "\n", - "POI = geopandas.sjoin(POI, GAZA)\n", - "POI[\"fclass\"] = POI[\"fclass\"].fillna(\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "def get_poi_classification(fclass):\n", - " if fclass in [\n", - " \"school\",\n", - " \"kindergarten\",\n", - " \"university\",\n", - " \"college\",\n", - " ]:\n", - " return \"Education\"\n", - " if fclass in [\n", - " \"tower\",\n", - " \"wastewater_plant\",\n", - " \"water_tower\",\n", - " \"telephone\",\n", - " \"water_well\",\n", - " \"drinking_water\",\n", - " \"recycling\",\n", - " ]:\n", - " return \"Critical Infrastructure\"\n", - " if fclass in [\n", - " \"pharmacy\",\n", - " \"dentist\",\n", - " \"doctors\",\n", - " \"hospital\",\n", - " \"clinic\",\n", - " \"nursing_home\",\n", - " ]:\n", - " return \"Health\"\n", - " if fclass in [\n", - " \"public_building\",\n", - " \"police\",\n", - " \"courthouse\",\n", - " \"library\",\n", - " \"monument\",\n", - " \"post_office\",\n", - " \"memorial\",\n", - " \"community_centre\",\n", - " \"town_hall\",\n", - " \"museum\",\n", - " \"arts_centre\",\n", - " \"sports_centre\",\n", - " \"tourist_info\",\n", - " \"fire_station\",\n", - " ]:\n", - " return \"Public Amenities\"\n", - "\n", - " elif fclass in [\n", - " \"clothes\",\n", - " \"supermarket\",\n", - " \"restaurant\",\n", - " \"laundry\",\n", - " \"cafe\",\n", - " \"computer_shop\",\n", - " \"convenience\",\n", - " \"furniture_shop\",\n", - " \"shoe_shop\",\n", - " \"bakery\",\n", - " \"hotel\",\n", - " \"hairdresser\",\n", - " \"fast_food\",\n", - " \"bank\",\n", - " \"viewpoint\",\n", - " \"artwork\",\n", - " \"picnic_site\",\n", - " \"chalet\",\n", - " \"caravan_site\",\n", - " \"greengrocer\",\n", - " \"beauty_shop\",\n", - " \"car_dealership\",\n", - " \"attraction\",\n", - " \"pub\",\n", - " \"waste_basket\",\n", - " \"nightclub\",\n", - " \"playground\",\n", - " \"department_store\",\n", - " \"outdoor_shop\",\n", - " \"atm\",\n", - " \"butcher\",\n", - " \"car_rental\",\n", - " \"doityourself\",\n", - " \"guesthouse\",\n", - " \"beverages\",\n", - " \"theatre\",\n", - " \"newsagent\",\n", - " \"cinema\",\n", - " \"mobile_phone_shop\",\n", - " \"car_wash\",\n", - " \"bookshop\",\n", - " \"hostel\",\n", - " \"sports_shop\",\n", - " \"castle\",\n", - " \"pitch\",\n", - " \"car_sharing\",\n", - " \"vending_machine\",\n", - " \"food_court\",\n", - " \"gift_shop\",\n", - " \"camp_site\",\n", - " \"veterinary\",\n", - " \"post_box\",\n", - " \"florist\",\n", - " \"jeweller\",\n", - " \"chemist\",\n", - " \"motel\",\n", - " \"alpine_hut\",\n", - " \"mall\",\n", - " \"kiosk\",\n", - " \"bicycle_shop\",\n", - " \"bench\",\n", - " \"optician\",\n", - " \"travel_agent\",\n", - " \"biergarten\",\n", - " \"toy_shop\",\n", - " \"bar\",\n", - " \"fountain\",\n", - " \"archaeological\",\n", - " \"shelter\",\n", - " \"park\",\n", - " \"stationery\",\n", - " \"market_place\",\n", - " \"zoo\",\n", - " ]:\n", - " return \"Places of Economic Activity\"" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "POI[\"type\"] = POI[\"fclass\"].apply(get_poi_classification)" - ] - }, - { - "cell_type": "code", - "execution_count": 219, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "left = POI[POI[\"_up7max\"] >= 0.5].value_counts([\"ADM2_EN\", \"type\"]).to_frame(\"damaged\")\n", - "right = POI.value_counts([\"ADM2_EN\", \"type\"]).to_frame(\"total\")\n", - "\n", - "df = pd.merge(left, right, on=[\"ADM2_EN\", \"type\"]).reset_index()\n", - "df[\"perc\"] = 100 * df[\"damaged\"] / df[\"total\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 220, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "sort_order = [\"North Gaza\", \"Gaza\", \"Deir Al-Balah\", \"Khan Younis\", \"Rafah\"]\n", - "df[\"ADM2_EN\"] = pd.Categorical(df[\"ADM2_EN\"], categories=sort_order, ordered=True)\n", - "df.sort_values(by=\"ADM2_EN\", inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 221, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "economy = df[df[\"type\"] == \"Places of Economic Activity\"]\n", - "# education = education.pivot_table(\"perc\", \"ADM2_EN\", \"type\", observed=False)[['Education']].sort_values(by='ADM2_EN', ascending = False)\n", - "economy = economy[[\"ADM2_EN\", \"damaged\", \"total\", \"perc\"]]\n", - "\n", - "\n", - "critical_infrastructure = df[df[\"type\"] == \"Critical Infrastructure\"]\n", - "# education = education.pivot_table(\"perc\", \"ADM2_EN\", \"type\", observed=False)[['Education']].sort_values(by='ADM2_EN', ascending = False)\n", - "critical_infrastructure = critical_infrastructure[\n", - " [\"ADM2_EN\", \"damaged\", \"total\", \"perc\"]\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": 222, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "sort_order = [\"North Gaza\", \"Gaza\", \"Deir Al-Balah\", \"Khan Younis\", \"Rafah\"]\n", - "economy[\"ADM2_EN\"] = pd.Categorical(\n", - " economy[\"ADM2_EN\"], categories=sort_order, ordered=True\n", - ")\n", - "economy.sort_values(by=\"ADM2_EN\", inplace=True)\n", - "\n", - "sort_order = [\"North Gaza\", \"Gaza\", \"Deir Al-Balah\", \"Khan Younis\", \"Rafah\"]\n", - "critical_infrastructure[\"ADM2_EN\"] = pd.Categorical(\n", - " critical_infrastructure[\"ADM2_EN\"], categories=sort_order, ordered=True\n", - ")\n", - "critical_infrastructure.sort_values(by=\"ADM2_EN\", inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 237, - "metadata": { - "scrolled": true, - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T10:57:40.008394\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(12, 6), dpi=300)\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Places of Economic Activity Damaged as of February 2nd 2024\",\n", - " y=0.99,\n", - " fontsize=20,\n", - " x=0.6,\n", - ")\n", - "\n", - "absolute_damage_numbers = list(\n", - " economy.pivot_table(\"damaged\", \"ADM2_EN\", observed=False)[\"damaged\"]\n", - ")\n", - "\n", - "\n", - "ax = (\n", - " economy.pivot_table(\"perc\", \"ADM2_EN\", observed=False)[[\"perc\"]]\n", - " .sort_values(by=\"ADM2_EN\", ascending=False)\n", - " .plot(ax=ax, kind=\"barh\", color=TableauMedium_10.mpl_colors, legend=False)\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% Places of Economic Activity Damaged\", fontsize=12)\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{}%\".format(y)))\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "# ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.grid(which=\"both\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "# ax.legend(bbox_to_anchor=(1.01, 0.9))\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage (and absolute numbers) of Places of Economic Activity damaged in each Governorate\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "ax.text(\n", - " 0,\n", - " -0.17,\n", - " \"On X: Percentage of Places of Economic Activity damaged. Inside Bar: Absolute number of Places of Economic Activity damaged On Y: Governorate from North to South. \\nCritical infrastructure consists of points tagged as 'tower', 'wastewater_plant', 'water_tower', 'telephone', 'water_well', 'drinking_water', 'recycling'\\nSource: World Bank calculations derived from OpenStreetMap and Sentinel-1 data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ")\n", - "\n", - "for id, bar in enumerate(ax.patches):\n", - " width = bar.get_width() # Use width since the bars are horizontal\n", - " ax.annotate(\n", - " f\"{int(np.round(absolute_damage_numbers[id],0))}\",\n", - " xy=(width, bar.get_y() + bar.get_height() / 2),\n", - " xytext=(-20, 0), # Shift the text to the left of the bar's end\n", - " textcoords=\"offset points\",\n", - " color=\"white\",\n", - " ha=\"right\",\n", - " va=\"center\",\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Observations and Limitations\n", - "\n", - "* The damage to places of economic activity could mean the loss of access to essential supplies, food, public recreation spots, electronic stores and more. \n", - "* Although Khan Younis has slightly over 40% of points damaged, but there are 957 different locations that were damaged. \n", - "\n", - "\n", - "* Places of economic activity are all the points tagged as -\n", - "\"clothes\", \"supermarket\", \"restaurant\", \"laundry\", \"cafe\", \"computer_shop\", \"convenience\", \"furniture_shop\", \"shoe_shop\", \"bakery\", \"hotel\", \"hairdresser\", \"fast_food\", \"bank\", \"viewpoint\", \"artwork\", \"picnic_site\", \"chalet\", \"caravan_site\", \"greengrocer\", \"beauty_shop\", \"car_dealership\", \"attraction\", \"pub\", \"waste_basket\", \"nightclub\", \"playground\", \"department_store\", \"outdoor_shop\", \"atm\", \"butcher\", \"car_rental\", \"doityourself\", \"guesthouse\", \"beverages\", \"theatre\", \"newsagent\", \"cinema\", \"mobile_phone_shop\", \"car_wash\", \"bookshop\", \"hostel\", \"sports_shop\", \"castle\", \"pitch\", \"car_sharing\", \"vending_machine\", \"food_court\", \"gift_shop\", \"camp_site\", \"veterinary\", \"post_box\", \"florist\", \"jeweller\", \"chemist\", \"motel\", \"alpine_hut\", \"mall\", \"kiosk\", \"bicycle_shop\", \"bench\", \"optician\", \"travel_agent\", \"biergarten\", \"toy_shop\", \"bar\", \"fountain\", \"archaeological\", \"shelter\", \"park\", \"stationery\", \"market_place\", \"zoo\"" - ] - }, - { - "cell_type": "code", - "execution_count": 225, - "metadata": { - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T10:41:24.526267\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(12, 6), dpi=300)\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Critical Infrastructure Damaged as of February 2nd 2024\",\n", - " y=0.99,\n", - " fontsize=20,\n", - " x=0.57,\n", - ")\n", - "\n", - "absolute_damage_numbers = list(\n", - " critical_infrastructure.pivot_table(\n", - " \"damaged\", \"ADM2_EN\", observed=False\n", - " ).sort_values(by=\"ADM2_EN\", ascending=False)[\"damaged\"]\n", - ")\n", - "\n", - "\n", - "ax = (\n", - " critical_infrastructure.pivot_table(\"perc\", \"ADM2_EN\", observed=False)[[\"perc\"]]\n", - " .sort_values(by=\"ADM2_EN\", ascending=False)\n", - " .plot(ax=ax, kind=\"barh\", color=TableauMedium_10.mpl_colors, legend=False)\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% Critical Infrastructure Damaged\", fontsize=12)\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{}%\".format(y)))\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "# ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.grid(which=\"both\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "# ax.legend(bbox_to_anchor=(1.01, 0.9))\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage (and absolute numbers) of critical infrastructure damaged in each Governorate\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "ax.text(\n", - " 0,\n", - " -0.14,\n", - " \"On X: Percentage of Critical Infrastructure damaged. Inside Bar: Absolute number of Critical Infrastructure damaged On Y: Governorate from North to South. \\nSource: World Bank calculations derived from OpenStreetMap and Sentinel-1 data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ")\n", - "\n", - "for id, bar in enumerate(ax.patches):\n", - " width = bar.get_width() # Use width since the bars are horizontal\n", - " ax.annotate(\n", - " f\"{int(np.round(absolute_damage_numbers[id],0))}\",\n", - " xy=(width, bar.get_y() + bar.get_height() / 2),\n", - " xytext=(-20, 0), # Shift the text to the left of the bar's end\n", - " textcoords=\"offset points\",\n", - " color=\"white\",\n", - " ha=\"right\",\n", - " va=\"center\",\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "## Percentage of Industrial and Commerical Buildings without Observed Nighttime Lights\n", - "\n", - "Lower nighttime lights intensity indicative of darker areas may correspond to higher numbers of residential buildings without electricity. The chart below shows the percentage of residential buildings retrieved from [OpenStreetMap](https://www.hotosm.org) for which the nighttime lights intensity has decreased as of December 2023 by at least 95% compared to September 2023 for each governorate in Gaza." - ] - }, - { - "cell_type": "code", - "execution_count": 234, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "ntl = pd.read_csv(\n", - " \"../../data/ntl/PSE_2-buildings_without_electricity.csv\", index_col=\"name\"\n", - ")[\n", - " [\n", - " \"% industrial buildings without electricity\",\n", - " \"% commercial buildings without electricity\",\n", - " ]\n", - "]\n", - "ntl.rename(\n", - " columns={\n", - " \"% industrial buildings without electricity\": \"industrial\",\n", - " \"% commercial buildings without electricity\": \"commercial\",\n", - " },\n", - " inplace=True,\n", - ")\n", - "\n", - "ntl = ntl.reset_index()\n", - "ntl.rename(columns={\"name\": \"ADM2_EN\"}, inplace=True)\n", - "ntl.set_index(\"ADM2_EN\", inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 235, - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T10:46:28.310746\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(12, 6))\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Industrial and Commerical Buildings without Observed Nighttime Lights\",\n", - " y=0.99,\n", - " fontsize=20,\n", - " x=0.66,\n", - ")\n", - "\n", - "data = ntl[[\"industrial\", \"commercial\"]].plot(\n", - " ax=ax, kind=\"barh\", color=TableauMedium_10.mpl_colors\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% buildings without electricity \", fontsize=12)\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{:.0f}%\".format(y)))\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.grid(which=\"both\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "\n", - "# ax.set_title(\n", - "# \"Estimated percentage of buildings without electricity for each governorate\",\n", - "# fontsize=14,\n", - "# )\n", - "ax.text(\n", - " 0,\n", - " -0.12,\n", - " \"Source: World Bank calculations derived from NASA Black Marble and OpenStreetMap data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ");" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "source": [ - "```{warning}\n", - "It's important to be aware of the limitations and potential inaccuracies associated with using OpenStreetMap (OSM) data for analysis. While OSM provides a valuable source of geographic information, it may not always be comprehensive or up-to-date. Additionally, the granularity of OSM data can vary, leading to coarse sample sizes in certain regions. Failure to account for these limitations could result in misleading conclusions or ineffective strategies.\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Percentage of Primary and Secondary Roads Damaged" - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "ROADS = geopandas.read_file(\n", - " \"../../data/damage_assessment/delivery8_2Feb2024/vectors/2.5sigma/damaged_roads_lines_02Feb2024_2_5sigma.shp\"\n", - ").to_crs(\"EPSG:4326\")\n", - "\n", - "ROADS = geopandas.sjoin(ROADS, GAZA)" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "mapper = {\n", - " \"track\": \"Tracks\",\n", - " \"unclassified\": \"Unclassified\",\n", - " \"residential\": \"Other\",\n", - " \"tertiary\": \"Tertiary\",\n", - " \"service\": \"Other\",\n", - " \"secondary\": \"Secondary\",\n", - " \"track_grade3\": \"Tracks\",\n", - " \"track_grade5\": \"Tracks\",\n", - " \"trunk\": \"Other\",\n", - " \"path\": \"Other\",\n", - " \"track_grade4\": \"Tracks\",\n", - " \"primary\": \"Primary\",\n", - " \"secondary_link\": \"Secondary\",\n", - " \"footway\": \"Other\",\n", - " \"steps\": \"Other\",\n", - " \"tertiary_link\": \"Tertiary\",\n", - " \"trunk_link\": \"Other\",\n", - " \"pedestrian\": \"Other\",\n", - " \"primary_link\": \"Primary\",\n", - " \"living_street\": \"Other\",\n", - " \"unknown\": \"Unclassified\",\n", - " \"track_grade1\": \"Tracks\",\n", - "}\n", - "ROADS[\"type\"] = ROADS[\"fclass\"].replace(mapper)" - ] - }, - { - "cell_type": "code", - "execution_count": 226, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "def get_percentage(ROADS):\n", - " left = (\n", - " ROADS[ROADS[\"_up7max\"] >= 0.5]\n", - " .value_counts([\"ADM2_EN\", \"type\"])\n", - " .to_frame(\"damaged\")\n", - " )\n", - " right = ROADS.value_counts([\"ADM2_EN\", \"type\"]).to_frame(\"total\")\n", - "\n", - " df = pd.merge(left, right, on=[\"ADM2_EN\", \"type\"]).reset_index()\n", - " df[\"perc\"] = 100 * df[\"damaged\"] / df[\"total\"]\n", - "\n", - " sort_order = [\"North Gaza\", \"Gaza\", \"Deir Al-Balah\", \"Khan Younis\", \"Rafah\"]\n", - " df[\"ADM2_EN\"] = pd.Categorical(df[\"ADM2_EN\"], categories=sort_order, ordered=True)\n", - " df.sort_values(by=\"ADM2_EN\", inplace=True, ascending=True)\n", - "\n", - " return df" - ] - }, - { - "cell_type": "code", - "execution_count": 227, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "primary_secondary_roads = ROADS[ROADS[\"type\"].isin([\"Primary\", \"Secondary\"])]\n", - "primary_secondary_roads.loc[:, \"type\"] = \"Primary and Secondary\"\n", - "\n", - "primary_secondary_roads = get_percentage(primary_secondary_roads)" - ] - }, - { - "cell_type": "code", - "execution_count": 241, - "metadata": { - "tags": [ - "hide-input" - ] - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " 2024-02-07T11:04:53.572616\n", - " image/svg+xml\n", - " \n", - " \n", - " Matplotlib v3.7.2, https://matplotlib.org/\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n" - ], - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(12, 6))\n", - "plt.suptitle(\n", - " \"Gaza: Percentage of Primary and Secondary Roads Damaged as of February 2nd 2024\",\n", - " y=0.98,\n", - " fontsize=20,\n", - " x=0.62,\n", - ")\n", - "\n", - "absolute_damage_numbers = list(\n", - " primary_secondary_roads.pivot_table(\n", - " \"damaged\", \"ADM2_EN\", observed=False\n", - " ).sort_values(by=\"ADM2_EN\", ascending=False)[\"damaged\"]\n", - ")\n", - "\n", - "\n", - "ax = (\n", - " primary_secondary_roads.pivot_table(\"perc\", \"ADM2_EN\", \"type\", observed=False)\n", - " .sort_values(by=\"ADM2_EN\", ascending=False)\n", - " .plot(ax=ax, kind=\"barh\", color=ColorBlind_10.mpl_colors, legend=False)\n", - ")\n", - "\n", - "# Add labels and customization\n", - "ax.set_xlabel(\"% Primary and Secondary Roads Damaged\", fontsize=12)\n", - "ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: \"{:.0f}%\".format(y)))\n", - "ax.set_ylabel(\"Governorate\", fontsize=16)\n", - "# ax.set_yticklabels(df[\"ADM2_EN\"].unique(), fontsize=12)\n", - "ax.spines[\"right\"].set_visible(False)\n", - "ax.spines[\"top\"].set_visible(False)\n", - "\n", - "# Only show ticks on the left and bottom spines\n", - "ax.yaxis.set_ticks_position(\"left\")\n", - "ax.xaxis.set_ticks_position(\"bottom\")\n", - "ax.grid(which=\"both\", linestyle=\"--\", linewidth=0.25, color=\"gray\", alpha=0.5)\n", - "# ax.legend(bbox_to_anchor=(1.01, 0.9))\n", - "\n", - "ax.set_title(\n", - " \"Estimated percentage (and absolute numbers in km) of damaged roads in each Governorate\",\n", - " fontsize=14,\n", - " loc=\"left\",\n", - ")\n", - "ax.text(\n", - " 0,\n", - " -0.13,\n", - " \"Source: World Bank calculations derived from OpenStreetMap and Sentinel-1 data.\",\n", - " ha=\"left\",\n", - " va=\"center\",\n", - " transform=ax.transAxes,\n", - " fontsize=10,\n", - " color=\"black\",\n", - " weight=\"normal\",\n", - ")\n", - "\n", - "for id, bar in enumerate(ax.patches):\n", - " width = bar.get_width() # Use width since the bars are horizontal\n", - " ax.annotate(\n", - " f\"{int(np.round(absolute_damage_numbers[id],0))}\",\n", - " xy=(width, bar.get_y() + bar.get_height() / 2),\n", - " xytext=(-20, 0), # Shift the text to the left of the bar's end\n", - " textcoords=\"offset points\",\n", - " color=\"white\",\n", - " ha=\"right\",\n", - " va=\"center\",\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 172, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "ntl = pd.read_csv(\n", - " \"../../data/ntl/PSE_2-buildings_without_electricity.csv\", index_col=\"name\"\n", - ")[\n", - " [\n", - " \"% industrial buildings without electricity\",\n", - " \"% commercial buildings without electricity\",\n", - " ]\n", - "]\n", - "ntl.rename(\n", - " columns={\n", - " \"% industrial buildings without electricity\": \"% Industrial Buildings without Observed Nighttime Lights\",\n", - " \"% commercial buildings without electricity\": \"% Commercial Buildings without Observed Nighttime Lights\",\n", - " },\n", - " inplace=True,\n", - ")\n", - "\n", - "ntl = ntl.reset_index()\n", - "ntl.rename(columns={\"name\": \"ADM2_EN\"}, inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 189, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "critical_infrastructure.rename(\n", - " columns={\n", - " \"perc\": \"% Critical Infrastructure Damaged\",\n", - " \"damaged\": \"Number of Points of Critical Infrastructure Damaged\",\n", - " },\n", - " inplace=True,\n", - ")\n", - "# economy.rename(columns = {'damaged':'Number of Places of Economic Activity Damaged', 'total':'economy_total', 'perc':'% Places of Economic Activity Damaged'}, inplace=True)\n", - "# industry.rename(columns = {'damaged':'Number of Industrial Buildings Damaged', 'total':'industry_total', 'perc':'% Industrial Buildings Damaged'}, inplace=True)\n", - "# commerce.rename(columns = {'damaged':'Number of Commercial Buildings Damaged', 'total':'commerce_total', 'perc':'% Commercial Buildings Damaged'}, inplace=True)\n", - "# primary_secondary_roads.rename(columns = {'damaged':'Primary and Secondary Damaged Roads (in km)', 'perc':'% Primary and Secondary Roads Damaged'}, inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "from functools import reduce\n", - "\n", - "summary_stats_list = [\n", - " critical_infrastructure,\n", - " economy,\n", - " industry,\n", - " commerce,\n", - " ntl,\n", - " primary_secondary_roads,\n", - "]\n", - "summary_stats = reduce(\n", - " lambda left, right: pd.merge(left, right, on=\"ADM2_EN\", how=\"outer\"),\n", - " summary_stats_list,\n", - ")\n", - "\n", - "summary_stats.drop(columns=[\"type_x\", \"type_y\"], inplace=True)\n", - "\n", - "summary_stats.set_index(\"ADM2_EN\", inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 162, - "metadata": { - "tags": [ - "remove-cell" - ] - }, - "outputs": [], - "source": [ - "summary_stats.to_csv(\"../../data/summary_stats_industry_and_commerce.csv\")" - ] - } - ], - "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.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -}