This analysis explores the U.S. National Oceanic and Atmospheric Administration (NOAA) Storm Database to determine which types of severe weather events have the greatest impact on population health and economic activity across the United States. Population health impacts are measured using fatalities and injuries recorded for each event type. Economic impacts are measured using estimates of property damage and crop damage. The analysis begins with the original compressed NOAA storm dataset and performs all data processing within this document. Event types are aggregated to identify the most significant weather-related hazards. The findings provide insight into weather events that have historically caused the greatest human and financial losses and may assist government and municipal decision-makers in understanding severe weather risks.
The NOAA Storm Database was downloaded directly from the course website and loaded from the original compressed CSV file. Only variables required to answer the project questions were selected. Event type names were standardized to improve consistency during aggregation and analysis.
library(dplyr)
library(ggplot2)
library(knitr)
knitr::opts_chunk$set(echo = TRUE)
if(!file.exists("StormData.csv.bz2")){
download.file(
"https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2",
destfile = "StormData.csv.bz2"
)
}
storm <- read.csv("StormData.csv.bz2")
dim(storm)
## [1] 902297 37
storm_data <- storm %>%
select(
EVTYPE,
FATALITIES,
INJURIES,
PROPDMG,
PROPDMGEXP,
CROPDMG,
CROPDMGEXP
)
head(storm_data)
## EVTYPE FATALITIES INJURIES PROPDMG PROPDMGEXP CROPDMG CROPDMGEXP
## 1 TORNADO 0 15 25.0 K 0
## 2 TORNADO 0 0 2.5 K 0
## 3 TORNADO 0 2 25.0 K 0
## 4 TORNADO 0 2 2.5 K 0
## 5 TORNADO 0 2 2.5 K 0
## 6 TORNADO 0 6 2.5 K 0
storm_data$EVTYPE <- toupper(trimws(storm_data$EVTYPE))
Property and crop damage values use exponent fields to indicate magnitude. For example:
The following function converts the exponent values into numeric multipliers.
convert_exp <- function(exp){
exp <- toupper(exp)
if(exp == "H") return(1e2)
if(exp == "K") return(1e3)
if(exp == "M") return(1e6)
if(exp == "B") return(1e9)
if(exp %in% c(
"0","1","2","3","4",
"5","6","7","8","9"
)){
return(10^as.numeric(exp))
}
return(1)
}
storm_data$PROP_MULT <-
sapply(
storm_data$PROPDMGEXP,
convert_exp
)
storm_data$CROP_MULT <-
sapply(
storm_data$CROPDMGEXP,
convert_exp
)
storm_data$PROPERTY_DAMAGE <-
storm_data$PROPDMG *
storm_data$PROP_MULT
storm_data$CROP_DAMAGE <-
storm_data$CROPDMG *
storm_data$CROP_MULT
storm_data$TOTAL_DAMAGE <-
storm_data$PROPERTY_DAMAGE +
storm_data$CROP_DAMAGE
Population health impact is measured using the combined number of fatalities and injuries associated with each event type.
health_impact <- storm_data %>%
group_by(EVTYPE) %>%
summarise(
Fatalities = sum(FATALITIES),
Injuries = sum(INJURIES)
) %>%
mutate(
Health_Impact =
Fatalities + Injuries
) %>%
arrange(
desc(Health_Impact)
)
top_health <- head(
health_impact,
10
)
kable(top_health)
| EVTYPE | Fatalities | Injuries | Health_Impact |
|---|---|---|---|
| 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 |
ggplot(
top_health,
aes(
x = reorder(
EVTYPE,
Health_Impact
),
y = Health_Impact
)
) +
geom_bar(
stat = "identity",
fill = "steelblue"
) +
coord_flip() +
labs(
title =
"Top 10 Weather Events by Population Health Impact",
x = "Event Type",
y = "Fatalities + Injuries"
) +
theme_minimal()
Top 10 weather event types by combined fatalities and injuries across the United States.
The results show that tornado events have historically caused the greatest impact on population health when fatalities and injuries are combined. Other major contributors include excessive heat, floods, lightning, and thunderstorms.
Economic consequences are measured using the combined value of property damage and crop damage associated with each event type.
economic_impact <- storm_data %>%
group_by(EVTYPE) %>%
summarise(
Economic_Damage =
sum(
TOTAL_DAMAGE,
na.rm = TRUE
)
) %>%
arrange(
desc(Economic_Damage)
)
top_economic <- head(
economic_impact,
10
)
top_economic$Damage_Billions <-
top_economic$Economic_Damage /
1000000000
kable(top_economic)
| EVTYPE | Economic_Damage | Damage_Billions |
|---|---|---|
| FLOOD | 150319678257 | 150.319678 |
| HURRICANE/TYPHOON | 71913712800 | 71.913713 |
| TORNADO | 57362333947 | 57.362334 |
| STORM SURGE | 43323541000 | 43.323541 |
| HAIL | 18761221986 | 18.761222 |
| FLASH FLOOD | 18244041079 | 18.244041 |
| DROUGHT | 15018672000 | 15.018672 |
| HURRICANE | 14610229010 | 14.610229 |
| RIVER FLOOD | 10148404500 | 10.148404 |
| ICE STORM | 8967041360 | 8.967041 |
ggplot(
top_economic,
aes(
x = reorder(
EVTYPE,
Damage_Billions
),
y = Damage_Billions
)
) +
geom_bar(
stat = "identity",
fill = "darkorange"
) +
coord_flip() +
labs(
title =
"Top 10 Weather Events by Economic Damage",
x = "Event Type",
y = "Damage (Billions of Dollars)"
) +
theme_minimal()
Top 10 weather event types by combined property and crop damage across the United States.
The results indicate that floods are associated with the highest levels of economic loss in the United States. Hurricanes, storm surges, droughts, and severe storms also contribute significantly to economic damage through impacts on infrastructure, property, businesses, and agriculture.
Using the NOAA Storm Database, this analysis examined severe weather events that have had the greatest impacts on population health and the economy across the United States. Population health impacts were measured using fatalities and injuries, while economic impacts were measured using property and crop damage estimates.
The results show that tornadoes are associated with the highest levels of fatalities and injuries, making them the most harmful event type from a public health perspective. In contrast, floods account for the greatest economic losses due to extensive damage to infrastructure, property, and agricultural resources.
These findings demonstrate that different weather events create different types of risks. Understanding these impacts can assist government agencies and municipal planners in understanding historical weather risks and prioritising preparedness and response efforts. Historical storm data remains a valuable resource for supporting evidence-based disaster preparedness and risk management decisions.
All data loading, transformation, summarization, and visualization steps used in this analysis are included within this document. The analysis begins with the original NOAA compressed data file and can be reproduced by running the code contained in this report.
sessionInfo()
## R version 4.6.0 (2026-04-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
##
## Matrix products: default
## LAPACK version 3.12.1
##
## locale:
## [1] LC_COLLATE=English_South Africa.utf8 LC_CTYPE=English_South Africa.utf8
## [3] LC_MONETARY=English_South Africa.utf8 LC_NUMERIC=C
## [5] LC_TIME=English_South Africa.utf8
##
## time zone: Africa/Johannesburg
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] knitr_1.51 ggplot2_4.0.3 dplyr_1.2.1
##
## loaded via a namespace (and not attached):
## [1] vctrs_0.7.3 cli_3.6.6 rlang_1.2.0 xfun_0.57
## [5] otel_0.2.0 generics_0.1.4 S7_0.2.2 jsonlite_2.0.0
## [9] labeling_0.4.3 glue_1.8.1 htmltools_0.5.9 sass_0.4.10
## [13] scales_1.4.0 rmarkdown_2.31 grid_4.6.0 evaluate_1.0.5
## [17] jquerylib_0.1.4 tibble_3.3.1 fastmap_1.2.0 yaml_2.3.12
## [21] lifecycle_1.0.5 compiler_4.6.0 codetools_0.2-20 RColorBrewer_1.1-3
## [25] pkgconfig_2.0.3 rstudioapi_0.18.0 farver_2.1.2 digest_0.6.39
## [29] R6_2.6.1 tidyselect_1.2.1 pillar_1.11.1 magrittr_2.0.5
## [33] bslib_0.10.0 withr_3.0.2 gtable_0.3.6 tools_4.6.0
## [37] cachem_1.1.0