The Health and Economic Impact of Weather Events in the United States: from 1994 to 2011

Synopsis

The original data set is neatly processed before analysis. Since records before 1994 seem incomplete, weather event records from 1994 to 2011 were involved in the analysis.

For health impacts, excessive heat and tornado have most total fatalities as well as most total injuries, and contribute most to the total health impact of weather phenomena. Tsunami is the most disastrous weather event in terms of both average fatalities and average injuries. Heat and excessive heat also rank high in both average fatalities and average injuries.

For economic impacts, flood and hurricane/typhoon have most total property damage as well as most crop damage, and contribute most to the total economic losses due to weather phenomena. Hurricane/typhoon is the most disastrous weather event in terms of both average property damage and average rop damage. ##Data Processing The original data set contains weather event records across the United States from 1950 to 2011. When processing the original data set, the following problems are addressed and solved:

  • The health and economic losses are reported on basis of counties/parishes (C), zones (Z), or marine regions (M) but not weather events. Damage in different districts should be added up in order to reflect the total devastating effects of individual weather events.
  • The names of the weather events are a mixure of upper and lower cases. All will be converted to upper cases to ensure consistency.
  • Some typing errors or name variants are corrected. Those beyond recognition are expelled, which should not influence the analytic results significantly.
  • Damage from secondary disasters should be attributed to the corresponding primary weather events.
  • The exponent values in variables PROPDMGEXP and CROPDMGEXP are misrepresented with letters, numbers, symbols, and empty characters. These two variables are handled according to the instructions in this article How To Handle Exponent Value of PROPDMGEXP and CROPDMGEXP.
  • There are some summaries of weather events in certain time periods that should be expelled from the analysis.

The processed pre-analytic data set contains only the 48 weather events enlisted in National Weather Service Storm Data Documentation.

## Environment preparation.
options(stringsAsFactors = FALSE)
if(!require(data.table)) install.packages("data.table")
## Loading required package: data.table
## Warning: package 'data.table' was built under R version 3.6.3
if(!require(R.utils)) install.packages("R.utils")
## Loading required package: R.utils
## Warning: package 'R.utils' was built under R version 3.6.3
## Loading required package: R.oo
## Warning: package 'R.oo' was built under R version 3.6.2
## Loading required package: R.methodsS3
## Warning: package 'R.methodsS3' was built under R version 3.6.2
## R.methodsS3 v1.8.0 (2020-02-14 07:10:20 UTC) successfully loaded. See ?R.methodsS3 for help.
## R.oo v1.23.0 successfully loaded. See ?R.oo for help.
## 
## Attaching package: 'R.oo'
## The following object is masked from 'package:R.methodsS3':
## 
##     throw
## The following objects are masked from 'package:methods':
## 
##     getClasses, getMethods
## The following objects are masked from 'package:base':
## 
##     attach, detach, load, save
## R.utils v2.9.2 successfully loaded. See ?R.utils for help.
## 
## Attaching package: 'R.utils'
## The following object is masked from 'package:utils':
## 
##     timestamp
## The following objects are masked from 'package:base':
## 
##     cat, commandArgs, getOption, inherits, isOpen, nullfile, parse,
##     warnings
if(!require(stringr)) install.packages("stringr")
## Loading required package: stringr
## Warning: package 'stringr' was built under R version 3.6.3
if(!require(knitr)) install.packages("knitr")
## Loading required package: knitr
## Warning: package 'knitr' was built under R version 3.6.3
library(data.table)
library(R.utils)
library(stringr)
library(knitr)
## Download and load the original data set.
url0 <- "https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
filename <- "StormData.csv.bz2"
if(!file.exists(filename)) download.file(url0, filename)
data <- fread(filename, data.table = FALSE)
rm(list = c("url0","filename"))
## Extract necessary variables.
data$BGN_DATE %>% str_split(" ") %>% sapply(function(x) x[1]) %>% 
    as.Date("%m/%d/%Y") -> dates
events <- data$EVTYPE
exp <- function(x) {
    exp1 <- str_replace_all(x, c("h"="H","k"="K","m"="M","b"="B",
                                               "\\-"="X","\\?"="X","0"="N","1"="N",
                                               "2"="N","3"="N","4"="N","5"="N",
                                               "6"="N","7"="N","8"="N","\\+"="Y"))
    exp1[exp1 == ""] <- "X"
    exp2 <- sapply(exp1, function(x) switch(x,H=100,K=1000,M=1e6,B=1e9,N=10,Y=1,X=0))
}

