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).
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.
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)
)
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
The variables PROPDMG and CROPDMG are
accompanied by exponent codes that indicate their magnitude. The
principal codes are:
K: thousands of dollarsM: millions of dollarsB: billions of dollarsH: hundreds of dollarsThe 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
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."
)
| 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 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.
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."
)
| 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 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.
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.