Carico il dataset e faccio un pò di esplorazione
dati <- read.csv('realestate_texas.csv')
attach(dati)
head(dati)
| city | year | month | sales | volume | median_price | listings | months_inventory |
|---|---|---|---|---|---|---|---|
| Beaumont | 2010 | 1 | 83 | 14.162 | 163800 | 1533 | 9.5 |
| Beaumont | 2010 | 2 | 108 | 17.690 | 138200 | 1586 | 10.0 |
| Beaumont | 2010 | 3 | 182 | 28.701 | 122400 | 1689 | 10.6 |
| Beaumont | 2010 | 4 | 200 | 26.819 | 123200 | 1708 | 10.6 |
| Beaumont | 2010 | 5 | 202 | 28.833 | 123100 | 1771 | 10.9 |
| Beaumont | 2010 | 6 | 189 | 27.219 | 122800 | 1803 | 11.1 |
sapply(dati, class)
## city year month sales
## "character" "integer" "integer" "integer"
## volume median_price listings months_inventory
## "numeric" "numeric" "integer" "numeric"
summary_tbl <- tibble(
variabile = c("city", "year", "month", "sales", "volume (M $ )", "median_price ( $ )", "listings", "months_inventory (mesi)"),
tipo = c("qualitativa nominale","quantitativa discreta","quantitativa discreta",
"quantitativa discreta","quantitativa continua","quantitativa continua",
"quantitativa discreta","quantitativa continua")
)
kable(summary_tbl, col.names = c("Variabile","Tipo statistico"))
| Variabile | Tipo statistico |
|---|---|
| city | qualitativa nominale |
| year | quantitativa discreta |
| month | quantitativa discreta |
| sales | quantitativa discreta |
| volume (M $ ) | quantitativa continua |
| median_price ( $ ) | quantitativa continua |
| listings | quantitativa discreta |
| months_inventory (mesi) | quantitativa continua |
Sono presenti due variabili quantitative temporali mese e anno, che sarà utile unificare. È presente una variabile qualitativa ( city ) che fa riferimento a sole quattre città. Tutte le altre variabili sono di tipo quantitative è tengono conto di informazioni utili per un’analisi delle vendite immobiliari.
Definisco due funzioni, una che restituisca i vari indici per una variabile, e una che restituisca una distribuzione di frequenza
info_indici <- function(var){
tibble(
Nome_var = as.character(ensym(var)),
Media = round(mean(var),2),
Mediana = round(median(var),2),
Sd = round(sd(var),2),
Skewness = round(skewness(var),2),
Kurtosis = round(kurtosis(var) - 3,2),
CV = round(sd(var) / abs(mean(var)),2)
)
}
freq_table <- function(dati, var){
ft <- dati %>%
group_by(!!ensym(var)) %>%
summarise(count_class = n(), .groups = "drop") %>%
ungroup() %>%
mutate(count_tot = sum(count_class),
freq_rel = round(count_class / count_tot,3))
return(ft)
}
city_table <- freq_table(dati,city)
city_table
| city | count_class | count_tot | freq_rel |
|---|---|---|---|
| Beaumont | 60 | 240 | 0.25 |
| Bryan-College Station | 60 | 240 | 0.25 |
| Tyler | 60 | 240 | 0.25 |
| Wichita Falls | 60 | 240 | 0.25 |
Come ci si aspetta, visto che i dati sono riferiti allo stesso arco temporale (12 mesi * 5 anni = 60 records), abbiamo un numero di record uguale per ognuno delle città.
info_indici(sales)
| Nome_var | Media | Mediana | Sd | Skewness | Kurtosis | CV |
|---|---|---|---|---|---|---|
| sales | 192.29 | 175.5 | 79.65 | 0.72 | -0.31 | 0.41 |
info_indici(volume)
| Nome_var | Media | Mediana | Sd | Skewness | Kurtosis | CV |
|---|---|---|---|---|---|---|
| volume | 31.01 | 27.06 | 16.65 | 0.88 | 0.18 | 0.54 |
info_indici(median_price)
| Nome_var | Media | Mediana | Sd | Skewness | Kurtosis | CV |
|---|---|---|---|---|---|---|
| median_price | 132665.4 | 134500 | 22662.15 | -0.36 | -0.62 | 0.17 |
info_indici(listings)
| Nome_var | Media | Mediana | Sd | Skewness | Kurtosis | CV |
|---|---|---|---|---|---|---|
| listings | 1738.02 | 1618.5 | 752.71 | 0.65 | -0.79 | 0.43 |
info_indici(months_inventory)
| Nome_var | Media | Mediana | Sd | Skewness | Kurtosis | CV |
|---|---|---|---|---|---|---|
| months_inventory | 9.19 | 8.95 | 2.3 | 0.04 | -0.17 | 0.25 |
Ha senso creare una colonna che incorpori mese è anno per ogni record:
dati <- dati %>%
mutate(year_month_date = as.Date(paste(year, month, '01', sep = "-")))
head(dati)
| city | year | month | sales | volume | median_price | listings | months_inventory | year_month_date |
|---|---|---|---|---|---|---|---|---|
| Beaumont | 2010 | 1 | 83 | 14.162 | 163800 | 1533 | 9.5 | 2010-01-01 |
| Beaumont | 2010 | 2 | 108 | 17.690 | 138200 | 1586 | 10.0 | 2010-02-01 |
| Beaumont | 2010 | 3 | 182 | 28.701 | 122400 | 1689 | 10.6 | 2010-03-01 |
| Beaumont | 2010 | 4 | 200 | 26.819 | 123200 | 1708 | 10.6 | 2010-04-01 |
| Beaumont | 2010 | 5 | 202 | 28.833 | 123100 | 1771 | 10.9 | 2010-05-01 |
| Beaumont | 2010 | 6 | 189 | 27.219 | 122800 | 1803 | 11.1 | 2010-06-01 |
La variabile con maggior variabilità è quella che presenta un Coefficiente di Variazione CV maggiore, quindi, osservando i risultati sopra, si deduce essere volume. Ma è sempre la variabile volume che presenta l’asimmetria più elevata poiché, tra tutte, pesenta un valore di Skewness maggiore (in particola asimmetria positiva).
Viene richiesto di scegliere una variabile quantitativa e suddividerla in classi, scelgo la variabule sales
dati$sales_class <- cut(sales, breaks = seq(min(sales) - (min(sales) %% 50), max(sales) + 50, by = 50))
freq_table(dati,sales_class)
| sales_class | count_class | count_tot | freq_rel |
|---|---|---|---|
| (50,100] | 21 | 240 | 0.088 |
| (100,150] | 72 | 240 | 0.300 |
| (150,200] | 56 | 240 | 0.233 |
| (200,250] | 32 | 240 | 0.133 |
| (250,300] | 34 | 240 | 0.142 |
| (300,350] | 13 | 240 | 0.054 |
| (350,400] | 9 | 240 | 0.038 |
| (400,450] | 3 | 240 | 0.013 |
calcolo il coefficiente di gini normalizzato per la nuova variabile
gini.index <- function(var){
n <- length(var)
ni = table(var)
fi = ni/n
fi2 = fi^2
J = length(table(var))
gini = 1 - sum(fi2)
gini.normalizzato = gini/((J-1)/J)
return(gini.normalizzato)
}
cat("Indice di gini per sales_class:", gini.index(dati$sales_class), "\n")
## Indice di gini per sales_class: 0.9206349
che indica un’alta eterogeneita delle della classe, diamo una rapida occhiata grafica
ggplot(dati, aes(x = sales_class)) +
geom_bar(fill = 'lightblue', color = "black") +
theme_minimal() +
labs(x = "Classi numero di vendite",
y = "Conteggio",
title = "Distribuzione del numero di vendite mensili")
Creo una funzione che calcoli la probabilità di estrazione di un record con delle caratteristiche
probabilita <- function(col, val){
round(mean(col == val),3)
}
cat("Probabilità che una righa riporti la città di Beaumont: ", probabilita(city, "Beaumont")*100, "%")
## Probabilità che una righa riporti la città di Beaumont: 25 %
cat("Probabilità che una righa riporti il mese di luglio: ", probabilita(month, 7)*100, "%")
## Probabilità che una righa riporti il mese di luglio: 8.3 %
cat("Probabilità che una righa riporti dicembre 2012: ", probabilita(dati$year_month_date, "2012-12-01")*100, "%" )
## Probabilità che una righa riporti dicembre 2012: 1.7 %
Ci viene richiesto di creare due nuove colonne che rappresentino: prezzo medio ed efficacia degli annunci di vendita. Partiamo dal primo, esso è dato dal:
prezzo medio di vendita = (volume entrate)/(numero vendite)
dati <- dati %>%
mutate(mean_price = round(volume/sales*1000000,0))
Mentre l’efficacia degli annunci potrebbe essere calcolata:
efficacia di vendita = (numero vendite)/(numero annunci)
dati <- dati %>%
mutate(sales_eff = round(sales/listings,3))
head(dati)
| city | year | month | sales | volume | median_price | listings | months_inventory | year_month_date | sales_class | mean_price | sales_eff |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Beaumont | 2010 | 1 | 83 | 14.162 | 163800 | 1533 | 9.5 | 2010-01-01 | (50,100] | 170627 | 0.054 |
| Beaumont | 2010 | 2 | 108 | 17.690 | 138200 | 1586 | 10.0 | 2010-02-01 | (100,150] | 163796 | 0.068 |
| Beaumont | 2010 | 3 | 182 | 28.701 | 122400 | 1689 | 10.6 | 2010-03-01 | (150,200] | 157698 | 0.108 |
| Beaumont | 2010 | 4 | 200 | 26.819 | 123200 | 1708 | 10.6 | 2010-04-01 | (150,200] | 134095 | 0.117 |
| Beaumont | 2010 | 5 | 202 | 28.833 | 123100 | 1771 | 10.9 | 2010-05-01 | (200,250] | 142738 | 0.114 |
| Beaumont | 2010 | 6 | 189 | 27.219 | 122800 | 1803 | 11.1 | 2010-06-01 | (150,200] | 144016 | 0.105 |
Facciamo statistica condizionata per città, anno e mese.
Definisco una funzione che per ogni variabile restituisca i summary rispetto a città, anno e mese
summary <- function(dati, var) {
var_name <- as.character(ensym(var))
summary_city <- dati %>%
group_by(city) %>%
summarise(
Media = round(mean({{var}}), 2),
Sd = round(sd({{var}}), 2)) %>%
kable(caption = paste("Riepilogo per città -", var_name))
summary_year <- dati %>%
group_by(year) %>%
summarise(
Media = round(mean({{var}}), 2),
Sd = round(sd({{var}}), 2)) %>%
kable(caption = paste("Riepilogo per anno -", var_name))
summary_month <- dati %>%
group_by(month) %>%
summarise(
Media = round(mean({{var}}), 2),
Sd = round(sd({{var}}), 2)) %>%
kable(caption = paste("Riepilogo per mese -", var_name))
return(list(
city = summary_city,
year = summary_year,
month = summary_month
))
}
ed una funzione che plotti dei i risultati in boxplot
plot_boxplots <- function(dati, var) {
var_name <- deparse(substitute(var))
plot_cities <- ggplot(dati, aes(x = city, y = {{ var }}, fill = city)) +
geom_boxplot(fill = "skyblue") +
labs(x = "Città", y = var_name) +
theme_minimal()
plot_years <- ggplot(dati, aes(x = factor(year), y = {{ var }})) +
geom_boxplot(fill = "skyblue") +
labs(x = "Anno", y = var_name) +
theme_minimal()
plot_months <- ggplot(dati, aes(x = factor(month), y = {{ var }})) +
geom_boxplot(fill = "skyblue") +
labs(x = "Mese", y = var_name) +
theme_minimal()
return(list(
plot_city = plot_cities,
plot_year = plot_years,
plot_month = plot_months
))
}
Iniziamo con il numero di vendite e facciamo dei confronti
sales_summary <- summary(dati,sales)
sales_summary
## $city
##
##
## Table: Riepilogo per città - sales
##
## |city | Media| Sd|
## |:---------------------|------:|-----:|
## |Beaumont | 177.38| 41.48|
## |Bryan-College Station | 205.97| 84.98|
## |Tyler | 269.75| 61.96|
## |Wichita Falls | 116.07| 22.15|
##
## $year
##
##
## Table: Riepilogo per anno - sales
##
## | year| Media| Sd|
## |----:|------:|-----:|
## | 2010| 168.67| 60.54|
## | 2011| 164.12| 63.87|
## | 2012| 186.15| 70.91|
## | 2013| 211.92| 84.00|
## | 2014| 230.60| 95.51|
##
## $month
##
##
## Table: Riepilogo per mese - sales
##
## | month| Media| Sd|
## |-----:|------:|-----:|
## | 1| 127.40| 43.38|
## | 2| 140.85| 51.07|
## | 3| 189.45| 59.18|
## | 4| 211.70| 65.40|
## | 5| 238.85| 83.12|
## | 6| 243.55| 95.00|
## | 7| 235.75| 96.27|
## | 8| 231.45| 79.23|
## | 9| 182.35| 72.52|
## | 10| 179.90| 74.95|
## | 11| 156.85| 55.47|
## | 12| 169.40| 60.75|
Con 270 vendite mensili medie la città di Tyler risulta quella con una media di acqusti maggiore, viceversa la città di Wichita Falls è quella con il valore piu basso.
La mediana delle vendite annue generale è in evidente crescita, con un aumento delle vendite medie mensili per anno in crescita di quasi il 37% tra il 2010 e 2014.
Infine, nel periodo centrale dell’anno si osserva un aumento del numero di vendite.
sales_plot <- plot_boxplots(dati,sales)
sales_plot$plot_year
sales_plot$plot_month
volume_summary <- summary(dati,volume)
volume_summary
## $city
##
##
## Table: Riepilogo per città - volume
##
## |city | Media| Sd|
## |:---------------------|-----:|-----:|
## |Beaumont | 26.13| 6.97|
## |Bryan-College Station | 38.19| 17.25|
## |Tyler | 45.77| 13.11|
## |Wichita Falls | 13.93| 3.24|
##
## $year
##
##
## Table: Riepilogo per anno - volume
##
## | year| Media| Sd|
## |----:|-----:|-----:|
## | 2010| 25.68| 10.80|
## | 2011| 25.16| 12.20|
## | 2012| 29.27| 14.52|
## | 2013| 35.15| 17.93|
## | 2014| 39.77| 21.19|
##
## $month
##
##
## Table: Riepilogo per mese - volume
##
## | month| Media| Sd|
## |-----:|-----:|-----:|
## | 1| 19.00| 8.37|
## | 2| 21.65| 10.09|
## | 3| 29.38| 12.02|
## | 4| 33.30| 14.52|
## | 5| 39.70| 19.02|
## | 6| 41.30| 21.08|
## | 7| 39.12| 21.41|
## | 8| 38.01| 18.05|
## | 9| 29.60| 15.22|
## | 10| 29.08| 15.13|
## | 11| 24.81| 11.15|
## | 12| 27.09| 12.57|
come ci si aspetta l’andamento dei volumi in entrata seguono un andamento simile al numero di immobili venduti. I volumi maggiori in entrata sono per la città di Tyler e sono in generale in crescita negli anni
volume_plot <- plot_boxplots(dati,volume)
volume_plot$plot_city
median_summary <- summary(dati,median_price)
median_summary
## $city
##
##
## Table: Riepilogo per città - median_price
##
## |city | Media| Sd|
## |:---------------------|--------:|--------:|
## |Beaumont | 129988.3| 10104.99|
## |Bryan-College Station | 157488.3| 8852.24|
## |Tyler | 141441.7| 9336.54|
## |Wichita Falls | 101743.3| 11320.03|
##
## $year
##
##
## Table: Riepilogo per anno - median_price
##
## | year| Media| Sd|
## |----:|--------:|--------:|
## | 2010| 130191.7| 21821.76|
## | 2011| 127854.2| 21317.80|
## | 2012| 130077.1| 21431.52|
## | 2013| 135722.9| 21708.08|
## | 2014| 139481.2| 25625.41|
##
## $month
##
##
## Table: Riepilogo per mese - median_price
##
## | month| Media| Sd|
## |-----:|------:|--------:|
## | 1| 124250| 25151.28|
## | 2| 130075| 22822.59|
## | 3| 127415| 23442.03|
## | 4| 131490| 21458.40|
## | 5| 134485| 18796.26|
## | 6| 137620| 19231.02|
## | 7| 134750| 21944.78|
## | 8| 136675| 22488.38|
## | 9| 134040| 24344.10|
## | 10| 133480| 26358.07|
## | 11| 134305| 24691.47|
## | 12| 133400| 22809.76|
il prezzo mediano è maggiore per la città di Bryan-College Station, e risulta piuttosto costante durante il quinquiennio sotto esame. Inoltre il prezzo mediano non sembra essere dipendente dalla stagione dell’anno.
median_plot <- plot_boxplots(dati,median_price)
median_plot$plot_city
listings_summary <- summary(dati,listings)
listings_summary
## $city
##
##
## Table: Riepilogo per città - listings
##
## |city | Media| Sd|
## |:---------------------|-------:|------:|
## |Beaumont | 1679.32| 91.13|
## |Bryan-College Station | 1458.13| 252.53|
## |Tyler | 2905.05| 226.75|
## |Wichita Falls | 909.58| 73.76|
##
## $year
##
##
## Table: Riepilogo per anno - listings
##
## | year| Media| Sd|
## |----:|-------:|------:|
## | 2010| 1826.00| 785.02|
## | 2011| 1849.65| 780.38|
## | 2012| 1776.81| 738.45|
## | 2013| 1677.60| 743.52|
## | 2014| 1560.04| 706.71|
##
## $month
##
##
## Table: Riepilogo per mese - listings
##
## | month| Media| Sd|
## |-----:|-------:|------:|
## | 1| 1647.05| 704.61|
## | 2| 1692.50| 711.20|
## | 3| 1756.70| 727.35|
## | 4| 1825.70| 770.43|
## | 5| 1823.85| 790.22|
## | 6| 1833.25| 811.63|
## | 7| 1821.20| 826.72|
## | 8| 1786.30| 815.87|
## | 9| 1748.90| 802.66|
## | 10| 1710.35| 779.16|
## | 11| 1652.70| 741.25|
## | 12| 1557.75| 692.57|
la città di Tyler presenta in assoluto un numero medio di annunci attivi mensilmente molto maggiore rispetto alle altre, in particolare risulta essere il doppio della seconda città per numeri. La media del numero di annunci attivi è il leggera diminuzione negli anni e infine non sembra esserci una evidente correlazione tra annunci attivi e periodo dell’anno
listings_plot <- plot_boxplots(dati,listings)
listings_plot$plot_city
listings_plot$plot_year
months_inventory_summary <- summary(dati,months_inventory)
months_inventory_summary
## $city
##
##
## Table: Riepilogo per città - months_inventory
##
## |city | Media| Sd|
## |:---------------------|-----:|----:|
## |Beaumont | 9.97| 1.65|
## |Bryan-College Station | 7.66| 2.25|
## |Tyler | 11.32| 1.89|
## |Wichita Falls | 7.82| 0.78|
##
## $year
##
##
## Table: Riepilogo per anno - months_inventory
##
## | year| Media| Sd|
## |----:|-----:|----:|
## | 2010| 9.97| 2.08|
## | 2011| 10.90| 2.07|
## | 2012| 9.88| 1.61|
## | 2013| 8.15| 1.69|
## | 2014| 7.06| 1.75|
##
## $month
##
##
## Table: Riepilogo per mese - months_inventory
##
## | month| Media| Sd|
## |-----:|-----:|----:|
## | 1| 8.84| 1.97|
## | 2| 9.06| 1.98|
## | 3| 9.40| 2.06|
## | 4| 9.72| 2.24|
## | 5| 9.68| 2.38|
## | 6| 9.70| 2.41|
## | 7| 9.62| 2.50|
## | 8| 9.39| 2.45|
## | 9| 9.19| 2.52|
## | 10| 8.94| 2.44|
## | 11| 8.66| 2.37|
## | 12| 8.12| 2.27|
Tyler è la città che impiega più tempo per esaurire gli annunci, anche perchè è quella che ne ha di più attivi. Spicca invece la città di Bryan-College Station che in media in 7 mesi e mezzo riesce ad esaurire gli annunci attivi (pur avendo la metà degli annunci attivi della città di Tyler).
Si osserva, infine, una diminuzione nel tempo del tempo impiegato per esaurire gli annunci, che potrebbe essere dovuto all’aumento del numero di acquisti rispetto ad un numero di immobili listati costante nel quinquiennio
months_inventory_plot <- plot_boxplots(dati,months_inventory)
months_inventory_plot$plot_city
months_inventory_plot$plot_year
mean_price_summary <- summary(dati,mean_price)
mean_price_summary
## $city
##
##
## Table: Riepilogo per città - mean_price
##
## |city | Media| Sd|
## |:---------------------|--------:|--------:|
## |Beaumont | 146640.4| 11232.19|
## |Bryan-College Station | 183534.3| 15149.34|
## |Tyler | 167676.7| 12350.53|
## |Wichita Falls | 119430.1| 11398.46|
##
## $year
##
##
## Table: Riepilogo per anno - mean_price
##
## | year| Media| Sd|
## |----:|--------:|--------:|
## | 2010| 150188.6| 23279.52|
## | 2011| 148250.5| 24938.40|
## | 2012| 150898.7| 26438.45|
## | 2013| 158705.2| 26523.75|
## | 2014| 163558.8| 31740.53|
##
## $month
##
##
## Table: Riepilogo per mese - mean_price
##
## | month| Media| Sd|
## |-----:|--------:|--------:|
## | 1| 145640.5| 29819.17|
## | 2| 148840.5| 25120.33|
## | 3| 151136.6| 23237.88|
## | 4| 151461.3| 26174.23|
## | 5| 158235.1| 25787.16|
## | 6| 161545.8| 23470.40|
## | 7| 156881.0| 27220.16|
## | 8| 156455.6| 28253.15|
## | 9| 156522.4| 29669.36|
## | 10| 155897.4| 32527.38|
## | 11| 154233.0| 29684.92|
## | 12| 154995.5| 27008.83|
andamento molto simile al prezzo mediano d’acquisto, la città di Bryan-College Station è quella con un prezzo medio maggiore, mentre quella minore è la città di Wichita Falls. Negli anni c’è un leggero aumento del prezzo medio generale di vendita ed il costo medio degli immobili non sembra variare in base alla stagione
mean_price_plot <- plot_boxplots(dati,mean_price)
mean_price_plot$plot_city
mean_price_plot$plot_year
sales_eff_summary <- summary(dati,sales_eff)
sales_eff_summary
## $city
##
##
## Table: Riepilogo per città - sales_eff
##
## |city | Media| Sd|
## |:---------------------|-----:|----:|
## |Beaumont | 0.11| 0.03|
## |Bryan-College Station | 0.15| 0.07|
## |Tyler | 0.09| 0.02|
## |Wichita Falls | 0.13| 0.02|
##
## $year
##
##
## Table: Riepilogo per anno - sales_eff
##
## | year| Media| Sd|
## |----:|-----:|----:|
## | 2010| 0.10| 0.03|
## | 2011| 0.09| 0.02|
## | 2012| 0.11| 0.03|
## | 2013| 0.13| 0.04|
## | 2014| 0.16| 0.06|
##
## $month
##
##
## Table: Riepilogo per mese - sales_eff
##
## | month| Media| Sd|
## |-----:|-----:|----:|
## | 1| 0.08| 0.02|
## | 2| 0.09| 0.02|
## | 3| 0.12| 0.03|
## | 4| 0.13| 0.04|
## | 5| 0.14| 0.05|
## | 6| 0.14| 0.06|
## | 7| 0.14| 0.07|
## | 8| 0.14| 0.05|
## | 9| 0.11| 0.03|
## | 10| 0.11| 0.04|
## | 11| 0.10| 0.03|
## | 12| 0.12| 0.04|
Bryan-College Station presenta una distribuzione meno compatta e con mediana maggiore tra tutte le altre città, l’efficienze di vendita degli immobili è in crescita negli anni e risulta essere maggiore nei mesi centrali dell’anno (da maggio ad agosto)
sales_eff_plot <- plot_boxplots(dati,sales_eff)
sales_eff_plot$plot_city
sales_eff_plot$plot_year
sales_eff_plot$plot_month
Creo dei plot per le variabili.
ggplot(dati, aes(x = factor(month), y = sales, fill = city)) +
geom_col() +
facet_wrap(~year) +
theme_minimal() +
labs(x = "Mese",
y = "Numero di vendite",
title = "Andamento delle vendite di immobili per anno")
ggplot(dati, aes(x = factor(month), y = sales, fill = city)) +
geom_col(position = "fill") +
facet_wrap(~year) +
theme_minimal() +
labs(x = "Mese",
y = "Frequenza",
title = "Andamento delle vendite di immobili per anno normalizzato")
agg_sales_2 <- dati %>%
group_by(year_month_date) %>%
summarise(total_sales = sum(sales), .groups = "drop")
ggplot(agg_sales_2, aes(x = year_month_date, y = total_sales)) +
geom_line(col = 'red') +
geom_point(col = 'red') +
theme_minimal() +
labs(x = "Anno",
y = "Numero di vendite",
title = "Andamento delle vendite mensili (Texas, totale)")
Dal primo grafico si osserva un aumento degli acquisti nei mesi da maggio ad agosto, soprattutto per le città di Tyler e Bryan-College Station. È da indagare se questo sia dovuto ad un maggior numero di annunci in questi mesi, oppure ad un sales_eff maggiore.
Dal tezo grafico osserviamo un andamento periododico crescente degli acquisti di immobili per le quattro città.
agg_sales_3 <- dati %>%
group_by(year, city) %>%
summarise(total_sales = sum(sales), .groups = "drop")
ggplot(agg_sales_3, aes(x = year, y = total_sales, color = city, group = city)) +
geom_line() +
geom_point(size = 2) +
theme_minimal() +
labs(x = "Anno",
y = "Vendite totali",
color = "Città",
title = "Vendite annuali per città")
Infine, da quest’ultimo grafico si osserva che negli anni c’è in generale un aumento delle vendite di case (per Bryan-Colleage Station in 5 anni c’è stato un aumento del più del 50% delle vendite), fatta eccezione per la sola città di Wichita Falls che è rimasta con vendite costanti.
ggplot(dati, aes(x = year_month_date, y = volume, color = city, group = city)) +
geom_line() +
geom_point(size = 1) +
theme_minimal() +
facet_wrap(~city) +
labs(
x = "Anno",
y = "Volume vendite (in milioni di $)",
color = "",
title = "Andamento quinquiennale del volume delle vendite per città"
)
Come già fatto notare per la variabile sales, è presente un andamento periodico annuale per i volumi delle città di Tyler e Bryan-College Station, con picchi nei mesi centrali.
ggplot(dati, aes(x = factor(year), y = median_price, fill = city)) +
geom_boxplot() +
labs(title = "Prezzo mediano d'acquisto nei 5 anni per citta",
x = "Anno", y = "Prezzo Mediano", fill = "Città") +
theme_minimal()
Dal confronto delle distribuzioni dei prezzi mediani per citta è anno si osserva che:
La città di Bryan-College Station mostra sistematicamente i prezzi mediani più alti tra tutte le città, con una leggera tendenza all’aumento negli anni.
La città di Tyler evidenzia un incremento graduale del prezzo mediano nel tempo, seppur meno marcato rispetto a Bryan-College Station.
Le città di Wichita Falls e Beaumont presentano prezzi mediani relativamente stabili nel corso dei cinque anni, senza variazioni significative.
ggplot(dati, aes(x = factor(month), y = listings, fill = city)) +
geom_col() +
facet_wrap(~year)+
theme_minimal() +
labs(x = "Anno", y = "Annunci Attivi",
fill = "Città",
title = "Numero annunci attivi per città e anno")
ggplot(dati, aes(x = factor(month), y = listings, fill = city)) +
geom_col(position = "fill") +
facet_wrap(~year)+
theme_minimal() +
labs(x = "Anno", y = "Frequenza",
fill = "Città",
title = "Frequenza annunci attivi per anno e città normalizzato")
ggplot(dati, aes(x = year_month_date, y = listings, color = city, group = city)) +
geom_line() +
geom_point(size = 1) +
facet_wrap(~ city) +
theme_minimal() +
labs(
x = "Anno",
y = "Annunci attivi",
color = "Città",
title = "Annunci attivi nel quinquiennio per città"
)
si osserva un numero di annunci attivi in diminuzione negli anni (in particolare per le città di Bryan-Collage Station e Tyler), questo potrebbe essere dovuto ad un sales eff crescente negli anni
agg_listings_2 <- dati %>%
group_by(city, year) %>%
summarise(total_listing = mean(listings),
sales_eff_mean = mean(sales_eff),
.groups = "drop")
coeff <- max(agg_listings_2$total_listing) / max(agg_listings_2$sales_eff_mean)
ggplot(agg_listings_2, aes(x = year)) +
geom_line(aes(y = total_listing, color = "Listing")) +
geom_line(aes(y = sales_eff_mean * coeff, color = "Sales Efficiency")) +
geom_point(aes(y = total_listing, color = "Listing"), size = 2) +
geom_point(aes(y = sales_eff_mean * coeff, color = "Sales Efficiency"), size = 2) +
scale_y_continuous(
name = "Totale Listing",
sec.axis = sec_axis(~ . / coeff, name = "Sales Efficiency (media annua)")
) +
scale_color_manual(values = c("Listing" = "blue", "Sales Efficiency" = "red")) +
facet_wrap(~ city) +
theme_minimal() +
labs(title = "Andamento Listings e Sales Efficiency per Città",
x = "Anno",
color = "")
nelle città dove c’è un incremento della sales eff è evidente una diminuzione del numero di annunci attivi. Nell’unica citta dove la sales eff risulta costante nei 5 anni (Wichita Falls) rimane costante anche il numero di annunci attivi a fine mese.
ggplot(dati, aes(x = year_month_date, y = months_inventory, color = city, group = city)) +
geom_line() +
geom_point(size = 1) +
facet_wrap(~ city) +
theme_minimal() +
labs(x = "Anno",
y = "Months Inventory medio per anno",
color = "Città",
title = "Months Inventory per anno e città")
negli anni è evidente un’aumento della capacità di vendita degli immobili in particolare per Bryan-College Station, unica eccezione è la città di Wichita Falls.
ggplot(dati, aes(x = year_month_date, y = mean_price, color = city, group = city)) +
geom_line() +
geom_point(size = 1) +
facet_wrap(~ city) +
theme_minimal() +
labs(x = "Anno",
y = "Prezzo medio d'acquisto",
color = "",
title = "Prezzo medio d'acquisto degli immobili per anno")
Il prezzo medio d’acquisto è in aumento per le città di Tyler e Bryan-College Station, mentre per Wichita Falls e Beaumont si riscontra un andamento costante nel quinquiennio.
ggplot(dati, aes(x = year_month_date, y = sales_eff, color = city)) +
geom_line() +
geom_point(size = 1) +
facet_wrap(~ city) +
theme_minimal() +
labs(x = "Anno",
y = "Sales Efficiency",
color = "Città",
title = "Media annuale della Sales Efficiency per città")
spicca su tutta un’efficacia di vendite immobiliari per la città di Bryan-Collage Station (soprattutti nei mesi centrali), andamento crescente più contenuto per le città di Tyler e Beaumont, mentre rimane costante per la città di Wichita Falls.
Si posso fare le seguenti osservazioni:
C’è in generale un aumento degli acquisti di immobili negli anni e questo trend è trainato dalle città di Tyler e Bryan-College Station. Questo aumento d’acquisto non sembra dovuto ad un maggior numero d’annunci in circolo, ma ad annunci più efficaci (spicca in particolare la città di Bryan-College Station).
Sempre per queste due città si osserva un prezzo mediano e un prezzo medio in costante crescita negli anni.
Il prezzo medio d’acquisto per le citta di Beaumont e Wichita Falls rimangono costanti.
La città di Wichita Falls vede una stagnazione di tutte le variabili nel quinquennio.
Infine, risulta evidente una correlazione delle vendite di immobili con la stagionalita.