#This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
#When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
dati = read.csv(“realestate_texas.csv”)
dati\(year = factor(dati\)year)
#Grazie a queste 3 prime variabili riusciamo ad individuare per ogni riga una citta, un anno e un mese. Le prossime variabili descriveranno le informaioni sul mercato immobiliare in un certo luogo e in un certo momento.
#Con tutte queste variabili quantitative è utile individuare gli indici di variabilità, posizione e forma.
library(ggplot2) attach(dati) cv <- function(x){ return(sd(x)/mean(x) * 100) }
table(city) ggplot() + geom_bar(aes(x = city), col = 1, fill = “blue”) + labs(x = “City”, y = “Frequenza”, title = “Distribuzione di frequenza city”)
summary(year) table(year) ggplot() + geom_bar(aes(x = year), col = 1, fill = “orange”) + labs(x = “Year”, y = “Frequenza”, title = “Distribuzione di frequenza year”)
summary(month) table(month) ggplot() + geom_bar(aes(x = month), col = 1, fill = “green”) + labs(x = “Month”, y = “Frequenza”, title = “Distribuzione di frequenza month”) + scale_x_continuous(breaks = seq(1,12,1))
summary(sales) sd(sales) var(sales) cv(sales) max(sales) - min(sales)
for (i in 1:length(volume)){ volume[i] = substr(volume[i],1,5) } volume = as.numeric(volume)
summary(volume) sd(volume) var(volume) cv(volume) max(volume) - min(volume)
median_price[189] = “100000” median_price[227] = “100000” median_price = as.numeric(median_price)
summary(median_price) sd(median_price) var(median_price) cv(median_price) max(median_price) - min(median_price)
summary(listings) sd(listings) var(listings) cv(listings) max(listings) - min(listings)
summary(months_inventory) sd(months_inventory) var(months_inventory) cv(months_inventory) max(months_inventory) - min(months_inventory)
max(cv(sales), cv(volume), cv(median_price), cv(listings), cv(months_inventory)) # La variabile con il coefficiente di variabilità maggiore è volume (anche se month avrebbe il coeffiente ancora più grande ma non lo prendiamo in considerazione)
library(moments) max(skewness(sales), skewness(volume), skewness(median_price), skewness(listings), skewness(months_inventory)) # La variabile con la distribuzione più asimmetrica è volume (non abbiamo inserito le variabili city, year e month perchè possiamo osservare dalle distribuzioni di frequenze precedenti che hanno una distribuzione uniforme e quindi indic di asimettria nullo)
##Seleziona una variabile quantitativa (es. sales o median_price) e suddividila in classi. classi = c(“(0,100)”, “(101,200)”, “(201,300)”, “(301,400)”, “(401,500)”) freq_sales <- table(cut(sales, breaks = c(0,100, 200, 300, 400, 500), right = FALSE)) classi
barplot(freq_sales, names.arg = classi,
col = “orange”, xlab = “Classi di sales”, ylab = “Frequenza”, main =
“Frequenza di sales divisa in classi”)
gini.index <- function(x){ ni = table(x) fi = ni/length(x) fi2 = fi^2 J = length(table(x)) gini = 1-sum(fi2) gini.normalizzato = gini/((J-1)/J) return(gini.normalizzato) } gini.index(sales) # L’indice di eterogeneità di Gini della variabile sales è molto alto (quasi 1), perciò la variabile è ban distribuita (prevedibile data la variabile sales molto eterogenea)
table(city) P_Beaumont = sum(city == “Beaumont”)/length(city) P_Beaumont
table(month) P_luglio = sum(month == 7)/length(month) P_luglio
table(year) table(month) P_dicembre2012 = sum(year == 2012 & month == 12)/nrow(dati) P_dicembre2012
dati$mean_price = volume*1000000/sales
##Prova a creare una colonna che misuri l’efficacia degli annunci di vendita. Commenta e discuti i risultati. dati\(efficacia_annunci = sales/listings efficacia_annunci = dati\)efficacia_annunci summary(efficacia_annunci) plot(density(efficacia_annunci))
count = 0 for(i in efficacia_annunci){ if(i > 0.10){count = count + 1} } count/240 * 100
count = 0 for(i in efficacia_annunci){ if(i < 0.20){count = count + 1} } count/240 * 100
min(efficacia_annunci) # Osservando i risutati, nella maggioranza dei casi (61.25% dei casi), gli annunci hanno havuto un efficienza maggiore del 10%. Nel 95% dei casi risulta un’efficienza minore del 20%, come si può osservare anche dalla distribuzione di densità. Perciò, senza considerare i casi eccezionali (efficienza maggiore del 20%) il numero minimo di annunci per vendere una casa è 5 (20% = 1/5). Mentre il massimo è 20 annunci (5% = 1/20). In conclusione ci vogliono dai 5 ai 20 annunci per vendere una casa.
library(dplyr) dati\(volume = volume dati\)median_price = median_price
groupby_city = dati %>% group_by(city)%>% summarise(media_sales = mean(sales), sd_sales = sd(sales), media_volume = mean(volume), sd_volume = sd(volume), media_median_price = mean(median_price), sd_median_prices = sd(median_price), media_listings = mean(listings), sd_listings = sd(listings)) summary(groupby_city)
groupby_year =
dati %>% group_by(year)%>% summarise(media_sales = mean(sales),
sd_sales = sd(sales), media_volume = mean(volume), sd_volume =
sd(volume), media_median_price = mean(median_price), sd_median_prices =
sd(median_price), media_listings = mean(listings), sd_listings =
sd(listings)) summary(groupby_year)
groupby_month =
dati %>% group_by(month)%>% summarise(media_sales = mean(sales),
sd_sales = sd(sales), media_volume = mean(volume), sd_volume =
sd(volume), media_median_price = mean(median_price), sd_median_prices =
sd(median_price), media_listings = mean(listings), sd_listings =
sd(listings)) summary(groupby_month)
##8. Creazione di visualizzazioni con ggplot2 ##Utilizza ggplot2 per creare grafici personalizzati. Assicurati di esplorare: library(ggplot2)
ggplot(data = dati)+ geom_boxplot(aes(x = city, y = median_price), fill = “orange”) + labs(x = “City”, y = “Median Price”, title = “Distribuzione del prezzo mediano tra le città”) # Le varie città sono distribuite in mariera simile, infatti le deviazioni standard dei prezzi mediani delle diverse città sono simili. Si noti che la differenza sostanziale sta nella media dei prezzi mediani, infatti nelle diverse città ci sono prezzi differenti.
vendite_per_città = dati %>% group_by(city)%>% summarise(tot_sales = sum(sales)) ggplot(vendite_per_città, aes(x = city, y = tot_sales)) + geom_col(fill = “blue”) + labs(x = “City”, y = “Total sales”, title = “Vendite totali per città”)
vendite_per_mese = dati %>% group_by(month)%>% summarise(tot_sales = sum(sales)) ggplot(vendite_per_mese, aes(x = month, y = tot_sales)) + geom_col(fill = “green”) + labs(x = “Month”, y = “Total sales”, title = “Vendite totali per mese”) + scale_x_continuous(breaks = seq(1,12,1))
vendite_anno_mese <- dati %>% group_by(year, month) %>% summarise(tot_sales = sum(sales)) %>% mutate(data = as.Date(paste(year, month, 1, sep = “-”))) ggplot(vendite_anno_mese) + geom_line(aes(x = data, y = tot_sales), col = “red”)+ labs(x = “Year”, y = “Total Sales”, title = “Andamento vendite totali nel tempo”)
ggplot(data = dati)+ geom_boxplot(aes(x = city, y = volume), fill = “green”) + labs(x = “City”, y = “Valore vendite”, title = “Distribuzione del valore delle ventite tra le città”) # Il valore totale delle vedite è più equilibrato rispetto all prezzo mediano perchè conta sia il prezzo che il numero di vendite, ma comunque la città di Tyler rispecchia un valore delle vendite maggiore, dovuto al maggiore numero di vendite.
ggplot(data = dati)+ geom_boxplot(aes(x = year, y = volume), fill = “lightblue”) + labs(x = “Year”, y = “Valore vendite”, title = “Distribuzione del valore delle ventite negli anni”) # Si nota nuovamente l’aumento progressivo dei guadagno come lo era anche per le vendite. C’è anche un aumento, quasi del doppio, nella deviazione standard del valore delle vendite, dal 2010 al 2014, quindi negli ultimi anni il valore delle vendite si spazia in un range maggiore rispetto ai primi anni.
##3 ggplot(dati, aes(x = month, y = volume, fill = city)) + geom_col(position = “dodge”) + labs(x = “Month”, y = “Valore vendite”, title = “Valore vendite totali per mese e città”) + scale_x_continuous(breaks = seq(1,12,1)) # anche da qui si nota il maggior valore nelle vendite di Tyler e Bryan-College Station e l’andamento delle maggiori vendite nei mesi estivi. Quest’ltima caratteristica è più marcata per le città di di Tyler e Bryan-College Station e poco marcata per quelle di Beaumont e Wichita Falls.
ggplot(dati, aes(x = month, y = volume/100, fill = city)) + geom_col(position = “fill”) + labs(x = “Month”, y = “Valore vendite”, title = “Valore vendite totali per mese e città”) + scale_x_continuous(breaks = seq(1,12,1)) # grafico normalizzato