This report analyses the impact of severe weather events on public health and the economy across the United States from 1950 to 2011. The data were obtained from the U.S. National Oceanic and Atmospheric Administration’s (NOAA) storm database, which tracks major storms and weather events, including estimates of fatalities, injuries, property damage, and crop damage. The analysis identifies tornadoes as the most harmful event type to population health, causing the highest number of fatalities (5633) and injuries (91,346). Excessive heat and flash floods follow tornadoes in terms of fatalities, while thunderstorm winds and floods rank second and third for injuries.
In terms of economic impact, floods cause the greatest property damage, amounting to 134.5 billion USD, followed by hurricanes/typhoons and storm surges. For crop damage, droughts are the most impactful, causing 13.2 billion USD in losses, with ice storms and river floods each resulting in 5 billion USD in crop damage. The report focuses on the top ten events for each damage type to highlight the most significant threats. These findings highlilghts the need for targeted preparedness and mitigation efforts to address the substantial impacts of tornadoes, floods, and droughts. The comprehensive analysis provides crucial insights for prioritising resources and enhancing resilience against the most damaging severe weather events.
The data were loaded into R and processed for analysis using the following steps:
# Import necessary packages
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(cowplot)
## Warning: package 'cowplot' was built under R version 4.3.3
The data were obtained from the U.S. National Oceanic and Atmospheric Administration’s (NOAA) storm database. This database tracks characteristics of major storms and weather events in the United States, including when and where they occur, as well as estimates of any fatalities, injuries, property and crop damage.
The data were read into a data frame, taking care to handle the compressed file format and ensuring that missing values were correctly identified.
# Download the zip file and read in the data
temp <- tempfile()
download.file("https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2", temp)
data <- read.csv(bzfile(temp), header = TRUE, sep = ",", quote = "\"", na.strings = "")
unlink(temp)
After loading the data, I examined the first few rows of the dataset. The dataset contains 902,297 rows and 37 columns:
# Examine the dimension of the table
dim(data)
## [1] 902297 37
Next, I examined the columns of interest, which include severe weather events, their start dates, fatalities count, injuries count, and estimates of property and crop damage:
# Looking at the first 6 rows of columns of interest
head(data[,c(2, 8, 23:28)])
## BGN_DATE EVTYPE FATALITIES INJURIES PROPDMG PROPDMGEXP CROPDMG
## 1 4/18/1950 0:00:00 TORNADO 0 15 25.0 K 0
## 2 4/18/1950 0:00:00 TORNADO 0 0 2.5 K 0
## 3 2/20/1951 0:00:00 TORNADO 0 2 25.0 K 0
## 4 6/8/1951 0:00:00 TORNADO 0 2 2.5 K 0
## 5 11/15/1951 0:00:00 TORNADO 0 2 2.5 K 0
## 6 11/15/1951 0:00:00 TORNADO 0 6 2.5 K 0
## CROPDMGEXP
## 1 <NA>
## 2 <NA>
## 3 <NA>
## 4 <NA>
## 5 <NA>
## 6 <NA>
# Looking at the last 6 rows of columns of interest
tail(data[,c(2, 8, 23:28)])
## BGN_DATE EVTYPE FATALITIES INJURIES PROPDMG PROPDMGEXP
## 902292 11/28/2011 0:00:00 WINTER WEATHER 0 0 0 K
## 902293 11/30/2011 0:00:00 HIGH WIND 0 0 0 K
## 902294 11/10/2011 0:00:00 HIGH WIND 0 0 0 K
## 902295 11/8/2011 0:00:00 HIGH WIND 0 0 0 K
## 902296 11/9/2011 0:00:00 BLIZZARD 0 0 0 K
## 902297 11/28/2011 0:00:00 HEAVY SNOW 0 0 0 K
## CROPDMG CROPDMGEXP
## 902292 0 K
## 902293 0 K
## 902294 0 K
## 902295 0 K
## 902296 0 K
## 902297 0 K
There are two variables of interest representing population health damages caused by severe weather events: fatalities and injuries. Here, I extract those columns and provide brief summaries for them.
# Producing summary statistics
fatalities <- data$FATALITIES
summary(fatalities)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.0000 0.0000 0.0168 0.0000 583.0000
# Producing summary statistics
injuries <- data$INJURIES
summary(injuries)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.0000 0.0000 0.1557 0.0000 1700.0000
There are two variables of interest representing economic consequences from severe weather events: property damage and crop damage estimates in dollars. However, as suggested in the National Weather Service Storm Data Documentation, “[the] … estimates should be rounded to three significant digits, followed by an alphabetical character signifying the magnitude of the number, i.e., 1.55B for $1,550,000,000. Alphabetical characters used to signify magnitude include “K” for thousands, “M” for millions, and “B” for billions. (see p.12)“. Therefore, to interpret the cohesive values of property damage (PROPDMG) and crop damage (CROPDMG), I need to combine the significant digits with the magnitude character, i.e., multiply PROPDMG by PROPDMGEXP and CROPDMG by CROPDMGEXP, respectively. These calculations are performed in the Data Transformation section below.
# Convert the estimates into cohesive dollar unit
data <- data %>%
mutate(adjusted_PROPDMG = case_when(
PROPDMGEXP == "K" ~ PROPDMG * 1000,
PROPDMGEXP == "M" ~ PROPDMG * 1000000,
PROPDMGEXP == "B" ~ PROPDMG * 1000000000,
TRUE ~ PROPDMG # Default case if none of the above conditions are met
))
# Convert the total_damage values to billions unit
data$adjusted_PROPDMG <- data$adjusted_PROPDMG / 1000000000
# Round to the nearest one decimal place
data$adjusted_PROPDMG <- round(data$adjusted_PROPDMG, digits = 1)
# Print summary statistics
summary(data$adjusted_PROPDMG)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00e+00 0.00e+00 0.00e+00 3.90e-04 0.00e+00 1.15e+02
# Convert the estimates into cohesive dollar unit
data <- data %>%
mutate(adjusted_CROPDMG = case_when(
CROPDMGEXP == "K" ~ CROPDMG * 1000,
CROPDMGEXP == "M" ~ CROPDMG * 1000000,
CROPDMGEXP == "B" ~ CROPDMG * 1000000000,
TRUE ~ CROPDMG # Default case if none of the above conditions are met
))
# Convert the total_damage values to billions unit
data$adjusted_CROPDMG <- data$adjusted_CROPDMG / 1000000000
# Round to the nearest one decimal place
data$adjusted_CROPDMG <- round(data$adjusted_CROPDMG, digits = 1)
# Print summary statistics
summary(data$adjusted_CROPDMG)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0e+00 0.0e+00 0.0e+00 4.1e-05 0.0e+00 5.0e+00
# Calculate top ten severe weather events in terms of total number of fatalities
top_ten_fatalities <- data %>%
group_by(EVTYPE) %>%
summarise(damage_number = sum(FATALITIES)) %>%
arrange(desc(damage_number)) %>%
slice_head(n=10)
# Calculate top ten severe weather events in terms of total number of injuries
top_ten_injuries <- data %>%
group_by(EVTYPE) %>%
summarise(damage_number = sum(INJURIES)) %>%
arrange(desc(damage_number)) %>%
slice_head(n=10)
# Calculate top ten severe weather events in terms of property damage estimates
top_ten_propdmg_events <- data %>%
group_by(EVTYPE) %>%
summarise(damage_estimates = sum(adjusted_PROPDMG)) %>%
arrange(desc(damage_estimates)) %>%
slice_head(n=10)
# Calculate top ten severe weather events in terms of crop damage estimates
top_ten_cropdmg_events <- data %>%
group_by(EVTYPE) %>%
summarise(damage_estimates = sum(adjusted_CROPDMG)) %>%
arrange(desc(damage_estimates)) %>%
slice_head(n=10)
There are 985 unique severe weather events in the data:
# count unique types of event types:
length(unique(data$EVTYPE))
## [1] 985
Summary statistics
summary(data$FATALITIES)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.0000 0.0000 0.0168 0.0000 583.0000
Top ten severe weather events contributing to total number of fatalities
print(top_ten_fatalities)
## # A tibble: 10 × 2
## EVTYPE damage_number
## <chr> <dbl>
## 1 TORNADO 5633
## 2 EXCESSIVE HEAT 1903
## 3 FLASH FLOOD 978
## 4 HEAT 937
## 5 LIGHTNING 816
## 6 TSTM WIND 504
## 7 FLOOD 470
## 8 RIP CURRENT 368
## 9 HIGH WIND 248
## 10 AVALANCHE 224
Summary statistics
summary(data$INJURIES)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.0000 0.0000 0.1557 0.0000 1700.0000
Top ten severe weather events contributing to total number injuries
print(top_ten_injuries)
## # A tibble: 10 × 2
## EVTYPE damage_number
## <chr> <dbl>
## 1 TORNADO 91346
## 2 TSTM WIND 6957
## 3 FLOOD 6789
## 4 EXCESSIVE HEAT 6525
## 5 LIGHTNING 5230
## 6 HEAT 2100
## 7 ICE STORM 1975
## 8 FLASH FLOOD 1777
## 9 THUNDERSTORM WIND 1488
## 10 HAIL 1361
Summary statistics
summary(data$adjusted_PROPDMG)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00e+00 0.00e+00 0.00e+00 3.90e-04 0.00e+00 1.15e+02
Top ten severe weather events contributing to property damage in terms of estimated monetary value (in bln USD unit)
print(top_ten_propdmg_events)
## # A tibble: 10 × 2
## EVTYPE damage_estimates
## <chr> <dbl>
## 1 FLOOD 134.
## 2 HURRICANE/TYPHOON 68.9
## 3 STORM SURGE 43
## 4 TORNADO 24
## 5 HURRICANE 11.5
## 6 HAIL 10.2
## 7 TROPICAL STORM 6.9
## 8 FLASH FLOOD 6.8
## 9 WINTER STORM 5.9
## 10 RIVER FLOOD 5
Summary statistics
summary(data$adjusted_CROPDMG)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0e+00 0.0e+00 0.0e+00 4.1e-05 0.0e+00 5.0e+00
Top ten severe weather events contributing to crop damage in terms of estimated monetary value (in bln USD unit)
print(top_ten_cropdmg_events)
## # A tibble: 10 × 2
## EVTYPE damage_estimates
## <chr> <dbl>
## 1 DROUGHT 13.2
## 2 ICE STORM 5
## 3 RIVER FLOOD 5
## 4 FLOOD 2.4
## 5 HURRICANE/TYPHOON 2.4
## 6 HURRICANE 2.3
## 7 EXTREME COLD 1.3
## 8 FROST/FREEZE 0.8
## 9 FLASH FLOOD 0.7
## 10 EXCESSIVE HEAT 0.5
Question 1: Across the United States, which types of events (as indicated in the EVTYPE variable) are most harmful with respect to population health?
Answer:
In order to answer to the question, I below investigate the top 10 severe weather events in terms of total number of fatalities and total number of injuries caused to population health. This would help understand what are the most harmful severe weather events with respect to population health:
# Create the bar chart for property damage by events
p1 <- ggplot(top_ten_fatalities, aes(x = reorder(EVTYPE, -damage_number), y = damage_number)) +
geom_bar(stat = "identity", fill = "steelblue") +
geom_text(aes(label = damage_number), vjust = -0.5, size = 2.5) +
labs(title = "Fatalities (1950-2011)",
x = "Top 10 events",
y = "Total Fatalities") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 8)) +
ylim(0, 100000)
# Create the bar chart for crop damage by events
p2 <- ggplot(top_ten_injuries, aes(x = reorder(EVTYPE, -damage_number), y = damage_number)) +
geom_bar(stat = "identity", fill = "steelblue") +
geom_text(aes(label = damage_number), vjust = -0.5, size = 2.5) +
labs(title = "Injuries (1950-2011)",
x = "Top 10 events",
y = "Total Injuries") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 8)) +
ylim(0, 100000)
# Combine the two plots into one layout using cowplot
combined_plot <- plot_grid(p1, p2, ncol = 2, align = "h", axis = "tb")
# Display the combined plot
print(combined_plot)
Based on the analysis of severe weather events from 1950 to 2011 as shown in the above panel plot, it is evident that tornadoes are the most harmful with respect to population health across the United States. Tornadoes account for the highest number of both fatalities and injuries, with 5633 recorded deaths and 91,346 injuries. Excessive heat and flash floods follow in causing fatalities, with 1903 and 978 deaths, respectively. In terms of injuries, thunderstorm winds and floods are the next most harmful events, resulting in 6957 and 6789 injuries, respectively.
These findings indicate that tornadoes pose the greatest threat to population health, causing both the highest fatalities and injuries among severe weather events. This analysis, focusing on the top ten events for each damage type, highlights the significant impact of tornadoes on public health, necessitating targeted preparedness and mitigation efforts.
Question 2: Across the United States, which types of events have the greatest economic consequences?
Answer:
In order to answer to the question, I create below a panel bar plot exhibiting total property and crop damage estimates contributed by top ten severe weather events:
# Create the bar chart for property damage by events
p3 <- ggplot(top_ten_propdmg_events, aes(x = reorder(EVTYPE, -damage_estimates), y = damage_estimates)) +
geom_bar(stat = "identity", fill = "steelblue") +
geom_text(aes(label = damage_estimates), vjust = -0.5, size = 3) +
labs(title = "Property damage estimates (1950-2011)",
x = "Top 10 events",
y = "Total Damage (Bln USD)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 8)) +
ylim(0, 140)
# Create the bar chart for crop damage by events
p4 <- ggplot(top_ten_cropdmg_events, aes(x = reorder(EVTYPE, -damage_estimates), y = damage_estimates)) +
geom_bar(stat = "identity", fill = "steelblue") +
geom_text(aes(label = damage_estimates), vjust = -0.5, size = 3) +
labs(title = "Crop damage estimates (1950-2011)",
x = "Top 10 events",
y = "Total Damage (Bln USD)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 8)) +
ylim(0, 140)
# Combine the two plots into one layout using plot_grid
combined_plot2 <- plot_grid(p3, p4, ncol = 2, align = "h", axis = "tb")
# Display the combined plot
print(combined_plot2)
Based on the analysis of severe weather events from 1950 to 2011 and the plot shown above, it is evident that floods have the greatest economic consequences across the United States. Floods account for the highest property damage, amounting to 134.5 billion USD. Hurricanes/typhoons and storm surges follow, causing 68.9 billion USD and 43 billion USD in property damage, respectively. Tornadoes also contribute significantly with 24 billion USD in property damage.
For crop damage, droughts are the most impactful, causing 13.2 billion USD in losses. Ice storms and river floods each result in 5 billion USD in crop damage, while floods also contribute notably with 2.4 billion USD in crop damage.
These findings indicate that floods and droughts are the most economically damaging severe weather events, with floods affecting both property and crops significantly, and droughts primarily impacting agriculture. This analysis, focusing on the top ten events for each damage type, highlights the critical need for resource prioritisation and preparedness for these events to mitigate their substantial economic impacts.