propdmg <- data$PROPDMG * exp(data$PROPDMGEXP)
cropdmg <- data$CROPDMG * exp(data$CROPDMGEXP)
fatalities <- data$FATALITIES
injuries <- data$INJURIES
rm(list = c("data","exp"))
## Sum up the losses of the same event from different districts.
counter <- vector(); i <- 1; counter[1] <- i
for (j in 2:length(dates)) {
    if ((dates[j] != dates[j-1]) | (events[j] != events[j-1])) i <- i + 1
    counter[j] <- i
}
Dates <- as.Date(vector()); Events <- vector(); Propdmg <- vector()
Cropdmg <- vector(); Fatalities <- vector(); Injuries <- vector()
for (i in 1:counter[length(counter)]) {
    j <- which(counter==i)
    k <- max(j)
    Dates[i] <- dates[k]; Events[i] <- events[k]
    sumi <- function(x) sum(x[j])
    Propdmg[i] <- sumi(propdmg)
    Cropdmg[i] <- sumi(cropdmg)
    Fatalities[i] <- sumi(fatalities)
    Injuries[i] <- sumi(injuries)
}
## Present the processed data set.
## In this way can we protect the processing result from collapsing of 
data <- cbind.data.frame(Dates, Events, Propdmg, Cropdmg, Fatalities, Injuries)
rm(list = c("Dates", "dates", "Events", "events", "Propdmg", "propdmg", "Cropdmg",
            "cropdmg", "Fatalities", "fatalities", "Injuries", "injuries", "counter", 
            "i", "j", "k", "sumi"))
## Expel the summary lines.
data <- data[!grepl("[Ss][Uu][Mm][Mm][Aa][Rr][Yy]", data$Events),]
## Convert the event names to upper cases.
data$Events <- toupper(data$Events)
## Correct typing errors and variants. A long, messy code chunk.
data <- data[-which(data$Events == "?"),]
data <- data[-grep("NON", data$Events),]
data <- data[-which(data$Events == " WIND"),]
data <- data[-which(data$Events == "ICE FLOES"),]
data <- data[-which(data$Events == "PATCHY ICE"),]
data <- data[-which(data$Events == "GUSTY LAKE WIND"),]
data <- data[-grep("WET", data$Events),]
data <- data[-which(data$Events == "HIGH"),]
data <- data[-which(data$Events == "RECORD HIGH"),]
data <- data[-grep("APACHE", data$Events),]
data <- data[-which(data$Events == "DROWNING"),]
data <- data[-which(data$Events == "EXCESSIVE"),]
data <- data[-which(data$Events == "LARGE WALL CLOUD"),]
data <- data[-which(data$Events == "WAKE LOW WIND"),]
data <- data[-which(data$Events == "MARINE ACCIDENT"),]
data <- data[-which(data$Events == "MARINE MISHAP"),]
data <- data[-grep("METRO", data$Events),]
data <- data[-grep("MILD", data$Events),]
data <- data[-which(data$Events == "NO SEVERE WEATHER"),]
data <- data[-which(data$Events == "OTHER"),]
unify1 <- function(x) {
    label <- grep(paste0("^",x), data$Events)
    data$Events[label] <<- x
}
eventtypes <- c("ASTRONOMICAL LOW TIDE","AVALANCHE","BLIZZARD",
                "COASTAL FLOOD","COLD/WIND CHILL","DEBRIS FLOW","DENSE FOG",
                "DENSE SMOKE","DROUGHT","DUST DEVIL","DUST STORM",
                "EXCESSIVE HEAT","EXTREME COLD/WIND CHILL",
                "FLASH FLOOD","FLOOD","FREEZING FOG","FROST/FREEZE",
                "FUNNEL CLOUD","HAIL","HEAT","HEAVY RAIN","HEAVY SNOW",
                "HIGH SURF","HIGH WIND","HURRICANE/TYPHOON","ICE STORM",
                "LAKESHORE FLOOD","LAKE-EFFECT SNOW","LIGHTNING",
                "MARINE HAIL","MARINE HIGH WIND","MARINE STRONG WIND",
                "MARINE THUNDERSTORM WIND","RIP CURRENT","SEICHE","SLEET",
                "STORM TIDE","STRONG WIND","THUNDERSTORM WIND","TORNADO",
                "TROPICAL DEPRESSION","TROPICAL STORM","TSUNAMI",
                "VOLCANIC ASH","WATERSPOUT","WILDFIRE","WINTER STORM",
                "WINTER WEATHER")
