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:
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.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")
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.