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.
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))
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.
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.