Synopsis

This report explores the NOAA storm database to identify which types of severe weather events are most harmful to population health and which have the greatest economic consequences in the United States. The raw compressed data file (StormData.csv.bz2, over 900,000 records from 1950-2011) was loaded directly into R without any outside preprocessing. Property and crop damage figures were converted to U.S. dollars using their exponent codes (K = thousand, M = million, B = billion). Events were then aggregated by the EVTYPE variable, summing fatalities and injuries to measure health impact and summing property plus crop damage to measure economic impact. The results show that tornadoes are by far the most harmful event type with respect to population health. Floods and hurricane/typhoon events cause the greatest economic losses. These findings can help municipal managers prioritize preparedness resources. All code needed to reproduce the figures and tables is included below.

Data Processing

The analysis starts from the original raw file. If the file is not present in the working directory it is downloaded first, then read directly from the .csv.bz2 archive (this chunk is cached because reading ~900k rows takes some time).

if (!file.exists("StormData.csv.bz2")) {
  download.file("https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2",
                destfile = "StormData.csv.bz2", mode = "wb")
}

storm <- read.csv("StormData.csv.bz2", stringsAsFactors = FALSE)
dim(storm)
## [1] 902297     37
head(storm[, c("EVTYPE", "FATALITIES", "INJURIES",
               "PROPDMG", "PROPDMGEXP", "CROPDMG", "CROPDMGEXP")])
##    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

Missing fatalities/injuries are set to zero, and the damage exponent codes are converted into numeric multipliers so that all damage values are expressed in dollars. (Blank or unrecognized exponent codes are treated as raw dollar values; numeric codes such as “3” are treated as 10^3.)

storm$FATALITIES[is.na(storm$FATALITIES)] <- 0
storm$INJURIES[is.na(storm$INJURIES)] <- 0

multiplier <- function(x) {
  x <- toupper(as.character(x))
  m <- rep(1, length(x))                  # unknown/blank code -> raw dollars
  m[x == "K"] <- 1e3                      # thousands
  m[x == "M"] <- 1e6                      # millions
  m[x == "B"] <- 1e9                      # billions
  m[x == "H"] <- 1e2                      # hundreds
  num <- suppressWarnings(as.numeric(x))  # numeric codes -> 10^n
  m[!is.na(num)] <- 10 ^ num[!is.na(num)]
  m
}

storm$PropDmgUSD <- storm$PROPDMG * multiplier(storm$PROPDMGEXP)
storm$CropDmgUSD <- storm$CROPDMG * multiplier(storm$CROPDMGEXP)

Finally the data are aggregated by event type (EVTYPE) into a health-impact table (fatalities + injuries) and an economic-impact table (property + crop damage in dollars).

health <- aggregate(cbind(FATALITIES, INJURIES) ~ EVTYPE, data = storm, FUN = sum)
health$HealthImpact <- health$FATALITIES + health$INJURIES
health <- health[order(-health$HealthImpact), ]
topH <- head(health, 10)

econ <- aggregate(cbind(PropDmgUSD, CropDmgUSD) ~ EVTYPE, data = storm, FUN = sum)
econ$EconImpact <- econ$PropDmgUSD + econ$CropDmgUSD
econ <- econ[order(-econ$EconImpact), ]
topE <- head(econ, 10)

Results

Population health. Figure 1 and Table 1 show the ten most harmful event types ranked by combined fatalities and injuries. TORNADO is clearly the most dangerous event type, with 96,979 combined casualties - far above the second-ranked type. Heat-related events (e.g. excessive heat) also rank high because they cause many fatalities despite few injuries.

par(mar = c(9, 4, 2, 1))
barplot(topH$HealthImpact, names.arg = topH$EVTYPE, las = 2, cex.names = 0.75,
        col = "firebrick", border = NA,
        ylab = "Total fatalities + injuries",
        main = "Figure 1: Top 10 event types by population-health impact")

Figure 1: Total fatalities plus injuries for the ten most harmful storm event types, 1950-2011. Tornadoes dominate the health impact.

knitr::kable(topH, caption = "Table 1: Top 10 event types by health impact")
Table 1: Top 10 event types by health impact
EVTYPE FATALITIES INJURIES HealthImpact
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

Economic consequences. Figure 2 and Table 2 rank event types by total property plus crop damage (in billions of dollars). FLOOD causes the greatest economic losses, followed closely by HURRICANE/TYPHOON; together these flooding and tropical-cyclone events account for the large majority of recorded weather damage.

par(mar = c(9, 4, 2, 1))
barplot(topE$EconImpact / 1e9, names.arg = topE$EVTYPE, las = 2, cex.names = 0.75,
        col = "darkgreen", border = NA,
        ylab = "Total damage (billions of USD)",
        main = "Figure 2: Top 10 event types by economic impact")

Figure 2: Total property plus crop damage (billions of USD) for the ten costliest storm event types, 1950-2011. Floods and hurricanes dominate the economic impact.

knitr::kable(topE, caption = "Table 2: Top 10 event types by economic impact (USD)")
Table 2: Top 10 event types by economic impact (USD)
EVTYPE PropDmgUSD CropDmgUSD EconImpact
170 FLOOD 144657709807 5661968450 150319678257
411 HURRICANE/TYPHOON 69305840000 2607872800 71913712800
834 TORNADO 56947380677 414953270 57362333947
670 STORM SURGE 43323536000 5000 43323541000
244 HAIL 15735267513 3025954473 18761221986
153 FLASH FLOOD 16822673979 1421317100 18243991079
95 DROUGHT 1046106000 13972566000 15018672000
402 HURRICANE 11868319010 2741910000 14610229010
590 RIVER FLOOD 5118945500 5029459000 10148404500
427 ICE STORM 3944927860 5022113500 8967041360

In summary, tornadoes are the greatest threat to population health, while floods and hurricanes/typhoons carry the greatest economic consequences.