Synopsis

This report analyzes the U.S. National Oceanic and Atmospheric Administration (NOAA) Storm Database, which tracks major weather events between 1950 and 2011.
The goal is to identify which event types are most harmful to population health and which have the greatest economic consequences.
To address this, we processed the raw dataset by subsetting relevant variables, converting property and crop damage exponents into numeric values, and aggregating event types by total fatalities, injuries, and economic costs.
Our results show that tornadoes are by far the leading cause of fatalities and injuries in the United States, followed by excessive heat and floods.
In terms of economic impact, floods cause the greatest overall financial losses, with hurricanes/typhoons and tornadoes also contributing heavily to damages.
Crop losses are driven primarily by drought and flood events.
Figures are included to highlight the most harmful and most costly event types.
All analyses are reproducible from the raw data file using R and the dplyr and ggplot2 packages.
This report provides a concise overview that may help decision-makers prioritize preparedness for severe weather events.

Data Processing

The raw data were obtained from the NOAA Storm Database (repdata_data_StormData.csv.bz2).

options(scipen=999)   # turn off scientific notation
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.2
## 
## 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)

# Load raw data directly from CSV.bz2
storm <- read.csv("repdata_data_StormData.csv.bz2")

The dataset contains information on event type (EVTYPE), health outcomes (FATALITIES and INJURIES), and economic damages (PROPDMG, CROPDMG, and their exponents).
We restricted the dataset to the relevant variables.

head(storm)
##   STATE__           BGN_DATE BGN_TIME TIME_ZONE COUNTY COUNTYNAME STATE  EVTYPE
## 1       1  4/18/1950 0:00:00     0130       CST     97     MOBILE    AL TORNADO
## 2       1  4/18/1950 0:00:00     0145       CST      3    BALDWIN    AL TORNADO
## 3       1  2/20/1951 0:00:00     1600       CST     57    FAYETTE    AL TORNADO
## 4       1   6/8/1951 0:00:00     0900       CST     89    MADISON    AL TORNADO
## 5       1 11/15/1951 0:00:00     1500       CST     43    CULLMAN    AL TORNADO
## 6       1 11/15/1951 0:00:00     2000       CST     77 LAUDERDALE    AL TORNADO
##   BGN_RANGE BGN_AZI BGN_LOCATI END_DATE END_TIME COUNTY_END COUNTYENDN
## 1         0                                               0         NA
## 2         0                                               0         NA
## 3         0                                               0         NA
## 4         0                                               0         NA
## 5         0                                               0         NA
## 6         0                                               0         NA
##   END_RANGE END_AZI END_LOCATI LENGTH WIDTH F MAG FATALITIES INJURIES PROPDMG
## 1         0                      14.0   100 3   0          0       15    25.0
## 2         0                       2.0   150 2   0          0        0     2.5
## 3         0                       0.1   123 2   0          0        2    25.0
## 4         0                       0.0   100 2   0          0        2     2.5
## 5         0                       0.0   150 2   0          0        2     2.5
## 6         0                       1.5   177 2   0          0        6     2.5
##   PROPDMGEXP CROPDMG CROPDMGEXP WFO STATEOFFIC ZONENAMES LATITUDE LONGITUDE
## 1          K       0                                         3040      8812
## 2          K       0                                         3042      8755
## 3          K       0                                         3340      8742
## 4          K       0                                         3458      8626
## 5          K       0                                         3412      8642
## 6          K       0                                         3450      8748
##   LATITUDE_E LONGITUDE_ REMARKS REFNUM
## 1       3051       8806              1
## 2          0          0              2
## 3          0          0              3
## 4          0          0              4
## 5          0          0              5
## 6          0          0              6
# Keep only relevant variables
storm_sub <- storm %>%
  select(EVTYPE, FATALITIES, INJURIES, PROPDMG, PROPDMGEXP, 
         CROPDMG, CROPDMGEXP)

To calculate total property and crop damages, we converted the character exponents (K = thousands, M = millions, B = billions) into numeric multipliers and applied them to the recorded amounts.
We aggregated the data by event type to compute total fatalities, injuries, property damage, crop damage, and overall economic losses.

# Convert damage exponents into multipliers
exp_map <- c("K"=1000, "k"=1000,
             "M"=1e6, "m"=1e6,
             "B"=1e9, "b"=1e9)