sapply(eventtypes, unify1)
##      ASTRONOMICAL LOW TIDE                  AVALANCHE 
##    "ASTRONOMICAL LOW TIDE"                "AVALANCHE" 
##                   BLIZZARD              COASTAL FLOOD 
##                 "BLIZZARD"            "COASTAL FLOOD" 
##            COLD/WIND CHILL                DEBRIS FLOW 
##          "COLD/WIND CHILL"              "DEBRIS FLOW" 
##                  DENSE FOG                DENSE SMOKE 
##                "DENSE FOG"              "DENSE SMOKE" 
##                    DROUGHT                 DUST DEVIL 
##                  "DROUGHT"               "DUST DEVIL" 
##                 DUST STORM             EXCESSIVE HEAT 
##               "DUST STORM"           "EXCESSIVE HEAT" 
##    EXTREME COLD/WIND CHILL                FLASH FLOOD 
##  "EXTREME COLD/WIND CHILL"              "FLASH FLOOD" 
##                      FLOOD               FREEZING FOG 
##                    "FLOOD"             "FREEZING FOG" 
##               FROST/FREEZE               FUNNEL CLOUD 
##             "FROST/FREEZE"             "FUNNEL CLOUD" 
##                       HAIL                       HEAT 
##                     "HAIL"                     "HEAT" 
##                 HEAVY RAIN                 HEAVY SNOW 
##               "HEAVY RAIN"               "HEAVY SNOW" 
##                  HIGH SURF                  HIGH WIND 
##                "HIGH SURF"                "HIGH WIND" 
##          HURRICANE/TYPHOON                  ICE STORM 
##        "HURRICANE/TYPHOON"                "ICE STORM" 
##            LAKESHORE FLOOD           LAKE-EFFECT SNOW 
##          "LAKESHORE FLOOD"         "LAKE-EFFECT SNOW" 
##                  LIGHTNING                MARINE HAIL 
##                "LIGHTNING"              "MARINE HAIL" 
##           MARINE HIGH WIND         MARINE STRONG WIND 
##         "MARINE HIGH WIND"       "MARINE STRONG WIND" 
##   MARINE THUNDERSTORM WIND                RIP CURRENT 
## "MARINE THUNDERSTORM WIND"              "RIP CURRENT" 
##                     SEICHE                      SLEET 
##                   "SEICHE"                    "SLEET" 
##                 STORM TIDE                STRONG WIND 
##               "STORM TIDE"              "STRONG WIND" 
##          THUNDERSTORM WIND                    TORNADO 
##        "THUNDERSTORM WIND"                  "TORNADO" 
##        TROPICAL DEPRESSION             TROPICAL STORM 
##      "TROPICAL DEPRESSION"           "TROPICAL STORM" 
##                    TSUNAMI               VOLCANIC ASH 
##                  "TSUNAMI"             "VOLCANIC ASH" 
##                 WATERSPOUT                   WILDFIRE 
##               "WATERSPOUT"                 "WILDFIRE" 
##               WINTER STORM             WINTER WEATHER 
##             "WINTER STORM"           "WINTER WEATHER"
rm(eventtypes)
unify2 <- function(x, y=x) {
    label <- grep(x, data$Events)
    data$Events[label] <<- y
}
unify3 <- function(x, y, z) {
    label <- grepl(x, data$Events) & (!grepl(y, data$Events))
    data$Events[label] <<- z
}
unify4 <- function(x, y, z) {
    label <- grepl(x, data$Events) & (grepl(y, data$Events))
    data$Events[label] <<- z
}
unify2("FLASH", "FLASH FLOOD")
unify2("SURF", "HIGH SURF")
unify2("BEACH", "COASTAL FLOOD")
unify2("COASTAL FLOOD")
unify2("MARINE TSTM WIND", "MARINE THUNDERSTORM WIND")
unify2("TSTM", "THUNDERSTORM WIND")
unify3("THUNDERST", "MARINE", "THUNDERSTORM WIND")
unify2("LIGHTNING")
unify2("WATERSPOUT")
unify2("DRY", "DROUGHT")
unify2("LACK", "DROUGHT")
unify2("DROUGHT", "DROUGHT")
unify2("BELOW", "DROUGHT")
unify2("RECORD WARM", "EXCESSIVE HEAT")
unify2("WARM", "HEAT")
unify3("HEAT", "^HEAT", "EXCESSIVE HEAT")
unify2("FREEZE", "FROST/FREEZE")
unify2("AVALAN", "AVALANCHE")
unify2("BURST", "THUNDERSTORM WIND")
unify2("ICE FOG", "FREEZING FOG")
unify2("FOG AND COLD", "FREEZING FOG")
unify3("FOG", "FREEZING", "DENSE FOG")
unify2("ICE JAM", "FLASH FLOOD")
unify2("HIGHWAY", "FLASH FLOOD")
unify2("BLACK", "FROST/FREEZE")
unify2("GLAZE", "FROST/FREEZE")
unify2("ICE ON ROAD", "FROST/FREEZE")
unify2("ICE ROADS", "FROST/FREEZE")
data$Events[data$Events=="ICE"] <- "FROST/FREEZE"
unify2("ICE PELLETS", "HAIL")
unify2("ICE", "ICE STORM")
unify2("LAKE FLOOD", "LAKESHORE FLOOD")
unify3("LAKE", "SHORE", "LAKE-EFFECT SNOW")
unify2("THUNDERSNOW", "WINTER STORM")
unify2("SNOWSTORM", "WINTER STORM")
unify2("EXTREME", "EXTREME COLD/WIND CHILL")
unify2("SLEET")
unify4("SNOW", "RAIN", "SLEET")
unify4("SNOW", "WIND", "SLEET")
unify2("MIXED", "SLEET")
unify2("HEAVY MIX", "SLEET")
unify3("SNOW", "LAKE", "HEAVY SNOW")
unify4("HIGH", "TEMP", "EXCESSIVE HEAT")
unify4("HIGH", "TIDE", "HIGH SURF")
unify4("HIGH", "SWELL", "HIGH SURF")
unify4("HIGH", "SEAS", "HIGH SURF")
unify4("HIGH", "WATER", "HIGH SURF")
unify4("HIGH", "WAVES", "HIGH SURF")
unify4("HIGH", "WINDS", "HIGH WIND")
unify4("COLD", "HIGH", "COLD/WIND CHILL")
unify4("HIGH", "CHILL", "COLD/WIND CHILL")
unify3("WIND CHILL", "EXTREME", "HIGH WIND")
unify2("BLOW-OUT", "ASTRONOMICAL LOW TIDE")
unify2("BLOWING", "DUST DEVIL")
unify2("BREAK", "FLASH FLOOD")
unify2("FIRE", "WILDFIRE")
unify2("COASTAL", "COASTAL FLOOD")
unify2("FUNNEL", "FUNNEL CLOUD")
unify2("CSTL", "COASTAL FLOOD")
unify2("TORN", "TORNADO")
unify2("FROST", "FROST/FREEZE")
unify4("EXCESSIVE", "COLD", "EXTREME COLD/WIND CHILL")
unify4("EXTENDED", "COLD", "EXTREME COLD/WIND CHILL")
unify4("PROLONG", "COLD", "EXTREME COLD/WIND CHILL")
unify4("RECORD", "COLD", "EXTREME COLD/WIND CHILL")
unify4("SEVERE", "COLD", "EXTREME COLD/WIND CHILL")
unify3("COLD", "EXTREME", "COLD/WIND CHILL")
unify2("COOL", "COLD/WIND CHILL")
unify2("DAM ", "FLASH FLOOD")
unify3("HAIL", "MARINE", "HAIL")
unify2("DRIEST", "DROUGHT")
unify3("FREEZING", "FOG", "WINTER WEATHER")
unify4("DUST", "STORM", "DUST STORM")
unify3("DUST", "STORM", "DUST DEVIL")
unify2("RAIN", "HEAVY RAIN")
unify2("PRECIPITATION", "HEAVY RAIN")
unify2("BLIZZARD")
unify2("GRADIENT", "STRONG WIND")
unify2("GUST", "STRONG WIND")
unify3("WINT", "STORM", "WINTER WEATHER")
unify2("PRECIP", "HEAVY RAIN")
unify2(" SEAS", "HEAVY RAIN")
unify2("SHOWER", "HEAVY RAIN")
unify2("HEAVY SWELLS", "HIGH SURF")
unify2("HOT", "EXCESSIVE HEAT")
unify2("HURRICANE", "HURRICANE/TYPHOON")
unify2("TYPHOON", "HURRICANE/TYPHOON")
unify2("HYPER", "HEAT")
unify2("HYPO", "COLD/WIND CHILL")
unify2("ROADS", "FROST/FREEZE")
unify2("LANDSPOUT", "TORNADO")
unify2("LANDS", "DEBRIS FLOW")
unify2("MUD", "DEBRIS FLOW")
unify4("WATER", "SPOUT", "WATERSPOUT")
unify2("RISING", "HIGH SURF")
unify2("LIG", "LIGHTNING")
data$Events[grepl("FLOOD", data$Events) & (!grepl("FLASH", data$Events)) &(!grepl("LAKESHORE", data$Events)) & (!grepl("COASTAL", data$Events))] <- "FLOOD"
unify4("LOW", "TEMP", "COLD/WIND CHILL")
unify4("LOW", "RECORD", "EXTREME COLD/WIND CHILL")
data <- data[-grep("TEMP", data$Events),]
data <- data[-grep("^RE", data$Events),]
unify2("ROCK", "DEBRIS FLOW")
unify2("ROGUE", "HIGH SURF")
unify2("ROTAT", "FUNNEL CLOUD")
data <- data[-grep("SEVERE", data$Events),]
data <- data[-grep("STREAM", data$Events),]
unify2("SMOKE", "DENSE SMOKE")
data <- data[-grep("SOUTH", data$Events),]
unify4("STORM", "SURGE", "STORM TIDE")
unify4("STORM", "FORCE", "STORM TIDE")
unify3("ORM WIND", "MARINE", "THUNDERSTORM WIND")
data <- data[-grep("URBAN", data$Events),]
unify2("VO", "VOCALNIC ASH")
data <- data[-grep("WALL", data$Events),]
unify2("YTERSPOUT", "WATERSPOUT")
unify2("WHIRLWIND", "TORNADO")
unify2("^WIND", "STRONG WIND")
data <- data[-grep("WND", data$Events),]
rm(list = c(str_subset(ls(),"unify")))
## Echo the structure of processed data set.
str(data)
## 'data.frame':    480990 obs. of  6 variables:
##  $ Dates     : Date, format: "1950-04-18" "1951-02-20" ...
##  $ Events    : chr  "TORNADO" "TORNADO" "TORNADO" "TORNADO" ...
##  $ Propdmg   : num  27500 25000 2500 5000 2500 2500 5300000 0 25000 25000 ...
##  $ Cropdmg   : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Fatalities: num  0 0 0 0 0 0 2 0 0 4 ...
##  $ Injuries  : num  15 2 2 8 1 0 46 12 6 50 ...
## The commented-out code below helps save the processed data set to a file.
## save(data, file = "processed.Rdata")

