Synopsis

This analysis examines severe weather events recorded in the NOAA Storm Database from 1950 through November 2011.

Population health impacts are measured using the combined number of fatalities and injuries associated with each event type. Economic impacts are measured using reported property and crop damage after converting the magnitude codes into dollar values. Event types are aggregated across the United States and ranked by their total impacts.

Through this analysis I hope to identify the event categories responsible for the greatest health and economic consequences in the United States (U.S.A).

Data Processing

Load dataset

storm_data <- read.csv(
  "repdata_data_StormData.csv",
  stringsAsFactors = FALSE
)

dim(storm_data)
## [1] 902297     37
names(storm_data)
##  [1] "STATE__"    "BGN_DATE"   "BGN_TIME"   "TIME_ZONE"  "COUNTY"    
##  [6] "COUNTYNAME" "STATE"      "EVTYPE"     "BGN_RANGE"  "BGN_AZI"   
## [11] "BGN_LOCATI" "END_DATE"   "END_TIME"   "COUNTY_END" "COUNTYENDN"
## [16] "END_RANGE"  "END_AZI"    "END_LOCATI" "LENGTH"     "WIDTH"     
## [21] "F"          "MAG"        "FATALITIES" "INJURIES"   "PROPDMG"   
## [26] "PROPDMGEXP" "CROPDMG"    "CROPDMGEXP" "WFO"        "STATEOFFIC"
## [31] "ZONENAMES"  "LATITUDE"   "LONGITUDE"  "LATITUDE_E" "LONGITUDE_"
## [36] "REMARKS"    "REFNUM"

For the analysis, the key variables are:

  • EVTYPE: identifies the type of severe weather event. It is used to group the observations and compare the effects of different event categories.

  • FATALITIES: records the number of deaths associated with each event. It is used to measure harm to population health.

  • INJURIES: records the number of injuries associated with each event. It is combined with fatalities to calculate total health impact.

  • PROPDMG: records the reported amount of property damage caused by an event.

  • PROPDMGEXP: indicates the scale of the property damage value, such as thousands (K), millions (M), or billions (B). It is used to convert PROPDMG into dollars.

  • CROPDMG: records the reported amount of crop damage caused by an event.

  • CROPDMGEXP: indicates the scale of the crop damage value and is used to convert CROPDMG into dollars.

Data Cleaning

The raw NOAA Storm Database contains inconsistencies in event names and damage-value codes. Several transformations were therefore required before calculating health and economic impacts.

First, event names were converted to uppercase and surrounding spaces were removed. This reduces differences caused only by capitalization or accidental spacing. However, the original event categories were otherwise retained because extensive manual recoding could introduce subjective classification decisions.

storm_clean <- storm_data[
  ,
  c(
    "EVTYPE",
    "FATALITIES",
    "INJURIES",
    "PROPDMG",
    "PROPDMGEXP",
    "CROPDMG",
    "CROPDMGEXP"
  )
]

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

storm_clean$PROPDMGEXP <- toupper(
  trimws(storm_clean$PROPDMGEXP)
)

storm_clean$CROPDMGEXP <- toupper(
  trimws(storm_clean$CROPDMGEXP)
)

Measuring Population-Health Impact

The database reports fatalities and injuries separately. Total health impact was calculated as their sum for each observation.

storm_clean$HEALTH_IMPACT <- (
  storm_clean$FATALITIES +
  storm_clean$INJURIES
)

health_totals <- aggregate(
  cbind(FATALITIES, INJURIES, HEALTH_IMPACT) ~ EVTYPE,
  data = storm_clean,
  FUN = sum,
  na.rm = TRUE
)

health_totals <- health_totals[
  order(
    health_totals$HEALTH_IMPACT,
    decreasing = TRUE
  ),
]

top_health <- head(health_totals, 10)

