Among the several cause on economy and public health for communities and municipalities, storms and severe weather events are few of them. Here is an exploration of the US National Oceanic and Atmospheric Administration’s (NOAA) storm database. This database tracks characteristic of major storms and weather events in the US, including when and where they occur, which type of event, as well as the estimates of relevant fatalities, injuries and various forms of damage. It is deduced from the analysis that tornados result in maximum number of fatalities and injuries, floods result in maximum property damage, and Droughts cause maximum crop damage.
storm <- read.csv("repdata_data_StormData.csv",header=TRUE,sep=",")
summary(storm)
## STATE__ BGN_DATE BGN_TIME TIME_ZONE
## Min. : 1.0 Length:902297 Length:902297 Length:902297
## 1st Qu.:19.0 Class :character Class :character Class :character
## Median :30.0 Mode :character Mode :character Mode :character
## Mean :31.2
## 3rd Qu.:45.0
## Max. :95.0
##
## COUNTY COUNTYNAME STATE EVTYPE
## Min. : 0.0 Length:902297 Length:902297 Length:902297
## 1st Qu.: 31.0 Class :character Class :character Class :character
## Median : 75.0 Mode :character Mode :character Mode :character
## Mean :100.6
## 3rd Qu.:131.0
## Max. :873.0
##
## BGN_RANGE BGN_AZI BGN_LOCATI END_DATE
## Min. : 0.000 Length:902297 Length:902297 Length:902297
## 1st Qu.: 0.000 Class :character Class :character Class :character
## Median : 0.000 Mode :character Mode :character Mode :character
## Mean : 1.484
## 3rd Qu.: 1.000
## Max. :3749.000
##
## END_TIME COUNTY_END COUNTYENDN END_RANGE
## Length:902297 Min. :0 Mode:logical Min. : 0.0000
## Class :character 1st Qu.:0 NA's:902297 1st Qu.: 0.0000
## Mode :character Median :0 Median : 0.0000
## Mean :0 Mean : 0.9862
## 3rd Qu.:0 3rd Qu.: 0.0000
## Max. :0 Max. :925.0000
##
## END_AZI END_LOCATI LENGTH WIDTH
## Length:902297 Length:902297 Min. : 0.0000 Min. : 0.000
## Class :character Class :character 1st Qu.: 0.0000 1st Qu.: 0.000
## Mode :character Mode :character Median : 0.0000 Median : 0.000
## Mean : 0.2301 Mean : 7.503
## 3rd Qu.: 0.0000 3rd Qu.: 0.000
## Max. :2315.0000 Max. :4400.000
##
## F MAG FATALITIES INJURIES
## Min. :0.0 Min. : 0.0 Min. : 0.0000 Min. : 0.0000
## 1st Qu.:0.0 1st Qu.: 0.0 1st Qu.: 0.0000 1st Qu.: 0.0000
## Median :1.0 Median : 50.0 Median : 0.0000 Median : 0.0000
## Mean :0.9 Mean : 46.9 Mean : 0.0168 Mean : 0.1557
## 3rd Qu.:1.0 3rd Qu.: 75.0 3rd Qu.: 0.0000 3rd Qu.: 0.0000
## Max. :5.0 Max. :22000.0 Max. :583.0000 Max. :1700.0000
## NA's :843563
## PROPDMG PROPDMGEXP CROPDMG CROPDMGEXP
## Min. : 0.00 Length:902297 Min. : 0.000 Length:902297
## 1st Qu.: 0.00 Class :character 1st Qu.: 0.000 Class :character
## Median : 0.00 Mode :character Median : 0.000 Mode :character
## Mean : 12.06 Mean : 1.527
## 3rd Qu.: 0.50 3rd Qu.: 0.000
## Max. :5000.00 Max. :990.000
##
## WFO STATEOFFIC ZONENAMES LATITUDE
## Length:902297 Length:902297 Length:902297 Min. : 0
## Class :character Class :character Class :character 1st Qu.:2802
## Mode :character Mode :character Mode :character Median :3540
## Mean :2875
## 3rd Qu.:4019
## Max. :9706
## NA's :47
## LONGITUDE LATITUDE_E LONGITUDE_ REMARKS
## Min. :-14451 Min. : 0 Min. :-14455 Length:902297
## 1st Qu.: 7247 1st Qu.: 0 1st Qu.: 0 Class :character
## Median : 8707 Median : 0 Median : 0 Mode :character
## Mean : 6940 Mean :1452 Mean : 3509
## 3rd Qu.: 9605 3rd Qu.:3549 3rd Qu.: 8735
## Max. : 17124 Max. :9706 Max. :106220
## NA's :40
## REFNUM
## Min. : 1
## 1st Qu.:225575
## Median :451149
## Mean :451149
## 3rd Qu.:676723
## Max. :902297
##
names(storm)
## [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"
The dataset consists of a lot of variables (columns) which are not required for the current analysis. Therefore, we are considering the project relevant variables (columns).
variables<-c("EVTYPE","FATALITIES","INJURIES","PROPDMG", "PROPDMGEXP","CROPDMG","CROPDMGEXP")
stormdata<-storm[variables]
dim(stormdata)
## [1] 902297 7
names(stormdata)
## [1] "EVTYPE" "FATALITIES" "INJURIES" "PROPDMG" "PROPDMGEXP"
## [6] "CROPDMG" "CROPDMGEXP"
Top ten events that cause most fatalities.
## Procedure = aggregate, the top 10 fatalities by the event type and sort the output in descending order
Fatalities <- aggregate(FATALITIES ~ EVTYPE, data = stormdata, FUN = sum)
Top10_Fatalities <- Fatalities[order(-Fatalities$FATALITIES), ][1:10, ]
Top10_Fatalities
## EVTYPE FATALITIES
## 834 TORNADO 5633
## 130 EXCESSIVE HEAT 1903
## 153 FLASH FLOOD 978
## 275 HEAT 937
## 464 LIGHTNING 816
## 856 TSTM WIND 504
## 170 FLOOD 470
## 585 RIP CURRENT 368
## 359 HIGH WIND 248
## 19 AVALANCHE 224
Events that cause the most injuries Top-10 by Weather Event.
# Procedure = aggregate, top 10 injuries by the event type and sort the output in descending order
Injuries <- aggregate(INJURIES ~ EVTYPE, data = stormdata, FUN = sum)
Top10_Injuries <- Injuries[order(-Injuries$INJURIES), ][1:10, ]
Top10_Injuries
## EVTYPE INJURIES
## 834 TORNADO 91346
## 856 TSTM WIND 6957
## 170 FLOOD 6789
## 130 EXCESSIVE HEAT 6525
## 464 LIGHTNING 5230
## 275 HEAT 2100
## 427 ICE STORM 1975
## 153 FLASH FLOOD 1777
## 760 THUNDERSTORM WIND 1488
## 244 HAIL 1361
Plotting Top 10 Fatalities & Injuries for Weather Event Types ( Population Health Impact )
# Procedure = plot graphs showing the top 10 fatalities and injuries
par(mfrow=c(1,2),mar=c(10,3,3,2))
barplot(Top10_Fatalities$FATALITIES,names.arg=Top10_Fatalities$EVTYPE,las=3,col="tomato",ylab="fatalities",main="Top 10 fatalities")
barplot(Top10_Injuries$INJURIES,names.arg=Top10_Injuries$EVTYPE,las=3,col="sienna1",ylab="injuries",main="Top 10 Injuries")
Figure 1: Top 10 event responsible for highest number of fatalities and injuries.
An analysis of the weather events responsible for the greatest economic consequences. Hypothesis: Economic consequences means damages. The two significant types of damage typically caused by weather events include ‘properties and crops’
Upon reviewing the column names, the property damage(PROPDMG) and crop damage(CROPDMG) columns both have another related column titled ‘exponents’ (i.e - PROPDMGEXP and CROPDMGEXP respectively). As a result, let’s convert the exponent columns into numeric data for the calculation of total property and crop damages encountered.
Property damage exponents for each level listed out & assigned those values for the property exponent data. Invalid data was excluded by assigning the value as ‘0’. Then, the property damage value was calculated by multiplying the property damage and property exponent value.
unique(stormdata$PROPDMGEXP)
## [1] "K" "M" "" "B" "m" "+" "0" "5" "6" "?" "4" "2" "3" "h" "7" "H" "-" "1" "8"
# Assigning values for the property exponent stormdata
stormdata$PROPEXP[stormdata$PROPDMGEXP == "K"] <- 1000
stormdata$PROPEXP[stormdata$PROPDMGEXP == "M"] <- 1e+06
stormdata$PROPEXP[stormdata$PROPDMGEXP == ""] <- 1
stormdata$PROPEXP[stormdata$PROPDMGEXP == "B"] <- 1e+09
stormdata$PROPEXP[stormdata$PROPDMGEXP == "m"] <- 1e+06
stormdata$PROPEXP[stormdata$PROPDMGEXP == "0"] <- 1
stormdata$PROPEXP[stormdata$PROPDMGEXP == "5"] <- 1e+05
stormdata$PROPEXP[stormdata$PROPDMGEXP == "6"] <- 1e+06
stormdata$PROPEXP[stormdata$PROPDMGEXP == "4"] <- 10000
stormdata$PROPEXP[stormdata$PROPDMGEXP == "2"] <- 100
stormdata$PROPEXP[stormdata$PROPDMGEXP == "3"] <- 1000
stormdata$PROPEXP[stormdata$PROPDMGEXP == "h"] <- 100
stormdata$PROPEXP[stormdata$PROPDMGEXP == "7"] <- 1e+07
stormdata$PROPEXP[stormdata$PROPDMGEXP == "H"] <- 100
stormdata$PROPEXP[stormdata$PROPDMGEXP == "1"] <- 10
stormdata$PROPEXP[stormdata$PROPDMGEXP == "8"] <- 1e+08
# Assigning '0' to invalid exponent stormdata
stormdata$PROPEXP[stormdata$PROPDMGEXP == "+"] <- 0
stormdata$PROPEXP[stormdata$PROPDMGEXP == "-"] <- 0
stormdata$PROPEXP[stormdata$PROPDMGEXP == "?"] <- 0
# Calculating the property damage value
stormdata$PROPDMGVAL <- stormdata$PROPDMG * stormdata$PROPEXP
# Defining & Calculating [ Crop Damage ]
# Crop damage exponents for each level listed out & assigned those values for the crop exponent data.
# Invalid data was excluded by assigning the value as '0'.
# Then, the crop damage value was calculated by multiplying the crop damage and crop exponent value.
unique(stormdata$CROPDMGEXP)
## [1] "" "M" "K" "m" "B" "?" "0" "k" "2"
# Assigning values for the crop exponent stormdata
stormdata$CROPEXP[stormdata$CROPDMGEXP == "M"] <- 1e+06
stormdata$CROPEXP[stormdata$CROPDMGEXP == "K"] <- 1000
stormdata$CROPEXP[stormdata$CROPDMGEXP == "m"] <- 1e+06
stormdata$CROPEXP[stormdata$CROPDMGEXP == "B"] <- 1e+09
stormdata$CROPEXP[stormdata$CROPDMGEXP == "0"] <- 1
stormdata$CROPEXP[stormdata$CROPDMGEXP == "k"] <- 1000
stormdata$CROPEXP[stormdata$CROPDMGEXP == "2"] <- 100
stormdata$CROPEXP[stormdata$CROPDMGEXP == ""] <- 1
# Assigning '0' to invalid exponent stormdata
stormdata$CROPEXP[stormdata$CROPDMGEXP == "?"] <- 0
# calculating the crop damage
stormdata$CROPDMGVAL <- stormdata$CROPDMG * stormdata$CROPEXP
# Property Damage Summary
# Procedure = aggregate the property damage by the event type and sort the output it in descending order
prop <- aggregate(PROPDMGVAL~EVTYPE,data=stormdata,FUN=sum,na.rm=TRUE)
prop <- prop[with(prop,order(-PROPDMGVAL)),]
prop <- head(prop,10)
print(prop)
## EVTYPE PROPDMGVAL
## 170 FLOOD 144657709807
## 411 HURRICANE/TYPHOON 69305840000
## 834 TORNADO 56947380617
## 670 STORM SURGE 43323536000
## 153 FLASH FLOOD 16822673979
## 244 HAIL 15735267513
## 402 HURRICANE 11868319010
## 848 TROPICAL STORM 7703890550
## 972 WINTER STORM 6688497251
## 359 HIGH WIND 5270046260
# Crop Damage Summary
# Procedure = aggregate the crop damage by the event type and sort the output it in descending order
crop <- aggregate(CROPDMGVAL~EVTYPE,data=stormdata,FUN=sum,na.rm=TRUE)
crop <- crop[with(crop,order(-CROPDMGVAL)),]
crop <- head(crop,10)
print(crop)
## EVTYPE CROPDMGVAL
## 95 DROUGHT 13972566000
## 170 FLOOD 5661968450
## 590 RIVER FLOOD 5029459000
## 427 ICE STORM 5022113500
## 244 HAIL 3025954473
## 402 HURRICANE 2741910000
## 411 HURRICANE/TYPHOON 2607872800
## 153 FLASH FLOOD 1421317100
## 140 EXTREME COLD 1292973000
## 212 FROST/FREEZE 1094086000
# Plot of Top 10 Property & Crop damages by Weather Event Types ( Economic Consequences )
# plot the graph showing the top 10 property and crop damages
par(mfrow=c(1,2),mar=c(11,3,3,2))
barplot(prop$PROPDMGVAL/(10^9),names.arg=prop$EVTYPE,las=2,col="firebrick1",ylab="Prop.damage(billions)",main="Top10 Prop.Damages")
barplot(crop$CROPDMGVAL/(10^9),names.arg=crop$EVTYPE,las=2,col="firebrick1",ylab="Crop damage(billions)",main="Top10 Crop.Damages")
Figure 2: Top 10 events causing the highest economic damage.
Highest number of fatalities and injuries occurred due to Tornado, followed by Excessive Heat and Thunderstorm.
Maximum property damage is done by Floods, while Droughts cause maximum crop damage. Second major events that caused the maximum damage was Hurricanes/Typhoon for property damage and Floods for crop damage.