Results

Since the dated weather events tended to be recorded poorly, we would like to reveal the time-distribution pattern of weather event records with a histogram in the first place.

## The commented-out code below helps Load processed data set from file.
## load("processed.Rdata")
## Draw a histogram of the yearly pattern of weather event records.
seq1 <- as.Date(paste(1950:2012, "01-01", sep = "-"))
hist(data$Dates, breaks = seq1, freq = TRUE, col = "red", 
     main = "Distribution of Weather Event Records", 
     xlab = "Year", ylab = "Number of Records")

rm(seq1)

A sharp increase of number of records can be observed in the year 1994. As a result, we would like to extract merely records from 1994 to 2011 for further analysis to prevent biases from poor recording in the earlier years:

## Extract records from 1994 to 2011 for further analysis.
data94 <- data[data$Dates >= as.Date("1994-01-01"),]
rm(data)
frequents <- as.data.frame(table(data94$Events))
events <- frequents[,1]
rank <- function(x, y) {
    z <-  x[order(x[,y], decreasing = TRUE),c(1,y)]
    row.names(z) <- 1:length(events)
    z
}
## Sum up and average fatalities and injuries according to types of events.
E94 <- data94$Events; F94 <- data94$Fatalities; I94 <- data94$Injuries
sumfatalities <- vector(); suminjuries <- vector()
for (i in 1:nrow(frequents)) {
    label <- (E94 == frequents[i,1])
    sumfatalities[i] <- sum(F94[label])
    suminjuries[i] <- sum(I94[label])
}
avefatalities <- sumfatalities / frequents[,2]
aveinjuries <- suminjuries / frequents[,2]
health <- cbind.data.frame(events, sumfatalities, suminjuries)
ahealth <- cbind.data.frame(events, avefatalities, aveinjuries)
fhealth <- rank(health, 2)
fahealth <- rank(ahealth, 2)
ihealth <- rank(health, 3)
iahealth <- rank(ahealth, 3)
## Sum up and average property damage and crop damage according to types of events.
P94 <- data94$Propdmg; C94 <- data94$Cropdmg
sumprop <- vector(); sumcrop <- vector()
for (i in 1:nrow(frequents)) {
    label <- (E94 == frequents[i,1])
    sumprop[i] <- sum(P94[label])
    sumcrop[i] <- sum(C94[label])
}
aveprop <- sumprop / frequents[,2]
avecrop <- sumcrop / frequents[,2]
eco <- cbind.data.frame(events, sumprop, sumcrop)
aeco <- cbind.data.frame(events, aveprop, avecrop)
peco <- rank(eco, 2)
paeco <- rank(aeco, 2)
ceco <- rank(eco, 3)
caeco <- rank(aeco, 3)
rm(list = c(str_subset(ls(),"[EFIPC]94"), str_subset(ls(),"sum"), 
            str_subset(ls(),"ave"), str_subset(ls(),"^a?(health|eco)"), 
            "frequents", "label", "i", "events", "rank"))