storm_sub <- storm_sub %>%
  mutate(
    prop_mult = ifelse(PROPDMGEXP %in% names(exp_map), exp_map[PROPDMGEXP], 1),
    crop_mult = ifelse(CROPDMGEXP %in% names(exp_map), exp_map[CROPDMGEXP], 1),
    prop_cost = PROPDMG * prop_mult,
    crop_cost = CROPDMG * crop_mult
  )

# Aggregate for health
health_agg <- storm_sub %>%
  group_by(EVTYPE) %>%
  summarise(fatalities = sum(FATALITIES, na.rm=TRUE),
            injuries = sum(INJURIES, na.rm=TRUE)) %>%
  arrange(desc(fatalities + injuries))

# Aggregate for economic consequences
econ_agg <- storm_sub %>%
  group_by(EVTYPE) %>%
  summarise(prop_cost = sum(prop_cost, na.rm=TRUE),
            crop_cost = sum(crop_cost, na.rm=TRUE),
            total_cost = sum(prop_cost + crop_cost, na.rm=TRUE)) %>%
  arrange(desc(total_cost))

Results

Events Most Harmful to Population Health

Tornadoes caused 5633 fatalities and 91346 injuries, while excessive heat caused 1903 fatalities and 6525 injuries. The remaining top events have fatality totals ranging from 89 (ice storm) to 978 (flash flood) and injury totals ranging from 1321 (winter storm) to 6957 (thunderstorm wind).

top_health <- health_agg[1:10, ]
top_health
## # A tibble: 10 × 3
##    EVTYPE            fatalities injuries
##    <chr>                  <dbl>    <dbl>
##  1 TORNADO                 5633    91346
##  2 EXCESSIVE HEAT          1903     6525
##  3 TSTM WIND                504     6957
##  4 FLOOD                    470     6789
##  5 LIGHTNING                816     5230
##  6 HEAT                     937     2100
##  7 FLASH FLOOD              978     1777
##  8 ICE STORM                 89     1975
##  9 THUNDERSTORM WIND        133     1488
## 10 WINTER STORM             206     1321
ggplot(top_health, aes(x=reorder(EVTYPE, -(fatalities+injuries)), 
                       y=fatalities+injuries)) +
  geom_bar(stat="identity", fill="tomato") +
  labs(title="Top 10 Weather Events by Fatalities and Injuries",
       x="Event Type", y="Total Fatalities + Injuries") +
  theme(axis.text.x = element_text(angle=45, hjust=1))

Figure 1. The ten event types with the highest combined fatalities and injuries.

Events with Greatest Economic Consequences

Floods resulted in $150.3 billion in combined property and crop damage, hurricanes/typhoons caused $71.9 billion, and tornadoes $57.4 billion. Total losses from other top events range from $9.0 billion (ice storms) to $43.3 billion (storm surges).

top_econ <- econ_agg[1:10, ]
top_econ
## # A tibble: 10 × 4
##    EVTYPE                prop_cost   crop_cost    total_cost
##    <chr>                     <dbl>       <dbl>         <dbl>
##  1 FLOOD             144657709807   5661968450 150319678257 
##  2 HURRICANE/TYPHOON  69305840000   2607872800  71913712800 
##  3 TORNADO            56937160779.   414953270  57352114049.
##  4 STORM SURGE        43323536000         5000  43323541000 
##  5 HAIL               15732267048.  3025954473  18758221521.
##  6 FLASH FLOOD        16140812067.  1421317100  17562129167.
##  7 DROUGHT             1046106000  13972566000  15018672000 
##  8 HURRICANE          11868319010   2741910000  14610229010 
##  9 RIVER FLOOD         5118945500   5029459000  10148404500 
## 10 ICE STORM           3944927860   5022113500   8967041360
ggplot(top_econ, aes(x=reorder(EVTYPE, -total_cost), y=total_cost/1e9)) +
  geom_bar(stat="identity", fill="steelblue") +
  labs(title="Top 10 Weather Events by Economic Damage",
       x="Event Type", y="Total Damage (Billions USD)") +
  theme(axis.text.x = element_text(angle=45, hjust=1))

Figure 2. The ten event types causing the largest total economic losses.