Synopsis
This report analyzes the U.S. National Oceanic and Atmospheric
Administration’s (NOAA) Storm Database to determine which types of
severe weather events are most harmful to public health and which cause
the greatest economic damage. Data from 1950 to November 2011 are
examined, with focus on total fatalities, injuries, and property/crop
damages across event types. Tornadoes are identified as the most harmful
to population health, while floods and hurricanes cause the most
economic losses. This information can be useful for government agencies
to better prepare for and mitigate the impacts of severe weather.
Data Processing
# Load required packages
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
##
## 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)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(readr)
## Warning: package 'readr' was built under R version 4.4.3
library(knitr)
## Warning: package 'knitr' was built under R version 4.4.3
# Load the dataset
data <- read.csv("repdata_data_StormData.csv.bz2")
# Select relevant columns
storm_data <- data %>%
select(EVTYPE, FATALITIES, INJURIES, PROPDMG, PROPDMGEXP, CROPDMG, CROPDMGEXP)
# Function to convert exponent values
exp_convert <- function(exp) {
exp <- toupper(as.character(exp))
ifelse(exp == "H", 1e2,
ifelse(exp == "K", 1e3,
ifelse(exp == "M", 1e6,
ifelse(exp == "B", 1e9, 1))))
}
# Convert exponents and calculate total damage
storm_data <- storm_data %>%
mutate(PROPDMGEXP = exp_convert(PROPDMGEXP),
CROPDMGEXP = exp_convert(CROPDMGEXP),
PROPDMGVAL = PROPDMG * PROPDMGEXP,
CROPDMGVAL = CROPDMG * CROPDMGEXP)
Results
Table 1: Top 10 Most Harmful Weather Events to Population
Health
# Summarize total injuries and fatalities by event type
health_impact <- storm_data %>%
group_by(EVTYPE) %>%
summarise(Fatalities = sum(FATALITIES, na.rm = TRUE),
Injuries = sum(INJURIES, na.rm = TRUE),
TotalHealthImpact = Fatalities + Injuries) %>%
arrange(desc(TotalHealthImpact)) %>%
slice(1:10)
# Print table
kable(health_impact, caption = "Top 10 Most Harmful Weather Events to Population Health")
Top 10 Most Harmful Weather Events to Population
Health
| TORNADO |
5633 |
91346 |
96979 |
| EXCESSIVE HEAT |
1903 |
6525 |
8428 |
| TSTM WIND |
504 |
6957 |
7461 |
| FLOOD |
470 |
6789 |
7259 |
| LIGHTNING |
816 |
5230 |
6046 |
| HEAT |
937 |
2100 |
3037 |
| FLASH FLOOD |
978 |
1777 |
2755 |
| ICE STORM |
89 |
1975 |
2064 |
| THUNDERSTORM WIND |
133 |
1488 |
1621 |
| WINTER STORM |
206 |
1321 |
1527 |
# Plot: Health Impact
ggplot(health_impact, aes(x = reorder(EVTYPE, -TotalHealthImpact), y = TotalHealthImpact)) +
geom_bar(stat = "identity", fill = "firebrick") +
labs(title = "Top 10 Most Harmful Weather Events to Population Health",
x = "Event Type", y = "Total Fatalities + Injuries") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))

Table 2: Top 10 Weather Events with the Greatest Economic
Impact
# Summarize economic damage by event type
economic_impact <- storm_data %>%
group_by(EVTYPE) %>%
summarise(TotalPropertyDamage = sum(PROPDMGVAL, na.rm = TRUE),
TotalCropDamage = sum(CROPDMGVAL, na.rm = TRUE),
TotalEconomicDamage = TotalPropertyDamage + TotalCropDamage) %>%
arrange(desc(TotalEconomicDamage)) %>%
slice(1:10)
# Print table
kable(economic_impact, caption = "Top 10 Weather Events with Greatest Economic Impact")
Top 10 Weather Events with Greatest Economic Impact
| FLOOD |
144657709807 |
5661968450 |
150319678257 |
| HURRICANE/TYPHOON |
69305840000 |
2607872800 |
71913712800 |
| TORNADO |
56937160779 |
414953270 |
57352114049 |
| STORM SURGE |
43323536000 |
5000 |
43323541000 |
| HAIL |
15732267543 |
3025954473 |
18758222016 |
| FLASH FLOOD |
16140812067 |
1421317100 |
17562129167 |
| DROUGHT |
1046106000 |
13972566000 |
15018672000 |
| HURRICANE |
11868319010 |
2741910000 |
14610229010 |
| RIVER FLOOD |
5118945500 |
5029459000 |
10148404500 |
| ICE STORM |
3944927860 |
5022113500 |
8967041360 |
# Plot: Economic Impact
ggplot(economic_impact, aes(x = reorder(EVTYPE, -TotalEconomicDamage), y = TotalEconomicDamage / 1e9)) +
geom_bar(stat = "identity", fill = "steelblue") +
labs(title = "Top 10 Weather Events with Greatest Economic Impact",
x = "Event Type", y = "Total Damage (in Billions USD)") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
