Lekcje modułu (2/2)
Eksploracja i Agregacja
R powstał głównie jako środowisko statystyczne, w związku z czym udostępnia liczne wbudowane funkcje do analizowania, podsumowywania i rozumienia rozkładu danych w wektorach lub tabelach.
Podstawowe Funkcje Statystyczne
R pozwala z łatwością obliczać główne wskaźniki położenia i zmienności na wektorach liczbowych:
mean(x): Oblicza średnią arytmetyczną elementów.median(x): Oblicza medianę (wartość środkową).sd(x): Oblicza odchylenie standardowe (miarę rozproszenia danych).min(x)imax(x): Zwracają odpowiednio wartość minimalną i maksymalną.
values <- c(10, 12, 15, 18, 20, 22)
avg <- mean(values)
dispersion <- sd(values)
cat("Średnia:", avg, "- Odch. std:", round(dispersion, 2), "\n")
Obsługa Brakujących Danych (NA)
W rzeczywistym świecie zestawy danych często zawierają brakujące wartości, reprezentowane w R przez specjalną wartość NA (Not Available).
Jeśli spróbujesz obliczyć średnią lub jakikolwiek inny agregat na wektorze, który zawiera chociażby jedną wartość NA, R zwróci NA jako wynik. Aby zignorować brakujące wartości, musisz przekazać argument logiczny na.rm = TRUE (NA remove):
temperatures <- c(18, 21, NA, 24, 19)
# To zwróci NA
print(mean(temperatures))
# To zignoruje NA i wykona obliczenia na poprawnych wartościach
print(mean(temperatures, na.rm = TRUE))
Globalne Podsumowanie za Pomocą summary()
Funkcja summary() to potężne narzędzie, które zapewnia kompletny przegląd statystyczny wektora lub całej ramki danych (Data Frame), pokazując minimum, pierwszy kwartyl, medianę, średnią, trzeci kwartyl oraz maksimum:
prices <- c(5, 10, 15, 20, 100)
print(summary(prices))
Agregacja Danych z aggregate
Podczas pracy z ramkami danych często chcemy obliczyć statystyki podsumowujące (takie jak średnia lub suma) dla grup lub kategorii. Funkcja aggregate() w R upraszcza ten proces:
df <- data.frame(
department = c("HR", "IT", "HR", "IT"),
salary = c(3000, 4500, 3200, 4800)
)
# Oblicza średnią pensję dla każdego działu
avg_salaries <- aggregate(salary ~ department, data = df, FUN = mean)
print(avg_salaries)
Składnia salary ~ department oznacza „analizuj zmienną salary w zależności od zmiennej department”. Argument FUN = mean określa, że chcemy obliczyć średnią arytmetyczną dla każdej grupy.
Zaawansowane Filtrowanie z subset
Funkcja subset() zapewnia intuicyjny i elegancki sposób wyodrębniania podzbiorów wierszy i kolumn z ramki danych, unikając stosowania skomplikowanych nawiasów kwadratowych:
employees <- data.frame(
name = c("Alice", "Bob", "Charlie"),
age = c(25, 34, 29),
active = c(TRUE, FALSE, TRUE)
)
# Filtruje tylko aktywnych pracowników w wieku powyżej 28 lat
active_employees <- subset(employees, active == TRUE & age > 28)
Spróbuj sam
Dla danego wektora temperatures, oblicz średnią i zapisz ją w zmiennej mean_temp. Następnie oblicz medianę i zapisz ją w median_temp.
Pokaż wskazówkę
Użyj mean_temp <- mean(temperatures) i median_temp <- median(temperatures)
Rozwiązanie dostępne po 3 próbach
Dla danego wektora scores zawierającego wartość NA, oblicz odchylenie standardowe wektora z wyłączeniem brakujących wartości i zapisz je w zmiennej sd_scores.
Pokaż wskazówkę
Użyj funkcji sd() z argumentem na.rm = TRUE: sd_scores <- sd(scores, na.rm = TRUE)
Rozwiązanie dostępne po 3 próbach
Dla danej ramki danych df, uzyskaj podsumowanie statystyczne (summary) kolumny values i zapisz je w zmiennej stats_summary.
Pokaż wskazówkę
Wyodrębnij kolumnę za pomocą operatora $ i przekaż ją do summary(): stats_summary <- summary(df$values)
Rozwiązanie dostępne po 3 próbach
Dla danej ramki danych sales, użyj funkcji aggregate() do obliczenia sumy (FUN = sum) kolumny revenue pogrupowanej według region. Zapisz wynik w region_sales.
Pokaż wskazówkę
Użyj: region_sales <- aggregate(revenue ~ region, data = sales, FUN = sum)
Rozwiązanie dostępne po 3 próbach
Dla danej ramki danych products, użyj funkcji subset() do przefiltrowania tylko produktów, które należą do kategorii 'Electronics' (category == 'Electronics') i mają cenę większą niż 100 (price > 100). Zapisz wynik w zmiennej expensive_electronics.
Pokaż wskazówkę
Użyj: expensive_electronics <- subset(products, category == 'Electronics' & price > 100)
Rozwiązanie dostępne po 3 próbach