Data Analytics
Da Dati Variabili
Data Analysis## ============================================================================
## DATA ANALYSIS — Lezione 1
## Dati, popolazioni e tipi di variabili
## ============================================================================
# 1. CARICARE E ISPEZIONARE UN DATASET ----
library(insuranceData)
data("AutoBi")
str(AutoBi) # struttura: tipo di ogni variabile
head(AutoBi) # prime 6 righe
head(AutoBi, 10) # prime 10 righe
summary(AutoBi) # statistiche di sintesi (adattive al tipo)
# Accesso a una colonna
AutoBi$LOSS
AutoBi[, "LOSS"] # equivalente
# Numero di righe e colonne
nrow(AutoBi)
ncol(AutoBi)
dim(AutoBi)
# 2. TIPI DI VARIABILI ----
# AutoBi contiene variabili di tipo diverso:
# ATTORNEY, CLMSEX, MARITAL, CLMINSUR, SEATBELT → qualitative (ma codificate come int)
# CLMAGE → quantitativa discreta
# LOSS → quantitativa continua
# Verificare il tipo di una colonna
class(AutoBi$LOSS)
class(AutoBi$ATTORNEY)
is.numeric(AutoBi$ATTORNEY) # TRUE, ma è concettualmente qualitativa
is.factor(AutoBi$ATTORNEY) # FALSE → occorre trasformarla
# MAtrici dei dati e data frame
neo <- read.csv("neonati.csv", sep = ";", header = TRUE)
head(neo)
str(neo)
# 3. TRASFORMARE IN FATTORE ----
# factor() converte in fattore; i NA rimangono NA
AutoBi$ATTORNEY <- factor(AutoBi$ATTORNEY)
levels(AutoBi$ATTORNEY) # livelli attuali: "1" "2"
levels(AutoBi$ATTORNEY) <- c("yes", "no") # rinomina i livelli
str(AutoBi$ATTORNEY)
summary(AutoBi$ATTORNEY)
# Stesso schema per CLMSEX
AutoBi$CLMSEX <- factor(AutoBi$CLMSEX)
levels(AutoBi$CLMSEX) <- c("M", "F")
# Stesso schema per MARITAL (4 modalità)
AutoBi$MARITAL <- factor(AutoBi$MARITAL)
levels(AutoBi$MARITAL) # "1" "2" "3" "4"
levels(AutoBi$MARITAL) <- c("married", "single",
"widowed", "divorced")
str(AutoBi$MARITAL)
nlevels(AutoBi$MARITAL) # numero di livelli
# 4. ACCORPARE CATEGORIE ----
# Assegnando la stessa etichetta a due livelli, essi vengono accorpati
levels(AutoBi$MARITAL) <- c("married", "single",
"previouslymarried", "previouslymarried")
levels(AutoBi$MARITAL)
table(AutoBi$MARITAL) # ora ci sono 3 livelli
# 5. CLASSI DI VALORI: cut() ----
# cut() converte una variabile numerica in un fattore ordinato
# Notazione (a, b]: aperto a sinistra, chiuso a destra
range(AutoBi$CLMAGE, na.rm = TRUE) # range prima di scegliere i breaks
# 5a. Classi di uguale ampiezza (R sceglie gli estremi)
CLMAGEclass <- cut(AutoBi$CLMAGE, breaks = 6)
levels(CLMAGEclass)
table(CLMAGEclass)
# 5b. Classi di ampiezza personalizzata
CLMAGEclass <- cut(AutoBi$CLMAGE,
breaks = c(-1, 15, 24, 36, 50, 95))
levels(CLMAGEclass)
table(CLMAGEclass)
# Attenzione: valori fuori dagli estremi → NA
sum(is.na(CLMAGEclass))
# include.lowest = TRUE: include il valore minimo nella prima classe
cut(AutoBi$CLMAGE, breaks = c(0, 15, 24, 36, 50, 95),
include.lowest = TRUE)
# Si può usare Inf/-Inf per includere tutti i valori
cut(AutoBi$CLMAGE, breaks = c(-Inf, 15, 36, Inf))
# 5c. Classi ai quartili
LOSSclass_q <- cut(AutoBi$LOSS,
breaks = quantile(AutoBi$LOSS),
include.lowest = TRUE)
table(LOSSclass_q) # ~stesso numero di osservazioni per classe
# 6. DATASET Cars93 ----
library(MASS)
data("Cars93")
str(Cars93)
?Cars93 # descrizione delle variabili
# ESERCIZI ----
## Esercizio 1 ─ Classificazione variabili
# Classifica le seguenti variabili di Cars93:
# Type, Price, MPG.city, Cylinders, Origin, AirBags
str(Cars93[, c("Type","Price","MPG.city","Cylinders","Origin","AirBags")])
# Type qualitativa nominale
# Price quantitativa continua
# MPG.city quantitativa discreta
# Cylinders quantitativa discreta
# Origin qualitativa sconnessa
# AirBags qualitativa ordinale
## Esercizio 2 ─ Fattori e ricodifica
# Trasforma CLMINSUR e SEATBELT in fattori con etichette leggibili
# (dalla documentazione: 1 = sì, 2 = no per entrambe)
AutoBi$CLMINSUR <- factor(AutoBi$CLMINSUR)
levels(AutoBi$CLMINSUR) <- c("yes", "no")
AutoBi$SEATBELT <- factor(AutoBi$SEATBELT)
levels(AutoBi$SEATBELT) <- c("yes", "no")
str(AutoBi[, c("CLMINSUR","SEATBELT")])
## Esercizio 3 ─ Classi di valori
# Crea una variabile LOSSclass_q usando i quartili di LOSS come breaks
AutoBi$LOSSclass_q <- cut(AutoBi$LOSS,
breaks = quantile(AutoBi$LOSS),
include.lowest = TRUE)
table(AutoBi$LOSSclass_q)
levels(AutoBi$LOSSclass_q)
## Esercizio 4
# Un codice postale (es. 34121) è qualitativo o quantitativo?
# Cosa succede se un valore cade fuori dai breaks di cut()?
x <- c(1, 5, 10, 15, 100)
cut(x, breaks = c(0, 5, 10, 20))