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