Cape Town, South Africa Water Crisis

Picture of Cape Town, 2018, from Wikimedia Commons

One of the most pressing issues that Cape Town, South Africa is facing in the current day is a water shortage, with periods of time nearing “Day Zero”, where over four million city residents would be without water entirely. In 2018, the city had projected dates to turn off the taps of homes and businesses, though thankfully that never occurred. During this period of water crisis, in 2017, South Africa displayed the highest wealth inequality out of 154 countries surveyed by the World Bank, with an ever increasing gap, and unemployment topping 25%. According to the World Economic and Social Survey, poor and marginalized groups are and will likely remain the most vulnerable to the worst affects of water shortages and droughts (Savelli, 2021). In this project, I will be exploring and discussing possible patterns or correlations between property value - my wealth indicator - and water consumption in 2018, during this historic drought.

History

Cape Town, South Africa is located along the western side of the base of Africa, nearly at the southernmost tip of the continent, in a basin between surrounding mountains, and includes a peninsula which creates a bay. While South Africa is generally arid, Cape Town’s prominent feature, Table Mountain, catches humid breezes off the ocean, and creates local rain.

Photo of Clifton, Cape Town, 2019, from Wikimedia Commons

This location has made Cape Town a strategic point for trade, and was colonized by the Dutch East India Company (VOC) in 1652 to act as a refreshment station to replenish produce and fresh water before continuing along the trade route. Water inequality dates back to these colonial times, when the government would gain money from the purchase of water permits, which mainly white colonists could afford to pay, displacing black South Africans onto infertile land when they couldn’t afford water resource prices (SAHO, 2011, 2017). After a few years the port city wasn’t able to be developed and maintained by the sailors and soldiers who lived there, and the Dutch eventually turned to slave labor, changing the town from a settler colony to a slave colony (Leander, 2017). 

Painting by Aernout Smit, 1683, from Wikimedia Commons

During the 19th century, the colony was ruled by the British, who established judicial and parliamentary concepts, as well as freedom to the slaves. Up until this point, Cape Town was the economic center of South Africa until valuable minerals, like gold and diamond, were discovered farther inland. This changed the city into becoming the region’s most important sea port, as it would be vital in the export of these precious resources. The ease of sea export remains important to the city, as it continues to develop as an industrial hub, with a petroleum refinery, fertilizer, cement, and automobile assembly factories in the metropolitan area (Brookings).

To this day the city remains quite diverse, with around 70% of the population people of color, primarily black. Unfortunately with the long history of slavery and segregation in Cape Town, racism and inequality are stark within the city. Even after the slaves were freed, they remained in segregated neighborhoods and districts, where they had extremely dense populations, like Bo-Kaap and District Six. The Cape Town City Council continued to pass legislation for over a century to discriminate and push Africans and other POC out of the city, including physically displacing them. Once a rail network was being established in the city, the tracks were used as physical segregation barriers between neighborhoods. From 1949 to 1994, Cape Town was under apartheid rule, leading to extreme segregation and racist legislation. In 1966, ethnically and culturally diverse District 6 was declared a “whites only” area and the entire neighborhood was bulldozed, relocating 60,000 people to slums outside of the city (DSM).

Picture showing Cape Town’s informal Settlement, Thembisa Ratanga, 2017, from Wikimedia Commons

How does this connect to “Day Zero”?

During Apartheid, governmental structures were divided into local regions, which meant that the poor black areas had underfunded governments. This resulted in these jurisdictions not being able to afford water and sanitation services, with these services themselves additionally neglecting these informal settlements. These effects are still being felt today, with 30% of these low income communities not having adequate access to water, and 50% not having adequate access to sewage and sanitation services (Calverly and Walther, 2022).