The ranking by total fatalities is as follows:

kable(fhealth)
events sumfatalities
EXCESSIVE HEAT 2018
TORNADO 1594
HEAT 1123
FLASH FLOOD 990
LIGHTNING 795
RIP CURRENT 577
FLOOD 476
THUNDERSTORM WIND 435
HIGH WIND 353
EXTREME COLD/WIND CHILL 295
AVALANCHE 224
WINTER STORM 197
HIGH SURF 170
HEAVY SNOW 151
STRONG WIND 136
HURRICANE/TYPHOON 133
HEAVY RAIN 112
ICE STORM 91
WILDFIRE 87
DENSE FOG 75
BLIZZARD 71
WINTER WEATHER 69
TROPICAL STORM 66
COLD/WIND CHILL 59
DEBRIS FLOW 44
DROUGHT 35
TSUNAMI 33
DUST STORM 22
MARINE THUNDERSTORM WIND 19
FROST/FREEZE 18
MARINE STRONG WIND 14
STORM TIDE 13
COASTAL FLOOD 10
HAIL 10
SLEET 9
DUST DEVIL 2
WATERSPOUT 2
FREEZING FOG 1
MARINE HIGH WIND 1
ASTRONOMICAL LOW TIDE 0
DENSE SMOKE 0
FUNNEL CLOUD 0
LAKE-EFFECT SNOW 0
LAKESHORE FLOOD 0
MARINE HAIL 0
SEICHE 0
TROPICAL DEPRESSION 0
VOCALNIC ASH 0
The ranking by total injuri es is as follows:
kable(ihealth)
events suminjuries
TORNADO 22589
FLOOD 6791
EXCESSIVE HEAT 6730
THUNDERSTORM WIND 5988
LIGHTNING 5118
HEAT 2508
ICE STORM 1975
FLASH FLOOD 1762
WILDFIRE 1458
HURRICANE/TYPHOON 1332
WINTER STORM 1314
HIGH WIND 1271
HEAVY SNOW 1064
DENSE FOG 1063
HAIL 953
WINTER WEATHER 637
RIP CURRENT 529
DUST STORM 439
STRONG WIND 398
BLIZZARD 389
TROPICAL STORM 383
FROST/FREEZE 332
HEAVY RAIN 271
EXTREME COLD/WIND CHILL 259
HIGH SURF 255
AVALANCHE 170
TSUNAMI 129
SLEET 62
DROUGHT 57
DEBRIS FLOW 55
COLD/WIND CHILL 48
DUST DEVIL 43
STORM TIDE 42
MARINE THUNDERSTORM WIND 34
WATERSPOUT 33
MARINE STRONG WIND 22
COASTAL FLOOD 9
FUNNEL CLOUD 3
FREEZING FOG 1
MARINE HIGH WIND 1
ASTRONOMICAL LOW TIDE 0
DENSE SMOKE 0
LAKE-EFFECT SNOW 0
LAKESHORE FLOOD 0
MARINE HAIL 0
SEICHE 0
TROPICAL DEPRESSION 0
VOCALNIC ASH 0
The ranking by average fata lities by events is as follows:
kable(fahealth)
events avefatalities
TSUNAMI 1.9411765
HEAT 1.2114347
EXCESSIVE HEAT 1.1446398
RIP CURRENT 0.8092567
AVALANCHE 0.6103542
HURRICANE/TYPHOON 0.5611814
COLD/WIND CHILL 0.3831169
MARINE STRONG WIND 0.3500000
EXTREME COLD/WIND CHILL 0.1876590
HIGH SURF 0.1497797
TROPICAL STORM 0.1309524
TORNADO 0.0837625
DEBRIS FLOW 0.0785714
ICE STORM 0.0626290
LIGHTNING 0.0581183
DUST STORM 0.0554156
DENSE FOG 0.0511945
SLEET 0.0500000
STORM TIDE 0.0488722
STRONG WIND 0.0370572
BLIZZARD 0.0333803
FLASH FLOOD 0.0319602
FLOOD 0.0287909
WILDFIRE 0.0263556
HIGH WIND 0.0248837
WINTER STORM 0.0236154
FREEZING FOG 0.0227273
HEAVY RAIN 0.0159385
DROUGHT 0.0152042
COASTAL FLOOD 0.0145560
FROST/FREEZE 0.0137300
DUST DEVIL 0.0130719
HEAVY SNOW 0.0122287
WINTER WEATHER 0.0105263
MARINE HIGH WIND 0.0098039
MARINE THUNDERSTORM WIND 0.0041403
THUNDERSTORM WIND 0.0039272
WATERSPOUT 0.0006838
HAIL 0.0001035
ASTRONOMICAL LOW TIDE 0.0000000
DENSE SMOKE 0.0000000
FUNNEL CLOUD 0.0000000
LAKE-EFFECT SNOW 0.0000000
LAKESHORE FLOOD 0.0000000
MARINE HAIL 0.0000000
SEICHE 0.0000000
TROPICAL DEPRESSION 0.0000000
VOCALNIC ASH 0.0000000
The ranking by average inju ries by events is as follows:
kable(iahealth)
events aveinjuries
TSUNAMI 7.5882353
HURRICANE/TYPHOON 5.6202532
EXCESSIVE HEAT 3.8173568
HEAT 2.7055016
ICE STORM 1.3592567
TORNADO 1.1870205
DUST STORM 1.1057935
TROPICAL STORM 0.7599206
RIP CURRENT 0.7419355
DENSE FOG 0.7255973
MARINE STRONG WIND 0.5500000
AVALANCHE 0.4632153
WILDFIRE 0.4416843
FLOOD 0.4107542
LIGHTNING 0.3741502
SLEET 0.3444444
COLD/WIND CHILL 0.3116883
DUST DEVIL 0.2810458
FROST/FREEZE 0.2532418
HIGH SURF 0.2246696
BLIZZARD 0.1828867
EXTREME COLD/WIND CHILL 0.1647583
STORM TIDE 0.1578947
WINTER STORM 0.1575162
STRONG WIND 0.1084469
DEBRIS FLOW 0.0982143
WINTER WEATHER 0.0971777
HIGH WIND 0.0895954
HEAVY SNOW 0.0861678
FLASH FLOOD 0.0568827
THUNDERSTORM WIND 0.0540594
HEAVY RAIN 0.0385655
DROUGHT 0.0247611
FREEZING FOG 0.0227273
COASTAL FLOOD 0.0131004
WATERSPOUT 0.0112821
HAIL 0.0098636
MARINE HIGH WIND 0.0098039
MARINE THUNDERSTORM WIND 0.0074090
FUNNEL CLOUD 0.0005018
ASTRONOMICAL LOW TIDE 0.0000000
DENSE SMOKE 0.0000000
LAKE-EFFECT SNOW 0.0000000
LAKESHORE FLOOD 0.0000000
MARINE HAIL 0.0000000
SEICHE 0.0000000
TROPICAL DEPRESSION 0.0000000
VOCALNIC ASH 0.0000000
Barplots of top 10 weather events are as follows:
## Draw barplots.
par(mfrow = c(2,2), mar = c(3,10,2,1), las = 2)
barplot(rev(fhealth[1:10,2]), col = rev(heat.colors(10)), horiz = TRUE, axes = F, 
        names.arg = rev(fhealth[1:10,1]), cex.names = 0.6, main = "Total Fatalities")
