Streszczenie

Niniejszy raport analizuje bazę danych NOAA Storm Database obejmującą ekstremalne zjawiska pogodowe w Stanach Zjednoczonych w latach 1950–2011. Celem analizy jest identyfikacja typów zjawisk atmosferycznych, które są najbardziej szkodliwe dla zdrowia ludności oraz powodują największe straty ekonomiczne. Dane zawierają informacje o liczbie ofiar śmiertelnych, poszkodowanych, a także szkodach w mieniu i uprawach rolnych. W zakresie zdrowia publicznego szczególnie niebezpieczne okazały się tornada, które zdecydowanie dominują zarówno pod względem liczby zgonów, jak i rannych. Istotny wpływ na zdrowie mają również ekstremalne upały oraz powodzie. Pod względem strat ekonomicznych największe szkody powodują powodzie, huragany i tornada, które łącznie odpowiadają za zdecydowaną większość całkowitych strat materialnych. Analiza pokazuje, że różne zjawiska pogodowe stanowią różne rodzaje ryzyka — tornada są najgroźniejsze dla ludzi, natomiast powodzie i huragany najbardziej kosztowne ekonomicznie. Wyniki tej analizy mogą stanowić podstawę do priorytetyzacji zasobów zarządzania kryzysowego. Dane ze starszych lat mogą być niepełne z powodu niedostatecznej dokumentacji, co należy uwzględnić przy interpretacji wyników.

Przetwarzanie danych

Wczytanie danych

Dane wczytywane są bezpośrednio z oryginalnego skompresowanego pliku CSV. Ponieważ plik jest duży, używamy opcji cache = TRUE.

storm_data <- read_csv("data_StormData.csv.bz2")

Przegląd struktury danych

dim(storm_data)
## [1] 902297     37
names(storm_data)
##  [1] "STATE__"    "BGN_DATE"   "BGN_TIME"   "TIME_ZONE"  "COUNTY"    
##  [6] "COUNTYNAME" "STATE"      "EVTYPE"     "BGN_RANGE"  "BGN_AZI"   
## [11] "BGN_LOCATI" "END_DATE"   "END_TIME"   "COUNTY_END" "COUNTYENDN"
## [16] "END_RANGE"  "END_AZI"    "END_LOCATI" "LENGTH"     "WIDTH"     
## [21] "F"          "MAG"        "FATALITIES" "INJURIES"   "PROPDMG"   
## [26] "PROPDMGEXP" "CROPDMG"    "CROPDMGEXP" "WFO"        "STATEOFFIC"
## [31] "ZONENAMES"  "LATITUDE"   "LONGITUDE"  "LATITUDE_E" "LONGITUDE_"
## [36] "REMARKS"    "REFNUM"

Przetwarzanie danych zdrowotnych

Dla oceny szkodliwości dla zdrowia sumujemy kolumny FATALITIES (ofiary śmiertelne) i INJURIES (ranni) według typu zdarzenia.

health_impact <- storm_data %>%
  group_by(EVTYPE) %>%
  summarise(
    fatalities = sum(FATALITIES, na.rm = TRUE),
    injuries   = sum(INJURIES, na.rm = TRUE),
    total_health = fatalities + injuries
  ) %>%
  arrange(desc(total_health)) %>%
  slice_head(n = 10)

health_impact
## # A tibble: 10 × 4
##    EVTYPE            fatalities injuries total_health
##    <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

Przetwarzanie danych ekonomicznych

Obliczenie strat ekonomicznych wymaga przekształcenia wartości mnożnika (PROPDMGEXP, CROPDMGEXP) na liczby, a następnie przemnożenia przez wartość podstawową.

exp_to_num <- function(exp) {
  case_when(
    toupper(exp) == "K" ~ 1e3,
    toupper(exp) == "M" ~ 1e6,
    toupper(exp) == "B" ~ 1e9,
    toupper(exp) == "H" ~ 1e2,
    exp %in% as.character(0:9) ~ 10 ^ as.numeric(exp),
    TRUE ~ 1
  )
}

