Data Analytics

Intro R Esercizio Data Frame Auto Bi

Introduzione ad R
RCode2IntroR_Esercizio-DataFrame-AutoBi.R
# Esempio/Esercizio riassuntivo Data Frame

# Installazione/Caricamento pacchetti e dati ----
install.packages("insuranceData") # solo una volta
library(insuranceData)
data(AutoBi)
help("AutoBi")

# Struttura, variabili, dimensionalità, alcune osservazioni ----
str(AutoBi)
names(AutoBi)
dim(AutoBi)
nrow(AutoBi)
ncol(AutoBi)
head(AutoBi, n = 10)

# La funzione summary ----
# Rimuoviamo la prima colonna 
AutoBi <- AutoBi[,-1]

summary(AutoBi)

# Conversione variabili numeriche in factor ----

# Creiamo due copie: una per R base, una per dplyr ----
Auto_rbase <- Auto_dplyr <- AutoBi
## R base ----

Auto_rbase[, 1:5] <- as.data.frame(sapply(Auto_rbase[, 1:5], 
                                          factor),
                                   stringsAsFactors =  T)
str(Auto_rbase)
## dplyr ----
library(dplyr)
Auto_dplyr <- Auto_dplyr |> 
  mutate(across(1:5, factor))
Auto_dplyr <- Auto_dplyr |> 
  mutate(across(ATTORNEY:SEATBELT, factor))

str(Auto_dplyr)  


# Selezione di colonne per tipo di variabile ----
# Selezione variabili numeriche (CLMAGE e LOSS)
## R base —--- 
Auto_rbase[, c("CLMAGE", "LOSS")]

## dplyr ----
Auto_dplyr |> select(CLMAGE, LOSS)

# Selezione di una variabile e filtraggio per condizioni logiche ----

## Variabile CLMAGE per soggetti con età < 20 anni ----
Auto_rbase[Auto_rbase$CLMAGE<20, "CLMAGE"]


### R base (la funzione subset) ----
subset(Auto_rbase, subset = CLMAGE < 20, select = CLMAGE)


### dplyr ----
str(Auto_dplyr |> select(CLMAGE) |> filter(CLMAGE < 20))

# Esercizio veloce: differenza tra i due comandi
str(Auto_rbase$CLMAGE[Auto_rbase$CLMAGE < 20])
str(subset(Auto_rbase, subset = CLMAGE < 20, select = CLMAGE))

## Donne < 40 anni, sposate o divorziate, con LOSS > 5 ----

### R base ----
subset(Auto_rbase, subset = CLMSEX == 2 & CLMAGE < 40 & 
         (MARITAL == 1 | MARITAL == 4) & LOSS > 5, 
       select = c("CLMAGE", "LOSS"))

### dplyr ----
Auto_dplyr |> filter(CLMSEX == 2 & CLMAGE < 40 & 
                       (MARITAL == 1 | MARITAL == 4) & LOSS > 5)|> 
  select(CLMAGE, LOSS)
    

## MARITAL e CLMINSUR per soggetti con ATTORNEY == 1, senza NA ----

### R base ----
Auto_rbase_sub <-  subset(Auto_rbase, subset = ATTORNEY == 1, 
       select = c("MARITAL", "CLMINSUR"))

colSums(is.na(Auto_rbase_sub))

Auto_rbase_sub <- na.omit(Auto_rbase_sub)
colSums(is.na(Auto_rbase_sub))
any(is.na(Auto_rbase_sub))

str(Auto_rbase_sub)
### dplyr ----
Auto_dplyr_sub <-   Auto_dplyr |> 
  filter(ATTORNEY == 1) |> 
  select(MARITAL, CLMINSUR) |> 
  na.omit()
str(Auto_dplyr_sub)

# Aggiungere colonne ----

## Logaritmo di LOSS ----

### R base ----
Auto_rbase$LOGloss <- log(Auto_rbase$LOSS)

### dplyr ----
Auto_dplyr <- Auto_dplyr |> mutate(LOGloss = log(LOSS))

str(Auto_rbase)

str(Auto_dplyr)

## Divisione di LOSS in classi con cut() ----

### R base ---
Auto_rbase$LOSS_cat <- cut(Auto_rbase$LOSS, 
    breaks = c(0.005, 0.640, 2.331, 3.995, 1067.697),
    labels = c("Very Low", "Low", "High", "Very High"),
    include.lowest = T,
    right = F)
str(Auto_rbase)

table(Auto_rbase$LOSS_cat)


### dplyr ----
Auto_dplyr <- Auto_dplyr|> 
  mutate(LOSS_cat = cut(LOSS, 
                            breaks = c(0.005, 0.640, 2.331, 3.995, 1067.697),
                            labels = c("Very Low", "Low", "High", "Very High"),
                            include.lowest = T,
                            right = F))
str(Auto_dplyr)

table(Auto_dplyr$LOSS_cat)

Auto_dplyr|> count(LOSS_cat)

# Esercizio veloce
Auto_dplyr <- Auto_dplyr |> 
  mutate(CLMAGE_cat = cut(CLMAGE, 
                          breaks = c(0,18,67,95),
                          labels = c("Under18", "Working", "Retirement"),
                          include.lowest = T))

Auto_dplyr|> count(CLMAGE_cat)