Impact on Housing and Community#
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
Percentage of Residential Buildings Damaged
Percentage of Places of Worship Damaged
Percentage of People in Neighbourhoods with Damaged Buildings
Percentage of Places of Education Damaged
Places of Public Amenities Damaged
Percentage of Homes without (observed) Nighttime Lights
Overall Impact on Housing and Community#
% Residential Buildings Damaged | % Population in Neighborhoods with Damaged Buildings | % Places of Worship Damaged | % Places of Education Damaged | % Public Amenities Damaged | |
---|---|---|---|---|---|
Governorate | |||||
North Gaza | 36% | 47% | 72% | 82% | 82% |
Gaza | 65% | 87% | 84% | 79% | 79% |
Deir Al-Balah | 39% | 33% | 65% | 78% | 78% |
Khan Younis | 47% | 58% | 62% | 77% | 77% |
Rafah | 15% | 15% | 40% | 79% | 79% |
Observations#
The Governorate of Gaza took the greatest impact in almost every indicator being measured. The biggest being the number of people potentially impacted (~720k).
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.
Khan Younis, a southern Governorate, has more than half its population living in neighborhoods with damaged buildings and without observed nighttime lights.
Show code cell source
summary_stats[
[
"Number of Residential Buildings Damaged",
"People in Neighborhoods with Damaged Buildings",
"Number of Places of Worship Damaged",
"Number of Places of Education Damaged",
"Number of Public Amenities Damaged",
]
].style.background_gradient(cmap="viridis", axis=0).format("{:.0f}")
Number of Residential Buildings Damaged | People in Neighborhoods with Damaged Buildings | Number of Places of Worship Damaged | Number of Places of Education Damaged | Number of Public Amenities Damaged | |
---|---|---|---|---|---|
Governorate | |||||
North Gaza | 178 | 248145 | 18 | 46 | 46 |
Gaza | 394 | 758658 | 49 | 80 | 80 |
Deir Al-Balah | 282 | 121525 | 13 | 14 | 14 |
Khan Younis | 484 | 275585 | 21 | 24 | 24 |
Rafah | 22 | 41877 | 8 | 27 | 27 |
Percentage of Residential Buildings Damaged#
Observations and Limitations#
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.
Residential buildings reported here include all th buildings atagged as ‘residential’, ‘apartments’ and ‘houses’.
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.
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.
Percentage of Places of Worship Damaged#
Show code cell source
fig, ax = plt.subplots(figsize=(14, 6))
plt.suptitle(
"Gaza: Percentage of Places of Worship Damaged as of April 15th 2024",
y=0.99,
fontsize=20,
x=0.49,
)
absolute_damage_numbers = list(
places_of_worship.pivot_table(
"damaged", "ADM2_EN", "type", observed=False
).sort_values(by="ADM2_EN", ascending=False)["places_of_worship"]
)
ax = (
places_of_worship.pivot_table("perc", "ADM2_EN", "type", observed=False)[
["places_of_worship"]
]
.sort_values(by="ADM2_EN", ascending=False)
.plot(ax=ax, kind="barh", legend=False)
)
# Add labels and customization
ax.set_xlabel("% Places of Worship 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 number) of places of worship damaged in each Governorate",
fontsize=14,
loc="left",
)
ax.text(
0,
-0.23,
"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.",
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#
Gaza had the biggest hit on places of worship both in terms of percentage and abolute numbers.
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.
There are no reported synagogues.
Percentage of People Living in Neighborhoods with Damaged Buildings#
Observations#
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.
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.
Percentage of Schools and Public Amenities Damaged#
Show code cell source
fig, ax = plt.subplots(figsize=(12, 6), dpi=300)
plt.suptitle(
"Gaza: Percentage of Places of Education Damaged as of April 15th 2024",
y=0.99,
fontsize=20,
x=0.56,
)
absolute_damage_numbers = list(
df.pivot_table("damaged", "ADM2_EN", "type", observed=False).sort_values(
by="ADM2_EN", ascending=False
)["Education"]
)
ax = (
df.pivot_table("perc", "ADM2_EN", "type", observed=False)[["Education"]]
.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 Education 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 education damaged in each Governorate",
fontsize=14,
loc="left",
)
ax.text(
0,
-0.17,
"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.",
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=(14, 6), dpi=300)
plt.suptitle(
"Gaza: Percentage of Public Amenities Damaged as of April 15th 2024",
y=0.99,
fontsize=20,
x=0.49,
)
absolute_damage_numbers = list(
public_amenities.pivot_table("damaged", "ADM2_EN", observed=False).sort_values(
by="ADM2_EN", ascending=False
)["damaged"]
)
ax = (
public_amenities.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("% Public Amenities Damaged", fontsize=12)
ax.xaxis.set_major_formatter(FuncFormatter(lambda y, _: "{:.0f}%".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 public amenities damaged in each Governorate",
fontsize=14,
loc="left",
)
ax.text(
0,
-0.17,
"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.",
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 Residential Buildings without Observed Nighttime Lights#
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 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.
Show code cell source
fig, ax = plt.subplots(figsize=(12, 6))
plt.suptitle(
"Gaza: Percentage of Residential Buildings without Observed Nighttime Lights",
y=1.01,
fontsize=20,
x=0.45,
)
data = pd.read_csv(
"../../data/ntl/PSE_2-buildings_without_electricity.csv", index_col="name"
)[["% residential buildings without electricity"]].plot(
ax=ax, kind="barh", color=TableauMedium_10.mpl_colors[1], legend=False
)
# Add labels and customization
ax.set_xlabel("% residential 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.13,
"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",
);