This report explores the NOAA Storm Database to determine which types of severe weather events are most harmful to population health and which have the greatest economic consequences across the United States. The data include information about injuries, fatalities, and economic damage. We processed and aggregated the data to identify the top event types in terms of human and economic impact. Visualizations and summary statistics are used to present the results.
We load the storm data from the compressed CSV file provided. Then we
clean and transform relevant variables such as event type
(EVTYPE), fatalities, injuries, property damage, and crop
damage.
storm <- read.csv("repdata_data_StormData.csv")
## Warning in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : EOF
## within quoted string
dim(storm) # check dimension
## [1] 897574 37
We use the FATALITIES and INJURIES columns
to evaluate total health impacts across event types.
health <- storm %>%
group_by(EVTYPE) %>%
summarise(
fatalities = sum(FATALITIES, na.rm = TRUE),
injuries = sum(INJURIES, na.rm = TRUE),
total_health = fatalities + injuries
) %>%
arrange(desc(total_health)) %>%
head(10)
health
## # A tibble: 10 × 4
## EVTYPE fatalities injuries total_health
## <chr> <dbl> <dbl> <dbl>
## 1 TORNADO 5628 91299 96927
## 2 EXCESSIVE HEAT 1903 6517 8420
## 3 TSTM WIND 504 6957 7461
## 4 FLOOD 460 6789 7249
## 5 LIGHTNING 813 5220 6033
## 6 HEAT 936 2099 3035
## 7 FLASH FLOOD 965 1777 2742
## 8 ICE STORM 89 1975 2064
## 9 THUNDERSTORM WIND 132 1449 1581
## 10 WINTER STORM 206 1321 1527
ggplot(health, aes(x = reorder(EVTYPE, -total_health), y = total_health)) +
geom_bar(stat = "identity", fill = "red") +
labs(x = "Event Type", y = "Total Health Impact",
title = "Top 10 Events Causing Injuries and Fatalities") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
We process the property (PROPDMG,
PROPDMGEXP) and crop (CROPDMG,
CROPDMGEXP) damage columns.
exp_to_num <- function(exp) {
exp <- toupper(as.character(exp))
ifelse(exp == "B", 1e9,
ifelse(exp == "M", 1e6,
ifelse(exp == "K", 1e3,
ifelse(exp == "H", 1e2, 0))))
}
storm$PROPDMGEXP_NUM <- exp_to_num(storm$PROPDMGEXP)
storm$CROPDMGEXP_NUM <- exp_to_num(storm$CROPDMGEXP)
storm$PROPDMG_VAL <- storm$PROPDMG * storm$PROPDMGEXP_NUM
storm$CROPDMG_VAL <- storm$CROPDMG * storm$CROPDMGEXP_NUM
storm$TOTAL_DAMAGE <- storm$PROPDMG_VAL + storm$CROPDMG_VAL
economic <- storm %>%
group_by(EVTYPE) %>%
summarise(total_damage = sum(TOTAL_DAMAGE, na.rm = TRUE)) %>%
arrange(desc(total_damage)) %>%
head(10)
economic
## # A tibble: 10 × 2
## EVTYPE total_damage
## <chr> <dbl>
## 1 FLOOD 149229588300
## 2 HURRICANE/TYPHOON 71913712800
## 3 TORNADO 57284212590
## 4 STORM SURGE 43323541000
## 5 HAIL 18750520970
## 6 FLASH FLOOD 17260593110
## 7 DROUGHT 15018535000
## 8 HURRICANE 14610229010
## 9 RIVER FLOOD 10148404500
## 10 ICE STORM 8967041310
ggplot(economic, aes(x = reorder(EVTYPE, -total_damage), y = total_damage)) +
geom_bar(stat = "identity", fill = "blue") +
labs(x = "Event Type", y = "Total Economic Damage ($)",
title = "Top 10 Events with Economic Consequences") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
From the data, it is evident that:
These insights can help prioritize emergency preparedness and disaster mitigation efforts.