R Markdown

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

1. Analisi delle variabili

Identifica e descrivi il tipo di variabili statistiche presenti nel dataset. Valuta come gestire le variabili che sottintendono una dimensione tempo e commenta sul tipo di analisi che può essere condotta su ciascuna variabile.

Il dataset dati di dimesione 240 presenta le seguenti variabili:

city: variabile qualitativa che indica una città di riferimento (stringa), può essere utilizzata per svolgere varie analisi sulle differenze delle altre variabili sulle diverse ciità.

year: variabile temporale che indica un anno specifico, nel dataset è inserito come valore numerico, lo trasformo come gruppo. Può essere utilizzata per svolgere analisi sull’andamento del mercato nei vari anni.

dati\(year = factor(dati\)year)

month: variabile temporale che indica un mese specifico, nel dataset è inserito come valore numerico (da 1 a 12). Può essere utilizzata per svolgere analisi sull’andamento del mercato nei diversi mesi.

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

sales: variabile quantitativa che indica il numero di vendite con valore numerico. Utile per confrontare i che periodo/luogo ci sono state tante o poche vendite.

volume: variabile quantitativa che indica il guadagno delle vendite, utile per fare analisi sul fatturato

median_price: variabile quantitativa che descrive il prezzo mediano tra le case vendute.

listings: variabile quantitativa che indica il numero di listini utilizzati per publicizzare le case da vendere. Utile per valutare sales e la campagna publicitaria.

month_inventory: variabile quantitativa che esprime la quantità di tempo necessaria per vendere tutte le inserzioni correnti, espresso in mesi. Utile per valutare l’andamento del mercato.

#Con tutte queste variabili quantitative è utile individuare gli indici di variabilità, posizione e forma.

2. Indici di posizione, variabilità e forma

Calcola Indici di posizione, variabilità e forma per tutte le variabili per le quali ha senso farlo, per le altre crea una distribuzione di frequenza. Infine, commenta tutto brevemente.

library(ggplot2) attach(dati) cv <- function(x){ return(sd(x)/mean(x) * 100) }

city

distribuzione di frequenza

table(city) ggplot() + geom_bar(aes(x = city), col = 1, fill = “blue”) + labs(x = “City”, y = “Frequenza”, title = “Distribuzione di frequenza city”)

year

distribuzione di frequenza

summary(year) table(year) ggplot() + geom_bar(aes(x = year), col = 1, fill = “orange”) + labs(x = “Year”, y = “Frequenza”, title = “Distribuzione di frequenza year”)

month

distribuzione di frequenza

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

sales

summary(sales) sd(sales) var(sales) cv(sales) max(sales) - min(sales)

volume

rendo volume numerico

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

correggo valori stringhe di median_price per trasformarli in interi

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)

listings

summary(listings) sd(listings) var(listings) cv(listings) max(listings) - min(listings)

months_inventory

summary(months_inventory) sd(months_inventory) var(months_inventory) cv(months_inventory) max(months_inventory) - min(months_inventory)

3. Identificazione delle variabili con maggiore variabilità e asimmetria

Qual è la variabile con la più alta variabilità?

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)

Qual è la variabile con la distribuzione più asimmetrica?

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)

4. Creazione di classi per una variabile quantitativa (sales)

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

Crea una distribuzione di frequenze e rappresenta i dati con un grafico a barre.

barplot(freq_sales, names.arg = classi,
col = “orange”, xlab = “Classi di sales”, ylab = “Frequenza”, main = “Frequenza di sales divisa in classi”)

Calcola l’indice di eterogeneità Gini e discuti i risultati.

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)

5. Calcolo della probabilità

Qual è la probabilità che, presa una riga a caso di questo dataset, essa riporti la città “Beaumont”?

table(city) P_Beaumont = sum(city == “Beaumont”)/length(city) P_Beaumont

E la probabilità che riporti il mese di Luglio?

table(month) P_luglio = sum(month == 7)/length(month) P_luglio

E la probabilità che riporti il mese di dicembre 2012?

table(year) table(month) P_dicembre2012 = sum(year == 2012 & month == 12)/nrow(dati) P_dicembre2012

6. Creazione di nuove variabili

Crea una nuova colonna che calcoli il prezzo medio degli immobili utilizzando le variabili disponibili (prezzo medio in dollari).

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.

7. Analisi condizionata

Usa il pacchetto dplyr o il linguaggio base di R per effettuare analisi statistiche condizionate per città, anno e mese. Genera dei summary (media, deviazione standard) e rappresenta graficamente i risultati.

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)

Boxplot per confrontare la distribuzione del prezzo mediano tra le città.

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.

Grafici a barre per confrontare il totale delle vendite per mese e città.

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

Line charts per confrontare l’andamento delle vendite in periodi storici differenti.

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

9. Conclusioni

Fornisci una sintesi dei risultati ottenuti, facendo riferimento alle principali tendenze emerse e fornendo raccomandazioni basate sull’analisi. Questo non è un progetto di programmazione, ma di statistica, e ci si aspetta di leggere commenti e considerazioni statistiche per i vari passaggi e risultati.

Si osserva che negli anni c’è stato un aumento progressivo del numero di vendite, visibile anche dal fatto che, dal 2010 al 2014, volume e median_price aumentano (osservare groupby_year). La notevole differenza delle vendite si verifica nei diversi mesi, nei mesi estivi c’è una tendenza a vendere molto più alta rispetto gli altri periodi dell’anno, soprattutto nei primi mesi dell’anno dove è quasi la metà. Per quanto riguarda le diverse città, a Tyler si verificano numerose vendite, più del doppio rispetto a Wichita Falls dove se ne verificano molto poche. Ma le case più costose sono a Bryan-college Station, dove sono state vendute meno case rispetto a Tyler.

Osservazioni operative

2

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