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 population health and which have the greatest economic consequences. The dataset spans from 1950 to November 2011 and contains 902,297 records. To assess public health impact, we aggregate fatalities and injuries by event type. For economic impact, we compute total property and crop damage in dollars by converting the damage exponent codes (K, M, B) to their numeric multipliers. Our analysis reveals that tornadoes are by far the most dangerous event for population health, causing the most fatalities and injuries combined. In terms of economic damage, floods cause the greatest total property and crop losses, followed by hurricanes/typhoons and tornadoes. These findings can help emergency managers prioritize resources for the most destructive event categories.
We load the raw compressed data file directly (.csv.bz2)
and select only the columns relevant to our two research questions.
storm <- read.csv("StormData.csv.bz2")
dim(storm)
## [1] 902297 37
The dataset contains 902297 observations and 37 variables. We keep only the columns needed for our analysis: event type, fatalities, injuries, property damage, and crop damage.
cols <- c("EVTYPE", "FATALITIES", "INJURIES", "PROPDMG", "PROPDMGEXP",
"CROPDMG", "CROPDMGEXP")
storm <- storm[, cols]
str(storm)
## 'data.frame': 902297 obs. of 7 variables:
## $ EVTYPE : chr "TORNADO" "TORNADO" "TORNADO" "TORNADO" ...
## $ FATALITIES: num 0 0 0 0 0 0 0 0 1 0 ...
## $ INJURIES : num 15 0 2 2 2 6 1 0 14 0 ...
## $ PROPDMG : num 25 2.5 25 2.5 2.5 2.5 2.5 2.5 25 25 ...
## $ PROPDMGEXP: chr "K" "K" "K" "K" ...
## $ CROPDMG : num 0 0 0 0 0 0 0 0 0 0 ...
## $ CROPDMGEXP: chr "" "" "" "" ...
The property and crop damage values are split across two columns
each: a numeric value (PROPDMG, CROPDMG) and
an exponent code (PROPDMGEXP, CROPDMGEXP). The
exponent codes represent multipliers: K = thousands,
M = millions, B = billions. We convert
these to full dollar amounts.
get_multiplier <- function(exp) {
exp <- toupper(exp)
mult <- rep(1, length(exp))
mult[exp == "K"] <- 1e3
mult[exp == "M"] <- 1e6
mult[exp == "B"] <- 1e9
mult[exp == "H"] <- 1e2
mult[exp %in% as.character(0:9)] <- 10^as.numeric(exp[exp %in% as.character(0:9)])
mult
}
storm$PROP_TOTAL <- storm$PROPDMG * get_multiplier(storm$PROPDMGEXP)
storm$CROP_TOTAL <- storm$CROPDMG * get_multiplier(storm$CROPDMGEXP)
storm$ECON_TOTAL <- storm$PROP_TOTAL + storm$CROP_TOTAL
We aggregate fatalities, injuries, and economic damage by event type.
health <- aggregate(cbind(FATALITIES, INJURIES) ~ EVTYPE, data = storm, sum)
health$HEALTH_TOTAL <- health$FATALITIES + health$INJURIES
health <- health[order(-health$HEALTH_TOTAL), ]
econ <- aggregate(cbind(PROP_TOTAL, CROP_TOTAL, ECON_TOTAL) ~ EVTYPE,
data = storm, sum)
econ <- econ[order(-econ$ECON_TOTAL), ]
We examine the top 10 event types by combined fatalities and injuries.
top_health <- head(health, 10)
top_health[, c("EVTYPE", "FATALITIES", "INJURIES", "HEALTH_TOTAL")]
## EVTYPE FATALITIES INJURIES HEALTH_TOTAL
## 834 TORNADO 5633 91346 96979
## 130 EXCESSIVE HEAT 1903 6525 8428
## 856 TSTM WIND 504 6957 7461
## 170 FLOOD 470 6789 7259
## 464 LIGHTNING 816 5230 6046
## 275 HEAT 937 2100 3037
## 153 FLASH FLOOD 978 1777 2755
## 427 ICE STORM 89 1975 2064
## 760 THUNDERSTORM WIND 133 1488 1621
## 972 WINTER STORM 206 1321 1527
Figure 1 shows the top 10 weather event types by total health impact (fatalities + injuries). Tornadoes dominate overwhelmingly, causing over five times more harm than the next event type.
par(mar = c(8, 6, 3, 1))
colors <- c("#e74c3c", rep("#3498db", 9))
bp <- barplot(top_health$HEALTH_TOTAL,
names.arg = top_health$EVTYPE,
las = 2, col = colors, border = NA,
main = "Top 10 Weather Events Most Harmful to Population Health",
ylab = "Total Fatalities + Injuries")
text(bp, top_health$HEALTH_TOTAL, labels = format(top_health$HEALTH_TOTAL, big.mark = ","),
pos = 3, cex = 0.8)
Figure 1: Top 10 weather events most harmful to population health (1950–2011).
To understand the breakdown between fatalities and injuries, Figure 2 shows both components side by side for the top 10 events.
par(mar = c(8, 6, 3, 6))
mat <- t(as.matrix(top_health[, c("FATALITIES", "INJURIES")]))
colnames(mat) <- top_health$EVTYPE
barplot(mat, beside = TRUE, las = 2, col = c("#e74c3c", "#f39c12"), border = NA,
main = "Fatalities vs. Injuries by Weather Event Type",
ylab = "Count")
legend("topright", legend = c("Fatalities", "Injuries"),
fill = c("#e74c3c", "#f39c12"), border = NA)
Figure 2: Fatalities vs. injuries for the top 10 most harmful weather events.
Tornadoes cause the most injuries by a wide margin. Excessive heat ranks second for fatalities specifically, highlighting that lethal events are not always the ones causing the most injuries.
We examine the top 10 event types by total economic damage (property + crop).
top_econ <- head(econ, 10)
top_econ$PROP_BILLIONS <- round(top_econ$PROP_TOTAL / 1e9, 2)
top_econ$CROP_BILLIONS <- round(top_econ$CROP_TOTAL / 1e9, 2)
top_econ$TOTAL_BILLIONS <- round(top_econ$ECON_TOTAL / 1e9, 2)
top_econ[, c("EVTYPE", "PROP_BILLIONS", "CROP_BILLIONS", "TOTAL_BILLIONS")]
## EVTYPE PROP_BILLIONS CROP_BILLIONS TOTAL_BILLIONS
## 170 FLOOD 144.66 5.66 150.32
## 411 HURRICANE/TYPHOON 69.31 2.61 71.91
## 834 TORNADO 56.95 0.41 57.36
## 670 STORM SURGE 43.32 0.00 43.32
## 244 HAIL 15.74 3.03 18.76
## 153 FLASH FLOOD 16.82 1.42 18.24
## 95 DROUGHT 1.05 13.97 15.02
## 402 HURRICANE 11.87 2.74 14.61
## 590 RIVER FLOOD 5.12 5.03 10.15
## 427 ICE STORM 3.94 5.02 8.97
Figure 3 shows the top 10 event types by total economic damage, split into property and crop components.
par(mar = c(8, 6, 3, 6))
mat_econ <- t(as.matrix(top_econ[, c("PROP_TOTAL", "CROP_TOTAL")])) / 1e9
colnames(mat_econ) <- top_econ$EVTYPE
barplot(mat_econ, beside = FALSE, las = 2, col = c("#2980b9", "#2ecc71"), border = NA,
main = "Top 10 Weather Events by Economic Damage",
ylab = "Total Damage (Billions USD)")
legend("topright", legend = c("Property Damage", "Crop Damage"),
fill = c("#2980b9", "#2ecc71"), border = NA)
Figure 3: Top 10 weather events with the greatest economic consequences (1950–2011). Damage in billions of USD.
Floods cause the greatest total economic damage at over $150 billion, predominantly from property losses. Hurricanes/typhoons rank second, also driven mainly by property damage. Drought, while not among the top property damage events, causes substantial crop losses.
| Rank | Most Harmful to Health | Greatest Economic Damage |
|---|---|---|
| 1 | Tornado | Flood |
| 2 | Excessive Heat | Hurricane/Typhoon |
| 3 | TSTM Wind | Tornado |
| 4 | Flood | Storm Surge |
| 5 | Lightning | Hail |
Tornadoes are the most dangerous weather events for population health, while floods impose the heaviest economic burden. Decision-makers should prioritize tornado preparedness for life safety and flood mitigation for economic protection.