setwd(“C:/Users/Ale/OneDrive/Desktop”) dati <- read.csv(“realestate_texas.csv”) View(dati)

colnames(dati)

#Le variabili statistiche del dataset sono: city, year, month, #sales, volume, median_price,listing, months_inventory

#city: variabile qualitativa su scala ordinale #year: variabile qualitativa su scala ordinale #month: variabile qualitativa su scala ordinale #sales: variabile quantitativa discreta su scala di rapporti #volume: variabile quantitativa continua su scala di rapporti #median_price: variabile quantitativa discreta su scala di rapporti #listing: variabile quantitativa discreta su scala di rapporti #months_inventory: variabile quantitativa discreta su scala di rapporti

#Variabili temporali: year, month #possono essere gestite in base alle serie storiche, #ossia in base ai dati che abbiamo a disposizione relativi agli anni e mesi passati

#city: analisi delle vendite per città negli anni precedenti #year: serie storica delle vendite per anno #mounth: serie storica delle vendite per ogni mese dell’anno #sales: totale vendite effettuate per periodo negli anni passati #volume: volume relativo degli immobili venduti #median_price: analisi del mercato immobiliare negli anni #listing: valutazione del rapporto annunci-vendite #months_inventory: tempo necessario per vendere tutte le inserzioni correnti, espresso in mesi

#distribuzione quadrimodale

#city: #struttura dataset str(dati)

#lunghezza dataset N <- dim(dati)[1] N

#trasformiamo i dati in forma tabulare table(dati[“city”])

#frequenza assoluta freq_ass_city <- table(dati$city) freq_ass_city

#frequenza relativa freq_rel_city <- table(dati$city)/N freq_rel_city

#assegnamo dei valori numerici alle città Beaumont<-1 Bryan_College_Station<-2 Tyler<-3 Wichita_Falls<-4

#costruiamo un vettore city city<-c(Beaumont,Bryan_College_Station,Tyler,Wichita_Falls)

#dividiamo il dataset in base alla città lunghezza_cl_city <- cut(city, breaks = 4)

#frequenza assoluta cumulata freq_ass_cum_city<-cumsum(freq_ass_city) freq_ass_cum_city

#frequenza relativa cumulata freq_rel_cum_city<-cumsum(freq_rel_city) freq_rel_cum_city

#concateniamo frequenza assolute e relative cbind(freq_ass_city,freq_rel_city,freq_ass_cum_city,freq_rel_cum_city)

#year:

table(dati[“year”])

freq_ass_year <- table(dati$year) freq_ass_year

freq_rel_year <- table(dati$year)/N freq_rel_year

lunghezza_cl_year <- cut(dati$year, breaks = 5)

freq_ass_cum_year<-cumsum(freq_ass_year) freq_ass_cum_year

freq_rel_cum_year<-cumsum(freq_rel_year) freq_rel_cum_year

cbind(freq_ass_year,freq_rel_year,freq_ass_cum_year,freq_rel_cum_year)

#month:

table(dati[“month”])

freq_ass_month <- table(dati$month) freq_ass_month

freq_rel_month <- table(dati$month)/N freq_rel_month

lunghezza_cl_month <- cut(dati$month, breaks = 12) lunghezza_cl_month

freq_ass_cum_month<-cumsum(freq_ass_month) freq_ass_cum_month

freq_rel_cum_month<-cumsum(freq_rel_month) freq_rel_cum_month

cbind(freq_ass_month,freq_rel_month,freq_ass_cum_month,freq_rel_cum_month)

#sales:

Raggruppare e calcolare la media delle vendite per anno e città

max_sales <- aggregate(dati\(sales ~ dati\)year + dati$city, data = dati, FUN = max) max_sales

mediana_sales <- aggregate(dati\(sales ~ dati\)year + dati$city, data = dati, FUN = median) mediana_sales

quartili_sales <- aggregate(dati\(sales ~ dati\)year + dati$city, data = dati, FUN = quantile) quartili_sales

percentili_sales <- aggregate(dati\(sales ~ dati\)year + dati$city, data = dati, FUN = quantile, probs=seq(0,1,0.01)) percentili_sales

media_sales <- aggregate(dati\(sales ~ dati\)year + dati$city, data = dati, FUN = mean) media_sales

range_sales<-(max_sales)[3]-(min_sales)[3] range_sales

quartili_sales <- aggregate(dati\(sales ~ dati\)year + dati$city, data = dati, FUN = IQR) quartili_sales

var_sales <- aggregate(dati\(sales ~ dati\)year + dati$city, data = dati, FUN = var) var_sales

