Lezioni del modulo (2/2)
Esplorazione e Aggregazione
R nasce principalmente come ambiente statistico, di conseguenza mette a disposizione numerose funzioni native per analizzare, riassumere e comprendere la distribuzione dei dati in vettori o tabelle.
Funzioni Statistiche di Base
R consente di calcolare con estrema facilità i principali indici di centralità e variabilità su vettori numerici:
mean(x): Calcola la media aritmetica degli elementi.median(x): Calcola la mediana (il valore centrale).sd(x): Calcola la deviazione standard (misura della dispersione dei dati).min(x)emax(x): Restituiscono rispettivamente il valore minimo e massimo.
values <- c(10, 12, 15, 18, 20, 22)
avg <- mean(values)
dispersion <- sd(values)
cat("Media:", avg, "- Dev. Std:", round(dispersion, 2), "\n")
Gestione dei Dati Mancanti (NA)
Nel mondo reale, i dataset contengono spesso valori mancanti, rappresentati in R dall'entità speciale NA (Not Available).
Se provi a calcolare la media o qualsiasi altro aggregato su un vettore che contiene anche solo un NA, R restituirà NA come risultato. Per ignorare i valori mancanti, devi passare l'argomento logico na.rm = TRUE (NA remove):
temperatures <- c(18, 21, NA, 24, 19)
# Questo restituirà NA
print(mean(temperatures))
# Questo ignorerà l'NA ed effettuerà il calcolo sui valori validi
print(mean(temperatures, na.rm = TRUE))
Riepilogo Globale con summary()
La funzione summary() è uno strumento potente che fornisce una panoramica statistica completa di un vettore o di un intero Data Frame, mostrando min, primo quartile, mediana, media, terzo quartile e max:
prices <- c(5, 10, 15, 20, 100)
print(summary(prices))
Aggregazione dei Dati con aggregate
Quando si lavora con data frame, è comune voler calcolare statistiche di riepilogo (come la media o la somma) per gruppi o categorie. La funzione aggregate() in R semplifica questo processo:
df <- data.frame(
department = c("HR", "IT", "HR", "IT"),
salary = c(3000, 4500, 3200, 4800)
)
# Calcola la media dei salari per dipartimento
avg_salaries <- aggregate(salary ~ department, data = df, FUN = mean)
print(avg_salaries)
La sintassi salary ~ department significa "analizza la variabile salary in base alla variabile department". L'argomento FUN = mean specifica che vogliamo calcolare la media aritmetica di ciascun gruppo.
Filtraggio Avanzato con subset
La funzione subset() fornisce un modo intuitivo ed elegante per estrarre sottoinsiemi di righe e colonne da un data frame, evitando l'uso di parentesi quadre complesse:
employees <- data.frame(
name = c("Alice", "Bob", "Charlie"),
age = c(25, 34, 29),
active = c(TRUE, FALSE, TRUE)
)
# Filtra solo i dipendenti attivi con età superiore a 28
active_employees <- subset(employees, active == TRUE & age > 28)
Prova tu
Dato il vettore temperatures, calcola la media e salvala nella variabile mean_temp. Calcola poi la mediana e salvala in median_temp.
Mostra suggerimento
Usa mean_temp <- mean(temperatures) e median_temp <- median(temperatures)
Soluzione disponibile dopo 3 tentativi
Dato il vettore scores contenente un valore NA, calcola la deviazione standard del vettore escludendo i valori mancanti, e salvala nella variabile sd_scores.
Mostra suggerimento
Usa la funzione sd() con l'argomento na.rm = TRUE: sd_scores <- sd(scores, na.rm = TRUE)
Soluzione disponibile dopo 3 tentativi
Dato il data frame df, ottieni il riepilogo statistico (summary) della colonna values e salvalo nella variabile stats_summary.
Mostra suggerimento
Estrai la colonna usando l'operatore $ e passala a summary(): stats_summary <- summary(df$values)
Soluzione disponibile dopo 3 tentativi
Dato il data frame sales, usa la funzione aggregate() per calcolare la somma (FUN = sum) della colonna revenue raggruppata per la colonna region. Salva il risultato nella variabile region_sales.
Mostra suggerimento
Usa: region_sales <- aggregate(revenue ~ region, data = sales, FUN = sum)
Soluzione disponibile dopo 3 tentativi
Dato il data frame products, usa la funzione subset() per filtrare solo i prodotti che appartengono alla categoria 'Electronics' (category == 'Electronics') e che hanno un prezzo maggiore di 100 (price > 100). Salva il risultato nella variabile expensive_electronics.
Mostra suggerimento
Usa: expensive_electronics <- subset(products, category == 'Electronics' & price > 100)
Soluzione disponibile dopo 3 tentativi