Streszczenie

Niniejszy raport analizuje bazę NOAA Storm Database obejmującą zdarzenia pogodowe w Stanach Zjednoczonych w latach 1950–2011. Dane pochodzą z oficjalnego rejestru burz i ekstremalnych zjawisk pogodowych prowadzonego przez NOAA. Analiza koncentruje się na dwóch wymiarach skutków: wpływie na zdrowie ludności oraz stratach ekonomicznych. Dla każdego typu zdarzenia (EVTYPE) zsumowano liczbę ofiar śmiertelnych i rannych oraz przeliczono szkody majątkowe i upraw na dolary amerykańskie. Największy łączny wpływ na zdrowie wykazują tornada, natomiast najwyższe straty materialne notuje powódź. Perspektywa analizy odpowiada potrzebom planowania zasobów w zarządzaniu kryzysowym — bez wskazywania szczegółowych rekomendacji operacyjnych. Wyniki prezentowane są w tabelach i na wykresach słupkowych dla dziesięciu najbardziej dotkliwych typów zdarzeń w każdej kategorii. Przetwarzanie rozpoczyna się wyłącznie od surowego pliku skompresowanego CSV dostarczonego w ramach zadania.

Wprowadzenie

Baza NOAA Storm Database dokumentuje burze i inne istotne zjawiska pogodowe na terenie USA, w tym czas i miejsce wystąpienia oraz szacunki ofiar, rannych i szkód. Dane z lat 1950–2011 mogą być mniej kompletne we wczesnym okresie ze względu na ograniczoną dokumentację; nowsze wpisy są zwykle dokładniejsze. Szacunki szkód majątkowych nie są skorygowane o inflację i odzwierciedlają wartości wprowadzone w chwili zdarzenia (FAQ NOAA).

Poniższa analiza odpowiada na pytania:

  1. Które typy zjawisk (EVTYPE) są najbardziej szkodliwe dla zdrowia ludności?
  2. Które typy zjawisk powodują największe straty ekonomiczne?

Przetwarzanie danych

Analiza rozpoczyna się od surowego pliku data_StormData (1).csv.bz2 — bez wcześniejszego przetwarzania poza tym dokumentem.

Wczytanie danych

Plik wczytywany jest funkcją read.csv() z połączeniem bzfile(), co pozwala odczytać skompresowany CSV bez ręcznej dekompresji. Ustawiono stringsAsFactors = FALSE, aby kategorie tekstowe (np. EVTYPE) pozostały wektorami znaków.

storm_raw <- read.csv(
  bzfile("data_StormData (1).csv.bz2"),
  stringsAsFactors = FALSE
)
nrow(storm_raw)
## [1] 902297

Wybór i przygotowanie zmiennych

Z pełnego zbioru wybrane zostały kolumny potrzebne do analizy skutków zdrowotnych i ekonomicznych. Typ zdarzenia (EVTYPE) ujednolicono przez usunięcie białych znaków na początku i końcu oraz zamianę na wielkie litery — w przeciwnym razie ten sam typ mógłby występować pod wieloma etykietami i zaniżać sumy w agregacji.

Kolumny PROPDMG / CROPDMG zawierają wielkość szkody; kolumny PROPDMGEXP / CROPDMGEXP określają mnożnik: H (×10²), K (×10³), M (×10⁶), B (×10⁹). Wartości bez rozpoznanego kodu ekspozycji traktowane są jako brak przeliczonej szkody (0 USD).

to_usd <- function(amount, exp) {
  mult <- c(H = 1e2, K = 1e3, M = 1e6, B = 1e9)
  amount * mult[match(exp, names(mult))]
}

storm <- storm_raw %>%
  transmute(
    EVTYPE = toupper(trimws(EVTYPE)),
    FATALITIES = FATALITIES,
    INJURIES = INJURIES,
    prop_usd = to_usd(PROPDMG, PROPDMGEXP),
    crop_usd = to_usd(CROPDMG, CROPDMGEXP)
  ) %>%
  mutate(
    prop_usd = replace(prop_usd, is.na(prop_usd), 0),
    crop_usd = replace(crop_usd, is.na(crop_usd), 0),
    total_damage = prop_usd + crop_usd,
    health_total = FATALITIES + INJURIES
  )

n_distinct(storm$EVTYPE)
## [1] 890

Agregacja według typu zdarzenia

Dla każdego EVTYPE obliczono łączną liczbę ofiar i rannych (health_total) oraz sumę szkód majątkowych i upraw (econ_total).

