In questa sezione andremo ad analizzare il dataset relativo alle vendite immobiliari nello stato del Texas.
real_estate <- read.csv("~/Desktop/realestate_texas.csv")
head(real_estate)
## city year month sales volume median_price listings months_inventory
## 1 Beaumont 2010 1 83 14.162 163800 1533 9.5
## 2 Beaumont 2010 2 108 17.690 138200 1586 10.0
## 3 Beaumont 2010 3 182 28.701 122400 1689 10.6
## 4 Beaumont 2010 4 200 26.819 123200 1708 10.6
## 5 Beaumont 2010 5 202 28.833 123100 1771 10.9
## 6 Beaumont 2010 6 189 27.219 122800 1803 11.1
str(real_estate)
## 'data.frame': 240 obs. of 8 variables:
## $ city : chr "Beaumont" "Beaumont" "Beaumont" "Beaumont" ...
## $ year : int 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
## $ month : int 1 2 3 4 5 6 7 8 9 10 ...
## $ sales : int 83 108 182 200 202 189 164 174 124 150 ...
## $ volume : num 14.2 17.7 28.7 26.8 28.8 ...
## $ median_price : num 163800 138200 122400 123200 123100 ...
## $ listings : int 1533 1586 1689 1708 1771 1803 1857 1830 1829 1779 ...
## $ months_inventory: num 9.5 10 10.6 10.6 10.9 11.1 11.7 11.6 11.7 11.5 ...
unique(real_estate$city)
## [1] "Beaumont" "Bryan-College Station" "Tyler"
## [4] "Wichita Falls"
library(ggplot2)
Il dataset “real_estate” è composto da 240 osservazioni e 8 variabili inerenti al mercato immobiliare del Texas.
“City” –> Variabile qualitativa nominale, identifica la città di riferimento per ciascuna osservazione. Non è caratterizzata da un ordinamento naturale, quindi può essere usata per confrontare i diversi mercati locali; “Year” e “Month” –> Variabili temporali discrete, indicano la dimensione temporale del dataset, Year ci permette di studiare l’evoluzione del mercato negli anni e Month permette di studiare gli eventi stagionali; “Sales” e “Listings” –> Variabili quantitative discrete, “Sales” rappresenta il numero di immobili venduti, “Listings” indica il numero di annunci immobiliari attivi “Volume”, “Median_price” e “Month_inventory” –> Variabili quantitative continue. “Volume” indica il numero complessivo di vendite espresso in mln di dollari, “Median_price” indica il prezzo mediano degli immobili venduti, “Months_inventory” indica il numero di mesi necessario per vendere l’intero inventario di immobili disponibili sul mercato, assumendo che il ritmo delle vendite rimanga costante. Le variabili quantitative possono essere analizzate con misure di sintesi quali: media, mediana, deviazione standard e quartili, inoltre, possono essere rappresentate graficamente con istogrammi e boxplot. Le variabili qualitative possono essere utilizzate per confrontare gruppi. Le variabili temporali si possono utilizzare per studiare trend e stagionalità mediante grafici a linee o aggregati per anno o mese
summary(real_estate[, c("sales", "volume", "median_price", "listings", "months_inventory")])
## sales volume median_price listings
## Min. : 79.0 Min. : 8.166 Min. : 73800 Min. : 743
## 1st Qu.:127.0 1st Qu.:17.660 1st Qu.:117300 1st Qu.:1026
## Median :175.5 Median :27.062 Median :134500 Median :1618
## Mean :192.3 Mean :31.005 Mean :132665 Mean :1738
## 3rd Qu.:247.0 3rd Qu.:40.893 3rd Qu.:150050 3rd Qu.:2056
## Max. :423.0 Max. :83.547 Max. :180000 Max. :3296
## months_inventory
## Min. : 3.400
## 1st Qu.: 7.800
## Median : 8.950
## Mean : 9.193
## 3rd Qu.:10.950
## Max. :14.900
variabili_quantitative <- real_estate[,c(
"sales",
"volume",
"median_price",
"listings",
"months_inventory"
)]
sapply(variabili_quantitative, function(x) max(x)-min(x))
## sales volume median_price listings
## 344.000 75.381 106200.000 2553.000
## months_inventory
## 11.500
sapply(variabili_quantitative, var)
## sales volume median_price listings
## 6.344300e+03 2.772707e+02 5.135730e+08 5.665690e+05
## months_inventory
## 5.306889e+00
sapply(variabili_quantitative, sd)
## sales volume median_price listings
## 79.651111 16.651447 22662.148687 752.707756
## months_inventory
## 2.303669
sapply(variabili_quantitative, function(x) sd(x)/mean(x)*100)
## sales volume median_price listings
## 41.42203 53.70536 17.08218 43.30833
## months_inventory
## 25.06031
skewness <- function(x) {
mean((x-mean(x))^3)/sd(x)^3
}
sapply(variabili_quantitative, skewness)
## sales volume median_price listings
## 0.71362055 0.87921815 -0.36227680 0.64544309
## months_inventory
## 0.04071944
kurtosis <- function(x) {
mean((x - mean(x))^4) / sd(x)^4 -3
}
sapply(variabili_quantitative, kurtosis)
## sales volume median_price listings
## -0.3355200 0.1505673 -0.6427292 -0.8101534
## months_inventory
## -0.1979448
table(real_estate$city)
##
## Beaumont Bryan-College Station Tyler
## 60 60 60
## Wichita Falls
## 60
prop.table(table(real_estate$city))
##
## Beaumont Bryan-College Station Tyler
## 0.25 0.25 0.25
## Wichita Falls
## 0.25
table(real_estate$year)
##
## 2010 2011 2012 2013 2014
## 48 48 48 48 48
prop.table(table(real_estate$year))
##
## 2010 2011 2012 2013 2014
## 0.2 0.2 0.2 0.2 0.2
table(real_estate$month)
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 20 20 20 20 20 20 20 20 20 20 20 20
prop.table(table(real_estate$month))
##
## 1 2 3 4 5 6 7
## 0.08333333 0.08333333 0.08333333 0.08333333 0.08333333 0.08333333 0.08333333
## 8 9 10 11 12
## 0.08333333 0.08333333 0.08333333 0.08333333 0.08333333
L’analisi degli indici di posizione mostra delle differenze tra le variabili quantitative considerate. “Sales”: si ha un valore medio degli immobili venduti pari a 192,3 e una mediana di 175,5; “Volume”: il valore medio è di 31,005 mln di dollari con una mediana di 27,062 mln; “Median_price”: si ha una media di 132.665 dollari e una mediana pari a 134.500 dollari; “Listings”: la media è di 1.738 annunci e la mediana è di 1.618; “Months_inventory”: restituisce una media di 9,193 mesi e una mediana di 8,95 mesi.
Gli indici di variabilità evidenziano delle differenze nelle dispersioni delle variabili. Il coefficiente di variazione ad esempio, che permette di confrontare la variabilità relativa è maggiore per il volume con il 53,71% seguito da listings con 43,31% e sales con 41,42%. Abbiamo poi months_inventory con una variabilità relativa minore, pari al 25,06% e median_price presenta un coefficiente di variazione pari al 17,08% ossia il minore di tutti. Andando ad analizzare i risultati inerenti alla forma delle distribuzioni, l’indice di asimmetria indica dei valori positivi per sales, volume e listings, in particolare indica una distribuzione asimmetrica a destra. median_price ha una leggera asimmetria a sinistra e months_inventory è rappresentata da una distribuzione quasi simmetrica con un valore prossimo allo zero. Il valore di asimmetria più elevato riscontrato è quello di volume. Per i valori di curtosi, gli indici risultano abbastanza contenuti, il valore più alto e positivo si riscontra in volume, mentre le altre variabili presentano dei valori negativi e la variabile con il valore minore è listings. Infine, andando ad esaminare le distribuzioni di frequenza delle variabili qualitative e temporali, emerge che il dataset è bilanciato. Le 4 città hanno 60 osservazioni ognuna pari a un 25% del totale. Anche per gli anni si osservano 48 osservazioni ciascuno, ossia il 20% per ogni anno (5 anni in totale) e ogni mese è rappresentato da 20 osservazioni, ossia l’8,33% del totale. In questa rappresentazione quindi, emerge la possibilità di fare dei confronti tra città, anni e mesi senza avere una categoria sovrarappresentata.
#Coefficiente di variazione
cv <- sapply(variabili_quantitative, function(x) sd(x)/mean(x) *100)
#Variabile con maggiore variabilità relativa
names(which.max(cv))
## [1] "volume"
#Indice di asimmetria
asimmetria <- sapply(variabili_quantitative, skewness)
asimmetria
## sales volume median_price listings
## 0.71362055 0.87921815 -0.36227680 0.64544309
## months_inventory
## 0.04071944
#Variabile con maggiore asimmetria in valore assoluto
names(which.max(abs(asimmetria)))
## [1] "volume"
Per individuare la variabile che presenta la maggiore variabilità relativa è stato utilizzato il coefficiente di variazione, questo ci permette di confrontare la dispersione delle variabili espresse con unità di misura differenti. Quello che emerge è che volume ha il valore maggiore, il che indica che i valori del volume totale delle vendite sono relativamente più dispersi rispetto alla loro media. Invece per la distribuzione maggiormente asimmetrica è stato confrontato il valore assoluto degli indici di asimmetria. Nuovamente Volume presenta il valore maggiore. Avendo un valore di 0,879 ossia positivo, indica un’asimmetria verso destra, ossia una concentrazione maggiore di osservazioni con valori più bassi e una coda verso i valori più alti.
classi_sales <- cut(
real_estate$sales,
breaks= c(78,147,216,285,354,423),
labels= c("79-147", "148-216", "217-285", "286-354", "355-423")
)
table(classi_sales)
## classi_sales
## 79-147 148-216 217-285 286-354 355-423
## 84 77 41 27 11
freq_sales <- table(classi_sales)
prop.table(freq_sales)
## classi_sales
## 79-147 148-216 217-285 286-354 355-423
## 0.35000000 0.32083333 0.17083333 0.11250000 0.04583333
ggplot(data.frame(classi_sales), aes(x=classi_sales))+
geom_bar()+
labs(
title = "Distribuzione delle vendite per classe",
x="Numero di vendite",
y="Frequenza"
)+
theme_minimal()
frequenze <- prop.table(table(classi_sales))
gini_index <- 1-sum(frequenze^2)
gini_index
## [1] 0.730625
La variabile quantitativa scelta per l’analisi è Sales, in questo caso, dall’analisi dei dati quello che emerge è che si ha una concentrazione maggiore nelle classi che hanno un numero di vendite minore. Al contrario, le classi con valori più elevati risultano meno frequenti. Calcolando l’indice di eterogeneità di Gini, il risultato ottenuto è pari a 0,73, il quale indica un’elevata eterogenità nelle distribuzione delle ossrvazioni tra le classi, con le osservazioni che risultano concentrate maggiormente nelle prime due classi
#Probabilità Beaumont
mean(real_estate$city =="Beaumont")
## [1] 0.25
#Probabilità Luglio
mean(real_estate$month == 7)
## [1] 0.08333333
#Probabilità Dicemnre 2012
mean(real_estate$month == 12 & real_estate$year == 2012)
## [1] 0.01666667
#Prezzo medio per immobile venduto
real_estate$average_price <- (real_estate$volume * 1000000/ real_estate$sales)
head(real_estate$average_price)
## [1] 170626.5 163796.3 157697.8 134095.0 142737.6 144015.9
#Indicatore di efficacia degli annunci
real_estate$listing_effectiveness <- real_estate$sales/real_estate$listings
head(real_estate$listing_effectiveness)
## [1] 0.05414220 0.06809584 0.10775607 0.11709602 0.11405985 0.10482529
#Espressione dell'indicatore in percentuale
real_estate$listing_effect_pct <- real_estate$listing_effectiveness*100
head(real_estate$listing_effect_pct)
## [1] 5.414220 6.809584 10.775607 11.709602 11.405985 10.482529
#Statistiche descrittive delle nuove variabili
summary(real_estate[, c("average_price",
"listing_effect_pct")])
## average_price listing_effect_pct
## Min. : 97010 Min. : 5.014
## 1st Qu.:132939 1st Qu.: 8.980
## Median :156588 Median :10.963
## Mean :154320 Mean :11.874
## 3rd Qu.:173915 3rd Qu.:13.492
## Max. :213234 Max. :38.713
ggplot(real_estate, aes(x= city, y=listing_effect_pct))+
geom_boxplot()+
labs(
title="Efficiacia degli annunci per città",
x= "Città",
y= "Prezzo medio ($)"
)+
theme_minimal()
##Commento punto 6 Sono state create due nuove variabili, la prima,
average_price, rappresenta il prezzo medio degli immobili venduti ed è
stata calcolata dividendo il volume totale delle vendite per il numero
delle vendite. La seconda è listing_effect_pct, questa variabile misura
il rapporto tra vendite e annunci attivi in percentuale. Si tratta di un
indicatore che può essere utilizzato come misura approssimativa della
capacità del mercato di trasformare gli annunci immobiliari in vendite,
quindi un valore elevato indica un maggiore assorbimento di annunci. Si
tratta di un indicatore approssimativo. Infine, il confronto tra le
città, permette di individuare eventuali differenze sia nei prezzi medi
degli immobili che nell’efficacia degli annunci.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Vendite medie per città
sales_city <- real_estate %>%
group_by(city) %>%
summarise(
media_sales = mean(sales),
sd_sales = sd(sales)
)
sales_city
## # A tibble: 4 × 3
## city media_sales sd_sales
## <chr> <dbl> <dbl>
## 1 Beaumont 177. 41.5
## 2 Bryan-College Station 206. 85.0
## 3 Tyler 270. 62.0
## 4 Wichita Falls 116. 22.2
ggplot(sales_city, aes (x=city, y=media_sales))+
geom_col(fill="lightblue")+
labs(
title= "Vendite medie per città",
x="Città",
y="Vendite medie"
) +
theme_minimal()
# Prezzo mediano
price_city <- real_estate %>%
group_by(city) %>%
summarise(
media_price= mean(median_price),
sd_price = sd(median_price)
)
price_city
## # A tibble: 4 × 3
## city media_price sd_price
## <chr> <dbl> <dbl>
## 1 Beaumont 129988. 10105.
## 2 Bryan-College Station 157488. 8852.
## 3 Tyler 141442. 9337.
## 4 Wichita Falls 101743. 11320.
ggplot(price_city, aes(x= city, y= media_price))+
geom_col(fill="pink")+
labs(
title="Prezzo mediano per città",
x="Città",
y="Prezzo medio ($)"
)+
theme_minimal()
#Analisi andamento vendite per anno
sales_year <- real_estate %>%
group_by(year) %>%
summarise(
media_sales = mean(sales),
sd_sales = sd(sales)
)
sales_year
## # A tibble: 5 × 3
## year media_sales sd_sales
## <int> <dbl> <dbl>
## 1 2010 169. 60.5
## 2 2011 164. 63.9
## 3 2012 186. 70.9
## 4 2013 212. 84.0
## 5 2014 231. 95.5
ggplot(sales_year, aes(x= factor(year), y=media_sales))+
geom_col(fill="darkgreen")+
labs(
title = "Vendite medie per anno",
x = "Anno",
y = "Vendite medie"
) +
theme_minimal()
#Analisi della stagionalità
sales_month <- real_estate %>%
group_by(month) %>%
summarise(
media_sales = mean(sales),
sd_sales = sd(sales)
)
sales_month
## # A tibble: 12 × 3
## month media_sales sd_sales
## <int> <dbl> <dbl>
## 1 1 127. 43.4
## 2 2 141. 51.1
## 3 3 189. 59.2
## 4 4 212. 65.4
## 5 5 239. 83.1
## 6 6 244. 95.0
## 7 7 236. 96.3
## 8 8 231. 79.2
## 9 9 182. 72.5
## 10 10 180. 75.0
## 11 11 157. 55.5
## 12 12 169. 60.7
ggplot(sales_month, aes(x=factor(month), y=media_sales))+
geom_col(fill="orange")+
labs(
title = "Vednite medie per mese",
x = "Mese",
y = "Vendite medie"
)+
theme_minimal()
## Commento punto 7 dall’analisi condizionata effettuata, si può
analizzare il comportamento delle vendite considerando in modo
individuale città, mesi e anni. Per quanto riguarda le città, si hanno
delle differenze nei livelli medi di vendite: Tyler e Bryan-College
Station hanno un numero di vendite maggiore, mentre Wichita Falls ha dei
valori più contenuti. La deviazione standard inoltre, permette di
valutare quanto le vendite siano variabili all’interno di ciascun
mercato. Nel caso degli anni, si osserva una tendenza generale alla
crescita delle vendite nel corso degli stessi, anche se l’andamento può
differire tra le singole città. Infine, l’analisi per mese, permette di
evidenziare una componente stagionale. Si evidenzia infatti, che le
vendite sono maggiori nei mesi primaverili ed estivi, mentre tendono a
ridursi nei mesi autunnali e invernali. Questo lascia intendere la
presenza di una componente stagionale che non deve essere sottovalutata
nell’interpretazione dei risultati.
#boxplot per prezzo mediano tra le città
ggplot(real_estate, aes(x=city, y=median_price))+
geom_boxplot(fill="lightblue")+
labs(
title="Distribuzione del prezzo mediano per città",
x="Città",
y="Prezzo mediano ($)"
)+
theme_minimal()
#boxplot del volume delle vendite per città
ggplot(real_estate, aes(x=city, y=volume))+
geom_boxplot(fill="lightgreen")+
labs(
title="Distribuzione del volume delle vendite per città",
x="Città",
y="Volume delle vendite (mln $)"
)+
theme_minimal()
#boxplot volume delle vendite per anno
ggplot(real_estate, aes(x=factor(year), y=volume))+
geom_boxplot(fill="lightcoral")+
labs(
title="Distribuzione del volume delle vendite per anno",
x="Anno",
y="Volume delle vendite (mln $)"
)+
theme_minimal()
#Grafico a barre sovrapposte:vendite per mese e città
ggplot(real_estate, aes(x=factor(month), y=sales, fill=city))+
geom_col()+
labs(
title="Vednite per mese e città",
x="Mese",
y="Numero di vendite",
fill="Città"
)+
theme_minimal()
#barre normalizzate
ggplot(real_estate, aes(x=factor(month), y=sales, fill=city))+
geom_col(position = "fill")+
labs(
title="Distribuzione percentuale delle vendite per mese e città",
x="Mese",
y="Percentuale",
fill="Città"
)+
scale_y_continuous(labels = scales::percent)+
theme_minimal()
#Grafico comprensivo di anno
ggplot(real_estate, aes(x=factor(month), y=sales, fill=city))+
geom_col()+
facet_wrap(~ year)+
labs(
title="Vendite mensili per città e anno",
x="Mese",
y="Numero di vendite",
fill="Città"
)+
theme_minimal()
#Line chart
real_estate$date <- as.Date(
paste(real_estate$year, real_estate$month, "01", sep = "-")
)
ggplot(real_estate, aes(x = date, y = sales)) +
geom_line(color = "black") +
facet_wrap(~ city) +
labs(
title = "Andamento delle vendite per città",
x = "Periodo",
y = "Numero di vendite"
) +
theme_minimal()
## Commento boxplot punto 8 I boxplot mostrano la distribuzione del
prezzo mediano degli immobili nelle 4 città considerate. Si osservano
delle differenze molto evidenti nei 4 mercati immobiliari. Wichita Falls
ha una distribuzione dei prezzi minore, Beaumont presenta valori
intermedi, Tyler e Bryan-College Station hanno invece i valori di prezzi
più elevati. Il secondo boxplot, ossia quello inerente al volume delle
vendite, evidenzia delle differenze tra i mercati delle quattro città,
in questo caso, Tyler e Bryan-College Station hanno mediamente dei
valori maggiori, mentre Wichita Falls mostra volumi più contenuti. La
diversa ampiezza dei box, indica che la variabilità del volume delle
vendite non è uguale tra le città.Anche confrontando il volume delle
vendite tra i diversi anni si osservano differenze nella distribuzione.
In generale, negli anni più recenti i valori risultano maggiori,
evidenziando una crescita del valore complessivo delle vendite nel
periodo considerato. Il grafico a barre mostra delle differenze nelle
vendite mensili tra le città. In generale, nei mesi primaverili ed
estivi si hanno livelli di vendita maggiori rispetto ai mesi autunnali e
invernali. Il grafico normalizzato permette invece di confrontare la
percentuale delle vendite tra le città, mentre l’utilizzo dell’anno
mediante facet_wrap, permette di osservare il cambiamento dell’andamento
nel corso del periodo anlizzato.
Dall’analisi dei dati a disposizione, sono state evidenziate delle differenze significative tra i mercati immobiliari delle città prese in esame, questo vale sia per i prezzi che per il numero e il valore delle vendite. In particolare, Wichita Falls presenta i valori più contenuti, mentre Tyler e Bryan-College Station mostrano dei livelli di vendita maggiori. Il volume delle vendite si è rivelato la variabile con maggiore variabilità relativa e maggiore asimmetria. L’analisi temporale ha inoltre evidenziato una componente stagionale, in questo caso infatti, le vendite sono concentrate nei mesi primaverili ed estivi, per poi calare nel periodo invernale ed autunnale. Nel complesso, i risultati suggeriscono di adottare una strategia di vendita differenziata a seconda della città e del periodo dell’anno, concentrando maggiormente le attività promozionali nei periodi di maggior richiesta e monitorando l’efficacia degli annunci nei diversi mercati.