dev_standard_sales <- aggregate(dati\(sales ~ dati\)year + dati$city, data = dati, FUN = sd) dev_standard_sales

CV_sales<-(dev_standard_sales)[3]/(media_sales)[3]*100 CV_sales

gini.index <- function(x){ ni = table(x) fi = ni/length(x) fi2 = fi^2 J = length(table(x))

gini = 1-sum(fi2) gini.norm = gini/((J-1)/J)

return(gini.norm) }

gini_sales <- aggregate(dati\(sales ~ dati\)year + dati$city, data = dati, FUN = gini.index()) gini_sales

#volume: min_volume <- aggregate(dati\(volume ~ dati\)year + dati$city, data = dati, FUN = min) min_volume

max_volume <- aggregate(dati\(volume ~ dati\)year + dati$city, data = dati, FUN = max) max_volume

mediana_volume <- aggregate(dati\(volume ~ dati\)year + dati$city, data = dati, FUN = median) mediana_volume

quartili_volume <- aggregate(dati\(volume ~ dati\)year + dati$city, data = dati, FUN = quantile) quartili_volume

percentili_volume <- aggregate(dati\(volume ~ dati\)year + dati$city, data = dati, FUN = quantile, probs=seq(0,1,0.01)) percentili_volume

media_volume <- aggregate(dati\(volume ~ dati\)year + dati$city, data = dati, FUN = mean) media_volume

range_volume<-(max_volume)[3]-(min_volume)[3] range_volume

quartili_volume <- aggregate(dati\(volume ~ dati\)year + dati$city, data = dati, FUN = IQR) quartili_volume

var_volume <- aggregate(dativolume ~ dati\(year + dati\)city, data = dati, FUN = var) var_volume dev_standard_volume <- aggregate(dati\(volume ~ dati\)year + dati$city, data = dati, FUN = sd) dev_standard_volume

CV_volume<-(dev_standard_volume)[3]/(media_volume)[3]*100 CV_volume

gini_volume <- aggregate(dati\(volume ~ dati\)year + dati$city, data = dati, FUN = gini.index()) gini_volume

#median_price: min_median_price <- aggregate(dati\(median_price ~ dati\)year + dati$city, data = dati, FUN = min) min_median_price

max_median_price <- aggregate(dati\(median_price ~ dati\)year + dati$city, data = dati, FUN = max) max_median_price

mediana_median_price <- aggregate(dati\(median_price ~ dati\)year + dati$city, data = dati, FUN = median) mediana_median_price

quartili_median_price <- aggregate(dati\(median_price ~ dati\)year + dati$city, data = dati, FUN = quantile) quartili_median_price

percentili_median_price <- aggregate(dati\(median_price ~ dati\)year + dati$city, data = dati, FUN = quantile, probs=seq(0,1,0.01)) percentili_median_price

media_median_price <- aggregate(dati\(median_price ~ dati\)year + dati$city, data = dati, FUN = mean) media_median_price

range_median_price<-(max_median_price)[3]-(min_median_price)[3] range_median_price

quartili_median_price <- aggregate(dati\(median_price ~ dati\)year + dati$city, data = dati, FUN = IQR) quartili_median_price

var_median_price <- aggregate(dati\(median_price ~ dati\)year + dati$city, data = dati, FUN = var) var_sales

dev_standard_median_price <- aggregate(dati\(median_price ~ dati\)year + dati$city, data = dati, FUN = sd) dev_standard_sales

CV_median_price<-(dev_standard_median_price)[3]/(media_median_price)[3]*100 CV_median_price

gini_median_price <- aggregate(dati\(median_price ~ dati\)year + dati$city, data = dati, FUN = gini.index()) gini_median_price

#listing: min_listing <- aggregate(dati\(listing ~ dati\)year + dati$city, data = dati, FUN = min) min_listing

max_listing <- aggregate(dati\(listing ~ dati\)year + dati$city, data = dati, FUN = max) max_listing

mediana_listing <- aggregate(dati\(listing ~ dati\)year + dati$city, data = dati, FUN = median) mediana_listing

quartili_listing <- aggregate(dati\(listing ~ dati\)year + dati$city, data = dati, FUN = quantile) quartili_listing

percentili_listing <- aggregate(dati\(listing ~ dati\)year + dati$city, data = dati, FUN = quantile, probs=seq(0,1,0.01)) percentili_listing

media_listing <- aggregate(dati\(listing ~ dati\)year + dati$city, data = dati, FUN = mean) media_listing

range_listing<-(max_listing)[3]-(min_listing)[3] range_sales

