Synopsis

This analysis examines the health and economic effects of severe weather events in the United States using the NOAA Storm Database. Population health impacts are measured using fatalities and injuries, while economic impacts are measured using property and crop damage. The results show that tornadoes caused the greatest number of fatalities and injuries. Floods caused the greatest total economic damage, followed by hurricanes or typhoons and tornadoes.

Data Processing

The original compressed NOAA Storm Database file was loaded directly into R without any external preprocessing. The dataset contains 902,297 observations and 37 variables. Fatalities and injuries were summarized by event type to evaluate population health impacts. Property and crop damage values were converted into dollar amounts using the magnitude indicators K, M, and B.

storm_data <- read.csv(
  bzfile("repdata_data_StormData.csv.bz2"),
  stringsAsFactors = FALSE
)

dim(storm_data)
## [1] 902297     37

Data Inspection

colnames(storm_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"
head(storm_data)
##   STATE__           BGN_DATE BGN_TIME TIME_ZONE COUNTY COUNTYNAME STATE  EVTYPE
## 1       1  4/18/1950 0:00:00     0130       CST     97     MOBILE    AL TORNADO
## 2       1  4/18/1950 0:00:00     0145       CST      3    BALDWIN    AL TORNADO
## 3       1  2/20/1951 0:00:00     1600       CST     57    FAYETTE    AL TORNADO
## 4       1   6/8/1951 0:00:00     0900       CST     89    MADISON    AL TORNADO
## 5       1 11/15/1951 0:00:00     1500       CST     43    CULLMAN    AL TORNADO
## 6       1 11/15/1951 0:00:00     2000       CST     77 LAUDERDALE    AL TORNADO
##   BGN_RANGE BGN_AZI BGN_LOCATI END_DATE END_TIME COUNTY_END COUNTYENDN
## 1         0                                               0         NA
## 2         0                                               0         NA
## 3         0                                               0         NA
## 4         0                                               0         NA
## 5         0                                               0         NA
## 6         0                                               0         NA
##   END_RANGE END_AZI END_LOCATI LENGTH WIDTH F MAG FATALITIES INJURIES PROPDMG
## 1         0                      14.0   100 3   0          0       15    25.0
## 2         0                       2.0   150 2   0          0        0     2.5
## 3         0                       0.1   123 2   0          0        2    25.0
## 4         0                       0.0   100 2   0          0        2     2.5
## 5         0                       0.0   150 2   0          0        2     2.5
## 6         0                       1.5   177 2   0          0        6     2.5
##   PROPDMGEXP CROPDMG CROPDMGEXP WFO STATEOFFIC ZONENAMES LATITUDE LONGITUDE
## 1          K       0                                         3040      8812
## 2          K       0                                         3042      8755
## 3          K       0                                         3340      8742
## 4          K       0                                         3458      8626
## 5          K       0                                         3412      8642
## 6          K       0                                         3450      8748
##   LATITUDE_E LONGITUDE_ REMARKS REFNUM
## 1       3051       8806              1
## 2          0          0              2
## 3          0          0              3
## 4          0          0              4
## 5          0          0              5
## 6          0          0              6

Event Types

head(unique(storm_data$EVTYPE), 20)
##  [1] "TORNADO"                   "TSTM WIND"                
##  [3] "HAIL"                      "FREEZING RAIN"            
##  [5] "SNOW"                      "ICE STORM/FLASH FLOOD"    
##  [7] "SNOW/ICE"                  "WINTER STORM"             
##  [9] "HURRICANE OPAL/HIGH WINDS" "THUNDERSTORM WINDS"       
## [11] "RECORD COLD"               "HURRICANE ERIN"           
## [13] "HURRICANE OPAL"            "HEAVY RAIN"               
## [15] "LIGHTNING"                 "THUNDERSTORM WIND"        
## [17] "DENSE FOG"                 "RIP CURRENT"              
## [19] "THUNDERSTORM WINS"         "FLASH FLOOD"

Population Health

Fatalities and injuries were aggregated by weather event type to identify which events had the greatest impact on human health. The event types were then ranked separately according to total fatalities and total injuries.

health_summary <- aggregate(
  cbind(FATALITIES, INJURIES) ~ EVTYPE,
  data = storm_data,
  sum
)

head(health_summary)
##                  EVTYPE FATALITIES INJURIES
## 1    HIGH SURF ADVISORY          0        0
## 2         COASTAL FLOOD          0        0
## 3           FLASH FLOOD          0        0
## 4             LIGHTNING          0        0
## 5             TSTM WIND          0        0
## 6       TSTM WIND (G45)          0        0

Ranking by Fatalities

top_fatalities <- health_summary[
  order(health_summary$FATALITIES, decreasing = TRUE),
]

head(top_fatalities, 10)
##             EVTYPE FATALITIES INJURIES
## 834        TORNADO       5633    91346
## 130 EXCESSIVE HEAT       1903     6525
## 153    FLASH FLOOD        978     1777
## 275           HEAT        937     2100
## 464      LIGHTNING        816     5230
## 856      TSTM WIND        504     6957
## 170          FLOOD        470     6789
## 585    RIP CURRENT        368      232
## 359      HIGH WIND        248     1137
## 19       AVALANCHE        224      170

Injuries Ranking

top_injuries <- health_summary[
  order(health_summary$INJURIES, decreasing = TRUE),
]

head(top_injuries, 10)
##                EVTYPE FATALITIES INJURIES
## 834           TORNADO       5633    91346
## 856         TSTM WIND        504     6957
## 170             FLOOD        470     6789
## 130    EXCESSIVE HEAT       1903     6525
## 464         LIGHTNING        816     5230
## 275              HEAT        937     2100
## 427         ICE STORM         89     1975
## 153       FLASH FLOOD        978     1777
## 760 THUNDERSTORM WIND        133     1488
## 244              HAIL         15     1361

Results

The analysis shows that tornadoes caused the highest number of fatalities and injuries among all weather events. Floods resulted in the greatest overall economic damage, followed by hurricanes or typhoons and tornadoes. These findings indicate that different weather events have different impacts on public health and economic loss.

barplot(
  top_fatalities$FATALITIES[1:10],
  names.arg = top_fatalities$EVTYPE[1:10],
  las = 2,
  cex.names = 0.7,
  main = "Top 10 Weather Events by Fatalities",
  ylab = "Fatalities"
)

Economic Damage

Property and crop damage values were converted into actual dollar amounts based on the magnitude indicators (K = thousand, M = million, B = billion). Total economic damage was calculated by summing property and crop damage for each weather event type. The event types were then ranked according to total economic loss.

storm_data$PROPDMGEXP <- toupper(storm_data$PROPDMGEXP)
storm_data$CROPDMGEXP <- toupper(storm_data$CROPDMGEXP)

storm_data$PROP_DAMAGE <- storm_data$PROPDMG *
  ifelse(storm_data$PROPDMGEXP == "K", 1e3,
  ifelse(storm_data$PROPDMGEXP == "M", 1e6,
  ifelse(storm_data$PROPDMGEXP == "B", 1e9, 1)))

storm_data$CROP_DAMAGE <- storm_data$CROPDMG *
  ifelse(storm_data$CROPDMGEXP == "K", 1e3,
  ifelse(storm_data$CROPDMGEXP == "M", 1e6,
  ifelse(storm_data$CROPDMGEXP == "B", 1e9, 1)))

economic_summary <- aggregate(
  cbind(PROP_DAMAGE, CROP_DAMAGE) ~ EVTYPE,
  data = storm_data,
  sum
)

economic_summary$TOTAL_DAMAGE <-
  economic_summary$PROP_DAMAGE +
  economic_summary$CROP_DAMAGE

top_damage <- economic_summary[
  order(economic_summary$TOTAL_DAMAGE,
  decreasing = TRUE),
]

head(top_damage, 10)
##                EVTYPE  PROP_DAMAGE CROP_DAMAGE TOTAL_DAMAGE
## 170             FLOOD 144657709807  5661968450 150319678257
## 411 HURRICANE/TYPHOON  69305840000  2607872800  71913712800
## 834           TORNADO  56937160779   414953270  57352114049
## 670       STORM SURGE  43323536000        5000  43323541000
## 244              HAIL  15732267048  3025954473  18758221521
## 153       FLASH FLOOD  16140812067  1421317100  17562129167
## 95            DROUGHT   1046106000 13972566000  15018672000
## 402         HURRICANE  11868319010  2741910000  14610229010
## 590       RIVER FLOOD   5118945500  5029459000  10148404500
## 427         ICE STORM   3944927860  5022113500   8967041360

Economic Consequences

barplot(
  top_damage$TOTAL_DAMAGE[1:10],
  names.arg = top_damage$EVTYPE[1:10],
  las = 2,
  cex.names = 0.7,
  main = "Top 10 Weather Events by Economic Damage",
  ylab = "Total Damage (USD)"
)

Conclusion

This analysis demonstrates that severe weather events have significant impacts on both public health and the economy in the United States. Tornadoes were responsible for the highest numbers of fatalities and injuries, while floods caused the greatest economic losses. These findings highlight the importance of disaster preparedness and effective risk management to reduce future impacts.