Impact on Industry and Commerce#

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

  • Percentage of commercial and commericial buildings damaged

  • Percentage of commercial and industrial buildings without electricity

  • Percentage of places of economic activity damaged

Overall Impact on Industry and Commerce#

Hide code cell source
summary_stats[
    [
        "% Commercial Buildings Damaged",
        "% Industrial Buildings Damaged",
        "% Critical Infrastructure Damaged",
        "% Places of Economic Activity Damaged",
    ]
].style.background_gradient(cmap="viridis", axis=0).format("{:.0f}%")
  % Commercial Buildings Damaged % Industrial Buildings Damaged % Critical Infrastructure Damaged % Places of Economic Activity Damaged
Governorate        
North Gaza 50% 59% 45% 68%
Gaza 67% 60% 73% 75%
Deir Al-Balah 67% 44% 60% 36%
Khan Younis 33% 28% 49% 48%
Rafah 30% 44% 64% 64%

Observations#

  • The Governorate of Gaza has seen the highest impact for industry and commerce.

  • North Gaza has the second highest amount of roads damaged both in absolute figures and percentage values.

  Number of Commercial Buildings Damaged Number of Industrial Buildings Damaged Number of Points of Critical Infrastructure Damaged Number of Places of Economic Activity Damaged Primary and Secondary Damaged Roads (in km)
Governorate          
North Gaza 1 152 25 318 3527
Gaza 18 277 35 957 12733
Deir Al-Balah 1 78 14 191 374
Khan Younis 3 40 18 195 2062
Rafah 3 26 12 74 2190
Hide code cell source
fig, ax = plt.subplots(figsize=(12, 6))
plt.suptitle(
    "Gaza: Percentage of Damaged Industrial Buildings as of April 15th 2024",
    y=0.99,
    fontsize=20,
    x=0.54,
)

absolute_damage_numbers = list(
    industry.pivot_table("damaged", "ADM2_EN", "type", observed=False).sort_values(
        by="ADM2_EN", ascending=False
    )["industry"]
)

ax = (
    industry[industry["type"] == "industry"]
    .pivot_table("perc", "ADM2_EN", "type", observed=False)
    .sort_values(by="ADM2_EN", ascending=False)["industry"]
    .plot(ax=ax, kind="barh", legend=False)
)

# Add labels and customization
ax.set_xlabel("% Industrial Buildings Damaged", fontsize=12)

ax.set_ylabel("Governorate", fontsize=16)
# ax.set_yticklabels(df["ADM2_EN"].unique(), fontsize=12)

ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position("left")
ax.xaxis.set_ticks_position("bottom")
ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: "{:.0f}%".format(y)))

ax.grid(axis="x", linestyle="--", linewidth=0.25, color="gray", alpha=0.5)
# ax.legend()

ax.set_title(
    "Estimated percentage (and absolute numbers) of damaged industrial buildings in each Governorate",
    fontsize=14,
    loc="left",
)
ax.text(
    0,
    -0.2,
    "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.",
    ha="left",
    va="center",
    transform=ax.transAxes,
    fontsize=10,
    color="black",
    weight="normal",
)

for id, bar in enumerate(ax.patches):
    width = bar.get_width()  # Use width since the bars are horizontal
    ax.annotate(
        f"{int(np.round(absolute_damage_numbers[id],0))}",
        xy=(width, bar.get_y() + bar.get_height() / 2),
        xytext=(-20, 0),  # Shift the text to the left of the bar's end
        textcoords="offset points",
        color="white",
        ha="right",
        va="center",
    )
../../_images/92164cec70f98293762b65d207ab4b1f90971ecf109b681d302ddc5786c67a64.svg

Observations and Limitations#

  • 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.

Hide code cell source
fig, ax = plt.subplots(figsize=(12, 6))
plt.suptitle(
    "Gaza: Percentage of Damaged Commercial Buildings as of April 15th 2024",
    y=0.99,
    fontsize=20,
    x=0.54,
)

absolute_damage_numbers = list(
    commerce.pivot_table("damaged", "ADM2_EN", "type", observed=False).sort_values(
        by="ADM2_EN", ascending=False
    )["commercial"]
)

ax = (
    commerce.pivot_table("perc", "ADM2_EN", "type", observed=False)
    .sort_values(by="ADM2_EN", ascending=False)["commercial"]
    .plot(ax=ax, kind="barh", legend=False)
)

# Add labels and customization
ax.set_xlabel("% Commercial Buildings Damaged", fontsize=12)

ax.set_ylabel("Governorate", fontsize=16)
# ax.set_yticklabels(df["ADM2_EN"].unique(), fontsize=12)

ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position("left")
ax.xaxis.set_ticks_position("bottom")
ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: "{:.0f}%".format(y)))

ax.grid(axis="x", linestyle="--", linewidth=0.25, color="gray", alpha=0.5)
# ax.legend()

ax.set_title(
    "Estimated percentage (and absolute numbers) of damaged commercial buildings in each Governorate",
    fontsize=14,
    loc="left",
)
ax.text(
    0,
    -0.2,
    "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.",
    ha="left",
    va="center",
    transform=ax.transAxes,
    fontsize=10,
    color="black",
    weight="normal",
)

for id, bar in enumerate(ax.patches):
    width = bar.get_width()  # Use width since the bars are horizontal
    ax.annotate(
        f"{int(np.round(absolute_damage_numbers[id],0))}",
        xy=(width, bar.get_y() + bar.get_height() / 2),
        xytext=(-20, 0),  # Shift the text to the left of the bar's end
        textcoords="offset points",
        color="white",
        ha="right",
        va="center",
    )
../../_images/9b7b838b96e1b7b2cf13b216797906b67b3569ebab307329c878953f0fa010f4.svg