top_health
##                EVTYPE FATALITIES INJURIES HEALTH_IMPACT
## 750           TORNADO       5633    91346         96979
## 108    EXCESSIVE HEAT       1903     6525          8428
## 771         TSTM WIND        504     6957          7461
## 146             FLOOD        470     6789          7259
## 410         LIGHTNING        816     5230          6046
## 235              HEAT        937     2100          3037
## 130       FLASH FLOOD        978     1777          2755
## 379         ICE STORM         89     1975          2064
## 677 THUNDERSTORM WIND        133     1488          1621
## 880      WINTER STORM        206     1321          1527

Converting Economic Damage into Dollars

The variables PROPDMG and CROPDMG are accompanied by exponent codes that indicate their magnitude. The principal codes are:

  • K: thousands of dollars
  • M: millions of dollars
  • B: billions of dollars
  • H: hundreds of dollars
  • Numeric codes: powers of ten

The property- and crop-damage variables are not recorded directly in dollars. Instead, PROPDMG and CROPDMG contain numerical values, while PROPDMGEXP and CROPDMGEXP indicate the corresponding magnitude. For example, K, M, and B represent thousands, millions, and billions.

A function was created to convert the exponent codes into numerical multipliers.

damage_multiplier <- function(code) {
  code <- toupper(trimws(as.character(code)))

  multiplier <- rep(1, length(code))

  multiplier[code == "H"] <- 1e2
  multiplier[code == "K"] <- 1e3
  multiplier[code == "M"] <- 1e6
  multiplier[code == "B"] <- 1e9

  numeric_code <- code %in% as.character(0:9)

  multiplier[numeric_code] <- 10^as.numeric(
    code[numeric_code]
  )

  multiplier
}

The multipliers were then applied to the reported property and crop-damage values. Total economic damage was calculated as the sum of property and crop losses.

storm_clean$PROP_MULTIPLIER <- damage_multiplier(
  storm_clean$PROPDMGEXP
)

storm_clean$CROP_MULTIPLIER <- damage_multiplier(
  storm_clean$CROPDMGEXP
)

storm_clean$PROPERTY_DAMAGE <- (
  storm_clean$PROPDMG *
  storm_clean$PROP_MULTIPLIER
)

storm_clean$CROP_DAMAGE <- (
  storm_clean$CROPDMG *
  storm_clean$CROP_MULTIPLIER
)

storm_clean$ECONOMIC_DAMAGE <- (
  storm_clean$PROPERTY_DAMAGE +
  storm_clean$CROP_DAMAGE
)

economic_totals <- aggregate(
  cbind(
    PROPERTY_DAMAGE,
    CROP_DAMAGE,
    ECONOMIC_DAMAGE
  ) ~ EVTYPE,
  data = storm_clean,
  FUN = sum,
  na.rm = TRUE
)

economic_totals <- economic_totals[
  order(
    economic_totals$ECONOMIC_DAMAGE,
    decreasing = TRUE
  ),
]

top_economic <- head(economic_totals, 10)

top_economic
##                EVTYPE PROPERTY_DAMAGE CROP_DAMAGE ECONOMIC_DAMAGE
## 146             FLOOD    144657709807  5661968450    150319678257
## 364 HURRICANE/TYPHOON     69305840000  2607872800     71913712800
## 750           TORNADO     56947380677   414953270     57362333947
## 591       STORM SURGE     43323536000        5000     43323541000
## 204              HAIL     15735267513  3025954473     18761221986
## 130       FLASH FLOOD     16822723979  1421317100     18244041079
## 76            DROUGHT      1046106000 13972566000     15018672000
## 355         HURRICANE     11868319010  2741910000     14610229010
## 521       RIVER FLOOD      5118945500  5029459000     10148404500
## 379         ICE STORM      3944927860  5022113500      8967041360

Results

Events Most Harmful to Population Health

The following table presents the ten event types with the largest combined number of fatalities and injuries.

knitr::kable(
  top_health,
  col.names = c(
    "Event type",
    "Fatalities",
    "Injuries",
    "Total health impact"
  ),
  caption = "Ten weather-event types with the greatest population-health impact."
)
Ten weather-event types with the greatest population-health impact.
Event type Fatalities Injuries Total health impact
750 TORNADO 5633 91346 96979
108 EXCESSIVE HEAT 1903 6525 8428
771 TSTM WIND 504 6957 7461
146 FLOOD 470 6789 7259
410 LIGHTNING 816 5230 6046
235 HEAT 937 2100 3037
130 FLASH FLOOD 978 1777 2755
379 ICE STORM 89 1975 2064
677 THUNDERSTORM WIND 133 1488 1621
880 WINTER STORM 206 1321 1527
par(mar = c(5, 12, 4, 2))

