Severe weather events cause loss of life and impact the economy. In this report, we explored the NOAA Storm Database and evaluated the life and economical damages caused by various severe weather events. We identified tornado as the most deadly event causing over 5000 casualties and flood as the most costly event causing 150 billion dollars of economical damages. Among all event types, drought caused the most significant damage to crop.
Raw data Raw data is obtained from the U.S. National Oceanic and Atmospheric Administration’s (NOAA) storm database (https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2). Additional information can be found in National Weather Service Storm Data Documentation (https://d396qusza40orc.cloudfront.net/repdata%2Fpeer2_doc%2Fpd01016005curr.pdf) and National Climatic Data Center Storm Events FAQ (https://d396qusza40orc.cloudfront.net/repdata%2Fpeer2_doc%2FNCDC%20Storm%20Events-FAQ%20Page.pdf).
Data analysis Data were processed using a PC installed with R Studio (v20.04.2) and R (v4.4.0). Installed packages include knitr, ggplot2, dplyr, tidyr, and lubridate. Step-by-step processing is described in the R Markdown below.
library(dplyr)
##
## 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(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(ggplot2)
library(tidyr)
data <- read.csv("repdata_data_StormData.csv")
# fatality
# group by EVTYPE, get group sum, then arrange
fatalRank <- data %>% group_by(EVTYPE) %>% summarize(fatalSum=sum(FATALITIES)) %>% arrange(desc(fatalSum))
# Table 1
print(fatalRank[1:20,])
## # A tibble: 20 × 2
## EVTYPE fatalSum
## <chr> <dbl>
## 1 TORNADO 5633
## 2 EXCESSIVE HEAT 1903
## 3 FLASH FLOOD 978
## 4 HEAT 937
## 5 LIGHTNING 816
## 6 TSTM WIND 504
## 7 FLOOD 470
## 8 RIP CURRENT 368
## 9 HIGH WIND 248
## 10 AVALANCHE 224
## 11 WINTER STORM 206
## 12 RIP CURRENTS 204
## 13 HEAT WAVE 172
## 14 EXTREME COLD 160
## 15 THUNDERSTORM WIND 133
## 16 HEAVY SNOW 127
## 17 EXTREME COLD/WIND CHILL 125
## 18 STRONG WIND 103
## 19 BLIZZARD 101
## 20 HIGH SURF 101
print("Table 1. Severe weather event types causing most fatality")
## [1] "Table 1. Severe weather event types causing most fatality"
# Figure 1
par(mgp =c(3,0.8,0))
barplot(fatalRank[1:20,]$fatalSum,
main="Figure 1. Most fatal severe weather events",
xlab="",
ylab="Fatality",
names.arg=fatalRank[1:20,]$EVTYPE, cex.names=0.7, las=2)
# property damage (PROPDMG) and crop damage (CROPDMG)
# Note that PROPDMGEXP and CROPDMGEXP show the magnitude of damages, eg. K=10^3, M=10^6
convert_mag <- function(x) {
mag <- switch(x,
"K"=1000,
"M"=1000000,
"B"=1000000000,
1)
return(mag)
}
data$PROP <- data$PROPDMG * sapply(data$PROPDMGEXP, convert_mag)
data$CROP <- data$CROPDMG * sapply(data$CROPDMGEXP, convert_mag)
dmg <- data %>% group_by(EVTYPE) %>% summarize(property=sum(PROP), crop=sum(CROP)) %>% arrange(desc(property+crop))
# Table 2
print(dmg[1:20,])
## # A tibble: 20 × 3
## EVTYPE property crop
## <chr> <dbl> <dbl>
## 1 FLOOD 144657709807 5661968450
## 2 HURRICANE/TYPHOON 69305840000 2607872800
## 3 TORNADO 56925660790. 414953270
## 4 STORM SURGE 43323536000 5000
## 5 HAIL 15727367053. 3025537890
## 6 FLASH FLOOD 16140812067. 1421317100
## 7 DROUGHT 1046106000 13972566000
## 8 HURRICANE 11868319010 2741910000
## 9 RIVER FLOOD 5118945500 5029459000
## 10 ICE STORM 3944927860 5022113500
## 11 TROPICAL STORM 7703890550 678346000
## 12 WINTER STORM 6688497251 26944000
## 13 HIGH WIND 5270046295 638571300
## 14 WILDFIRE 4765114000 295472800
## 15 TSTM WIND 4484928495 554007350
## 16 STORM SURGE/TIDE 4641188000 850000
## 17 THUNDERSTORM WIND 3483121284 414843050
## 18 HURRICANE OPAL 3152846020 9000010
## 19 WILD/FOREST FIRE 3001829500 106796830
## 20 HEAVY RAIN/SEVERE WEATHER 2500000000 0
print("Table 2. Severe weather event types causing most economical damages")
## [1] "Table 2. Severe weather event types causing most economical damages"
# Figure 2
dmg[1:20,] %>%
gather(key="damage_type", value ="damage_amount", property, crop) %>%
ggplot(aes(reorder(EVTYPE, -damage_amount, sum), damage_amount, fill=damage_type)) +
geom_bar(stat="identity", position="stack") +
labs(x="", y="damage amount in dollar value", fill="damage type",
title="Figure 2. Most economical costly severe weather event") +
theme(axis.text.x=element_text(angle=75, hjust=1, vjust=1, size=8))
Tornado causes most fatality Of all severe weather events, tornado is the most deadly event type, responsible for 5633 cases of fatality, nearly 3-fold of the second place excessive heat and 6-fold of the third place event flash flood, which are respectively responsible for 1903 and 978 cases of fatality (Table 1, Fig. 1).
Flood causes most economical losses Flood is the most costly event in term of economical loss, responsible for nearly 145 billion dollars of property and 5.7 billion dollars of crop damages (Table 2, Fig. 2). The second and third most costly events are hurricane/typhoon and tornado, for 69 billion, 57 billion dollar property and 2.6 billion, 0.4 billion crop losses respectively. Of note, tornado which is the no.1 cause of fatality also caused severe economical losses.
Property loss outweighs crop loss Properties suffer much more damage than crops across the board. Of the top 20 most costly event types, property damages significantly (at least 3x over) outweigh crop damages in 17 event types, with the exceptions seen in drought (14.0 billion crop outweighing 1.0 billion property), ice storm (5.0 billion crop outweighing 3.9 billion property), and river flood (5.0 billion crop in par with 5.1 billion property).