Wstęp i streszczenie

Celem niniejszej analizy jest zbadanie danych udostępnionych przez Narodową Administrację Oceaniczną i Atmosferyczną (NOAA), dotyczących ekstremalnych zjawisk pogodowych w Stanach Zjednoczonych w latach 1950–2011. Analiza ma na celu określenie, które typy zdarzeń pogodowych miały największy wpływ na zdrowie publiczne (mierzone liczbą zgonów i obrażeń) oraz które generowały największe straty ekonomiczne (straty w mieniu i uprawach). Dane zostały wczytane z oryginalnego pliku CSV (.bz2), przekształcone i przeanalizowane w języku R.

Szczególną uwagę poświęcono zmiennej EVTYPE (typ zjawiska) oraz przeliczeniu wartości ekonomicznych na podstawie mnożników (K, M, B). Zidentyfikowano najbardziej szkodliwe zdarzenia pogodowe — tornada, które odpowiadają za najwięcej ofiar śmiertelnych i rannych, oraz powodzie, które powodują największe straty ekonomiczne. Wyniki przedstawiono w formie wykresów słupkowych, ograniczając ich liczbę do trzech, zgodnie z założeniami zadania. Otrzymane wnioski mogą być pomocne w działaniach prewencyjnych i planistycznych w zakresie ochrony ludności i infrastruktury.

Przetwarzanie danych

Dane zostały pobrane z oryginalnego pliku data_StormData.csv.bz2. Plik zawiera informacje o zdarzeniach pogodowych z lat 1950–2011, w tym daty, lokalizacje, typy zdarzeń (EVTYPE) oraz skutki dla zdrowia i gospodarki (zmienne FATALITIES, INJURIES, PROPDMG, CROPDMG i odpowiadające im mnożniki PROPDMGEXP, CROPDMGEXP).

W celu przeprowadzenia analizy:

library(dplyr)
## 
## Dołączanie pakietu: 'dplyr'
## Następujące obiekty zostały zakryte z 'package:stats':
## 
##     filter, lag
## Następujące obiekty zostały zakryte z 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(readr)
library(tidyr)
library(lubridate)
## 
## Dołączanie pakietu: 'lubridate'
## Następujące obiekty zostały zakryte z 'package:base':
## 
##     date, intersect, setdiff, union
data <- read_csv("data_StormData.csv.bz2")
## Rows: 902297 Columns: 37
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (18): BGN_DATE, BGN_TIME, TIME_ZONE, COUNTYNAME, STATE, EVTYPE, BGN_AZI,...
## dbl (18): STATE__, COUNTY, BGN_RANGE, COUNTY_END, END_RANGE, LENGTH, WIDTH, ...
## lgl  (1): COUNTYENDN
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Przekształcenie wartości ekonomicznych

data_sub <- data %>%
  select(EVTYPE, FATALITIES, INJURIES, PROPDMG, PROPDMGEXP, CROPDMG, CROPDMGEXP)

exp_to_num <- function(exp) {
  exp <- toupper(trimws(exp))
  case_when(
    exp == "K" ~ 1e3,
    exp == "M" ~ 1e6,
    exp == "B" ~ 1e9,
    grepl("^[0-9]+$", exp) ~ 10 ^ as.numeric(exp),
    TRUE ~ 1
  )
}

data_sub <- data_sub %>%
  mutate(
    PROPDMGEXP_NUM = exp_to_num(PROPDMGEXP),
    CROPDMGEXP_NUM = exp_to_num(CROPDMGEXP),
    PROP_DAMAGE = PROPDMG * PROPDMGEXP_NUM,
    CROP_DAMAGE = CROPDMG * CROPDMGEXP_NUM,
    TOTAL_DAMAGE = PROP_DAMAGE + CROP_DAMAGE
  )
## Warning: There were 2 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `PROPDMGEXP_NUM = exp_to_num(PROPDMGEXP)`.
## Caused by warning:
## ! pojawiły się wartości NA na skutek przekształcenia
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 1 remaining warning.

Wyniki

W tej części zaprezentowano wyniki analizy w postaci dwóch wykresów:

Najbardziej szkodliwe zdarzenia dla zdrowia

health_impact <- data_sub %>%
  group_by(EVTYPE) %>%
  summarise(
    Total_Fatalities = sum(FATALITIES, na.rm = TRUE),
    Total_Injuries = sum(INJURIES, na.rm = TRUE),
    Total_Health = Total_Fatalities + Total_Injuries
  ) %>%
  arrange(desc(Total_Health)) %>%
  top_n(10, Total_Health)

health_impact %>%
  pivot_longer(cols = c(Total_Fatalities, Total_Injuries), names_to = "Type", values_to = "Count") %>%
  ggplot(aes(x = reorder(EVTYPE, -Count), y = Count, fill = Type)) +
  geom_bar(stat = "identity", position = "stack") +
  labs(title = "Najbardziej szkodliwe zdarzenia pogodowe dla zdrowia", x = "Typ zdarzenia", y = "Liczba ofiar", fill = "Rodzaj") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Z powyższego zestawienia wynika, że tornada są zdecydowanie najbardziej szkodliwe dla zdrowia ludności, odpowiadając za największą liczbę ofiar śmiertelnych i obrażeń.

Zdarzenia powodujące największe straty ekonomiczne

economic_impact <- data_sub %>%
  group_by(EVTYPE) %>%
  summarise(Total_Damage = sum(TOTAL_DAMAGE, na.rm = TRUE)) %>%
  arrange(desc(Total_Damage)) %>%
  top_n(10, Total_Damage)

ggplot(economic_impact, aes(x = reorder(EVTYPE, -Total_Damage), y = Total_Damage / 1e9)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  labs(title = "Największe straty ekonomiczne wg typu zdarzenia", x = "Typ zdarzenia", y = "Straty (mld USD)") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Z analizy wynika, że powodzie (ang. flood) są przyczyną największych strat ekonomicznych w Stanach Zjednoczonych w analizowanym okresie.

Podsumowanie

Analiza danych NOAA wykazała, że tornada stanowią największe zagrożenie dla zdrowia ludności, natomiast powodzie powodują największe straty ekonomiczne. Dane te mogą być podstawą do priorytetyzacji działań zapobiegawczych i planowania zasobów w zakresie zarządzania kryzysowego. Wyniki analizy są zgodne z intuicją, ale wymagają dalszej walidacji w szczegółowych badaniach regionalnych lub czasowych.