We have found that tornadoes caused the most deaths and injured the most people in the USA between 1950 and 2011. On the other hand, if we measure the average number of killed or injured people per event, then tsunamies are on top of the list. It means that a tsunami is, on average, deadlier than a tornado, but it is also a much rarer event. Heat waves are present in the top 5 most dangerous events according to either total or mean number of casualties.
At the same time, thunderstorms and tornadoes have also caused the most total damage to property while hails caused the most damage to crops. Finally, hurricanes have caused the most average damage to both property and crops. Thus an individual hurricane is more harmful to economy than an individual tornado or hail, although hurricanes are rarer.
Our analysis has been originally created and run in RStudio v. 0.98.977 under OS X 10.9.4.
Time and date the report has been generated: 2014-07-26 20:24:23 (Central European time).
Setting global options:
library(knitr)
opts_chunk$set(echo=TRUE,cache=TRUE)
Read the data into the data frame raw.data
:
url <- "https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
data.file.name <- "storm_data.csv"
if (!file.exists(data.file.name)) {
download.file(url,data.file.name,method="curl")
}
raw.data <- read.csv(data.file.name)
Overview of what we’ve just uploaded into R:
nrow(raw.data)
## [1] 902297
names(raw.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"
raw.event.types <- levels(raw.data$EVTYPE)
head(raw.event.types, n=22)
## [1] " HIGH SURF ADVISORY" " COASTAL FLOOD"
## [3] " FLASH FLOOD" " LIGHTNING"
## [5] " TSTM WIND" " TSTM WIND (G45)"
## [7] " WATERSPOUT" " WIND"
## [9] "?" "ABNORMAL WARMTH"
## [11] "ABNORMALLY DRY" "ABNORMALLY WET"
## [13] "ACCUMULATED SNOWFALL" "AGRICULTURAL FREEZE"
## [15] "APACHE COUNTY" "ASTRONOMICAL HIGH TIDE"
## [17] "ASTRONOMICAL LOW TIDE" "AVALANCE"
## [19] "AVALANCHE" "BEACH EROSIN"
## [21] "Beach Erosion" "BEACH EROSION"
The raw data has certain issues:
There are some columns with uninformative names: F, MAG, WFO, STATEOFFIC.
Due to upper/lower case letters and punctuation, differet event types are supposed to really represent the same kind of extreme weather, like Black Ice and BLACK ICE.
Due to phrasing, differet event types are supposed to really represent the same kind of extreme weather, like COLD TEMPERATURES, COLD WAVE, and COLD WEATHER.
We need to work out on renaming the events. First, let’s see what’s inside the columns with strange names:
a <- c(21,22,29,30)
head(raw.data[,a])
## F MAG WFO STATEOFFIC
## 1 3 0
## 2 2 0
## 3 2 0
## 4 2 0
## 5 2 0
## 6 2 0
summary(raw.data[,a])
## F MAG WFO
## Min. :0 Min. : 0 :142069
## 1st Qu.:0 1st Qu.: 0 OUN : 17393
## Median :1 Median : 50 JAN : 13889
## Mean :1 Mean : 47 LWX : 13174
## 3rd Qu.:1 3rd Qu.: 75 PHI : 12551
## Max. :5 Max. :22000 TSA : 12483
## NA's :843563 (Other):690738
## STATEOFFIC
## :248769
## TEXAS, North : 12193
## ARKANSAS, Central and North Central: 11738
## IOWA, Central : 11345
## KANSAS, Southwest : 11212
## GEORGIA, North and Central : 11120
## (Other) :595920
Well, it’s not precisely clear what is there, but it doesn’t seem to be relevant to health or ecnomony, so we’ll ignore the columns F, MAG, WFO, STATEOFFIC in our report.
Since the questions that we are trying to answer only concern the impact of extreme weather events on health and economy, we’ll remove columns of the raw data that we’re not intersted in. We’ll keep the following five columns as the only ones relevant to us:
a <- c(8,23,24,25,27)
names(raw.data)[a]
## [1] "EVTYPE" "FATALITIES" "INJURIES" "PROPDMG" "CROPDMG"
Now we are creating a new data frame clean.data
, copy relevant columns from raw.data
into it, change event type names to the lower case, and remove all punctuation and excessive spaces from event type names.
clean.data <- raw.data[,a]
# Changing everything to lower case:
clean.data$EVTYPE <- tolower(clean.data$EVTYPE)
# Removing numerals:
clean.data$EVTYPE <- gsub("[0-9]","",clean.data$EVTYPE)
# Changing punctuation to spaces:
clean.data$EVTYPE <- gsub("[\\.\\,\\(\\)-\\&/]"," ",clean.data$EVTYPE)
# Removing spaces in the beginning:
clean.data$EVTYPE <- gsub("^( +)","",clean.data$EVTYPE)
# Removing spaces in the end:
clean.data$EVTYPE <- gsub("( +)$","",clean.data$EVTYPE)
# Changing several spaces in a row to one:
clean.data$EVTYPE <- gsub(" +"," ",clean.data$EVTYPE)
There are still issues. We will merge some events that are really about the same type of extreme weather, like hurricanes, typhoons, and tropical storms (very strong wind caused by a cyclone).
The code is long but easy to read:
# Blizzard:
clean.data$EVTYPE <- gsub(".*blizz.*","blizzard",clean.data$EVTYPE)
# Avalanche:
clean.data$EVTYPE <- gsub(".*avala.*","avalanche",clean.data$EVTYPE)
# Landslide:
clean.data$EVTYPE <- gsub(".*slide.*","landslide",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*slump.*","landslide",clean.data$EVTYPE)
# Thunderstorm and lightning:
clean.data$EVTYPE <- gsub(".*thunder.*","thunder",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*tstm.*","thunder",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*light.*","thunder",clean.data$EVTYPE)
# Flood:
clean.data$EVTYPE <- gsub(".*floood.*","flood",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*flood.*","flood",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*fld.*","flood",clean.data$EVTYPE)
# Glaze:
clean.data$EVTYPE <- gsub(".*glaze.*","glaze",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*freezing rain.*","glaze",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*ice.*","glaze",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*icy.*","glaze",clean.data$EVTYPE)
# Tornado:
clean.data$EVTYPE <- gsub(".*torn.*","tornado",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*spout.*","tornado",clean.data$EVTYPE)
# Gustnado:
clean.data$EVTYPE <- gsub(".*gustnado.*","gustnado",clean.data$EVTYPE)
# Hurricane:
clean.data$EVTYPE <- gsub(".*hurri.*","hurricane",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*typhoon.*","hurricane",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*tropical storm.*","hurricane",
clean.data$EVTYPE)
# Snow:
clean.data$EVTYPE <- gsub(".*snow.*","snow",clean.data$EVTYPE)
# Hail:
clean.data$EVTYPE <- gsub(".*hail.*","hail",clean.data$EVTYPE)
# Rain:
clean.data$EVTYPE <- gsub(".*rain.*","rain",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*shower.*","rain",clean.data$EVTYPE)
# Wind:
clean.data$EVTYPE <- gsub(".*wind.*","wind",clean.data$EVTYPE)
# Cold:
clean.data$EVTYPE <- gsub(".*cold.*","cold",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*cool.*","cold",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*freez.*","cold",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*frost.*","cold",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*low temp.*","cold",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*record low.*","cold",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*hypothermia.*","cold",clean.data$EVTYPE)
# Heat:
clean.data$EVTYPE <- gsub(".*hot.*","heat",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*warm.*","heat",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*heat.*","heat",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*hyperthermia.*","heat",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*record high.*","heat",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*high temp.*","heat",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*temperature record.*","heat",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*record temp.*","heat",clean.data$EVTYPE)
# Waves:
clean.data$EVTYPE <- gsub(".*high sea.*","waves",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*heavy sea.*","waves",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*high wave.*","waves",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*rogue wave.*","waves",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*rough sea.*","waves",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*seiche.*","waves",clean.data$EVTYPE)
# Fire:
clean.data$EVTYPE <- gsub(".*fire.*","fire",clean.data$EVTYPE)
# Funnel:
clean.data$EVTYPE <- gsub(".*funnel.*","funnel",clean.data$EVTYPE)
# Fog:
clean.data$EVTYPE <- gsub(".*fog.*","fog",clean.data$EVTYPE)
# Dust:
clean.data$EVTYPE <- gsub(".*dust.*","fire",clean.data$EVTYPE)
# Smoke:
clean.data$EVTYPE <- gsub(".*smoke.*","smoke",clean.data$EVTYPE)
# Sleet:
clean.data$EVTYPE <- gsub(".*sleet.*","sleet",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*wintry.*","sleet",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*wintery.*","sleet",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*winter mix.*","sleet",clean.data$EVTYPE)
# Volcano:
clean.data$EVTYPE <- gsub(".*volcan.*","volcano",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*vog.*","volcano",clean.data$EVTYPE)
# Wet weather:
clean.data$EVTYPE <- gsub(".*wet.*","wet",clean.data$EVTYPE)
# Winter weather:
clean.data$EVTYPE <- gsub(".*winter weather.*","winter",clean.data$EVTYPE)
# Winter storm:
clean.data$EVTYPE <- gsub(".*winter storm.*","winter.storm",
clean.data$EVTYPE)
# Dry weather:
clean.data$EVTYPE <- gsub(".*dry.*","dry",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*drought.*","dry",clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*driest.*","dry",clean.data$EVTYPE)
# Rip currents:
clean.data$EVTYPE <- gsub(".*rip current.*","rip.current",
clean.data$EVTYPE)
# High tides:
clean.data$EVTYPE <- gsub(".*high tide.*","high.tide",
clean.data$EVTYPE)
# Low tides:
clean.data$EVTYPE <- gsub(".*low tide.*","low.tide",
clean.data$EVTYPE)
# Storm surge:
clean.data$EVTYPE <- gsub(".*storm surge.*","storm.surge",
clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*coastal storm.*","storm.surge",
clean.data$EVTYPE)
clean.data$EVTYPE <- gsub(".*coastalstorm.*","storm.surge",
clean.data$EVTYPE)
# Erosion:
clean.data$EVTYPE <- gsub(".*eros.*","erosion",clean.data$EVTYPE)
clean.data$EVTYPE <- factor(clean.data$EVTYPE)
event.types <- levels(clean.data$EVTYPE)
Here is the list of event types:
event.types
## [1] "" "apache county"
## [3] "avalanche" "below normal precipitation"
## [5] "blizzard" "blow out tide"
## [7] "blow out tides" "coastal surge"
## [9] "cold" "dam break"
## [11] "dam failure" "downburst"
## [13] "drowning" "dry"
## [15] "erosion" "excessive"
## [17] "excessive precipitation" "fire"
## [19] "flood" "fog"
## [21] "funnel" "glaze"
## [23] "gustnado" "hail"
## [25] "hazardous surf" "heat"
## [27] "heavy mix" "heavy precipatation"
## [29] "heavy precipitation" "heavy surf"
## [31] "heavy surf high surf" "heavy swells"
## [33] "high" "high surf"
## [35] "high surf advisories" "high surf advisory"
## [37] "high swells" "high water"
## [39] "high.tide" "hurricane"
## [41] "landslide" "large wall cloud"
## [43] "ligntning" "low.tide"
## [45] "marine accident" "marine mishap"
## [47] "metro storm may" "microburst"
## [49] "mild pattern" "mixed precip"
## [51] "mixed precipitation" "monthly precipitation"
## [53] "monthly temperature" "no severe weather"
## [55] "none" "normal precipitation"
## [57] "other" "rain"
## [59] "rapidly rising water" "record precipitation"
## [61] "red flag criteria" "remnants of floyd"
## [63] "rip.current" "rotating wall cloud"
## [65] "rough surf" "severe turbulence"
## [67] "sleet" "small stream"
## [69] "small stream and" "smoke"
## [71] "snow" "southeast"
## [73] "storm.surge" "summary august"
## [75] "summary jan" "summary july"
## [77] "summary june" "summary nov"
## [79] "summary oct" "summary october"
## [81] "summary of april" "summary of april rd"
## [83] "summary of august" "summary of july"
## [85] "summary of june" "summary of march"
## [87] "summary of may" "summary of may am"
## [89] "summary of may pm" "summary sept"
## [91] "summary september" "thunder"
## [93] "tornado" "tropical depression"
## [95] "tsunami" "urban and small"
## [97] "urban and small stream" "urban small"
## [99] "urban small stream" "volcano"
## [101] "wall cloud" "waves"
## [103] "wet" "wind"
## [105] "winter" "winter.storm"
## [107] "wnd"
Now we’ll create the list of event types and their frequencies:
event.frequency <- as.data.frame(table(clean.data$EVTYPE))
head(event.frequency)
## Var1 Freq
## 1 1
## 2 apache county 1
## 3 avalanche 387
## 4 below normal precipitation 2
## 5 blizzard 2745
## 6 blow out tide 1
Notice that some events are very rare and they are usually not even real extreme weather events but rather occur to the fact that the whole data set is old and hasn’t been planned carefully in advance. We’ll just delete records of events that occurred fewer than 10 times and events that do not seem to be abnormalities, like summary august.
# Creating the vector of names of interesting events:
a <- (event.frequency$Freq>9)
b <- !grepl(".*summary.*",event.frequency$Var1)
c <- !grepl(".*surf.*",event.frequency$Var1)
d <- !grepl(".*precip.*",event.frequency$Var1)
e <- !grepl(".*other.*",event.frequency$Var1)
interesting.events <- event.frequency$Var1[a&b&c&d&e]
interesting.events
## [1] avalanche blizzard cold
## [4] dry fire flood
## [7] fog funnel glaze
## [10] hail heat high.tide
## [13] hurricane landslide low.tide
## [16] rain rip.current sleet
## [19] smoke snow storm.surge
## [22] thunder tornado tropical depression
## [25] tsunami volcano waves
## [28] wet wind winter
## [31] winter.storm
## 107 Levels: apache county avalanche ... wnd
Now we have only 31 different types of extreme weather events. Finally, we’ll subset our data frame to keep only those events that are in interesting.events
.
a <- (clean.data$EVTYPE %in% interesting.events)
clean.data <- clean.data[a,]
Now the raw data contains 902297 records and the clean data contains 900907 records. Let’s see the head of clean.data
:
head(clean.data)
## EVTYPE FATALITIES INJURIES PROPDMG CROPDMG
## 1 tornado 0 15 25.0 0
## 2 tornado 0 0 2.5 0
## 3 tornado 0 2 25.0 0
## 4 tornado 0 2 2.5 0
## 5 tornado 0 2 2.5 0
## 6 tornado 0 6 2.5 0
We are creating the new data frame summary.health
to count the death toll and the number of injured people as a result of each event type:
library("plyr")
summary.health <- ddply(clean.data, .(EVTYPE), summarize,
frequency=length(FATALITIES),
deaths=sum(FATALITIES,na.rm=TRUE),
mean.deaths=round(mean(FATALITIES,na.rm=TRUE),digits=2),
injuries=sum(INJURIES,na.rm=TRUE),
mean.injuries=round(mean(INJURIES,na.rm=TRUE),digits=2))
summary.health
## EVTYPE frequency deaths mean.deaths injuries mean.injuries
## 1 avalanche 387 225 0.58 170 0.44
## 2 blizzard 2745 101 0.04 806 0.29
## 3 cold 2516 235 0.09 298 0.12
## 4 dry 2772 3 0.00 32 0.01
## 5 fire 4825 114 0.02 2091 0.43
## 6 flood 86116 1553 0.02 8683 0.10
## 7 fog 1834 80 0.04 1076 0.59
## 8 funnel 6980 0 0.00 3 0.00
## 9 glaze 2568 122 0.05 2434 0.95
## 10 hail 289281 15 0.00 1371 0.00
## 11 heat 3072 3179 1.03 9243 3.01
## 12 high.tide 105 0 0.00 0 0.00
## 13 hurricane 996 201 0.20 1716 1.72
## 14 landslide 654 44 0.07 55 0.08
## 15 low.tide 174 0 0.00 0 0.00
## 16 rain 11863 101 0.01 280 0.02
## 17 rip.current 777 577 0.74 529 0.68
## 18 sleet 170 3 0.02 77 0.45
## 19 smoke 21 0 0.00 0 0.00
## 20 snow 17395 161 0.01 1150 0.07
## 21 storm.surge 420 28 0.07 45 0.11
## 22 thunder 352793 1574 0.00 14778 0.04
## 23 tornado 64551 5639 0.09 91436 1.42
## 24 tropical depression 60 0 0.00 0 0.00
## 25 tsunami 20 33 1.65 129 6.45
## 26 volcano 30 0 0.00 0 0.00
## 27 waves 38 17 0.45 15 0.39
## 28 wet 38 0 0.00 0 0.00
## 29 wind 28115 689 0.02 1951 0.07
## 30 winter 8155 61 0.01 538 0.07
## 31 winter.storm 11436 216 0.02 1338 0.12
Let us now find out the 5 most harmful types of events by total death toll, by the total number of injured people, by the average death toll, by the average number of injured people.
a <- order(summary.health$deaths,decreasing=TRUE)
top.death <- head(summary.health[a,],n=5)
b <- order(summary.health$injuries,decreasing=TRUE)
top.injury <- head(summary.health[b,],n=5)
c <- order(summary.health$mean.deaths,decreasing=TRUE)
top.mean.death <- head(summary.health[c,],n=5)
d <- order(summary.health$mean.injuries,decreasing=TRUE)
top.mean.injury <- head(summary.health[d,],n=5)
We are creating the new data frame summary.cost
to count the total/average property damage and the total/average crop damage according to the event type:
summary.cost <- ddply(clean.data, .(EVTYPE), summarize,
frequency=length(PROPDMG),
prop=sum(PROPDMG,na.rm=TRUE),
mean.prop=round(mean(PROPDMG,na.rm=TRUE),digits=2),
crop=sum(CROPDMG,na.rm=TRUE),
mean.crop=round(mean(CROPDMG,na.rm=TRUE),digits=2))
summary.cost
## EVTYPE frequency prop mean.prop crop mean.crop
## 1 avalanche 387 1623.9 4.20 0 0.00
## 2 blizzard 2745 26023.5 9.48 172 0.06
## 3 cold 2516 10893.6 4.33 15925 6.33
## 4 dry 2772 5836.6 2.11 33914 12.23
## 5 fire 4825 131006.4 27.15 11167 2.31
## 6 flood 86116 2461602.5 28.58 367271 4.26
## 7 fog 1834 17075.3 9.31 0 0.00
## 8 funnel 6980 194.6 0.03 0 0.00
## 9 glaze 2568 79741.8 31.05 1690 0.66
## 10 hail 289281 689831.8 2.38 581469 2.01
## 11 heat 3072 3232.9 1.05 1483 0.48
## 12 high.tide 105 1083.5 10.32 0 0.00
## 13 hurricane 996 75119.3 75.42 18103 18.18
## 14 landslide 654 20819.0 31.83 37 0.06
## 15 low.tide 174 320.0 1.84 0 0.00
## 16 rain 11863 53530.7 4.51 12457 1.05
## 17 rip.current 777 163.0 0.21 0 0.00
## 18 sleet 170 12.5 0.07 0 0.00
## 19 smoke 21 100.0 4.76 0 0.00
## 20 snow 17395 148080.8 8.51 2176 0.13
## 21 storm.surge 420 26220.5 62.43 855 2.04
## 22 thunder 352793 3284887.7 9.31 202973 0.58
## 23 tornado 64551 3225320.1 49.97 100027 1.55
## 24 tropical depression 60 738.0 12.30 0 0.00
## 25 tsunami 20 905.3 45.27 20 1.00
## 26 volcano 30 500.0 16.67 0 0.00
## 27 waves 38 995.5 26.20 0 0.00
## 28 wet 38 35.0 0.92 142 3.74
## 29 wind 28115 457772.8 16.28 24417 0.87
## 30 winter 8155 16908.4 2.07 15 0.00
## 31 winter.storm 11436 133220.6 11.65 2479 0.22
Let us now find out the 5 most harmful types of events by total property damage, by the total crop damage, by the average property damage, by the average crop damage.
a <- order(summary.cost$prop,decreasing=TRUE)
top.prop <- head(summary.cost[a,],n=5)
b <- order(summary.cost$crop,decreasing=TRUE)
top.crop <- head(summary.cost[b,],n=5)
c <- order(summary.cost$mean.prop,decreasing=TRUE)
top.mean.prop <- head(summary.cost[c,],n=5)
d <- order(summary.cost$mean.crop,decreasing=TRUE)
top.mean.crop <- head(summary.cost[d,],n=5)
We’ll present two panel plots to compare the impact of most harmful events on health and economy. We don’t know units of measurements of the economy damage, but they are not important since the question is just to compare different event types.
Here is the panel barplot of the four top-five lists of most harmful events to people’s health.
par(mfrow=c(2,2))
barplot(top.death$deaths,ylab="total death toll",
names.arg=top.death$EVTYPE,
main="Most harmful events")
barplot(top.injury$injuries,ylab="total no of injured",
names.arg=top.injury$EVTYPE,
main="Most harmful events")
barplot(top.mean.death$mean.deaths,ylab="average death toll",
names.arg=top.mean.death$EVTYPE,
main="Most harmful events")
barplot(top.mean.injury$mean.injuries,ylab="average no of injured",
names.arg=top.mean.injury$EVTYPE,
main="Most harmful events")
The results seem to be consistent with common sense. Tornadoes, being very common extreme weather events, are by far the most harmful in terms of the total fatalities or injuries. Tsunamis are rare but deadly. Heat waves are common and hence cause a lot of total damage and, at the same time, every heat wave probably affects millions of people, so chances are that someone will die.
Also, events like rip currents and avalanches usually kill but do no injure people while glazes injure many but kill few.
Here is the panel barplot of the four top-five lists of most harmful events to the economy.
par(mfrow=c(2,2))
barplot(top.prop$prop,ylab="total damage to property",
names.arg=top.prop$EVTYPE,
main="Costliest events")
barplot(top.crop$crop,ylab="total damage to crops",
names.arg=top.crop$EVTYPE,
main="Costliest events")
barplot(top.mean.prop$mean.prop,ylab="average damage to property",
names.arg=top.mean.prop$EVTYPE,
main="Costliest events")
barplot(top.mean.crop$mean.crop,ylab="average damage to crops",
names.arg=top.mean.crop$EVTYPE,
main="Costliest events")
Here, the findings are surprising, at least to me. For instance, an interesting thing is that thunderstorms cause so much damage. I don’t understand why it happens. It would be interesting to invesigate it further.