The blame for the water crisis isn’t necessarily to be placed entirely on the city, as Cape Town has been internationally recognized for water management, reducing water use and loss, promoting efficiency, creating a 13 gallons/day per person in February 2018, even publicly releasing the names of the top water consumers, reducing municipal water usage by 10% (Calverly and Walther, 2022). The main problem is the exponentially growing city and the fact that past rainfall and climate patterns can’t be guaranteed for the future, as climates become hotter and drier. The National Oceanic and Atmospheric Administration (NOAA) and Stanford University have concluded that human-caused climate change made this event five to six times more likely to occur (Welch, 2018). This brings about questions about who is causing this change, who is consuming this water, and who is being affected by this shortage.

The elites and upper-middle class primarily use the bulk of their water for non-basic amenities such as gardens, pools, and additional water fixtures, whereas the middle class, lower-middle class, and informal residents use their water for basic needs, like hygiene and drinking. These elite and upper-middle class make up 14% of the total population and use 51% of water consumed in the city, and these lower income groups that make up over 60% of the population consume 27% (Savelli and Mazzoleni et al, 2023). This means that these low income communities are effectively living in a “Day Zero” condition every day. 

When tariffs were imposed and over-consumption fines were implemented, it wasn’t nearly as effective as hoped. The reality is that the upper classes can afford to pay these fines on water to keep their amenities, and worse than that, the lower classes who are often living in shared or multi-generational homes, with more than 8 people, are now having to pay fines they can’t afford for rates meant for households half the size (Calverly and Walther, 2022). A 2018 report also found that 64% of water management devices (WMDs) were installed in poor communities instead of in areas where high consumption rates were expected (Mlaba, 2020). This shows that a blanket policy won’t achieve an equitable solution to problems that weren’t equally caused.

Methods and Data

To explore patterns between wealth and water consumption during 2018, nearing “Day Zero”, I needed to decide what my indicator of class would be. I got all of my data from the City of Cape Town Open Data Portal, which had a broad range of data sets, including demographics, basic services, political and administrative boundaries, human settlements, and much more.

Because the water crisis has been so present, there is a lot of data surrounding rainfall, water quality, and water meters/gauges, but conveniently there are also records of the median water consumption per single residential property per suburb for a broad number of years, including 2018.

The Data

  • avg_consumption_april_2018.csv contains the data for the median water consumption in 2018 organized by suburb.

  • Official_Planning_Suburbs.shp is the shape file for the names, areas, and geometries of the suburbs.

  • property_values_updated.csv is the table of the property values in each suburb organized by price sub-categories.

require(tidyverse)
Loading required package: tidyverse
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
require(sf)
Loading required package: sf
Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1; sf_use_s2() is TRUE
require(maptiles)
Loading required package: maptiles
require(tidyterra)
Loading required package: tidyterra

Attaching package: 'tidyterra'

The following object is masked from 'package:stats':

    filter
require(osmdata)
Loading required package: osmdata
Data (c) OpenStreetMap contributors, ODbL 1.0. https://www.openstreetmap.org/copyright
require(ggspatial)
Loading required package: ggspatial
require(centr)
Loading required package: centr
require(phylin)
Loading required package: phylin
property_values_updated <- read.csv("property_values_updated.csv", stringsAsFactors = FALSE) 

avg_consumption_april_2018 <- read.csv("avg_consumption_april_2018.csv", stringsAsFactors = FALSE)

official_planning_suburbs <- st_read("Official_Planning_Suburbs.shp") %>%
  st_transform(st_crs(22234))
Reading layer `Official_Planning_Suburbs' from data source 
  `/cloud/project/Official_Planning_Suburbs.shp' using driver `ESRI Shapefile'
Simple feature collection with 778 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 2037976 ymin: -4077115 xmax: 2115607 ymax: -3958026
Projected CRS: WGS 84 / Pseudo-Mercator
official_planning_suburbs <- official_planning_suburbs %>%
  left_join(avg_consumption_april_2018, by = join_by(OFC_SBRB_N == Suburb))