quartili_listing <- aggregate(dati\(listing ~ dati\)year + dati$city, data = dati, FUN = IQR) quartili_listing

var_listing <- aggregate(dati\(listing ~ dati\)year + dati$city, data = dati, FUN = var) var_listing

dev_standard_listing <- aggregate(dati\(listing ~ dati\)year + dati$city, data = dati, FUN = sd) dev_standard_listing

CV_listing<-(dev_standard_listing)[3]/(media_listing)[3]*100 CV_listing

gini_listing <- aggregate(dati\(listing ~ dati\)year + dati$city, data = dati, FUN = gini.index()) gini_listing

#months_inventory: min_months_inventory <- aggregate(dati\(months_inventory ~ dati\)year + dati$city, data = dati, FUN = min) min_months_inventory

max_months_inventory <- aggregate(dati\(months_inventory ~ dati\)year + dati$city, data = dati, FUN = max) max_months_inventory

mediana_months_inventory <- aggregate(dati\(months_inventory ~ dati\)year + dati$city, data = dati, FUN = median) mediana_months_inventory

quartili_months_inventory <- aggregate(dati\(months_inventory ~ dati\)year + dati$city, data = dati, FUN = quantile) quartili_months_inventory

percentili_months_inventory <- aggregate(dati\(months_inventory ~ dati\)year + dati$city, data = dati, FUN = quantile, probs=seq(0,1,0.01)) percentili_months_inventory

media_months_inventory <- aggregate(dati\(months_inventory ~ dati\)year + dati$city, data = dati, FUN = mean) media_months_inventory

range_months_inventory<-(max_months_inventory)[3]-(min_months_inventory)[3] range_months_inventory

quartili_months_inventory <- aggregate(dati\(months_inventory ~ dati\)year + dati$city, data = dati, FUN = IQR) quartili_months_inventory

var_months_inventory <- aggregate(dati\(months_inventory ~ dati\)year + dati$city, data = dati, FUN = var) var_months_inventory

dev_standard_months_inventory <- aggregate(dati\(months_inventory ~ dati\)year + dati$city, data = dati, FUN = sd) dev_standard_months_inventory

CV_months_inventory<-(dev_standard_months_inventory)[3]/(media_months_inventory)[3]*100 CV_months_inventory

gini_months_inventory <- aggregate(dati\(months_inventory ~ dati\)year + dati$city, data = dati, FUN = gini.index()) gini_months_inventory

#la variabilità delle variabili quantitative può essere confrontata #tramite il coefficente di variabilità

#la variabile con maggiore variabilità è volume

#calcoliamo l’indice di asimmetria di Fisher per tutte le variabili

#sales: x_sales<-rnorm(240, media_sales, dev_standard_sales) plot(density(x_sales))

mu_sales<-mean(x_sales) sigma_sales <- sd(x_sales)

m3_sales <- sum( (x_sales-mu_sales)^3 ) / length(x_sales)

asim.fisher_sales <- m3_sales / sigma_sales^3

asim.fisher_sales

#volume: x_volume<-rnorm(240, media_volume, dev_standard_volume) plot(density(x_volume))

mu_volume<-mean(x_volume) sigma_volume <- sd(x_volume)

m3_volume <- sum( (x_volume-mu_volume)^3 ) / length(x_volume)

asim.fisher_volume <- m3_volume / sigma_volume^3

asim.fisher_volume

#median_price: x_median_price<-rnorm(240, media_median_price, dev_standard_median_price) plot(density(x_median_price))

mu_median_price<-mean(x_median_price) sigma_median_price <- sd(x_median_price)

m3_median_price <- sum( (x_median_price-mu_median_price)^3 ) / length(x_median_price)

asim.fisher_median_price <- (m3_median_price / sigma_median_price)^3

asim.fisher_median_price

#listing: x_listing<-rnorm(240, media_listing, dev_standard_listing) plot(density(x_listing))

mu_listing<-mean(x_listing) sigma_listing <- sd(x_listing)

m3_listing <- sum( (x_listing-mu_listing)^3 ) / length(x_listing)

asim.fisher_listing <- m3_listing / sigma_listing^3

asim.fisher_listing

#months_inventory: x_months_inventory<-rnorm(240, media_months_inventory, dev_standard_months_inventory) plot(density(x_months_inventory))

mu_months_inventory<-mean(x_months_inventory) sigma_months_inventory <- sd(x_months_inventory)

m3_months_inventory <- sum( (x_months_inventory-mu_months_inventory)^3 ) / length(x_months_inventory)

asim.fisher_months_inventory <- m3_months_inventory / sigma_months_inventory^3

