{ "cells": [ { "cell_type": "markdown", "metadata": {}, "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 April 15th, 2024 \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": 42, "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": 43, "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", "
 % Commercial Buildings Damaged% Industrial Buildings Damaged% Critical Infrastructure Damaged% Places of Economic Activity Damaged
Governorate    
North Gaza50%59%45%68%
Gaza67%60%73%75%
Deir Al-Balah67%44%60%36%
Khan Younis33%28%49%48%
Rafah30%44%64%64%
\n" ], "text/plain": [ "" ] }, "execution_count": 43, "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", " ]\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", "" ] }, { "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": 3, "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", " # \"../../data/damage_assessment/delivery9_17Feb2024/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": 4, "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": 7, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "def get_percentage(industry_and_commerce):\n", " left = (\n", " industry_and_commerce[industry_and_commerce[\"_upd10mean\"] >= 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": 8, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "industry = get_percentage(industry)\n", "commerce = get_percentage(commerce)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-04-15T09:00:03.061244\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" ], "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 April 15th 2024\",\n", " y=0.99,\n", " fontsize=20,\n", " x=0.54,\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": 12, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-04-15T09:00:32.294468\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" ], "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 April 15th 2024\",\n", " y=0.99,\n", " fontsize=20,\n", " x=0.54,\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": 13, "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": 14, "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": 15, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "POI[\"type\"] = POI[\"fclass\"].apply(get_poi_classification)" ] }, { "cell_type": "code", "execution_count": 16, "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": 17, "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": 18, "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": 19, "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": 21, "metadata": { "scrolled": true, "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-04-15T09:02:03.429077\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" ], "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 April 15th 2024\",\n", " y=0.99,\n", " fontsize=20,\n", " x=0.58,\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.14,\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. \\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": 23, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-04-15T09:02:25.610968\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" ], "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 April 15th 2024\",\n", " y=0.99,\n", " fontsize=20,\n", " x=0.55,\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": [ "remove-cell" ] }, "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": 24, "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": 20, "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [ "hide-input" ] }, "outputs": [], "source": [ "# fig, ax = plt.subplots(figsize=(12, 6))\n", "# plt.suptitle(\n", "# \"Gaza: Percentage of Industrial and Commerical Buildings without Observed Nighttime Lights\", y=0.99, fontsize=20, x=0.66\n", "# )\n", "\n", "# data = ntl[['industrial', 'commercial']].plot(ax=ax, kind=\"barh\", color=TableauMedium_10.mpl_colors)\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": [ "remove-cell" ] }, "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": { "tags": [ "remove-cell" ] }, "source": [ "## Percentage of Roads Damaged" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "ROADS = geopandas.read_file(\n", " \"../../data/damage_assessment/delivery10_10Apr2024_2.5sigma/vectors/damaged_roads_lines_10Apr2024_2_5sigma.shp\"\n", ").to_crs(\"EPSG:4326\")\n", "\n", "ROADS = geopandas.sjoin(ROADS, GAZA)\n", "\n", "# ROADS = pd.read_excel(\n", "# \"../../data/damage_assessment/delivery10_10Apr2024_2.5sigma/Gaza_damage_10Apr2024_2_5sigma.xlsx\",\n", "# sheet_name=\"roads\",\n", "# )" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "# ROADS[\"Primary and Secondary\"] = ROADS[\"primary\"] + ROADS[\"secondary\"]\n", "# ROADS[\"damaged\"] = ROADS[\"damaged primary\"] + ROADS[\"damaged secondary\"]\n", "# ROADS[\"perc\"] = 100 * ROADS[\"damaged\"] / ROADS[\"Primary and Secondary\"]\n", "\n", "# ROADS.rename(columns={\"Province\": \"ADM2_EN\"}, inplace=True)\n", "# ROADS = ROADS[[\"ADM2_EN\", \"Primary and Secondary\", \"damaged\", \"perc\"]]" ] }, { "cell_type": "code", "execution_count": 32, "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": 33, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "def get_percentage(ROADS):\n", " left = (\n", " ROADS[ROADS[\"_upd10max\"] >= 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": 34, "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": 38, "metadata": { "tags": [ "hide-input", "remove-cell" ] }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-04-15T09:44:46.964816\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" ], "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(12, 6))\n", "plt.suptitle(\n", " \"Gaza: Percentage of Damaged Roads as of April 15th 2024\",\n", " y=0.98,\n", " fontsize=20,\n", " x=0.48,\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\", 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": null, "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": 39, "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(\n", " columns={\n", " \"damaged\": \"Number of Places of Economic Activity Damaged\",\n", " \"total\": \"economy_total\",\n", " \"perc\": \"% Places of Economic Activity Damaged\",\n", " },\n", " inplace=True,\n", ")\n", "industry.rename(\n", " columns={\n", " \"damaged\": \"Number of Industrial Buildings Damaged\",\n", " \"total\": \"industry_total\",\n", " \"perc\": \"% Industrial Buildings Damaged\",\n", " },\n", " inplace=True,\n", ")\n", "commerce.rename(\n", " columns={\n", " \"damaged\": \"Number of Commercial Buildings Damaged\",\n", " \"total\": \"commerce_total\",\n", " \"perc\": \"% Commercial Buildings Damaged\",\n", " },\n", " inplace=True,\n", ")\n", "ROADS.rename(\n", " columns={\n", " \"damaged\": \"Primary and Secondary Damaged Roads (in km)\",\n", " \"perc\": \"% Primary and Secondary Roads Damaged\",\n", " },\n", " inplace=True,\n", ")" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "from functools import reduce\n", "\n", "summary_stats_list = [critical_infrastructure, economy, industry, commerce]\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": 41, "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 }