Percentage of Points of Interest Damaged#

Hide code cell source
fig, ax = plt.subplots(figsize=(12, 6), dpi=300)
plt.suptitle(
    "Gaza: Percentage of Places of Economic Activity Damaged as of April 15th 2024",
    y=0.99,
    fontsize=20,
    x=0.58,
)

absolute_damage_numbers = list(
    economy.pivot_table("damaged", "ADM2_EN", observed=False)["damaged"]
)


ax = (
    economy.pivot_table("perc", "ADM2_EN", observed=False)[["perc"]]
    .sort_values(by="ADM2_EN", ascending=False)
    .plot(ax=ax, kind="barh", color=TableauMedium_10.mpl_colors, legend=False)
)

# Add labels and customization
ax.set_xlabel("% Places of Economic Activity Damaged", fontsize=12)
ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: "{}%".format(y)))
ax.set_ylabel("Governorate", fontsize=16)
# ax.set_yticklabels(df["ADM2_EN"].unique(), fontsize=12)
ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position("left")
ax.xaxis.set_ticks_position("bottom")
ax.grid(which="both", linestyle="--", linewidth=0.25, color="gray", alpha=0.5)
# ax.legend(bbox_to_anchor=(1.01, 0.9))

ax.set_title(
    "Estimated percentage (and absolute numbers) of Places of Economic Activity damaged in each Governorate",
    fontsize=14,
    loc="left",
)
ax.text(
    0,
    -0.14,
    "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.",
    ha="left",
    va="center",
    transform=ax.transAxes,
    fontsize=10,
    color="black",
    weight="normal",
)

for id, bar in enumerate(ax.patches):
    width = bar.get_width()  # Use width since the bars are horizontal
    ax.annotate(
        f"{int(np.round(absolute_damage_numbers[id],0))}",
        xy=(width, bar.get_y() + bar.get_height() / 2),
        xytext=(-20, 0),  # Shift the text to the left of the bar's end
        textcoords="offset points",
        color="white",
        ha="right",
        va="center",
    )
../../_images/382d385695bb3a4e59dd2b1d72c2dab3c5f9efb9743dc0f2c5eec39355414579.svg
Hide code cell source
fig, ax = plt.subplots(figsize=(12, 6), dpi=300)
plt.suptitle(
    "Gaza: Percentage of Critical Infrastructure Damaged as of April 15th 2024",
    y=0.99,
    fontsize=20,
    x=0.55,
)

absolute_damage_numbers = list(
    critical_infrastructure.pivot_table(
        "damaged", "ADM2_EN", observed=False
    ).sort_values(by="ADM2_EN", ascending=False)["damaged"]
)


ax = (
    critical_infrastructure.pivot_table("perc", "ADM2_EN", observed=False)[["perc"]]
    .sort_values(by="ADM2_EN", ascending=False)
    .plot(ax=ax, kind="barh", color=TableauMedium_10.mpl_colors, legend=False)
)

# Add labels and customization
ax.set_xlabel("% Critical Infrastructure Damaged", fontsize=12)
ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: "{}%".format(y)))
ax.set_ylabel("Governorate", fontsize=16)
# ax.set_yticklabels(df["ADM2_EN"].unique(), fontsize=12)
ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position("left")
ax.xaxis.set_ticks_position("bottom")
ax.grid(which="both", linestyle="--", linewidth=0.25, color="gray", alpha=0.5)
# ax.legend(bbox_to_anchor=(1.01, 0.9))

ax.set_title(
    "Estimated percentage (and absolute numbers) of critical infrastructure damaged in each Governorate",
    fontsize=14,
    loc="left",
)
ax.text(
    0,
    -0.14,
    "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.",
    ha="left",
    va="center",
    transform=ax.transAxes,
    fontsize=10,
    color="black",
    weight="normal",
)

for id, bar in enumerate(ax.patches):
    width = bar.get_width()  # Use width since the bars are horizontal
    ax.annotate(
        f"{int(np.round(absolute_damage_numbers[id],0))}",
        xy=(width, bar.get_y() + bar.get_height() / 2),
        xytext=(-20, 0),  # Shift the text to the left of the bar's end
        textcoords="offset points",
        color="white",
        ha="right",
        va="center",
    )
../../_images/e0a76242961aa9782f5d14cd1992f48660edb248a1c7aca71a086710760f9dad.svg
Hide code cell source
# fig, ax = plt.subplots(figsize=(12, 6))
# plt.suptitle(
#     "Gaza: Percentage of Industrial and Commerical Buildings without Observed Nighttime Lights", y=0.99, fontsize=20, x=0.66
# )

# data = ntl[['industrial', 'commercial']].plot(ax=ax, kind="barh", color=TableauMedium_10.mpl_colors)

# # Add labels and customization
# ax.set_xlabel("% buildings without electricity ", fontsize=12)
# ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: "{:.0f}%".format(y)))
# ax.set_ylabel("Governorate", fontsize=16)
# ax.spines["right"].set_visible(False)
# ax.spines["top"].set_visible(False)

# # Only show ticks on the left and bottom spines
# ax.yaxis.set_ticks_position("left")
# ax.xaxis.set_ticks_position("bottom")
# ax.grid(which="both", linestyle="--", linewidth=0.25, color="gray", alpha=0.5)

# # ax.set_title(
# #     "Estimated percentage of buildings without electricity for each governorate",
# #     fontsize=14,
# # )
# ax.text(
#     0,
#     -0.12,
#     "Source: World Bank calculations derived from NASA Black Marble and OpenStreetMap data.",
#     ha="left",
#     va="center",
#     transform=ax.transAxes,
#     fontsize=10,
#     color="black",
#     weight="normal",
# );