Synonpsis

In this report, an analysis of the storm database taken from the U.S. National Oceanic and Atmospheric Administration (NOAA) is made with an estimation of the fatalities, injuries, property damage, and crop damage for each type of event (e.g., Flood, Typhoon, Tornado, Hail, Hurricane, etc.). With the data analysis it was determined which event is most harmful to US population (health) and which event has the largest economic consequences. The results showed that tornado is the most harmful event in respect to the US health (population) and Flood has the most severe impact in respect of Property and Cost damage.

##Data Processing 1. Load libraries

library(data.table)
library(ggplot2)
  1. Load data
#fileURL <- "https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
#stormDataFile <- "data/storm-data.csv.bz2"
#download.file(url=fileURL, destfile = repdata_data_StormData.csv.bz2, method="curl")
if (!file.exists("StormData.csv.bz2")) {
     fileUrl<-"https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2FStormData.csv.bz2"
     download.file(fileUrl, destfile="StormData.csv.bz2", method="curl")
     
     # Exit if the file is not available
     if (!file.exists("StormData.csv.bz2")) {
          stop("Can't locate file 'StormData.csv.bz2'!")
     }
}

data <- read.csv("StormData.csv.bz2", header = TRUE, sep=",")
  1. Tidy data
colnames(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"
#Subsetting the data
selection <- c('EVTYPE', 'FATALITIES', 'INJURIES', 'PROPDMG', 'PROPDMGEXP', 'CROPDMG', 'CROPDMGEXP')
data <- data[, selection]
summary(data)
##     EVTYPE            FATALITIES          INJURIES            PROPDMG       
##  Length:902297      Min.   :  0.0000   Min.   :   0.0000   Min.   :   0.00  
##  Class :character   1st Qu.:  0.0000   1st Qu.:   0.0000   1st Qu.:   0.00  
##  Mode  :character   Median :  0.0000   Median :   0.0000   Median :   0.00  
##                     Mean   :  0.0168   Mean   :   0.1557   Mean   :  12.06  
##                     3rd Qu.:  0.0000   3rd Qu.:   0.0000   3rd Qu.:   0.50  
##                     Max.   :583.0000   Max.   :1700.0000   Max.   :5000.00  
##   PROPDMGEXP           CROPDMG         CROPDMGEXP       
##  Length:902297      Min.   :  0.000   Length:902297     
##  Class :character   1st Qu.:  0.000   Class :character  
##  Mode  :character   Median :  0.000   Mode  :character  
##                     Mean   :  1.527                     
##                     3rd Qu.:  0.000                     
##                     Max.   :990.000
data <- as.data.table(data)
data <- data[(EVTYPE != "?" & (INJURIES > 0 | FATALITIES > 0 | PROPDMG > 0 | CROPDMG > 0)), 
             c("EVTYPE", "FATALITIES", "INJURIES", "PROPDMG", "PROPDMGEXP", "CROPDMG", "CROPDMGEXP")]
  1. Converting the exponent columns and create property cost and crop cost columns
#convert the exponent values from K, M, B to 1000, 1000000, and 1000000000
cols <- c("PROPDMGEXP", "CROPDMGEXP")
data[,  (cols) := c(lapply(.SD, toupper)), .SDcols = cols]

PROPDMGKey <-  c("\"\"" = 10^0, 
                 "-" = 10^0, "+" = 10^0, "0" = 10^0, "1" = 10^1, "2" = 10^2, "3" = 10^3,
                 "4" = 10^4, "5" = 10^5, "6" = 10^6, "7" = 10^7, "8" = 10^8, "9" = 10^9, 
                 "H" = 10^2, "K" = 10^3, "M" = 10^6, "B" = 10^9)
CROPDMGKey <-  c("\"\"" = 10^0, "?" = 10^0, "0" = 10^0, "K" = 10^3, "M" = 10^6, "B" = 10^9)

data[, PROPDMGEXP := PROPDMGKey[as.character(data[,PROPDMGEXP])]]
data[is.na(PROPDMGEXP), PROPDMGEXP := 10^0 ]

data[, CROPDMGEXP := CROPDMGKey[as.character(data[,CROPDMGEXP])] ]
data[is.na(CROPDMGEXP), CROPDMGEXP := 10^0 ]
data <- data[, .(EVTYPE, FATALITIES, INJURIES, PROPDMG, PROPDMGEXP, PROPCOST = PROPDMG * PROPDMGEXP, CROPDMG, CROPDMGEXP, CROPCOST = CROPDMG * CROPDMGEXP)]
  1. Health impact
Health <- data[, .(FATALITIES = sum(FATALITIES), INJURIES = sum(INJURIES), TOTAL_HEALTH_IMPACTS = sum(FATALITIES) + sum(INJURIES)), by = .(EVTYPE)]

Health <- Health[order(-TOTAL_HEALTH_IMPACTS), ]

Health <- Health[1:10, ]

head(Health, 10)
##                EVTYPE FATALITIES INJURIES TOTAL_HEALTH_IMPACTS
##  1:           TORNADO       5633    91346                96979
##  2:    EXCESSIVE HEAT       1903     6525                 8428
##  3:         TSTM WIND        504     6957                 7461
##  4:             FLOOD        470     6789                 7259
##  5:         LIGHTNING        816     5230                 6046
##  6:              HEAT        937     2100                 3037
##  7:       FLASH FLOOD        978     1777                 2755
##  8:         ICE STORM         89     1975                 2064
##  9: THUNDERSTORM WIND        133     1488                 1621
## 10:      WINTER STORM        206     1321                 1527
  1. Damage
Eco_Impact <- data[, .(PROPCOST = sum(PROPCOST), CROPCOST = sum(CROPCOST), TOTAL_ECO_IMPACTS = sum(PROPCOST) + sum(CROPCOST)), by = .(EVTYPE)]

Eco_Impact <- Eco_Impact[order(-TOTAL_ECO_IMPACTS), ]

Eco_Impact <- Eco_Impact[1:10, ]

head(Eco_Impact, 10)
##                EVTYPE     PROPCOST    CROPCOST TOTAL_ECO_IMPACTS
##  1:             FLOOD 144657709807  5661968450      150319678257
##  2: HURRICANE/TYPHOON  69305840000  2607872800       71913712800
##  3:           TORNADO  56947380677   414953270       57362333947
##  4:       STORM SURGE  43323536000        5000       43323541000
##  5:              HAIL  15735267513  3025954473       18761221986
##  6:       FLASH FLOOD  16822673979  1421317100       18243991079
##  7:           DROUGHT   1046106000 13972566000       15018672000
##  8:         HURRICANE  11868319010  2741910000       14610229010
##  9:       RIVER FLOOD   5118945500  5029459000       10148404500
## 10:         ICE STORM   3944927860  5022113500        8967041360

Results

Event Types Most Harmful to Population Health

Fatalities and injuries have the most harmful impact on population health. The results below display the 10 most harmful weather events in terms of population health in the U.S.

Health_Consequences <- melt(Health, id.vars = "EVTYPE", variable.name = "Fatalities_or_Injuries")

ggplot(Health_Consequences, aes(x = reorder(EVTYPE, -value), y = value)) + 
  geom_bar(stat = "identity", aes(fill = Fatalities_or_Injuries), position = "dodge") + 
  ylab("Total Injuries/Fatalities") + 
  xlab("Event Type") + 
  theme(axis.text.x = element_text(angle=45, hjust=1)) + 
  ggtitle("US Weather Events that are Most Harmful to Population") + 
  theme(plot.title = element_text(hjust = 0.5))

### Event Types with Greatest Economic Consequences

Property and crop damage have the most harmful impact on the economy. The results below display the 10 most harmful weather events in terms economic consequences in the U.S.

Eco_Consequences <- melt(Eco_Impact, id.vars = "EVTYPE", variable.name = "Damage_Type")

ggplot(Eco_Consequences, aes(x = reorder(EVTYPE, -value), y = value/1e9)) + 
  geom_bar(stat = "identity", aes(fill = Damage_Type), position = "dodge") + 
  ylab("Cost/Damage (in billion USD)") + 
  xlab("Event Type") + 
  theme(axis.text.x = element_text(angle=45, hjust=1)) + 
  ggtitle("US Weather Events that have the Greatest Economic consequences") + 
  theme(plot.title = element_text(hjust = 0.5))

## Conclusion

Based on the above analysis the following conclusions can be drawn:

  • Question 1: Which types of weather events are most harmful to population health?

    Tornadoes are responsible for the greatest number of fatalities and injuries.

  • Question 2: Which types of weather events have the greatest economic consequences?

    Floods are responsible for causing the most property damage and crop damage costs.