asim.fisher_months_inventory

#la variabile più asimmetrica è median_price, e si tratta di una asimmetria negativa

#suddividiamo la variabile ‘sales’ in classi:

classi_sales<-cut(dati$sales,breaks=seq(0,500,by=100),include.lowest=T) print(classi_sales)

#ora creiamo una distribuzione di frequenze per ‘sales’:

table(dati[“sales”])

freq_sales <- hist(dati$sales,main=‘distribuzione frequenze’,breaks=seq(0,500,by=100),xlab=‘vendite’,ylab=‘frequenza’) freq_sales

gini_sales <- gini.index(dati$sales) gini_sale

#l’indice di Gini di sales è molto vicino #ad 1, e quindi le vendite sono sostanzialmente equidistribuite negli anni

#sono presenti 4 città, e ognuna compare 60 volte nel dataset,quindi la probabilità #che presa una riga a caso compaia la città di Beaumont è 0.25.

#i mesi sono 12, e si ripetono 4 volte, quindi la probabilità di trovare il mese #di luglio è 1/12=0.083

#la probabilità che riporti il mese di dicembre 2012 è 4/240=0.016

#prezzo medio immobili: sum(dati$median_price)/N

#totale vendite per mese e città: tot_sell=aggregate(dati\(median_price,by=list(dati\)city,dati$month), FUN = sum) tot_sell

#possiamo misurare l’efficacia degli annunci di vendita dal rapporto tra gli annunci e le vendite: dati\(sales/dati\)listing

install.packages(“dplyr”) library(“dplyr”)

grouped_data <- dati %>%

group_by(city) %>%

citta <- group_keys(grouped_data)

citta=unique(citta)

#analisi statistiche: analisi_media <- aggregate(dati\(sales,by=list(dati\)city,dati$year), FUN = mean) analisi_media

analisi_ds <- aggregate(dati\(sales,by=list(dati\)city,dati$year), FUN = sd)

media_vendite_per_citta <- aggregate(sales ~ city, dati, mean) media_vendite_per_citta<-as.vector(media_vendite_per_citta)

pie(x=media_vendite_per_citta\(sales,labels=media_vendite_per_citta\)city)

ds_vendite_per_citta <- aggregate(sales ~ city, dati, sd) ds_vendite_per_citta<-as.vector(ds_vendite_per_citta)

pie(x=ds_vendite_per_citta\(sales,labels=ds_vendite_per_citta\)city)

install.packages(“ggplot2”) library(“ggplot2”)

#distribuzione del prezzo mediano tra le città:

prezzo_mediano <- dati %>% group_by(year) %>% summarise(median_price = mean(median_price, na.rm = TRUE))

min(dati\(median_price) max(dati\)median_price)

ggplot(data=prezzo_mediano)+ geom_boxplot(aes(x=city,y=median_price))+ scale_y_continuous(breaks = seq(50,200,10))+ labs(title=“prezzo mediano tra le città”, x=“città”,y=“prezzo mediano”)

#totale vendite per mese e città:

media_vendite_per_anno <- dati %>% group_by(year) %>% summarise(media_sales = mean(sales, na.rm = TRUE))

ggplot(data=dati)+ geom_bar( aes( x = month, y = sales, fill = city), stat =“identity”, position=“dodge”)+ scale_x_continuous(breaks = seq(1,12,1))+ scale_y_continuous(breaks = seq(0,500,100))+ theme_classic()

#andamento delle vendite in periodi storici differenti:

media_vendite_per_anno <- dati %>% group_by(year) %>% summarise(media_sales = mean(sales, na.rm = TRUE))

ggplot(data = media_vendite_per_anno)+ geom_line(aes(x=year, y = media_sales), col = “lightblue”, lwd= 1)+ geom_point(aes(x=year, y = media_sales), col = “blue”, lwd = 2)+ labs( x= “Anni”, y = “Media vendite annuali”, title= “Andamento storico delle vendite dal 2010 al 2014” )+ geom_text(aes(x=year, y = media_sales+10, label=round(media_sales,0)))+

scale_x_continuous(breaks = seq(2010,2014,1))

#Sintesi: il mercato immobiliare nel Texas negli ultimi anni è decollato per #Beaumont, Bryan-College Station e Tyler, mentre non si può dire altrettanto per # Wichita Falls. I prezzi medi degli immobili non sono variati di molto; mentre #sono diminuiti gli annunci di vendita, quindi è migliorato il rapporto annunci/vendite. #Un’altra variabile interessante è months inventory; vediamo come in ogni caso si #è ridotto il tempo necessario per vendere le inserzioni.