health_by_type <- storm %>%
  group_by(EVTYPE) %>%
  summarise(
    fatalities = sum(FATALITIES, na.rm = TRUE),
    injuries = sum(INJURIES, na.rm = TRUE),
    health_total = sum(health_total, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(desc(health_total))

econ_by_type <- storm %>%
  group_by(EVTYPE) %>%
  summarise(
    prop_damage = sum(prop_usd, na.rm = TRUE),
    crop_damage = sum(crop_usd, na.rm = TRUE),
    econ_total = sum(total_damage, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(desc(econ_total))

top_health <- head(health_by_type, 10)
top_econ <- head(econ_by_type, 10)

Wyniki

Wpływ na zdrowie ludności

Poniższa tabela przedstawia dziesięć typów zdarzeń o najwyższej łącznej liczbie ofiar śmiertelnych i rannych w latach 1950–2011.

kable(
  top_health,
  col.names = c("Typ zdarzenia", "Ofiary", "Ranni", "Razem"),
  caption = "Dziesięć typów zdarzeń o największym wpływie na zdrowie (suma ofiar i rannych)."
)
Dziesięć typów zdarzeń o największym wpływie na zdrowie (suma ofiar i rannych).
Typ zdarzenia Ofiary Ranni Razem
TORNADO 5633 91346 96979
EXCESSIVE HEAT 1903 6525 8428
TSTM WIND 504 6957 7461
FLOOD 470 6789 7259
LIGHTNING 816 5230 6046
HEAT 937 2100 3037
FLASH FLOOD 978 1777 2755
ICE STORM 89 1975 2064
THUNDERSTORM WIND 133 1488 1621
WINTER STORM 206 1321 1527

Typ zdarzenia o najwyższej wartości health_total to TORNADO (96 979 łącznie: 5 633 ofiar i 91 346 rannych).

ggplot(top_health, aes(x = reorder(EVTYPE, health_total), y = health_total)) +
  geom_col(fill = "steelblue") +
  coord_flip() +
  labs(
    x = NULL,
    y = "Ofiary śmiertelne + ranni",
    title = "Wpływ na zdrowie według typu zdarzenia (TOP 10)"
  ) +
  scale_y_continuous(labels = label_comma())
Dziesięć typów zdarzeń o najwyższej łącznej liczbie ofiar śmiertelnych i rannych w USA w latach 1950–2011.

Dziesięć typów zdarzeń o najwyższej łącznej liczbie ofiar śmiertelnych i rannych w USA w latach 1950–2011.

Straty ekonomiczne

Poniższa tabela przedstawia dziesięć typów zdarzeń o najwyższej łącznej szkodzie majątkowej i upraw (USD, bez korekty inflacji).

kable(
  transform(
    top_econ,
    prop_damage = dollar(prop_damage, scale = 1e-9, suffix = " mld USD"),
    crop_damage = dollar(crop_damage, scale = 1e-9, suffix = " mld USD"),
    econ_total = dollar(econ_total, scale = 1e-9, suffix = " mld USD")
  ),
  col.names = c("Typ zdarzenia", "Szkody majątkowe", "Szkody upraw", "Razem"),
  caption = "Dziesięć typów zdarzeń o największych stratach ekonomicznych (mld USD)."
)
Dziesięć typów zdarzeń o największych stratach ekonomicznych (mld USD).
Typ zdarzenia Szkody majątkowe Szkody upraw Razem
FLOOD $144.66 mld USD $5.66 mld USD $150.32 mld USD
HURRICANE/TYPHOON $69.31 mld USD $2.61 mld USD $71.91 mld USD
TORNADO $56.93 mld USD $0.41 mld USD $57.34 mld USD
STORM SURGE $43.32 mld USD $0.00 mld USD $43.32 mld USD
HAIL $15.73 mld USD $3.03 mld USD $18.75 mld USD
FLASH FLOOD $16.14 mld USD $1.42 mld USD $17.56 mld USD
DROUGHT $1.05 mld USD $13.97 mld USD $15.02 mld USD
HURRICANE $11.87 mld USD $2.74 mld USD $14.61 mld USD
RIVER FLOOD $5.12 mld USD $5.03 mld USD $10.15 mld USD
ICE STORM $3.94 mld USD $5.02 mld USD $8.97 mld USD

Typ zdarzenia o najwyższej wartości econ_total to FLOOD (łącznie ok. 150.32 mld USD).

ggplot(top_econ, aes(x = reorder(EVTYPE, econ_total), y = econ_total / 1e9)) +
  geom_col(fill = "darkorange") +
  coord_flip() +
  labs(
    x = NULL,
    y = "Straty łącznie (mld USD)",
    title = "Straty ekonomiczne według typu zdarzenia (TOP 10)"
  ) +
  scale_x_discrete(labels = function(x) str_wrap(x, width = 25))
Dziesięć typów zdarzeń o najwyższych łącznych szkodach majątkowych i upraw w USA w latach 1950–2011 (mld USD, bez korekty inflacji).

Dziesięć typów zdarzeń o najwyższych łącznych szkodach majątkowych i upraw w USA w latach 1950–2011 (mld USD, bez korekty inflacji).

Podsumowanie wyników

Z perspektywy planowania reagowania na zagrożenia pogodowe rankingi różnią się w zależności od kryterium. Pod względem skutków dla zdrowia dominują tornada; pod względem strat materialnych — powódź, a w czołówce znajdują się także huragany/typoon, tornada i storm surge. Oznacza to, że priorytetyzacja zasobów (np. szkolenia, systemy ostrzegania, ubezpieczenia infrastruktury) może wymagać odrębnych ustaleń dla ochrony życia i dla ograniczania szkód majątkowych.