head(official_planning_suburbs)
Simple feature collection with 6 features and 5 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 281985.6 ymin: 6232191 xmax: 288134.3 ymax: 6242835
Projected CRS: Cape / UTM zone 34S
  OBJECTID      OFC_SBRB_N Shape_Leng Shape_Area monthy_rate
1        1    TUSCANY GLEN  5301.2930 1099978.87           8
2        2 VICTORIA MXENGE  5399.7039 1734651.17           5
3        3        DANARAND  1224.4387   84354.87           7
4        4      BENNO PARK  1087.7690   60768.74          NA
5        5      KLOOFZICHT   902.8191   46022.19           7
6        6   BELHAR EXT 15  1194.6538   72935.64          NA
                        geometry
1 MULTIPOLYGON (((287832.5 62...
2 MULTIPOLYGON (((284334.6 62...
3 MULTIPOLYGON (((285449.4 62...
4 MULTIPOLYGON (((286533 6242...
5 MULTIPOLYGON (((286809.1 62...
6 MULTIPOLYGON (((282201.6 62...
ggplot(official_planning_suburbs) +
  geom_sf(aes(fill = monthy_rate)) + 
  annotation_scale(location = "br") +
  theme_minimal()

official_planning_suburbs$monthy_rate %>% is.na() %>% sum()
[1] 229

The difficulty with comparing these data sets is that there are 229 missing neighborhoods that the suburb polygon file has but the average water consumption data does not. The data notes that suburbs with less than 50 properties are excluded, also excluding commercial and undeveloped areas. The data also says that the average consumption may not be directly comparable as there are properties that accommodate more than one household - more on this later.

To get my gauge for wealth, I ended up using 2018 property values separated into sub-classes of price and organized by suburb. This gave me an abundance of households within each value subclass, ranging from 0-200k ZAR all the way up to >500M ZAR, with 36 property value classes total. This would mean the lowest property value class is equivalent to 0-11200 USD, and the highest would be >28M USD. Looking these prices up on real estate sites, the lower end is primarily informal housing, or 1 to 2 bedroom dwellings some with outdoor bathrooms, and the upper end are 5 to 8 bedroom mansions nearly all with pools.

property_values_updated$Suburbs[property_values_updated$Suburbs == "ZONNEBLOEM"] <- "DISTRICT SIX"

official_planning_suburbs <- official_planning_suburbs %>%
  left_join(property_values_updated, by = join_by(OFC_SBRB_N == Suburbs))

head(official_planning_suburbs)
Simple feature collection with 6 features and 42 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 281985.6 ymin: 6232191 xmax: 288134.3 ymax: 6242835
Projected CRS: Cape / UTM zone 34S
  OBJECTID      OFC_SBRB_N Shape_Leng Shape_Area monthy_rate V0_200k V2_400k
1        1    TUSCANY GLEN  5301.2930 1099978.87           8      23      34
2        2 VICTORIA MXENGE  5399.7039 1734651.17           5    2520    2585
3        3        DANARAND  1224.4387   84354.87           7       7       0
4        4      BENNO PARK  1087.7690   60768.74          NA       1       0
5        5      KLOOFZICHT   902.8191   46022.19           7       0       0
6        6   BELHAR EXT 15  1194.6538   72935.64          NA       0      39
  V4_600k V6_800k V800k_1M V1_1.5M V1.5_2M V2_2.5M V2.5_3M V3_3.5M V3.5_4M
1      63     261      319      27       0       1       8       1       0
2     116      21       10       7       0       1       0       0       1
3       0      22       77       3       0       0       0       0       0
4       0       1       19       8      18       0       0       0       0
5       0       1        8      49       6       2       0       0       0
6       8       0        0       0       0       0       0       0       0
  V4_4.5M V4.5_5M V5_6M V6_7M V7_8M V8_9M V9_10M V10_15M V15_20M V20_25M
1       0       1     1     0     0     0      0       0       2       1
2       0       0     0     1     0     0      0       1       2       3
3       0       0     0     0     0     0      0       0       0       0
4       0       0     0     0     0     0      0       0       0       0
5       0       0     0     0     0     0      0       0       0       0
6       0       0     1     0     0     0      0       0       0       0
  V25_30M V30_35M V35_40M V40_45M V45_50M V50_60M V60_70M V70_80M V80_90M
1       1       0       0       0       0       0       0       0       0
2       0       0       1       0       0       0       0       0       0
3       0       0       0       0       0       0       0       0       0
4       0       0       0       0       0       0       0       0       0
5       0       0       0       0       0       0       0       0       0
6       0       0       0       0       0       0       0       0       0
  V90_100M V100_200M V200_300M V300_400M V400_500M V_over_500M Total
1        0         0         0         0         0           0   743
2        0         0         0         0         0           0  5269
3        0         0         0         0         0           0   109
4        0         0         0         0         0           0    47
5        0         0         0         0         0           0    66
6        0         0         0         0         0           0    48
                        geometry
1 MULTIPOLYGON (((287832.5 62...
2 MULTIPOLYGON (((284334.6 62...
3 MULTIPOLYGON (((285449.4 62...
4 MULTIPOLYGON (((286533 6242...
5 MULTIPOLYGON (((286809.1 62...
6 MULTIPOLYGON (((282201.6 62...
official_planning_suburbs$OFC_SBRB_N[is.na(official_planning_suburbs$Total)]
 [1] "ROBBEN ISLAND"          "KHAYELITSHA"            "ENDLOVINI"             
 [4] "CPUT"                   "AIRPORT"                "WOLFGAT NATURE RESERVE"
 [7] "WELMOED ESTATE"         "ZEEKOEVLEI"             "DE BRON"               
[10] "MANDALAY"               "MONTCLAIR"             

The next part was being able to divide them into socioeconomic classes. In Savelli and Mazzoleni, “Urban water crises driven by elites’ unsustainable consumption.”, they use the 2020 census and a Socio-Economic Index that was developed by the Western Cape Government for the City of Cape Town, but I wasn’t able to find this index to use for my categorization. Instead I used the parameters they isolated from those sources to guide me in my classification. In their study they had the population divided into elites - 1.4%, upper-middle income - 12.3%, lower-middle income - 24.8%, lower income - 40.5%, and informal areas - 21% (Savelli and Mazzoleni et all, 2023).

I took the total number of households in each category and found that percentage of the total, and separated the sub-classes into three groups. The first one is informal settlements, at 17.5% and only including the 0-200k ZAR class, the next is lower class (intending to include lower-middle income and lower income) which makes up 66.2% of the households and ranges from 200k-2.5M ZAR. The final group is the upper class (combining the elites and upper-middle income) to make a percentage of 16.2% and including property values from 2.5M-over 500M ZAR.

official_planning_suburbs <- official_planning_suburbs %>%
  mutate(informal = V0_200k) 

official_planning_suburbs$informal[is.na(official_planning_suburbs$informal)] <- 0


official_planning_suburbs$lower <- official_planning_suburbs[,7:13] %>%
  st_drop_geometry() %>%
  rowSums(na.rm=TRUE)

official_planning_suburbs$upper <- official_planning_suburbs[,14:41] %>%
  st_drop_geometry() %>%
  rowSums(na.rm=TRUE)
official_planning_suburbs <- official_planning_suburbs %>%
  mutate(informal_perc = (informal/Total)*100, 
         lower_perc = (lower/Total)*100, 
         upper_perc = (upper/Total)*100) 
percent_long <- official_planning_suburbs %>%
  select(OFC_SBRB_N, informal_perc, lower_perc, upper_perc) %>%
  pivot_longer(cols = c("informal_perc", "lower_perc", "upper_perc"))

percent_long
Simple feature collection with 2334 features and 3 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 251478.5 ymin: 6195426 xmax: 315950.4 ymax: 6293860
Projected CRS: Cape / UTM zone 34S
# A tibble: 2,334 × 4
   OFC_SBRB_N                                              geometry name   value
   <chr>                                         <MULTIPOLYGON [m]> <chr>  <dbl>
 1 TUSCANY GLEN    (((287832.5 6235519, 287818 6235515, 287808.4 6… info…  3.10 
 2 TUSCANY GLEN    (((287832.5 6235519, 287818 6235515, 287808.4 6… lowe… 94.9  
 3 TUSCANY GLEN    (((287832.5 6235519, 287818 6235515, 287808.4 6… uppe…  2.02 
 4 VICTORIA MXENGE (((284334.6 6232556, 284382.5 6232412, 284382.7… info… 47.8  
 5 VICTORIA MXENGE (((284334.6 6232556, 284382.5 6232412, 284382.7… lowe… 52.0  
 6 VICTORIA MXENGE (((284334.6 6232556, 284382.5 6232412, 284382.7… uppe…  0.171
 7 DANARAND        (((285449.4 6242827, 285452.8 6242827, 285452.9… info…  6.42 
 8 DANARAND        (((285449.4 6242827, 285452.8 6242827, 285452.9… lowe… 93.6  
 9 DANARAND        (((285449.4 6242827, 285452.8 6242827, 285452.9… uppe…  0    
10 BENNO PARK      (((286533 6242127, 286531 6242125, 286461.4 624… info…  2.13 
# ℹ 2,324 more rows

I then created maps to display the percentage of households in each suburb that are a part of the different classes.

ggplot(data = percent_long, aes(fill = value)) +
  geom_sf() +
  scale_fill_viridis_c("% Settlement") +
   facet_wrap(~name,ncol=4) +
  annotation_scale(location = "br") +
  theme_minimal()

Finally used a linear regression to test out correlations/trends between the median water consumption and the percentage of households within each classification.

mod <- lm(monthy_rate ~ 1 + upper_perc, data = official_planning_suburbs)

summary(mod)

Call:
lm(formula = monthy_rate ~ 1 + upper_perc, data = official_planning_suburbs)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.3379 -0.8295  0.1017  1.1638  3.5119 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  6.841148   0.063853 107.138  < 2e-16 ***
upper_perc  -0.014995   0.001906  -7.868 1.94e-14 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.242 on 547 degrees of freedom
  (229 observations deleted due to missingness)
Multiple R-squared:  0.1017,    Adjusted R-squared:    0.1 
F-statistic:  61.9 on 1 and 547 DF,  p-value: 1.942e-14
plot(official_planning_suburbs$monthy_rate, official_planning_suburbs$informal_perc)

plot(official_planning_suburbs$monthy_rate, official_planning_suburbs$lower_perc)

plot(official_planning_suburbs$monthy_rate, official_planning_suburbs$upper_perc)

Analysis

What I found was that there was no correlation - possibly even a negative correlation than the predicted pattern of water consumption increasing with wealthier classes. While this is surprising, it can be explained by multiple components, some simply and some more complicated. The most obvious thing can be seen in the maps - that lots of suburbs are missing from the water consumption data. This was partly addressed by the notes in the data, saying that they excluded areas with less than 50 households or underdeveloped and/or commercial suburbs - like the airport, but that doesn’t necessarily match up with the property value data. For example, the suburb with the largest area, in the top middle of the map, named “Cape Farms - District C” is without water consumption data, but has 199 households recorded in the property values - 76.4% of which are in the upper classification (within the top 16% of total household property values). Same goes for the farthest east suburb, “Stellenbosch Farms” which has 159 households, 71.1% of which are in the upper classification, yet no water data. As for the ‘underdeveloped’ possibility, these data sets are both from 2018, so these households were at least developed enough to have a property value.

A deeper reason for seeing this trend has also been noted in the water consumption data, that single-residential properties sometimes are accommodating more or less than one household. In Cape Town’s lower income households, especially informal settlements, multi-generational homes are very common. This means that while the average household size could be 4 residents, these dwellings could be housing more than double that. There is also the question about water access, as stated earlier, 30% of low income communities do not have adequate access to water at present. This means that not only could larger groups be residing in one household, but also that multiple households could be using the same tap. This would greatly skew the water consumption rates to reflect a much higher usage per household when in reality - per person, it would be drastically lower. Unfortunately there are not reliable ways to get populations of these households or communities, so assessing per resident would be much more difficult.

Not only could properties be accommodating more than one household, but on the other end they could be wealthy secondary or “vacation” homes as well as retirement properties with only one or two residents. This would mean that the homes may only be lived in for a few months of the year, or be used by less people. Additionally, as the city was facing a water crisis, temporary residents might be less likely to stay in these secondary properties during times where resources were more vulnerable.

One suburb that I wish I was able to assess was “District Six”, the neighborhood that was bulldozed during apartheid. This suburb was renamed to “Zonnebloem”, meaning “Sunflower” in Dutch, during the time it was designated as a “whites-only” area, but was renamed back to District Six in 2019, after the data I used was published, so I had to change the name back in the property values table. Unfortunately there wasn’t a monthly rate to assess for the suburb, but it is something that I would’ve liked to see, as there is a proportional spread of property values.

Despite the lack of patterns within my data, there is still a strong correlation between socio-economic class and over consumption of water, as well as disproportionatly negative affects of droughts and water crisis among low income communities, and Cape Town is no exception to this trend.

If I was to repeat this process, I would likely break down my property value classifications into more categories, possibly keeping the origional five income classes that the Savelli and Mazzoleni study had used. I would also see if more recent data has been published for the suburbs that were missing from the average water consumption data.

References

Savelli et al. (2021, January 5). Don’t blame the rain: Social Power and the 2015–2017 drought in Cape Town. Journal of Hydrology. https://www.sciencedirect.com/science/article/pii/S0022169420314141?via%3Dihub

Cape Town the Segregated city. South African History Online. (2011, updated 2017). Www.sahistory.org.za. https://www.sahistory.org.za/article/cape-town-segregated-city

Leander. (2017, June 30). The Early Cape Slave Trade. South African History Online. https://www.sahistory.org.za/article/early-cape-slave-trade

The Brookings Institution. The 10 Traits of Globally Fluent Metro Areas. https://www.brookings.edu/wp-content/uploads/2016/07/Cape_Town.pdf

About district six. District Six. (n.d.). https://www.districtsix.co.za/about-district-six/

Cape Town’s ‘Day Zero’ drought a sign of things to come. (n.d.). Stanford University. https://news.stanford.edu/stories/2020/11/cape-towns-day-zero-drought-sign-things-come

Welch, C. (2018, March 5). Why Cape Town is running out of water, and who’s next. National Geographic. https://www.nationalgeographic.com/science/article/cape-town-running-out-of-water-drought-taps-shutoff-other-cities

Savelli, E., Mazzoleni, M., Di Baldassarre, G. et al. (2023). Urban water crises driven by elites’ unsustainable consumption. Nat Sustain. https://doi.org/10.1038/s41893-023-01100-0

Calverly, C. Walther, S. (2022). Drought, water management, and social equity: Analyzing Cape Town, South Africa’s water crisis. Frontiers. https://www.frontiersin.org/journals/water/articles/10.3389/frwa.2022.910149/full

Mlaba, K (2020, October 9). How Cape Town went from water crisis to overflowing dams in just 2 years. Global Citizen. https://www.globalcitizen.org/en/content/cape-town-water-crisis-day-zero-overflowing-dams/

Cape Town Open Data Portal. https://odp-cctegis.opendata.arcgis.com/