{ "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 April 15th, 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": 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 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": 46, "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": 47, "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", "
 % Residential Buildings Damaged% Population in Neighborhoods with Damaged Buildings% Places of Worship Damaged% Places of Education Damaged% Public Amenities Damaged
Governorate     
North Gaza36%47%72%82%82%
Gaza65%87%84%79%79%
Deir Al-Balah39%33%65%78%78%
Khan Younis47%58%62%77%77%
Rafah15%15%40%79%79%
\n" ], "text/plain": [ "" ] }, "execution_count": 47, "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", " ]\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": 48, "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 Gaza178248145184646
Gaza394758658498080
Deir Al-Balah282121525131414
Khan Younis484275585212424
Rafah224187782727
\n" ], "text/plain": [ "" ] }, "execution_count": 48, "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": 3, "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": 4, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "BUILDINGS_OSM = geopandas.read_file(\n", " \"../../data/damage_assessment/delivery10_10Apr2024_2.5sigma/vectors/damaged_buildings_OSM_10Apr2024_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": 9, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "def get_damage_percentage(BUILDINGS_OSM):\n", " left = (\n", " BUILDINGS_OSM[BUILDINGS_OSM[\"_upd10mean\"] >= 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": 10, "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": 13, "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-04-15T08:25:36.831253\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" ], "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 April 15th 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": 14, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-04-15T08:26:00.768102\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" ], "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 April 15th 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. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Percentage of People Living in Neighborhoods with Damaged Buildings" ] }, { "cell_type": "code", "execution_count": 15, "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": 16, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "POPULATION = pd.read_csv(\"../../data/population/pse_pd_2020_1km_UNadj_ASCII_XYZ.csv\")\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": 17, "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": 18, "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", " \"_upd10mean\",\n", " \"geometry\",\n", " ]\n", " ]\n", ")" ] }, { "cell_type": "code", "execution_count": 19, "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\", \"_upd10mean\"]]\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[\"_upd10mean\"] > 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": 20, "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": 23, "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-04-15T08:27:48.867663\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" ], "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 April 15th 2024\",\n", " y=0.99,\n", " fontsize=20,\n", " x=0.59,\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": 31, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "POI = geopandas.read_file(\n", " \"../../data/damage_assessment/delivery10_10Apr2024_2.5sigma/vectors/damaged_pois_1_10Apr2024_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": 32, "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": 33, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "POI[\"type\"] = POI[\"fclass\"].apply(get_poi_classification)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "left = (\n", " POI[POI[\"_upd10max\"] >= 0.5].value_counts([\"ADM2_EN\", \"type\"]).to_frame(\"damaged\")\n", ")\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": 35, "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": 36, "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": 37, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-04-15T08:31:24.905368\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" ], "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 April 15th 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": 38, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-04-15T08:31:36.694877\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" ], "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 April 15th 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": 39, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "population_impacted.rename(\n", " columns={\n", " \"perc\": \"% Population in Neighborhoods with Damaged Buildings\",\n", " \"damage_population\": \"People in Neighborhoods with Damaged Buildings\",\n", " },\n", " inplace=True,\n", ")\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": 42, "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": 43, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "ntl = ntl.reset_index()\n", "ntl.rename(columns={\"name\": \"ADM2_EN\"}, inplace=True)" ] }, { "cell_type": "code", "execution_count": 44, "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", "]\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": 45, "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 }