Synopsis

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.

Data Processing

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).

Loading the Raw Data

# 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])

Processing Public Health Data

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)

Processing Economic Consequence Data

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)

Results

1. Most Harmful Events to Population Health

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).

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.

2. Events with the Greatest Economic Consequences

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).

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.