# 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)
