Analiza została przeprowadzona na podstawie danych pochodzących z bazy NOAA Storm Events Database, udostępnionych w pliku repdata_data_StormData.csv.bz2. Celem było zbadanie wpływu ekstremalnych zjawisk pogodowych na zdrowie ludności oraz straty ekonomiczne w Stanach Zjednoczonych w latach 1950–2011. Dane zostały wczytane bezpośrednio z surowego pliku CSV i przetworzone w języku R. Analiza obejmowała obliczenie liczby ofiar śmiertelnych oraz rannych w wyniku różnych typów zjawisk pogodowych. Dodatkowo oszacowano łączne straty w mieniu i uprawach, uwzględniając przeliczniki wielkości strat zapisane w danych. W wyniku agregacji wyłoniono dziesięć typów zjawisk najbardziej szkodliwych dla zdrowia ludności oraz powodujących największe straty ekonomiczne. Wizualizacja danych została wykonana w postaci dwóch wykresów słupkowych przedstawiających odpowiednio wpływ na zdrowie i straty ekonomiczne. Analiza wykazała, że tornada były najgroźniejszym zjawiskiem dla zdrowia, powodując najwięcej ofiar. Największe straty ekonomiczne spowodowały powodzie, znacząco przewyższając inne zjawiska pod względem wartości szkód.
W pierwszej kolejności dane zostały wczytane bezpośrednio z surowego pliku repdata_data_StormData.csv.bz2, pochodzącego z bazy NOAA Storm Events Database. Do wczytania danych wykorzystano funkcję read_csv() z pakietu readr. Po zaimportowaniu danych przeprowadzono wstępną eksplorację przy użyciu funkcji str() oraz names(), aby uzyskać informacje o strukturze zbioru, liczbie zmiennych i ich typach. Pozwoliło to na świadome zaplanowanie dalszych etapów przetwarzania.
# Wczytanie danych z surowego pliku
storm_data <- read_csv("repdata_data_StormData.csv.bz2", show_col_types = FALSE)
# Podgląd struktury danych
str(storm_data)
# Sprawdzenie nazw kolumn
names(storm_data)
W celu analizy skutków zdrowotnych wybrano kolumny EVTYPE (typ zjawiska), FATALITIES (liczba ofiar śmiertelnych) oraz INJURIES (liczba rannych). Następnie dane zostały zgrupowane według typu zjawiska (group_by(EVTYPE)), a dla każdej grupy obliczono łączną liczbę ofiar śmiertelnych i rannych (summarise()). Aby umożliwić czytelne przedstawienie wyników na wykresie, dane przekształcono do formatu “długiego” (pivot_longer()), gdzie każdy wiersz odpowiadał jednej kategorii ofiar (zgony lub ranni). Dodatkowo, w celu poprawy przejrzystości wykresu, kategorie zmieniono na polskie odpowiedniki (“Zgony” oraz “Ranni”) przy użyciu funkcji recode().
# Przygotowanie danych zdrowotnych
health_data <- storm_data %>%
select(EVTYPE, FATALITIES, INJURIES) %>%
group_by(EVTYPE) %>%
summarise(
Total_Fatalities = sum(FATALITIES, na.rm = TRUE),
Total_Injuries = sum(INJURIES, na.rm = TRUE),
Total_Impact = Total_Fatalities + Total_Injuries
) %>%
arrange(desc(Total_Impact)) %>%
slice_head(n = 10)
# Zmiana formatu na długi
health_long <- health_data %>%
select(EVTYPE, Total_Fatalities, Total_Injuries) %>%
pivot_longer(cols = c(Total_Fatalities, Total_Injuries),
names_to = "Impact_Type",
values_to = "Count")
# Tłumaczenie nazw na polski
health_long$Impact_Type <- recode(health_long$Impact_Type,
"Total_Fatalities" = "Zgony",
"Total_Injuries" = "Ranni")
health_long
## # A tibble: 20 × 3
## EVTYPE Impact_Type Count
## <chr> <chr> <dbl>
## 1 TORNADO Zgony 5633
## 2 TORNADO Ranni 91346
## 3 EXCESSIVE HEAT Zgony 1903
## 4 EXCESSIVE HEAT Ranni 6525
## 5 TSTM WIND Zgony 504
## 6 TSTM WIND Ranni 6957
## 7 FLOOD Zgony 470
## 8 FLOOD Ranni 6789
## 9 LIGHTNING Zgony 816
## 10 LIGHTNING Ranni 5230
## 11 HEAT Zgony 937
## 12 HEAT Ranni 2100
## 13 FLASH FLOOD Zgony 978
## 14 FLASH FLOOD Ranni 1777
## 15 ICE STORM Zgony 89
## 16 ICE STORM Ranni 1975
## 17 THUNDERSTORM WIND Zgony 133
## 18 THUNDERSTORM WIND Ranni 1488
## 19 WINTER STORM Zgony 206
## 20 WINTER STORM Ranni 1321
W drugiej części analizy skupiono się na ekonomicznych skutkach zjawisk pogodowych. Wybrano kolumny związane ze stratami materialnymi: PROPDMG, PROPDMGEXP (straty w mieniu oraz ich mnożniki) i CROPDMG, CROPDMGEXP (straty w uprawach oraz ich mnożniki). Ponieważ wartości w kolumnach PROPDMGEXP i CROPDMGEXP były zapisane jako symbole oznaczające rzędy wielkości (np. K, M, B), utworzono funkcję convert_exp(), która zamieniała te symbole na odpowiednie potęgi dziesięciu. Następnie obliczono rzeczywiste wartości strat w mieniu (PROP_DAMAGE) oraz w uprawach (CROP_DAMAGE) poprzez przemnożenie podstawowych wartości strat przez odpowiadające im przeliczniki. Podobnie jak w analizie zdrowotnej, dane zagregowano według typu zjawiska, a następnie przekształcono do formatu “długiego”, umożliwiającego czytelną wizualizację. Nazwy kategorii strat zostały przetłumaczone na język polski jako “Straty w mieniu” oraz “Straty w uprawach”.
# Przygotowanie danych ekonomicznych
economic_data <- storm_data %>%
select(EVTYPE, PROPDMG, PROPDMGEXP, CROPDMG, CROPDMGEXP)
# Funkcja konwertująca mnożniki
convert_exp <- function(exp) {
if (exp %in% c('h', 'H')) return(10^2)
if (exp %in% c('k', 'K')) return(10^3)
if (exp %in% c('m', 'M')) return(10^6)
if (exp %in% c('b', 'B')) return(10^9)
if (exp %in% c('0')) return(10^0)
if (exp %in% c('1')) return(10^1)
if (exp %in% c('2')) return(10^2)
if (exp %in% c('3')) return(10^3)
if (exp %in% c('4')) return(10^4)
if (exp %in% c('5')) return(10^5)
if (exp %in% c('6')) return(10^6)
if (exp %in% c('7')) return(10^7)
if (exp %in% c('8')) return(10^8)
else return(1)
}
# Konwersja wartości strat
economic_data <- economic_data %>%
mutate(
PROPDMGEXP = sapply(PROPDMGEXP, convert_exp),
CROPDMGEXP = sapply(CROPDMGEXP, convert_exp),
PROP_DAMAGE = PROPDMG * PROPDMGEXP,
CROP_DAMAGE = CROPDMG * CROPDMGEXP,
TOTAL_DAMAGE = PROP_DAMAGE + CROP_DAMAGE
)
# Agregacja danych
economic_summary <- economic_data %>%
group_by(EVTYPE) %>%
summarise(
Total_Property_Damage = sum(PROP_DAMAGE, na.rm = TRUE),
Total_Crop_Damage = sum(CROP_DAMAGE, na.rm = TRUE)
) %>%
mutate(
Total_Damage = Total_Property_Damage + Total_Crop_Damage
) %>%
arrange(desc(Total_Damage)) %>%
slice_head(n = 10)
# Zmiana formatu na długi
economic_long <- economic_summary %>%
select(EVTYPE, Total_Property_Damage, Total_Crop_Damage) %>%
pivot_longer(cols = c(Total_Property_Damage, Total_Crop_Damage),
names_to = "Damage_Type",
values_to = "Damage")
# Tłumaczenie nazw na polski
economic_long$Damage_Type <- recode(economic_long$Damage_Type,
"Total_Property_Damage" = "Straty w mieniu",
"Total_Crop_Damage" = "Straty w uprawach")
economic_long
## # A tibble: 20 × 3
## EVTYPE Damage_Type Damage
## <chr> <chr> <dbl>
## 1 FLOOD Straty w mieniu 144657709807
## 2 FLOOD Straty w uprawach 5661968450
## 3 HURRICANE/TYPHOON Straty w mieniu 69305840000
## 4 HURRICANE/TYPHOON Straty w uprawach 2607872800
## 5 TORNADO Straty w mieniu 56947380676.
## 6 TORNADO Straty w uprawach 414953270
## 7 STORM SURGE Straty w mieniu 43323536000
## 8 STORM SURGE Straty w uprawach 5000
## 9 HAIL Straty w mieniu 15735267513.
## 10 HAIL Straty w uprawach 3025954473
## 11 FLASH FLOOD Straty w mieniu 16822723978.
## 12 FLASH FLOOD Straty w uprawach 1421317100
## 13 DROUGHT Straty w mieniu 1046106000
## 14 DROUGHT Straty w uprawach 13972566000
## 15 HURRICANE Straty w mieniu 11868319010
## 16 HURRICANE Straty w uprawach 2741910000
## 17 RIVER FLOOD Straty w mieniu 5118945500
## 18 RIVER FLOOD Straty w uprawach 5029459000
## 19 ICE STORM Straty w mieniu 3944927860
## 20 ICE STORM Straty w uprawach 5022113500
# Wykres ofiar
ggplot(health_long, aes(x = reorder(EVTYPE, Count), y = Count, fill = Impact_Type)) +
geom_bar(stat='identity') +
coord_flip() +
labs(
x = "Typ zjawiska",
y = "Liczba osób poszkodowanych (zgony + ranni)",
fill = "Typ ofiar",
title = "Top 10 typów zjawisk pogodowych najbardziej szkodliwych\ndla zdrowia ludności w Stanach Zjednoczonych (1950–2011)"
) +
scale_fill_manual(values = c("Zgony" = "#FF6F61", "Ranni" = "#00BFC4")) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
Na podstawie wygenerowanego wykresu stwierdzono, że największy wpływ na zdrowie ludności w Stanach Zjednoczonych miały tornada. Tornada spowodowały zdecydowanie największą liczbę poszkodowanych, zarówno pod względem liczby rannych, jak i ofiar śmiertelnych. Łączna liczba ofiar tornad była ponad dziesięciokrotnie wyższa niż dla drugiego w kolejności typu zjawiska – fali upałów. W dalszej kolejności największe skutki zdrowotne powodowały: silne wiatry burzowe, powodzie oraz wyładowania atmosferyczne. Wśród pierwszej dziesiątki dominowały zjawiska związane z wiatrem i burzami, takie jak wiatr burzowy oraz burza zimowa.
W analizowanych przypadkach liczba rannych znacząco przewyższała liczbę ofiar śmiertelnych, co wskazuje na wysokie ryzyko odniesienia obrażeń przy relatywnie niższym, choć nadal istotnym, ryzyku śmierci.
Wyniki wskazują, że działania prewencyjne powinny koncentrować się przede wszystkim na ochronie przed skutkami tornad oraz fal upałów.
# Wykres strat
ggplot(economic_long, aes(x = reorder(EVTYPE, Damage), y = Damage, fill = Damage_Type)) +
geom_bar(stat='identity') +
coord_flip() +
labs(
x = "Typ zjawiska",
y = "Straty ekonomiczne (USD)",
fill = "Rodzaj strat",
title = "Top 10 typów zjawisk pogodowych powodujących największe\n straty ekonomiczne w Stanach Zjednoczonych (1950–2011)"
) +
scale_fill_manual(values = c(
"Straty w mieniu" = "#00BFC4",
"Straty w uprawach" = "#FF6F61"
)) +
theme_minimal()
Analiza strat ekonomicznych na podstawie wykresu wykazała, że największe szkody w Stanach Zjednoczonych w latach 1950–2011 spowodowały powodzie, które wygenerowały straty przekraczające 150 miliardów dolarów, znacznie przewyższając wszystkie inne typy zjawisk. Na drugim miejscu znalazły się huragany i tajfuny, które odpowiadały za bardzo wysokie koszty, głównie w wyniku zniszczeń mienia. Trzecim typem zjawiska pod względem wysokości strat były tornada, a kolejnymi: sztormowe fale przypływowe oraz grad. Wśród dziesięciu najkosztowniejszych typów zdarzeń znalazły się także: gwałtowne powodzie, susze, huragany, powodzie rzeczne oraz burze lodowe.
W większości przypadków dominowały straty w mieniu, natomiast w przypadku suszy obserwowano odwrotną sytuację — susze generowały głównie straty w uprawach, stanowiące większość łącznych strat ekonomicznych związanych z tym zjawiskiem. Wysoki udział strat w uprawach zauważono również w przypadku burzy lodowych oraz powodzi rzecznych.
Wyniki jednoznacznie wskazują, że ekstremalne zjawiska wodne, takie jak powodzie i tajfuny, były głównym źródłem strat ekonomicznych w analizowanym okresie, natomiast susze miały największy wpływ na sektor rolniczy.