R Markdown
library(dplyr)
## Warning: pakiet 'dplyr' został zbudowany w wersji R 4.5.2
##
## Dołączanie pakietu: 'dplyr'
## Następujące obiekty zostały zakryte z 'package:stats':
##
## filter, lag
## Następujące obiekty zostały zakryte z 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
## Warning: pakiet 'tidyr' został zbudowany w wersji R 4.5.2
library(ggplot2)
## Warning: pakiet 'ggplot2' został zbudowany w wersji R 4.5.2
list.files()
## [1] "analiza_klimatu.Rproj" "Analiza_klimatyczna.html"
## [3] "Analiza_klimatyczna.log" "Analiza_klimatyczna.Rmd"
## [5] "Analiza_klimatyczna.tex" "data"
col_names <- c(
"Kod_stacji",
"Nazwa_stacji",
"Rok",
"Miesiac",
"Miesieczna_suma_opadow",
"Status_pomiaru_SUMM",
"Liczba_dni_z_opadem_sniegu",
"Status_pomiaru_LDS",
"Opad_maksymalny",
"Status_pomiaru_MAXO",
"Dzien_pierwszy_opad",
"Dzien_ostatni_opad",
"Liczba_dni_z_pokrywa_sniezna",
"Status_pomiaru_LDPS"
)
files_list <- list.files(path="data",pattern = "\\.csv$", full.names = TRUE)
# Sprawdzenie, ile plików znaleziono
print(paste("Znaleziono plików do wczytania:", length(files_list)))
## [1] "Znaleziono plików do wczytania: 21"
# Funkcja lapply, read.csv dla każdego pliku z files_list.
data_list <- lapply(files_list, read.csv,
header = FALSE, # W plikach nie ma nagłówków
col.names = col_names, # Użyj zdefiniowanych nazw
sep = ",", # Pliki są rozdzielone przecinkami
stringsAsFactors = FALSE,
# Zastąp kody braku danych na NA (zgodnie z opisem 99999/999.9 i inne kody)
na.strings = c("99999", "999.9", "9999", "99.9", "99", "NA", ""))
# 4. Połączenie wszystkich ramek danych w jedną, dużą tabelę (df_raw)
df_raw <- bind_rows(data_list)
message(paste("Dane są wczytane i połączone. Łączna liczba wierszy:", nrow(df_raw)))
## Dane są wczytane i połączone. Łączna liczba wierszy: 202667
df_cleaned <- df_raw %>%
# Użycie funkcji mutate do zmiany i tworzenia nowych kolumn
mutate(
# Zmiana formatu dla sumy opadów
Miesieczna_suma_opadow = as.numeric(gsub(",", ".", Miesieczna_suma_opadow)),
# Zmiana formatu dla dni ze śniegiem
Liczba_dni_z_opadem_sniegu = as.numeric(gsub(",", ".", Liczba_dni_z_opadem_sniegu)),
# Konwersja Roku i Miesiąca na liczby całkowite
Rok = as.integer(Rok),
Miesiac = as.integer(Miesiac)
) %>%
# 1. Wybór tylko potrzebnych kolumn (selekcja)
select(Nazwa_stacji, Rok, Miesiac, Miesieczna_suma_opadow, Liczba_dni_z_opadem_sniegu)
message("Kolumny zostały wyczyszczone i wybrane.")
## Kolumny zostały wyczyszczone i wybrane.
df_processed <- df_cleaned %>%
# Używamy mutate do dodania nowej kolumny 'hydro_year'
mutate(
# Jeśli miesiąc to 11 (Listopad) lub 12 (Grudzień),
# to hydro_year jest równy Rok + 1.
# Dla pozostałych miesięcy (1-10) jest równy Rok.
hydro_year = ifelse(Miesiac %in% c(11, 12), Rok + 1, Rok)
) %>%
# Ograniczenie do zakresu z zadania: pełne lata hydrologiczne 2003-2023
filter(hydro_year >= 2003 & hydro_year <= 2023)
message("Zdefiniowano kolumnę 'hydro_year' i wybrano właściwy zakres lat.")
## Zdefiniowano kolumnę 'hydro_year' i wybrano właściwy zakres lat.
analiza_hydro <- df_processed %>%
# 1. Grupujemy po roku hydrologicznym ORAZ nazwie stacji
group_by(hydro_year, Nazwa_stacji) %>%
summarise(
# Obliczamy roczną SUMĘ opadów dla tej stacji
Suma_opadow_roczna = sum(Miesieczna_suma_opadow, na.rm = TRUE),
# Obliczamy roczną SUMĘ dni ze śniegiem dla tej stacji
Suma_dni_snieg_roczna = sum(Liczba_dni_z_opadem_sniegu, na.rm = TRUE),
.groups = 'drop' # Usuwamy grupowanie po stacji
) %>%
# 2. Następnie grupujemy tylko po roku hydrologicznym
group_by(hydro_year) %>%
summarise(
# Obliczamy ŚREDNIĄ z rocznych sum opadów ze WSZYSTKICH stacji
Srednia_suma_opadow = mean(Suma_opadow_roczna, na.rm = TRUE),
# Obliczamy ŚREDNIĄ z rocznych sum dni ze śniegiem ze WSZYSTKICH stacji
Srednia_liczba_dni_snieg = mean(Suma_dni_snieg_roczna, na.rm = TRUE)
)
message("Obliczono statystyki: Srednia_suma_opadow i Srednia_liczba_dni_snieg.")
## Obliczono statystyki: Srednia_suma_opadow i Srednia_liczba_dni_snieg.
library(ggplot2)
# Wykres 1 - średnia suma opadów (Y) w funkcji roku hydrologicznego (X)
wykres1 <- analiza_hydro %>%
ggplot(aes(x = hydro_year, y = Srednia_suma_opadow)) +
# Linia i punkty dla danych rocznych
geom_line(color = "darkblue", linewidth = 1) +
geom_point(color = "darkblue", size = 2) +
# Dodanie trendu liniowego (regresja liniowa)
geom_smooth(method = 'lm', se = FALSE, color = "red", linetype = "dashed") +
labs(
title = "Trend średniej rocznej sumy opadów (hydro_year 2003-2023)",
x = "Rok hydrologiczny",
y = "Średnia roczna suma opadów [mm]"
) +
theme_minimal()
print(wykres1)
## `geom_smooth()` using formula = 'y ~ x'

# Wykres 2 - średnia liczba dni ze śniegiem (Y) w funkcji roku hydrologicznego (X)
wykres2 <- analiza_hydro %>%
ggplot(aes(x = hydro_year, y = Srednia_liczba_dni_snieg)) +
# Linia i punkty dla danych rocznych
geom_line(color = "darkgreen", linewidth = 1) +
geom_point(color = "darkgreen", size = 2) +
# Dodanie trendu liniowego (regresja liniowa)
geom_smooth(method = 'lm', se = FALSE, color = "red", linetype = "dashed") +
labs(
title = "Trend średniej rocznej liczby dni z opadem śniegu (hydro_year 2003-2023)",
x = "Rok hydrologiczny",
y = "Średnia roczna liczba dni z opadem śniegu"
) +
theme_minimal()
print(wykres2)
## `geom_smooth()` using formula = 'y ~ x'
