Analiza danych dotyczących zjawisk meteorologicznych opiera się na badaniu wpływu różnych typów katastrof na zdrowie ludzkie oraz szkody materialne w Stanach Zjednoczonych. Skupiliśmy się na danych z bazy NOAA, koncentrując się na liczbie ofiar śmiertelnych i rannych, a także na stratach finansowych związanych z uszkodzeniami mienia i upraw. Badanie wykazało, że tornado jest najczęściej występującym i najbardziej śmiercionośnym zjawiskiem, powodującym liczne ofiary śmiertelne oraz rany. Następnie, powodzie okazały się jednym z najgroźniejszych zjawisk pod względem liczby rannych. Pod względem największego wpływu materialnego w postaci szkód finansowych, powodzie, huragany oraz tornada stanowią główne źródła strat. Powodzie generują ogromne straty w mieniu, huragany prowadzą do dużych zniszczeń w infrastrukturze, a tornada powodują ogromne straty w różnych regionach. Przeprowadzono również konwersję danych, aby ujednolicić jednostki i ułatwić porównanie między różnymi typami szkód. Szczególne wnioski płyną także z analizy proporcji szkód – top 3 zdarzenia odpowiadają za znaczną część łącznych strat finansowych. Dzięki wizualizacjom w postaci wykresów, analiza ta pozwala na łatwe porównanie zarówno wpływu na zdrowie, jak i skutków finansowych poszczególnych katastrof. Wyniki sugerują potrzebę zwiększenia działań prewencyjnych w regionach szczególnie narażonych na ekstremalne zjawiska atmosferyczne. Przeprowadzone analizy stanowią cenne narzędzie w ocenie ryzyka i planowaniu działań ochronnych.
Dane są wczytywane bezpośrednio z pliku cv2.bz2 przy pomocy biblioteki readr
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.
head(data)
## # A tibble: 6 × 37
## STATE__ BGN_DATE BGN_TIME TIME_ZONE COUNTY COUNTYNAME STATE EVTYPE BGN_RANGE
## <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> <chr> <dbl>
## 1 1 4/18/1950… 0130 CST 97 MOBILE AL TORNA… 0
## 2 1 4/18/1950… 0145 CST 3 BALDWIN AL TORNA… 0
## 3 1 2/20/1951… 1600 CST 57 FAYETTE AL TORNA… 0
## 4 1 6/8/1951 … 0900 CST 89 MADISON AL TORNA… 0
## 5 1 11/15/195… 1500 CST 43 CULLMAN AL TORNA… 0
## 6 1 11/15/195… 2000 CST 77 LAUDERDALE AL TORNA… 0
## # ℹ 28 more variables: BGN_AZI <chr>, BGN_LOCATI <chr>, END_DATE <chr>,
## # END_TIME <chr>, COUNTY_END <dbl>, COUNTYENDN <lgl>, END_RANGE <dbl>,
## # END_AZI <chr>, END_LOCATI <chr>, LENGTH <dbl>, WIDTH <dbl>, F <dbl>,
## # MAG <dbl>, FATALITIES <dbl>, INJURIES <dbl>, PROPDMG <dbl>,
## # PROPDMGEXP <chr>, CROPDMG <dbl>, CROPDMGEXP <chr>, WFO <chr>,
## # STATEOFFIC <chr>, ZONENAMES <chr>, LATITUDE <dbl>, LONGITUDE <dbl>,
## # LATITUDE_E <dbl>, LONGITUDE_ <dbl>, REMARKS <chr>, REFNUM <dbl>
Dodajemy kolumnę zsumowującą liczbę osób zranionych i zabitych
data <- data %>%
mutate(FATAL_OR_INJURED = FATALITIES + INJURIES)
data$FATAL_OR_INJURED[1:5]
## [1] 15 0 2 2 2
Podsumowanie wpływu na zdrowie 10 najbardziej wpływowych zjawisk
danger_summary <- data %>%
group_by(EVTYPE) %>%
summarise(FATAL_OR_INJURED = sum(FATAL_OR_INJURED, na.rm = TRUE)) %>%
arrange(desc(FATAL_OR_INJURED)) %>%
slice(1:10)
Dodajemy kolumny ujednolicające wartości zniszczeń mienia oraz wartości zniszczeń upraw(w miliardach USD). Dodatkowo tworzymy kolumnę zsumowującą dwie poprzednie
convert_to_billions <- function(value, exp) {
exp <- toupper(exp)
multiplier <- case_when(
exp == "K" ~ 1e-6,
exp == "M" ~ 1e-3,
exp == "B" ~ 1,
TRUE ~ 1e-6
)
return(value * multiplier)
}
data <- data %>%
mutate(
PROPDMG_B = convert_to_billions(PROPDMG, PROPDMGEXP),
CROPDMG_B = convert_to_billions(CROPDMG, CROPDMGEXP),
TOTAL_DAMAGE_B = PROPDMG_B + CROPDMG_B
)
data[1:5, c("PROPDMG_B", "CROPDMG_B")]
## # A tibble: 5 × 2
## PROPDMG_B CROPDMG_B
## <dbl> <dbl>
## 1 0.000025 0
## 2 0.0000025 0
## 3 0.000025 0
## 4 0.0000025 0
## 5 0.0000025 0
Podsumowanie szkód wykonanych przez 10 najbardziej wpływowych zjawisk
damage_summary <- data %>%
group_by(EVTYPE) %>%
summarise(TOTAL_DAMAGE_B = sum(TOTAL_DAMAGE_B, na.rm = TRUE)) %>%
arrange(desc(TOTAL_DAMAGE_B)) %>%
slice(1:10)
Wykresy obrazujące ilość rannych i śmierci w zależności od rodzaju zjawiska
ggplot(danger_summary, aes(x = reorder(EVTYPE, FATAL_OR_INJURED), y=FATAL_OR_INJURED)) +
geom_bar(stat = "identity", fill = "steelblue") +
coord_flip() +
labs(
title = "Top 10 katastrof wg ilości rannych i śmierci",
x = "Typ zdarzenia",
y = "Liczba rannych i śmierci"
) +
theme_minimal()
Procent śmierci i rannych generowanych przez najistotniejsze
zjawistko
top_1_event <- danger_summary %>%
slice(1)
total_damage_all <- sum(danger_summary$FATAL_OR_INJURED, na.rm = TRUE)
# Krok 4: Oblicz procent szkód generowanych przez top 1 zdarzenie
top_1_percentage <- (top_1_event$FATAL_OR_INJURED / total_damage_all) * 100
# Krok 5: Drukowanie wyników z tekstem
cat("Procent śmierci i rannych generowanych przez top 1 zdarzenie (", top_1_event$EVTYPE, "): ", round(top_1_percentage, 2), "%\n")
## Procent śmierci i rannych generowanych przez top 1 zdarzenie ( TORNADO ): 70.7 %
Wykresy obrazujące ilość szkód materialnych w zależności od rodzaju zjawiska
ggplot(damage_summary, aes(x = reorder(EVTYPE, TOTAL_DAMAGE_B), y=TOTAL_DAMAGE_B)) +
geom_bar(stat = "identity", fill = "steelblue") +
coord_flip() +
labs(
title = "Top 10 katastrof wg wartości szkód (w miliardach USD)",
x = "Typ zdarzenia",
y = "Suma szkód (mld USD)"
) +
theme_minimal()
Procent szkód generowanych przez najistotniesze zjawiska
top_3_events <- damage_summary %>%
slice(1:3)
total_damage_all <- sum(damage_summary$TOTAL_DAMAGE_B, na.rm = TRUE)
top_3_percentage <- sum(top_3_events$TOTAL_DAMAGE_B) / total_damage_all * 100
cat("Procent szkód generowanych przez top 3 zdarzenia:(", top_3_events$EVTYPE[1], ",",
top_3_events$EVTYPE[2], ",",
top_3_events$EVTYPE[3], ") :",
round(top_3_percentage, 2), "%\n")
## Procent szkód generowanych przez top 3 zdarzenia:( FLOOD , HURRICANE/TYPHOON , TORNADO ) : 68.53 %
Analiza pokazuje, że najniebezpieczniejszym zjawiskiem dla zdrowia ludzi są tornada, odpowiadają one za 70% wszystkich wypadków. Największy wpływ na stan materialny mają powodzie, huragany i tornada. Ich sumaryczny wpływ to 68.5% wszystkich zjawisk.