barplot(
  rev(top_health$HEALTH_IMPACT),
  names.arg = rev(top_health$EVTYPE),
  horiz = TRUE,
  las = 1,
  main = "Weather Events Most Harmful to Population Health",
  xlab = "Combined fatalities and injuries",
  col = "steelblue",
  border = NA
)
The ten weather-event types associated with the greatest combined number of fatalities and injuries. Longer bars indicate greater total harm to population health.

The ten weather-event types associated with the greatest combined number of fatalities and injuries. Longer bars indicate greater total harm to population health.

The event type associated with the greatest combined health impact was TORNADO, with 96,979 recorded fatalities and injuries. It caused 5,633 fatalities and 91,346 injuries.

The ranking indicates that the health burden of severe weather is concentrated among a relatively small number of event categories. Events may rank highly because they occur frequently, because individual events are especially dangerous, or because of a combination of both factors.

Events with the Greatest Economic Consequences

For easier interpretation, economic damage is displayed in billions of dollars.

top_economic$PROPERTY_BILLIONS <- (
  top_economic$PROPERTY_DAMAGE / 1e9
)

top_economic$CROP_BILLIONS <- (
  top_economic$CROP_DAMAGE / 1e9
)

top_economic$TOTAL_BILLIONS <- (
  top_economic$ECONOMIC_DAMAGE / 1e9
)

knitr::kable(
  top_economic[
    ,
    c(
      "EVTYPE",
      "PROPERTY_BILLIONS",
      "CROP_BILLIONS",
      "TOTAL_BILLIONS"
    )
  ],
  digits = 2,
  col.names = c(
    "Event type",
    "Property damage ($ billions)",
    "Crop damage ($ billions)",
    "Total damage ($ billions)"
  ),
  caption = "Ten weather-event types with the greatest economic consequences."
)
Ten weather-event types with the greatest economic consequences.
Event type Property damage ($ billions) Crop damage ($ billions) Total damage ($ billions)
146 FLOOD 144.66 5.66 150.32
364 HURRICANE/TYPHOON 69.31 2.61 71.91
750 TORNADO 56.95 0.41 57.36
591 STORM SURGE 43.32 0.00 43.32
204 HAIL 15.74 3.03 18.76
130 FLASH FLOOD 16.82 1.42 18.24
76 DROUGHT 1.05 13.97 15.02
355 HURRICANE 11.87 2.74 14.61
521 RIVER FLOOD 5.12 5.03 10.15
379 ICE STORM 3.94 5.02 8.97
par(mar = c(5, 12, 4, 2))

barplot(
  rev(top_economic$TOTAL_BILLIONS),
  names.arg = rev(top_economic$EVTYPE),
  horiz = TRUE,
  las = 1,
  main = "Weather Events with the Greatest Economic Consequences",
  xlab = "Combined property and crop damage ($ billions)",
  col = "tomato",
  border = NA
)
The ten weather-event types associated with the greatest combined property and crop damage. Economic losses are expressed in billions of dollars.

The ten weather-event types associated with the greatest combined property and crop damage. Economic losses are expressed in billions of dollars.

The event type associated with the greatest economic loss was FLOOD, producing approximately $150.32 billion in combined property and crop damage.

Of this amount, approximately $144.66 billion came from property damage and $5.66 billion came from crop damage.

Summary

The analysis shows that the event types creating the greatest population-health burden are not necessarily the same as those producing the greatest economic losses. TORNADO had the highest combined number of fatalities and injuries, whereas FLOOD caused the greatest combined property and crop damage. This distinction is important because health impacts and economic impacts represent different dimensions of severe-weather risk. Municipal and emergency-management officials may therefore need to consider both rankings when prioritizing preparedness and response resources.