econ_impact <- storm_data %>%
  mutate(
    prop_damage = PROPDMG * exp_to_num(PROPDMGEXP),
    crop_damage = CROPDMG * exp_to_num(CROPDMGEXP),
    total_damage = prop_damage + crop_damage
  ) %>%
  group_by(EVTYPE) %>%
  summarise(total_damage_usd = sum(total_damage, na.rm = TRUE)) %>%
  arrange(desc(total_damage_usd)) %>%
  slice_head(n = 10)

econ_impact
## # A tibble: 10 × 2
##    EVTYPE            total_damage_usd
##    <chr>                        <dbl>
##  1 FLOOD                150319678257 
##  2 HURRICANE/TYPHOON     71913712800 
##  3 TORNADO               57362333946.
##  4 STORM SURGE           43323541000 
##  5 HAIL                  18761221986.
##  6 FLASH FLOOD           18244041078.
##  7 DROUGHT               15018672000 
##  8 HURRICANE             14610229010 
##  9 RIVER FLOOD           10148404500 
## 10 ICE STORM              8967041360

Wyniki

Zjawiska najbardziej szkodliwe dla zdrowia

Poniższy wykres przedstawia 10 typów zjawisk pogodowych powodujących największą łączną liczbę ofiar i rannych.

health_long <- health_impact %>%
  mutate(EVTYPE = fct_reorder(EVTYPE, total_health)) %>%
  pivot_longer(cols = c(fatalities, injuries),
               names_to = "typ",
               values_to = "liczba") %>%
  mutate(typ = recode(typ, fatalities = "Ofiary śmiertelne", injuries = "Ranni"))

ggplot(health_long, aes(x = EVTYPE, y = liczba, fill = typ)) +
  geom_col() +
  coord_flip() +
  xlab("Typ zjawiska pogodowego") +
  ylab("Liczba osób") +
  ggtitle("Wpływ zjawisk pogodowych na zdrowie (1950–2011)") +
  scale_fill_manual(values = c("Ofiary śmiertelne" = "#d62728", "Ranni" = "#ff7f0e"),
                    name = "Kategoria") +
  theme_minimal()
Rysunek 1. Dziesięć typów zjawisk pogodowych o największym wpływie na zdrowie (ofiary + ranni łącznie).

Rysunek 1. Dziesięć typów zjawisk pogodowych o największym wpływie na zdrowie (ofiary + ranni łącznie).

Wnioski: Tornada są zdecydowanie najbardziej niebezpieczne dla zdrowia ludzkiego — odpowiadają za ponad 90 000 rannych i ponad 5 000 ofiar śmiertelnych. Na kolejnych miejscach znajdują się ekstremalne upały i powodzie.

Zjawiska powodujące największe straty ekonomiczne

econ_impact %>%
  mutate(
    EVTYPE = fct_reorder(EVTYPE, total_damage_usd),
    total_damage_mld = total_damage_usd / 1e9
  ) %>%
  ggplot(aes(x = EVTYPE, y = total_damage_mld)) +
  geom_col(fill = "#1f77b4") +
  coord_flip() +
  xlab("Typ zjawiska pogodowego") +
  ylab("Łączne straty (w miliardach USD)") +
  ggtitle("Straty ekonomiczne spowodowane zjawiskami pogodowymi (1950–2011)") +
  theme_minimal()
Rysunek 2. Dziesięć typów zjawisk pogodowych powodujących największe łączne straty ekonomiczne (szkody w mieniu i uprawach).

Rysunek 2. Dziesięć typów zjawisk pogodowych powodujących największe łączne straty ekonomiczne (szkody w mieniu i uprawach).

Wnioski: Powodzie generują największe straty ekonomiczne — ponad 150 miliardów USD w analizowanym okresie. Na kolejnych miejscach plasują się huragany/tajfuny oraz tornada. Straty te obejmują zarówno szkody w mieniu prywatnym, jak i w uprawach rolnych.