Synopsis

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.

Data Processing

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)

Load the Data

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

Select Variables Required for the Analysis

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

Standardize Event Type Names

storm_data$EVTYPE <- toupper(trimws(storm_data$EVTYPE))

Convert Damage Exponents

Property and crop damage values use exponent fields to indicate magnitude. For example:

  • K = Thousand
  • M = Million
  • B = Billion

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)

}

Calculate Economic Damage

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

Results

Question 1: Which Types of Events Are Most Harmful With Respect to Population Health?

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

Figure 1: Top 10 Weather Events Affecting Population Health

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.

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.

Question 2: Which Types of Events Have the Greatest Economic Consequences?

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

Figure 2: Top 10 Weather Events by Economic Damage

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.

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.

Conclusion

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.

Reproducibility

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