This analysis explores the impact of severe weather events across the United States using data from the NOAA Storm Database spanning from 1950 to November 2011. The objective is to identify which weather events are most detrimental to public health and which cause the greatest economic consequences. Public health impact is evaluated by calculating the cumulative totals of fatalities and injuries per event type. Economic damage is determined by calculating the sum of property and crop damages, standardizing the scale fields denoted by alphabetical exponents. The findings reveal that tornadoes are single-handedly the most hazardous event type to population health, causing the highest counts of both injuries and deaths. Conversely, floods present the most severe economic threat, responsible for the highest combined financial damages to property and agriculture.
The analysis begins by loading the raw, compressed storm data file
directly into R. The data processing pipeline involves extracting,
cleaning, and aggregating the fields relevant to health
(FATALITIES and INJURIES) and financial
indicators (PROPDMG, PROPDMGEXP,
CROPDMG, CROPDMGEXP).
# Find any file in the folder starting with the correct name
target_file <- list.files(pattern = "^repdata_data_StormData")
if (length(target_file) == 0) {
stop("The storm data file is still missing from this folder. Please make sure it is in your project directory.")
}
# Read whichever version of the file your computer saved (zipped or unzipped)
raw_data <- read.csv(target_file[1])
To determine the events most harmful to health, we aggregate total
fatalities and injuries grouped by the event type
(EVTYPE).
library(dplyr)
health_data <- raw_data %>%
group_by(EVTYPE) %>%
summarize(Total_Fatalities = sum(FATALITIES, na.rm = TRUE),
Total_Injuries = sum(INJURIES, na.rm = TRUE),
Total_Health_Impact = sum(FATALITIES + INJURIES, na.rm = TRUE)) %>%
arrange(desc(Total_Health_Impact))
# Filter the top 10 most harmful events for charting
top_health_events <- head(health_data, 10)
The columns PROPDMGEXP and CROPDMGEXP
contain characters mapping to numerical multipliers (e.g., K =
thousands, M = millions, B = billions). We convert these variables into
uniform numeric values to calculate true dollar amounts.
# Helper function to convert exponents to multiplier values
convert_exponent <- function(exp) {
exp <- toupper(as.character(exp))
if (exp == "H") return(100)
if (exp == "K") return(1000)
if (exp == "M") return(1000000)
if (exp == "B") return(1000000000)
if (exp %in% c("", "-", "?", "+")) return(1)
if (exp %in% as.character(0:8)) return(10^(as.numeric(exp)))
return(1)
}
# Vectorize the helper function
vector_convert_exponent <- Vectorize(convert_exponent)
# Calculate total property and crop costs
economic_data <- raw_data %>%
mutate(PropMultiplier = vector_convert_exponent(PROPDMGEXP),
CropMultiplier = vector_convert_exponent(CROPDMGEXP)) %>%
mutate(PropCost = PROPDMG * PropMultiplier,
CropCost = CROPDMG * CropMultiplier,
TotalCost = (PROPDMG * PropMultiplier) + (CROPDMG * CropMultiplier)) %>%
group_by(EVTYPE) %>%
summarize(Total_Property_Damage = sum(PropCost, na.rm = TRUE),
Total_Crop_Damage = sum(CropCost, na.rm = TRUE),
Grand_Total_Cost = sum(TotalCost, na.rm = TRUE)) %>%
arrange(desc(Grand_Total_Cost))
# Filter top 10 most costly events for charting
top_economic_events <- head(economic_data, 10)
The table below showcases the complete impact breakdown of the top 10 most dangerous weather events in terms of direct physical harm to human life.
print(top_health_events)
## # A tibble: 10 × 4
## EVTYPE Total_Fatalities Total_Injuries Total_Health_Impact
## <chr> <dbl> <dbl> <dbl>
## 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
To easily contrast injuries against absolute fatalities, the top hazardous conditions are plotted below:
library(ggplot2)
library(tidyr)
# Reshape data for a stacked bar chart
health_long <- top_health_events %>%
select(EVTYPE, Total_Fatalities, Total_Injuries) %>%
pivot_longer(cols = c(Total_Fatalities, Total_Injuries),
names_to = "Impact_Type", values_to = "Count")
ggplot(health_long, aes(x = reorder(EVTYPE, -Count), y = Count, fill = Impact_Type)) +
geom_bar(stat = "identity") +
coord_flip() +
labs(title = "Top 10 Severe Weather Impacts on Population Health",
x = "Event Type (EVTYPE)",
y = "Total Number of People",
fill = "Impact Type") +
scale_fill_manual(values = c("Total_Fatalities" = "darkred", "Total_Injuries" = "orange"),
labels = c("Total_Fatalities" = "Fatalities", "Total_Injuries" = "Injuries")) +
theme_minimal()
Figure 1: Top 10 Weather Events Harmful to US Population Health (Fatalities and Injuries combined).
Based on the metrics, Tornadoes rank as the single most harmful event type to public health in the US, responsible for both the greatest numbers of injuries and absolute fatalities.
The table below captures the distribution of property and crop losses among the top 10 financially devastating severe weather categories.
print(top_economic_events)
## # A tibble: 10 × 4
## EVTYPE Total_Property_Damage Total_Crop_Damage Grand_Total_Cost
## <chr> <dbl> <dbl> <dbl>
## 1 FLOOD 144657709807 5661968450 150319678257
## 2 HURRICANE/TYPHOON 69305840000 2607872800 71913712800
## 3 TORNADO 56947380676. 414953270 57362333946.
## 4 STORM SURGE 43323536000 5000 43323541000
## 5 HAIL 15735267513. 3025954473 18761221986.
## 6 FLASH FLOOD 16822673978. 1421317100 18243991078.
## 7 DROUGHT 1046106000 13972566000 15018672000
## 8 HURRICANE 11868319010 2741910000 14610229010
## 9 RIVER FLOOD 5118945500 5029459000 10148404500
## 10 ICE STORM 3944927860 5022113500 8967041360
The data can be visualized across real property versus structural crop impacts here:
# Reshape damage data for stacked bar visualization
economic_long <- top_economic_events %>%
select(EVTYPE, Total_Property_Damage, Total_Crop_Damage) %>%
pivot_longer(cols = c(Total_Property_Damage, Total_Crop_Damage),
names_to = "Damage_Type", values_to = "Cost")
ggplot(economic_long, aes(x = reorder(EVTYPE, -Cost), y = Cost / 1e9, fill = Damage_Type)) +
geom_bar(stat = "identity") +
coord_flip() +
labs(title = "Top 10 Weather Events with Highest Economic Consequences",
x = "Event Type (EVTYPE)",
y = "Damages (in Billions of USD)",
fill = "Damage Type") +
scale_fill_manual(values = c("Total_Property_Damage" = "steelblue", "Total_Crop_Damage" = "darkgreen"),
labels = c("Total_Property_Damage" = "Property Damage", "Total_Crop_Damage" = "Crop Damage")) +
theme_minimal()
Figure 2: Top 10 Weather Events with the Greatest Economic Damage in the US (Property and Crops combined).
Based on these calculations, Floods cause the highest overall economic damage in the United States, primarily driven by massive property destruction. Hurricane/Typhoons and Tornadoes follow close behind.