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#
Show 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 |
Show 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",
)
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.
Show 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",
)
Percentage of Points of Interest Damaged#
Show 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",
)
Show 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",
)
Show 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",
# );