Svolgimento

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"

1. Analisi delle variabili

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.

2. Indici di posizione, variabilità e forma

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

2.1 City

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

2.2 Sales

info_indici(sales)
Nome_var Media Mediana Sd Skewness Kurtosis CV
sales 192.29 175.5 79.65 0.72 -0.31 0.41

2.3 Volume

info_indici(volume)
Nome_var Media Mediana Sd Skewness Kurtosis CV
volume 31.01 27.06 16.65 0.88 0.18 0.54

2.4 Median Price

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

2.5 Listings

info_indici(listings)
Nome_var Media Mediana Sd Skewness Kurtosis CV
listings 1738.02 1618.5 752.71 0.65 -0.79 0.43

2.6 Months Inventory

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

2.7 Considerazioni

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

3. Identificazione delle variabili con maggiore variabilità e asimmetria

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

4. Creazione di classi per una variabile quantitativa

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

5. Calcolo della probabilità

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 %

6. Creazione di nuove variabili

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

7. Analisi condizionata

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

7.1 Sales

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

7.2 Volume

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

7.3 Median Price

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

7.4 Listings

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

7.5 Months Inventory

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

7.6 Mean Price

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

7.7 Sales Eff.

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

8 Creazione di visualizzazioni con ggplot2

Creo dei plot per le variabili.

8.1 Sales

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.

8.2 Volume

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

  • Andamento decisamente crescente per i volumi nel quinquiennio 2010-2014 per le città di Tyler e Bryan-College Station.
  • Debole andamento crescente anche per la città di Beaumont.
  • Rimangono stabili negli anni i volumi mensili per la città di Wichita Falls.

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.

8.3 Median Price

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.

8.4 Listings

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.

8.5 Months Inventory

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.

8.6 Mean Price

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.

8.7 Sales_eff

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.

9 Conclusioni

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.