# Esercizio 1 # 1) Importare il dataset [autos.csv](genuzio.di.unimi.it/materialelezioni/statistica/soluzioni/dataset/autos.csv) dati <- read.csv("soluzioni/dataset/autos.csv") # 2) Visualizzare la struttura e le prime 6 righe print(head(dati)) print(str(dati)) # 3) Modificare i dati nei seguenti modi: # * nella colonna seller: levels(dati$seller) <- c(levels(dati$seller), "privato", "negozio") dati[dati$seller == "privat", "seller"] <- "privato" dati[dati$seller == "gewerblich", "seller"] <- "negozio" dati$seller<-droplevels(dati$seller) # * nella colonna offerType: levels(dati$offerType) <- c(levels(dati$offerType),"offerta","richiesta") dati[dati$offerType == "Angebot", "offerType"] <- "offerta" dati[dati$offerType == "Gesuch", "offerType"] <- "richiesta" dati$offerType <- droplevels(dati$offerType) # * nella colonna notRepairedDamage: levels(dati$notRepairedDamage) <- c(levels(dati$notRepairedDamage),"si","no") dati[dati$notRepairedDamage == "ja", "notRepairedDamage"] <- "si" dati[dati$notRepairedDamage == "nein", "notRepairedDamage"] <- "no" dati$notRepairedDamage <- droplevels(dati$notRepairedDamage) # * nella colonna vehicleType: levels(dati$vehicleType) <- c(levels(dati$vehicleType),"limo","altro","s.w.","util.") dati[dati$vehicleType=="limousine","vehicleType"]<-"limo" dati[dati$vehicleType=="andere","vehicleType"]<-"altro" dati[dati$vehicleType=="kombi","vehicleType"]<-"s.w." dati[dati$vehicleType=="kleinwagen","vehicleType"]<-"util." dati$vehicleType <- droplevels(dati$vehicleType) # * eliminare tutte le righe con un anno di registrazione $<1900 | >= 2017$ (2 modi possibili) dati <- dati[dati$yearOfRegistration>=1900 & dati$yearOfRegistration <2017,] # * eliminare tutte le righe con prezzo superiore ai 100000 euro dati <- dati[dati$price<100000,] # 4) Contare il numero di brand di auto disponibili print(length(unique(dati$brand))) # 5) Come sono distribuiti i tipi di veicolo? Per averne un'idea # calcolare le tabelle delle frequenze assolute del tipo di veicolo tableVeicolo <- table(dati$vehicleType) print(tableVeicolo) # 6) Tracciare un diagramma a barre delle frequenze assolute del tipo di veicolo barplot(tableVeicolo) # 7) Fare un grafico a torta delle frequenze assolute del tipo di veicolo pie(tableVeicolo) # 8) Tracciare il grafico a torta dei chilometri [(Attenzione a cosa disegnate)](http://genuzio.di.unimi.it/materialelezioni/statistica/lez5.html#(37)) # Dividiamo in 5 blochhi il range di chilometri split = seq(from = min(dati$kilometer), to = max(dati$kilometer), length = 5) kilometerSplit = table(cut (dati$kilometer, split, include.lowest = TRUE)) pie(kilometerSplit , main="chilometri") # 9) Visualizzare le marche delle auto con powerPS uguale a 30 print(dati[dati$powerPS==30, "brand"]) # 10) calcolare media, max, min, primo e terzo quartile dei chilometraggi mean (dati$yearOfRegistration) range(dati$yearOfRegistration) quantile(dati$yearOfRegistration, c(0.25,0.75)) #oppure #summary (dati$yearOfRegistration) # 11) Calcolare lo scarto interquartile degli anni di registrazione (2 modi possibili) print(IQR(dati$yearOfRegistration)) #oppure #print(unname(quantile(dati$yearOfRegistration, 0.75) - quantile(dati$yearOfRegistration, 0.25))) # 12) Tracciare un istogramma e un boxplot degli anni di registrazione; i conti tornano con i dati precedenti? hist(dati$yearOfRegistration) boxplot(dati$yearOfRegistration) # 13) Visualizzare il grafico a barre dei brand con frequenza maggiore di 5000 e calcolate l'indice di Gini di questo sottoinsieme (per l'indice di Gini non usate il for) tableBrand <- table(dati$brand) barplot(tableBrand[tableBrand>5000]) brandFiltrati <- tableBrand[tableBrand>5000] print(1-sum(prop.table(brandFiltrati)*prop.table(brandFiltrati))) # 14) Calcolare la moda dei brand print(names(tableBrand[tableBrand == max(tableBrand)])) # 15) Calcolare la funzione cumulativa empirica degli anni di registrazione e plottarla cumRelYear <-cumsum(prop.table(table(dati$yearOfRegistration))) plot(as.integer(names(cumRelYear)), cumRelYear, type="b") #oppure #plot(ecdf(dati$yearOfRegistration)) #17) Contare il numero di suv dell'alfa romeo; perch?? non si pu?? usare length? print(nrow(dati[dati$vehicleType == "suv" & dati$brand == "alfa_romeo", ])) # length restituisce il numero di colonne #18) Trovare il modello di auto pi?? comune # calcoliamo le frequenze assolute, le ordiamo dalla pi?? piccola alla pi?? grande freqOrdinate <- sort(table(dati$model)) # prendiamo l'etichetta (funzione names) del valore in ultima posizione print(names(freqOrdinate[freqOrdinate==max(freqOrdinate)]))