axis(1, seq(0,2500,500), as.character(seq(0,2500,500)))
barplot(rev(ihealth[1:10,2]), col = rev(heat.colors(10)), horiz = TRUE, axes = F, 
        names.arg = rev(ihealth[1:10,1]), cex.names = 0.6, main = "Total Injuries")
axis(1, seq(0,25000,5000), as.character(seq(0,25000,5000)))
barplot(rev(fahealth[1:10,2]), col = rev(heat.colors(10)), horiz = TRUE, axes = F, 
        names.arg = rev(fahealth[1:10,1]), cex.names = 0.6, 
        main = "Average Fatalities")
axis(1, seq(0,2,0.4), as.character(seq(0,2,0.4)))
barplot(rev(iahealth[1:10,2]), col = rev(heat.colors(10)), horiz = TRUE, axes = F, 
        names.arg = rev(iahealth[1:10,1]), cex.names = 0.6, 
        main = "Average Injuries")
axis(1, seq(0,10,2), as.character(seq(0,10,2)))

rm(list = c(str_subset(ls(),"health")))

The upper panels display the total fatalities and injuries from top 10 weather events from 1994 to 2011. Excessive heat and tornado have most total fatalities as well as most total injuries, and contribute most to the total health impact of weather phenomena.

The lower panels display the average fatalities and injuries by events from top 10 weather events from 1994 to 2011. Tsunami is the most disastrous weather event in terms of both average fatalities and average injuries, and anti-tsunami measures should be taken seriously. Heat and excessive heat rank high in both average fatalities and average injuries as well.

