Data Analytics
Importazione Dataset
Introduzione ad R# Importazione dataset
# Working Directory ----
getwd()
setwd("impostare la cartella di lavoro")
# Importazione dati ----
## read.table() e read.csv() ----
### Lettura food_coded1 ----
### File CSV con separatore virgola (default)
Food <- read.csv(file = "importazione dataset/food_coded1.csv")
str(Food)
# Equivalente a
Food <- read.csv(file = "importazione dataset/food_coded1.csv",
header = T, sep = ",", dec = ".")
str(Food)
# File CSV con separatore punto e virgola (comune nei file italiani):
#Food <- read.csv(file = "importazione dataset/food_coded1.csv",
# header = T, sep = ";", dec = ".")
#str(Food)
### Lettura cigarette ----
# File .txt senza intestazione
cigarette <- read.table("importazione dataset/cigarette.txt", header = FALSE)
str(cigarette)
# Equivalente con read.csv (bisogna considerare sep = "")
# cigarette <- read.csv("importazione dataset/cigarette.txt", header = FALSE,
# sep = "")
# str(cigarette)
### Lettura cipolle ----
# File .dat con header e conversione automatica character → factor
cipolle <- read.table("importazione dataset/cipolle.dat", header = T,
stringsAsFactors = T)
str(cipolle)
# Equivalente con read.csv (bisogna considerare sep = "")
# cipolle <- read.csv("importazione dataset/cipolle.dat", header = T,
# stringsAsFactors = T, sep = "")
# str(cipolle)
### Lettura macchine ----
# File .data con valori mancanti codificati come "?"
macchine <- read.csv("importazione dataset/macchine/macchine.data",
header = F, na.strings = "?")
str(macchine)
### Lettura windmill ----
# File con separatore decimale virgola (comune in Europa)
windmill <- read.table("importazione dataset/windmill.txt", header = T, dec =",")
str(windmill)
# Equivalente con read.csv (bisogna considerare sep = "")
windmill <- read.csv("importazione dataset/windmill.txt",
header = T,
sep ="",
dec = ",")
str(windmill)
# File xlsx (richiede openxlsx)
# install.packages("openxlsx")
# library(openxlsx)
# dati <- read.xlsx("<percorso/file>.xlsx")
## Colonna indice indesiderata ----
# In lettura: usa la prima colonna come nomi riga
# dati <- read.csv("file.csv", row.names = 1)
# Oppure: rimuovi la colonna dopo la lettura
# dati <- dati[, -1]
# dati$X <- NULL
# Food dataset ----
## Esplorazione iniziale ----
Food <- read.csv("importazione dataset/food_coded1.csv", header = TRUE, sep = ",")
dim(Food)
str(Food)
head(Food)
length(Food)
#### Esercizio ####
#1. Estraiamo la variabile GPA
#2. Convertiamo Gender in factor
#3. Contiamo quante donne ci sono nel dataset
#4. Otteniamo: (i) GPA e peso dei maschi;
# (ii)sport ed employment per le sole donne;
# (iii) genere dei soggetti con sports == 1 e vitamins == 1
# Per esercizio (a casa) svolgete i punti precedenti usando dplyr
#1.
Food$GPA #$ con dollaro
Food[, "GPA"] # per nome
str(Food[[1]])
#2.
is.numeric(Food$Gender)
is.factor(Food$Gender)
Food$Gender <- factor(Food$Gender)
levels(Food$Gender) <- c("Female", "Male")
is.factor(Food$Gender)
#3.
sum(Food$Gender == "Female")
length(Food$Gender[Food$Gender=="Female"])
table(Food$Gender)[1]
#4.
Food[Food$Gender == "Male", c("GPA", "weight")]
Food[Food$Gender == "Female", c("sports", "employment")]
Food$Gender[Food$sports == 1 & Food$vitamins == 1]
# Equivalente
Food[Food$sports == 1 & Food$vitamins == 1, "Gender"]
Food[Food$sports == 1 & Food$vitamins == 1, ]$Gender
# Operazioni su Data Frame ----
## subset() ----
# Seleziona fruit_day e veggies_day per i maschi sportivi: to do
Food[(Food$Gender == "Male" & Food$sports == 1),
c("fruit_day", "veggies_day")]
# Equivalente con subset()
subset(Food,
subset = Gender == "Male" & sports == 1,
select = c("fruit_day", "veggies_day"))
# Per coloro che hanno employment == 1 o === 2,
# otteniamo il dataset escludendo la variabile weight
subset(Food,
subset = employment == 1 | employment == 2,
select = -48)
# Equivalentemente
subset(Food,
subset = employment == 1 | employment == 2,
select = -c(weight))
# Nuovo data frame: maschi con reddito > 3,
# variabili da income a nutritional_check
Food_new <- subset(Food,
subset = Gender == "Male" & income > 3,
select = -c(income:nutritional_check))
# Valori Mancanti (NA) ----
any(is.na(Food)) # C'è almeno un NA
## Individuare gli NA ----
# Su una singola colonna (calories_day)
is.na(Food$calories_day) # restituisce TRUE per le osservazioni NA
which(is.na(Food$calories_day)) # Posizione NA nel vettore
sum(is.na(Food$calories_day)) # Quanti NA
sum(is.na(Food$calories_day))/length(Food$calories_day) # % NA
# Su tutto il data frame
colSums(is.na(Food)) # Freq. assoluta NA per ogni colonna (variabile)
colMeans(is.na(Food)) # Freq. relativa NA
## Effetto degli NA sui calcoli ----
mean(Food$calories_day) # NA
mean(Food$calories_day, na.rm = T)
## Rimuovere gli NA ----
# Solo le righe con NA su calories_day
Food[!is.na(Food$calories_day),]
# Tutte le righe con almeno un NA
Food_clean <- na.omit(Food)
dim(Food_clean)
# Equivalente
Food_clean <- Food[complete.cases(Food),]
dim(Food_clean)
# Esportazione dei Dati ----
## write.table() e write.csv() ----
write.table(Food, file = "Food.dat")
write.table(Food, file = "Food.csv", sep = ",", row.names = FALSE)
write.csv(Food, file = "Food.csv", row.names = FALSE)
## Salvare oggetti R (.RData) ----
save(Food, file = "Food.RData") # salva Food come Rdata
save(Food, Food_clean = "Food2.RData") # salva Food e Food_clean nello stesso oggetto RData
save.image(file = "session.RData") # salva tutto quello che è nell'environment
rm(list = ls()) # Rimuoviamo tutto quello che abbiamo nell'ambiente
load("Food2.RData")
######## Esercizi ########
# Esercizio 2
# Carica feeling.RData, crea una variabile categoriale
# da ft_immig_2016 utilizzando i quartili e
# aggiungila al data frame.
load("importazione dataset/feeling.RData")
Q <- quantile(feeling$ft_immig_2016,
prob = c(0.25, 0.5, 0.75), na.rm = T)
feeling$immig_class <- cut(feeling$ft_immig_2016,
breaks = c(0, Q, 100),
labels = c("strongly unfavorable",
"unfavorable/indifferent",
"lightly favorable",
"favorable"),
include.lowest = T)
table(feeling$immig_class)
# Esercizio 3
# Rimuovi i valori mancanti da feeling ed esporta in .csv senza colonna indice.
feeling <- na.omit(feeling)
dim(feeling)
write.csv(feeling, file = "feeling.csv", row.names = F)