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