The ranking by total property damage is as follows:

kable(peco)
events sumprop
FLOOD 144656908804
HURRICANE/TYPHOON 85200910010
STORM TIDE 47834924000
TORNADO 25625161347
FLASH FLOOD 16312612581
HAIL 15577339827
THUNDERSTORM WIND 10531348322
WILDFIRE 7877628500
TROPICAL STORM 7713885550
HIGH WIND 5518079645
ICE STORM 3835908360
HEAVY RAIN 3224997690
WINTER STORM 1620147260
DROUGHT 1052838600
LIGHTNING 876802267
HEAVY SNOW 773189657
BLIZZARD 527058950
COASTAL FLOOD 438920560
DEBRIS FLOW 327251100
STRONG WIND 183850790
TSUNAMI 144062000
EXTREME COLD/WIND CHILL 127240400
HIGH SURF 110486500
LAKE-EFFECT SNOW 40682000
WINTER WEATHER 29727500
FROST/FREEZE 27412700
DENSE FOG 22224500
HEAT 12457050
WATERSPOUT 8414200
EXCESSIVE HEAT 7868700
LAKESHORE FLOOD 7570000
SLEET 6725000
MARINE THUNDERSTORM WIND 5857400
DUST STORM 5594000
AVALANCHE 3716800
FREEZING FOG 2182000
TROPICAL DEPRESSION 1737000
MARINE HIGH WIND 1297010
SEICHE 980000
DUST DEVIL 733130
COLD/WIND CHILL 554000
VOCALNIC ASH 500000
MARINE STRONG WIND 418330
ASTRONOMICAL LOW TIDE 320000
RIP CURRENT 163000
FUNNEL CLOUD 144600
DENSE SMOKE 100000
MARINE HAIL 4000
The ranking by total crop d amage is as follows:
kable(ceco)
events sumcrop
DROUGHT 13922086780
FLOOD 5776419950
HURRICANE/TYPHOON 5505617800
ICE STORM 5022113500
HAIL 3003632450
FROST/FREEZE 1886061800
FLASH FLOOD 1423457550
EXTREME COLD/WIND CHILL 1330023000
THUNDERSTORM WIND 1263337900
HEAVY RAIN 801505800
TROPICAL STORM 694391000
HIGH WIND 678896800
EXCESSIVE HEAT 497402000
HEAT 407071500
WILDFIRE 403281630
TORNADO 361834160
HEAVY SNOW 129183100
STRONG WIND 71020050
COLD/WIND CHILL 30142500
DEBRIS FLOW 20017000
WINTER STORM 16944000
WINTER WEATHER 15000000
LIGHTNING 11987090
BLIZZARD 7060000
DUST STORM 3600000
STORM TIDE 855000
COASTAL FLOOD 56000
MARINE THUNDERSTORM WIND 50000
TSUNAMI 20000
ASTRONOMICAL LOW TIDE 0
AVALANCHE 0
DENSE FOG 0
DENSE SMOKE 0
DUST DEVIL 0
FREEZING FOG 0
FUNNEL CLOUD 0
HIGH SURF 0
LAKE-EFFECT SNOW 0
LAKESHORE FLOOD 0
MARINE HAIL 0
MARINE HIGH WIND 0
MARINE STRONG WIND 0
RIP CURRENT 0
SEICHE 0
SLEET 0
TROPICAL DEPRESSION 0
VOCALNIC ASH 0
WATERSPOUT 0
The ranking by average prop erty damage by events is as follows:
kable(paeco)
events aveprop
HURRICANE/TYPHOON 3.594975e+08
STORM TIDE 1.798305e+08
TROPICAL STORM 1.530533e+07
FLOOD 8.749586e+06
TSUNAMI 8.474235e+06
ICE STORM 2.639992e+06
WILDFIRE 2.386437e+06
TORNADO 1.346567e+06
COASTAL FLOOD 6.388946e+05
DEBRIS FLOW 5.843770e+05
FLASH FLOOD 5.266210e+05
HEAVY RAIN 4.589437e+05
DROUGHT 4.573582e+05
HIGH WIND 3.889807e+05
LAKESHORE FLOOD 3.440909e+05
BLIZZARD 2.477945e+05
WINTER STORM 1.942157e+05
HAIL 1.612261e+05
HIGH SURF 9.734493e+04
THUNDERSTORM WIND 9.507659e+04
EXTREME COLD/WIND CHILL 8.094173e+04
LAKE-EFFECT SNOW 7.992534e+04
LIGHTNING 6.409842e+04
HEAVY SNOW 6.261659e+04
SEICHE 5.764706e+04
STRONG WIND 5.009558e+04
FREEZING FOG 4.959091e+04
TROPICAL DEPRESSION 4.453846e+04
SLEET 3.736111e+04
FROST/FREEZE 2.090976e+04
VOCALNIC ASH 1.666667e+04
DENSE FOG 1.517031e+04
DUST STORM 1.409068e+04
HEAT 1.343803e+04
MARINE HIGH WIND 1.271578e+04
MARINE STRONG WIND 1.045825e+04
AVALANCHE 1.012752e+04
DUST DEVIL 4.791699e+03
DENSE SMOKE 4.761905e+03
WINTER WEATHER 4.535088e+03
EXCESSIVE HEAT 4.463244e+03
COLD/WIND CHILL 3.597403e+03
ASTRONOMICAL LOW TIDE 3.232323e+03
WATERSPOUT 2.876650e+03
MARINE THUNDERSTORM WIND 1.276400e+03
RIP CURRENT 2.286115e+02
FUNNEL CLOUD 2.418465e+01
MARINE HAIL 1.273885e+01
The ranking by average crop damage by events is as follows:
kable(caeco)
events avecrop
HURRICANE/TYPHOON 2.323045e+07
DROUGHT 6.047822e+06
ICE STORM 3.456375e+06
FROST/FREEZE 1.438644e+06
TROPICAL STORM 1.377760e+06
EXTREME COLD/WIND CHILL 8.460706e+05
HEAT 4.391278e+05
FLOOD 3.493873e+05
EXCESSIVE HEAT 2.821339e+05
COLD/WIND CHILL 1.957305e+05
WILDFIRE 1.221695e+05
HEAVY RAIN 1.140609e+05
HIGH WIND 4.785682e+04
FLASH FLOOD 4.595356e+04
DEBRIS FLOW 3.574464e+04
HAIL 3.108771e+04
STRONG WIND 1.935151e+04
TORNADO 1.901388e+04
THUNDERSTORM WIND 1.140536e+04
HEAVY SNOW 1.046186e+04
DUST STORM 9.068010e+03
BLIZZARD 3.319229e+03
STORM TIDE 3.214286e+03
WINTER WEATHER 2.288330e+03
WINTER STORM 2.031168e+03
TSUNAMI 1.176471e+03
LIGHTNING 8.763133e+02
COASTAL FLOOD 8.151383e+01
MARINE THUNDERSTORM WIND 1.089562e+01
ASTRONOMICAL LOW TIDE 0.000000e+00
AVALANCHE 0.000000e+00
DENSE FOG 0.000000e+00
DENSE SMOKE 0.000000e+00
DUST DEVIL 0.000000e+00
FREEZING FOG 0.000000e+00
FUNNEL CLOUD 0.000000e+00
HIGH SURF 0.000000e+00
LAKE-EFFECT SNOW 0.000000e+00
LAKESHORE FLOOD 0.000000e+00
MARINE HAIL 0.000000e+00
MARINE HIGH WIND 0.000000e+00
MARINE STRONG WIND 0.000000e+00
RIP CURRENT 0.000000e+00
SEICHE 0.000000e+00
SLEET 0.000000e+00
TROPICAL DEPRESSION 0.000000e+00
VOCALNIC ASH 0.000000e+00
WATERSPOUT 0.000000e+00
Barplots of top 10 weather events are as follows:
par(mfrow = c(2,2), mar = c(3,10,2,1), las = 2)
barplot(rev(peco[1:10,2]), col = rev(heat.colors(10)), horiz = TRUE, axes = F, 
        names.arg = rev(peco[1:10,1]), cex.names = 0.6, 
        main = "Total Property Damage")
axis(1, seq(0,1.5e11,0.3e11), c("0", "30B", "60B", "90B", "120B", "150B"))
barplot(rev(ceco[1:10,2]), col = rev(heat.colors(10)), horiz = TRUE, axes = F, 
        names.arg = rev(ceco[1:10,1]), cex.names = 0.6, 
        main = "Total Crop Damage")
axis(1,seq(0,1.5e10,0.3e10), c("0", "3B", "6B", "9B", "12B", "15B"))
barplot(rev(paeco[1:10,2]), col = rev(heat.colors(10)), horiz = TRUE, axes = F, 
        names.arg = rev(paeco[1:10,1]), cex.names = 0.6, 
        main = "Average Property Damage")
axis(1,seq(0,5e8,1e8), c("0", "10M", "20M", "30M", "40M", "50M"))
barplot(rev(caeco[1:10,2]), col = rev(heat.colors(10)), horiz = TRUE, axes = F, 
        names.arg = rev(caeco[1:10,1]), cex.names = 0.6, 
        main = "Average Crop Damage")
axis(1,seq(0,2.5e7,0.5e7), c("0", "5M", "10M", "15M", "20M", "25M"))

rm(list = c(str_subset(ls(),"eco")))

The upper panels display the total property damage and crop damage from top 10 weather events from 1994 to 2011. Flood and hurricane/typhoon have most total property damage as well as most crop damage, and contribute most to the total economic losses due to weather phenomena.

The lower panels display the average property damage and crop damage by events from top 10 weather events from 1994 to 2011. Hurricane/typhoon is the most disastrous weather event in terms of both average property damage and average rop damage, and anti-hurricane/typhoon measures should be taken seriously.