CARICAMENTO LIBRERIE E DEL DATASET
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
library(ggplot2)
library(e1071)
##
## Attaching package: 'e1071'
## The following object is masked from 'package:ggplot2':
##
## element
library(scales)
Caricamento del file CSV
texas <- read.csv("realestate_texas.csv")
Analizzo la struttura del Dataset
head(texas)
## 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(texas)
## '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 ...
summary(texas)
## city year month sales
## Length:240 Min. :2010 Min. : 1.00 Min. : 79.0
## Class :character 1st Qu.:2011 1st Qu.: 3.75 1st Qu.:127.0
## Mode :character Median :2012 Median : 6.50 Median :175.5
## Mean :2012 Mean : 6.50 Mean :192.3
## 3rd Qu.:2013 3rd Qu.: 9.25 3rd Qu.:247.0
## Max. :2014 Max. :12.00 Max. :423.0
## volume median_price listings months_inventory
## Min. : 8.166 Min. : 73800 Min. : 743 Min. : 3.400
## 1st Qu.:17.660 1st Qu.:117300 1st Qu.:1026 1st Qu.: 7.800
## Median :27.062 Median :134500 Median :1618 Median : 8.950
## Mean :31.005 Mean :132665 Mean :1738 Mean : 9.193
## 3rd Qu.:40.893 3rd Qu.:150050 3rd Qu.:2056 3rd Qu.:10.950
## Max. :83.547 Max. :180000 Max. :3296 Max. :14.900
colSums(is.na(texas))
## city year month sales
## 0 0 0 0
## volume median_price listings months_inventory
## 0 0 0 0
colonne_attese <- c("city", "year", "month", "sales", "volume",
"median_price", "listings", "months_inventory")
Il dataset allegato contiene 240 osservazioni e 8 variabili. Non risultano valori mancanti.
# Trasformo city in variabile qualitativa
texas$city <- as.factor(texas$city)
# Creo una versione categorica dell'anno
texas$year_factor <- as.factor(texas$year)
# Trasformo month in fattore ordinato
texas$month_factor <- factor(
texas$month,
levels = 1:12,
labels = c("Gennaio", "Febbraio", "Marzo", "Aprile",
"Maggio", "Giugno", "Luglio", "Agosto",
"Settembre", "Ottobre", "Novembre", "Dicembre"),
ordered = TRUE
)
# Creo una variabile data per le successive analisi temporali
texas$date <- as.Date(
paste(texas$year, texas$month, "01", sep = "-"),
format = "%Y-%m-%d"
)
Il dataset contiene 8 variabili di diversa natura:
Le variabili year e month
rappresentano la dimensione temporale del dataset. Per questo motivo
vengono mantenute nella loro forma originale e vengono create anche
delle versioni categoriali, utili per i confronti tra anni e mesi.
month viene trasformata in un fattore ordinato per
rispettare la successione naturale dei mesi.
Viene inoltre creata la variabile date, combinando anno
e mese, che permetterà nelle analisi successive di rappresentare
correttamente l’andamento del mercato nel tempo.
La classificazione delle variabili consente quindi di scegliere gli strumenti statistici più appropriati: distribuzioni di frequenza per le variabili qualitative e indici descrittivi per le variabili quantitative.
# Media e mediana: indici di posizione centrale
# Varianza, deviazione standard e IQR:
# misurano la dispersione dei valori
# Skewness:
# misura l'asimmetria della distribuzione
# valori > 0: asimmetria a destra
# valori < 0: asimmetria a sinistra
# valori vicini a 0: distribuzione circa simmetrica
# Seleziono le variabili quantitative
variabili_quantitative <- texas[c(
"sales",
"volume",
"median_price",
"listings",
"months_inventory"
)]
# Creo una funzione con gli indici descrittivi
indici_descrittivi <- function(x) {
c(
Media = mean(x),
Mediana = median(x),
Minimo = min(x),
Q1 = quantile(x, 0.25),
Q3 = quantile(x, 0.75),
Massimo = max(x),
Varianza = var(x),
Dev_standard = sd(x),
IQR = IQR(x),
Skewness = skewness(x)
)
}
# Applico la stessa funzione a tutte le variabili quantitative
tabella_indici <- t(sapply(variabili_quantitative, indici_descrittivi))
# Tabella riassuntiva
knitr::kable(
round(tabella_indici, 2),
caption = "Indici descrittivi delle variabili quantitative"
)
| Media | Mediana | Minimo | Q1.25% | Q3.75% | Massimo | Varianza | Dev_standard | IQR | Skewness | |
|---|---|---|---|---|---|---|---|---|---|---|
| sales | 192.29 | 175.50 | 79.00 | 127.00 | 247.00 | 423.00 | 6.34430e+03 | 79.65 | 120.00 | 0.71 |
| volume | 31.01 | 27.06 | 8.17 | 17.66 | 40.89 | 83.55 | 2.77270e+02 | 16.65 | 23.23 | 0.88 |
| median_price | 132665.42 | 134500.00 | 73800.00 | 117300.00 | 150050.00 | 180000.00 | 5.13573e+08 | 22662.15 | 32750.00 | -0.36 |
| listings | 1738.02 | 1618.50 | 743.00 | 1026.50 | 2056.00 | 3296.00 | 5.66569e+05 | 752.71 | 1029.50 | 0.65 |
| months_inventory | 9.19 | 8.95 | 3.40 | 7.80 | 10.95 | 14.90 | 5.31000e+00 | 2.30 | 3.15 | 0.04 |
#per le variabili qualitative procedo con le frequenze
# Distribuzioni di frequenza
table(texas$city)
##
## Beaumont Bryan-College Station Tyler
## 60 60 60
## Wichita Falls
## 60
prop.table(table(texas$city))
##
## Beaumont Bryan-College Station Tyler
## 0.25 0.25 0.25
## Wichita Falls
## 0.25
table(texas$year_factor)
##
## 2010 2011 2012 2013 2014
## 48 48 48 48 48
prop.table(table(texas$year_factor))
##
## 2010 2011 2012 2013 2014
## 0.2 0.2 0.2 0.2 0.2
table(texas$month_factor)
##
## Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto
## 20 20 20 20 20 20 20 20
## Settembre Ottobre Novembre Dicembre
## 20 20 20 20
prop.table(table(texas$month_factor))
##
## Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio
## 0.08333333 0.08333333 0.08333333 0.08333333 0.08333333 0.08333333 0.08333333
## Agosto Settembre Ottobre Novembre Dicembre
## 0.08333333 0.08333333 0.08333333 0.08333333 0.08333333
Per le variabili quantitative sono stati calcolati indici di posizione, variabilità e forma. Media e mediana descrivono la posizione centrale della distribuzione; varianza, deviazione standard e IQR ne misurano la dispersione; la skewness fornisce informazioni sulla forma della distribuzione, indicando il grado e la direzione dell’asimmetria.
Per sales, la media (192,29) è superiore alla mediana (175,50), indicando la presenza di alcuni valori elevati. La skewness positiva (0,72) conferma una moderata asimmetria verso destra.
Anche volume presenta una media (31,01 milioni di dollari) superiore alla mediana (27,06 milioni) e una skewness positiva (0,89), indicando una distribuzione asimmetrica verso i valori più elevati.
Per median_price, media (132.665 dollari) e mediana (134.500 dollari) sono abbastanza vicine. La skewness negativa (-0,37) evidenzia una lieve asimmetria verso sinistra.
Anche listings presenta una media (1.738,02) superiore alla mediana (1.618,50) e una skewness positiva (0,65), mentre months_inventory presenta media (9,19) e mediana (8,95) molto simili e una skewness prossima a zero (0,04), indicando una distribuzione sostanzialmente simmetrica.
Gli indici di dispersione mostrano quanto i valori siano distribuiti attorno alla parte centrale della distribuzione. Il loro confronto diretto tra variabili espresse in scale differenti verrà approfondito nel punto successivo mediante una misura di variabilità relativa.
Per city, year e month sono state invece utilizzate distribuzioni di frequenza. Il dataset risulta bilanciato: sono presenti 60 osservazioni per ciascuna città, 48 per ciascun anno e 20 per ciascun mese. Di conseguenza, le differenze osservate nelle analisi successive non dipendono da una diversa numerosità dei gruppi.
# Coefficiente di variazione (%)
cv <- sapply(
variabili_quantitative,
function(x) sd(x) / mean(x) * 100
)
# Asimmetria
asimmetria <- sapply(
variabili_quantitative,
skewness
)
# Tabella di confronto
confronto <- data.frame(
CV = cv,
Skewness = asimmetria
)
knitr::kable(
round(confronto, 2),
caption = "Confronto della variabilità e dell'asimmetria"
)
| CV | Skewness | |
|---|---|---|
| sales | 41.42 | 0.71 |
| volume | 53.71 | 0.88 |
| median_price | 17.08 | -0.36 |
| listings | 43.31 | 0.65 |
| months_inventory | 25.06 | 0.04 |
# Variabile con maggiore variabilità relativa
names(which.max(cv))
## [1] "volume"
# Variabile con maggiore asimmetria
names(which.max(abs(asimmetria)))
## [1] "volume"
Per individuare la variabile con maggiore variabilità è stato utilizzato il coefficiente di variazione (CV), che rapporta la deviazione standard alla media. Questo indice consente di confrontare variabili espresse con unità di misura e scale differenti.
La variabile volume presenta il coefficiente di
variazione più elevato, pari a circa 53,7%. È quindi la
variabile caratterizzata dalla maggiore variabilità relativa rispetto
alla propria media. Seguono listings (circa 43,3%) e
sales (circa 41,4%).
Per individuare la distribuzione più asimmetrica sono stati confrontati i valori assoluti della skewness. Anche in questo caso la variabile volume presenta il valore più elevato, con una skewness di circa 0,89.
Per la distribuzione più asimmetrica sono stati confrontati i valori assoluti della skewness, poiché il segno indica la direzione dell’asimmetria, mentre per l’intensità è stato usato il valore assoluto.
Poiché la skewness è positiva, la distribuzione di
volume è asimmetrica verso destra: la maggior parte delle
osservazioni si concentra sui valori più bassi o intermedi, mentre
alcuni periodi presentano volumi di vendita particolarmente elevati.
Volume è sia la variabile con maggiore variabilità relativa sia quella con la distribuzione più asimmetrica.
# Creo classi di ampiezza 50
breaks_sales <- seq(
floor(min(texas$sales) / 50) * 50,
ceiling(max(texas$sales) / 50) * 50,
by = 50
)
texas$sales_class <- cut(
texas$sales,
breaks = breaks_sales,
include.lowest = TRUE
)
# Frequenze assolute e relative
frequenze_sales <- table(texas$sales_class)
frequenze_relative <- prop.table(frequenze_sales)
# Tabella riassuntiva
tabella_classi <- data.frame(
Classe = names(frequenze_sales),
Frequenza = as.numeric(frequenze_sales),
Percentuale = round(as.numeric(frequenze_relative) * 100, 2)
)
knitr::kable(
tabella_classi,
caption = "Distribuzione delle vendite per classi"
)
| Classe | Frequenza | Percentuale |
|---|---|---|
| [50,100] | 21 | 8.75 |
| (100,150] | 72 | 30.00 |
| (150,200] | 56 | 23.33 |
| (200,250] | 32 | 13.33 |
| (250,300] | 34 | 14.17 |
| (300,350] | 13 | 5.42 |
| (350,400] | 9 | 3.75 |
| (400,450] | 3 | 1.25 |
barplot(
frequenze_sales,
main = "Distribuzione delle vendite per classi",
xlab = "Classi di vendite",
ylab = "Frequenza",
las = 2
)
# Indice di eterogeneità di Gini
gini <- 1 - sum(frequenze_relative^2)
gini
## [1] 0.8055556
La variabile sales è stata suddivisa in classi di ampiezza pari a 50 vendite, in modo da ottenere una rappresentazione sintetica della sua distribuzione.
La tabella delle frequenze e il grafico a barre mostrano che le osservazioni non sono distribuite uniformemente tra le classi. Le classi centrali, in particolare quelle corrispondenti a circa 100-200 vendite, risultano maggiormente rappresentate, mentre le classi caratterizzate da valori molto elevati sono meno frequenti.
L’indice di eterogeneità di Gini varia tra 0 e un valore massimo che dipende dal numero di classi. Valori vicini a 0 indicano una forte concentrazione delle osservazioni in poche classi, mentre valori più elevati indicano una distribuzione più eterogenea tra le classi. Il valore ottenuto, pari a circa 0,81, indica che le osservazioni sono distribuite tra più classi e non risultano concentrate in una sola fascia di vendite. La distribuzione presenta quindi un buon grado di eterogeneità, pur mostrando una maggiore concentrazione delle osservazioni nelle classi centrali.
#numero totale di osservazioni
n_totale <- nrow(texas)
#calcolo delle probabilità
prob_beaumont <- sum(texas$city == "Beaumont") / n_totale
prob_luglio <- sum(texas$month == 7) / n_totale
prob_dicembre_2012 <- sum(
texas$month == 12 & texas$year == 2012
) / n_totale
#tabella riassuntiva
tabella_probabilita <- data.frame(
Evento = c(
"Città = Beaumont",
"Mese = Luglio",
"Dicembre 2012"
),
Probabilita = c(
prob_beaumont,
prob_luglio,
prob_dicembre_2012
),
Percentuale = c(
prob_beaumont,
prob_luglio,
prob_dicembre_2012
) * 100
)
#arrotondo solo le colonne numeriche
tabella_probabilita$Probabilita <- round(
tabella_probabilita$Probabilita, 4
)
tabella_probabilita$Percentuale <- round(
tabella_probabilita$Percentuale, 2
)
#visualizzo la tabella
knitr::kable(
tabella_probabilita,
caption = "Probabilità degli eventi considerati"
)
| Evento | Probabilita | Percentuale |
|---|---|---|
| Città = Beaumont | 0.2500 | 25.00 |
| Mese = Luglio | 0.0833 | 8.33 |
| Dicembre 2012 | 0.0167 | 1.67 |
Le probabilità sono state calcolate in modo empirico, utilizzando le frequenze osservate nel dataset. In ciascun caso, la probabilità è data dal rapporto tra il numero di osservazioni favorevoli e il numero totale di osservazioni, pari a 240.
La probabilità che una riga scelta casualmente riguardi Beaumont è pari al 25%.
La probabilità che una riga scelta casualmente riguardi il mese di luglio è pari all’8,33%.
Infine, la probabilità che una riga riguardi contemporaneamente dicembre e l’anno 2012 è pari all’1,67%.
I risultati riflettono la struttura bilanciata del dataset rispetto a città, mesi e anni.
# 1. Prezzo medio degli immobili venduti
# La variabile volume è espressa in milioni di dollari.
# La trasformo in dollari e la divido per il numero di vendite.
texas$average_price <- (texas$volume * 1000000) / texas$sales
# 2. indicatore di assorbimento degli annunci
# Rapporto tra il numero di vendite e il numero di annunci attivi, con risultato espresso in percentuale.
texas$listing_absorption_pct <-
(texas$sales / texas$listings) * 100
# 3. Controllo delle nuove variabili
head(
texas[, c(
"sales",
"volume",
"median_price",
"listings",
"average_price",
"listing_absorption_pct"
)]
)
## sales volume median_price listings average_price listing_absorption_pct
## 1 83 14.162 163800 1533 170626.5 5.414220
## 2 108 17.690 138200 1586 163796.3 6.809584
## 3 182 28.701 122400 1689 157697.8 10.775607
## 4 200 26.819 123200 1708 134095.0 11.709602
## 5 202 28.833 123100 1771 142737.6 11.405985
## 6 189 27.219 122800 1803 144015.9 10.482529
# 4.statistiche descrittive delle nuove variabili
summary(
texas[, c(
"average_price",
"listing_absorption_pct"
)]
)
## average_price listing_absorption_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
# 5. Tabella riassuntiva
tabella_nuove_variabili <- data.frame(
Variabile = c(
"Prezzo medio",
"Assorbimento annunci (%)"
),
Media = c(
mean(texas$average_price),
mean(texas$listing_absorption_pct)
),
Mediana = c(
median(texas$average_price),
median(texas$listing_absorption_pct)
),
Dev_standard = c(
sd(texas$average_price),
sd(texas$listing_absorption_pct)
),
Minimo = c(
min(texas$average_price),
min(texas$listing_absorption_pct)
),
Massimo = c(
max(texas$average_price),
max(texas$listing_absorption_pct)
)
)
# Arrotondo solo le colonne numeriche
tabella_nuove_variabili[, -1] <- round(
tabella_nuove_variabili[, -1],
2
)
# Visualizzo la tabella
knitr::kable(
tabella_nuove_variabili,
caption = "Statistiche descrittive delle nuove variabili"
)
| Variabile | Media | Mediana | Dev_standard | Minimo | Massimo |
|---|---|---|---|---|---|
| Prezzo medio | 154320.37 | 156588.48 | 27147.46 | 97010.20 | 213233.94 |
| Assorbimento annunci (%) | 11.87 | 10.96 | 4.69 | 5.01 | 38.71 |
La variabile average_price ha un valore medio di circa 154.320 dollari e una mediana di circa 156.588 dollari. La vicinanza tra media e mediana indica che il prezzo medio degli immobili venduti non presenta forti squilibri nella distribuzione complessiva.
La variabile listing_absorption_pct presenta invece una media di circa 11,87% e una mediana di circa 10,96%. Ciò significa che, mediamente, il numero di vendite rappresenta circa il 12% degli annunci attivi osservati nel periodo.
Valori più elevati di questo indicatore suggeriscono una maggiore capacità del mercato di assorbire gli immobili disponibili, mentre valori più bassi indicano una maggiore presenza di offerta rispetto alle vendite.
L’indicatore deve comunque essere interpretato con cautela: non misura direttamente l’efficacia delle strategie di marketing, poiché il dataset non permette di verificare se gli immobili venduti corrispondano esattamente agli annunci attivi dello stesso periodo.
library(dplyr)
#variabili quantitative da analizzare
variabili_analisi <- c(
"sales",
"volume",
"median_price",
"listings",
"months_inventory"
)
# 7.1 analisi per città
analisi_citta <- texas %>%
group_by(city) %>%
summarise(
across(
all_of(variabili_analisi),
list(Media = mean, SD = sd)
),
.groups = "drop"
)
#tabella per città
analisi_citta %>%
mutate(across(where(is.numeric), ~ round(.x, 2))) %>%
knitr::kable(
caption = "Media e deviazione standard per città"
)
| city | sales_Media | sales_SD | volume_Media | volume_SD | median_price_Media | median_price_SD | listings_Media | listings_SD | months_inventory_Media | months_inventory_SD |
|---|---|---|---|---|---|---|---|---|---|---|
| Beaumont | 177.38 | 41.48 | 26.13 | 6.97 | 129988.3 | 10104.99 | 1679.32 | 91.13 | 9.97 | 1.65 |
| Bryan-College Station | 205.97 | 84.98 | 38.19 | 17.25 | 157488.3 | 8852.24 | 1458.13 | 252.53 | 7.66 | 2.25 |
| Tyler | 269.75 | 61.96 | 45.77 | 13.11 | 141441.7 | 9336.54 | 2905.05 | 226.75 | 11.32 | 1.89 |
| Wichita Falls | 116.07 | 22.15 | 13.93 | 3.24 | 101743.3 | 11320.03 | 909.58 | 73.76 | 7.82 | 0.78 |
# 7.2 analisi per anno
analisi_anno <- texas %>%
group_by(year) %>%
summarise(
across(
all_of(variabili_analisi),
list(Media = mean, SD = sd)
),
.groups = "drop"
)
#tabella per anno
analisi_anno %>%
mutate(across(where(is.numeric), ~ round(.x, 2))) %>%
knitr::kable(
caption = "Media e deviazione standard per anno"
)
| year | sales_Media | sales_SD | volume_Media | volume_SD | median_price_Media | median_price_SD | listings_Media | listings_SD | months_inventory_Media | months_inventory_SD |
|---|---|---|---|---|---|---|---|---|---|---|
| 2010 | 168.67 | 60.54 | 25.68 | 10.80 | 130191.7 | 21821.76 | 1826.00 | 785.02 | 9.97 | 2.08 |
| 2011 | 164.12 | 63.87 | 25.16 | 12.20 | 127854.2 | 21317.80 | 1849.65 | 780.38 | 10.90 | 2.07 |
| 2012 | 186.15 | 70.91 | 29.27 | 14.52 | 130077.1 | 21431.52 | 1776.81 | 738.45 | 9.88 | 1.61 |
| 2013 | 211.92 | 84.00 | 35.15 | 17.93 | 135722.9 | 21708.08 | 1677.60 | 743.52 | 8.15 | 1.69 |
| 2014 | 230.60 | 95.51 | 39.77 | 21.19 | 139481.2 | 25625.41 | 1560.04 | 706.71 | 7.06 | 1.75 |
# 7.3 analisi per mese
analisi_mese <- texas %>%
group_by(month_factor) %>%
summarise(
across(
all_of(variabili_analisi),
list(Media = mean, SD = sd)
),
.groups = "drop"
)
#tabella per mese
analisi_mese %>%
mutate(across(where(is.numeric), ~ round(.x, 2))) %>%
knitr::kable(
caption = "Media e deviazione standard per mese"
)
| month_factor | sales_Media | sales_SD | volume_Media | volume_SD | median_price_Media | median_price_SD | listings_Media | listings_SD | months_inventory_Media | months_inventory_SD |
|---|---|---|---|---|---|---|---|---|---|---|
| Gennaio | 127.40 | 43.38 | 19.00 | 8.37 | 124250 | 25151.28 | 1647.05 | 704.61 | 8.84 | 1.97 |
| Febbraio | 140.85 | 51.07 | 21.65 | 10.09 | 130075 | 22822.59 | 1692.50 | 711.20 | 9.06 | 1.98 |
| Marzo | 189.45 | 59.18 | 29.38 | 12.02 | 127415 | 23442.03 | 1756.70 | 727.35 | 9.40 | 2.06 |
| Aprile | 211.70 | 65.40 | 33.30 | 14.52 | 131490 | 21458.40 | 1825.70 | 770.43 | 9.72 | 2.24 |
| Maggio | 238.85 | 83.12 | 39.70 | 19.02 | 134485 | 18796.26 | 1823.85 | 790.22 | 9.68 | 2.38 |
| Giugno | 243.55 | 95.00 | 41.30 | 21.08 | 137620 | 19231.02 | 1833.25 | 811.63 | 9.70 | 2.41 |
| Luglio | 235.75 | 96.27 | 39.12 | 21.41 | 134750 | 21944.78 | 1821.20 | 826.72 | 9.62 | 2.50 |
| Agosto | 231.45 | 79.23 | 38.01 | 18.05 | 136675 | 22488.38 | 1786.30 | 815.87 | 9.39 | 2.45 |
| Settembre | 182.35 | 72.52 | 29.60 | 15.22 | 134040 | 24344.10 | 1748.90 | 802.66 | 9.19 | 2.52 |
| Ottobre | 179.90 | 74.95 | 29.08 | 15.13 | 133480 | 26358.07 | 1710.35 | 779.16 | 8.94 | 2.44 |
| Novembre | 156.85 | 55.47 | 24.81 | 11.15 | 134305 | 24691.47 | 1652.70 | 741.25 | 8.66 | 2.37 |
| Dicembre | 169.40 | 60.75 | 27.09 | 12.57 | 133400 | 22809.76 | 1557.75 | 692.57 | 8.12 | 2.27 |
#vendite medie per città
barplot(
analisi_citta$sales_Media,
names.arg = analisi_citta$city,
main = "Vendite medie per città",
xlab = "Città",
ylab = "Vendite medie",
las = 2
)
#vendite medie per anno
plot(
analisi_anno$year,
analisi_anno$sales_Media,
type = "b",
main = "Vendite medie per anno",
xlab = "Anno",
ylab = "Vendite medie"
)
#vendite medie per mese
barplot(
analisi_mese$sales_Media,
names.arg = analisi_mese$month_factor,
main = "Vendite medie per mese",
xlab = "Mese",
ylab = "Vendite medie",
las = 2
)
L’analisi condizionata evidenzia differenze tra città considernado i periodi temporali.
Nel confronto per città, Tyler presenta il numero medio di vendite più elevato, pari a circa 269,75, e anche il volume medio delle vendite più alto, pari a circa 45,77 milioni di dollari. Bryan-College Station presenta invece il prezzo mediano medio più elevato, pari a circa 157.488 dollari. Wichita Falls mostra livelli medi più bassi sia per le vendite sia per il volume.
L’analisi per anno evidenzia una lieve diminuzione delle vendite medie nel 2011, seguita da una crescita negli anni successivi, fino a raggiungere circa 230,60 vendite medie nel 2014.
L’analisi per mese mostra una componente stagionale: le vendite medie risultano più basse a gennaio, con circa 127,40 vendite, e raggiungono il valore massimo a giugno, con circa 243,55 vendite.
L’analisi condizionata evidenzia quindi differenze sia geografiche, tra le diverse città, sia temporali, con una crescita negli ultimi anni osservati e una maggiore attività del mercato nei mesi primaverili ed estivi.
library(ggplot2)
library(dplyr)
# 8.1 prezzo mediano per città
ggplot(texas, aes(x = city, y = median_price)) +
geom_boxplot() +
labs(
title = "Distribuzione del prezzo mediano per città",
x = "Città",
y = "Prezzo mediano ($)"
) +
theme_minimal()
Il boxplot mostra differenze evidenti tra le città.
Bryan-College Station presenta i prezzi mediani più
elevati, con una mediana di circa 155.400 dollari,
mentre Wichita Falls presenta i valori più bassi, con
una mediana di circa 102.300 dollari. Tyler e Beaumont
occupano una posizione intermedia.
La dispersione dei prezzi varia tra le città; Wichita Falls mostra una maggiore ampiezza della distribuzione rispetto a Bryan-College Station e Beaumont. Sono inoltre presenti alcuni valori anomali, soprattutto per Beaumont, Bryan-College Station e Wichita Falls.
ggplot(texas, aes(x = city, y = volume)) +
geom_boxplot() +
facet_wrap(~ year) +
labs(
title = "Distribuzione del volume delle vendite per città e anno",
x = "Città",
y = "Volume delle vendite (milioni di $)"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
)
Il volume delle vendite presenta differenze sia tra città sia tra anni.
Tyler registra generalmente i volumi più elevati,
mentre Wichita Falls presenta i livelli più bassi.
Dal confronto annuale emerge inoltre una crescita del volume complessivo soprattutto dal 2012 al 2014. Il volume medio passa infatti da circa 25,7 milioni di dollari nel 2010 a circa 39,8 milioni nel 2014, indicando una progressiva espansione dell’attività immobiliare nel periodo osservato.
#aggrego le vendite
vendite_mese_citta_anno <- texas %>%
group_by(year, month_factor, city) %>%
summarise(
totale_sales = sum(sales),
.groups = "drop"
)
#faccio grafico a barre sovrapposte
ggplot(
vendite_mese_citta_anno,
aes(
x = month_factor,
y = totale_sales,
fill = city
)
) +
geom_col() +
facet_wrap(~ year) +
labs(
title = "Vendite mensili per città e anno",
x = "Mese",
y = "Vendite totali",
fill = "Città"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
)
Il grafico evidenzia una componente stagionale delle vendite. L’attività
immobiliare tende ad aumentare nei mesi primaverili ed estivi, mentre
risulta più contenuta nei mesi invernali.
In particolare, considerando le vendite medie mensili, il valore più basso si registra a gennaio, con circa 127,40 vendite, mentre il valore massimo si osserva a giugno, con circa 243,55 vendite.
La suddivisione per anno permette inoltre di confrontare l’intensità delle vendite nei diversi periodi storici e di osservare una crescita complessiva soprattutto negli ultimi anni analizzati.
È stato utilizzato geom_col() perché il valore delle
vendite è già contenuto nella variabile totale_sales;
geom_bar(), invece, viene generalmente utilizzizzato quando
si vuole che R conteggi automaticamente il numero delle
osservazioni.
ggplot(
vendite_mese_citta_anno,
aes(
x = month_factor,
y = totale_sales,
fill = city
)
) +
geom_col(position = "fill") +
facet_wrap(~ year) +
scale_y_continuous(labels = scales::percent) +
labs(
title = "Composizione percentuale delle vendite mensili",
x = "Mese",
y = "Percentuale",
fill = "Città"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
)
Nel grafico normalizzato ogni barra rappresenta il 100% delle vendite del relativo mese, suddiviso tra le diverse città.
Questa rappresentazione non permette di confrontare direttamente il numero assoluto di vendite tra i mesi, ma consente di osservare il peso percentuale di ciascuna città sul totale mensile.
Il confronto tra mesi e anni permette quindi di verificare se la composizione geografica delle vendite rimane relativamente stabile oppure se alcune città aumentano o diminuiscono il proprio peso nel mercato nel corso del tempo.
Il grafico normalizzato completa quello precedente: il primo evidenzia le variazioni nel volume complessivo delle vendite, mentre questo evidenzia la loro composizione percentuale tra le città.
ggplot(
texas,
aes(
x = date,
y = sales,
color = city,
group = city
)
) +
geom_line() +
labs(
title = "Andamento delle vendite nel tempo per città",
x = "Periodo",
y = "Numero di vendite",
color = "Città"
) +
theme_minimal()
Il line chart conferma sia le differenze tra città sia la presenza di
variazioni stagionali nel tempo. Tyler presenta
generalmente i livelli di vendita più elevati, mentre Wichita
Falls si colloca su livelli inferiori.
Dal punto di vista temporale, dopo una lieve diminuzione nel 2011, le vendite mostrano una crescita progressiva fino al 2014. Le oscillazioni ricorrenti all’interno dei singoli anni confermano inoltre una maggiore attività del mercato nei mesi primaverili ed estivi.
L’analisi descrittiva del mercato immobiliare texano ha evidenziato differenze significative sia tra le città sia tra i diversi periodi temporali.
Tra le variabili quantitative, volume è risultata quella con la maggiore variabilità relativa, con un coefficiente di variazione di circa 53,7%, ed è anche la variabile con la maggiore asimmetria positiva. Questo indica che il valore complessivo delle vendite presenta forti oscillazioni e alcuni periodi caratterizzati da volumi particolarmente elevati.
Dal confronto tra città emerge che Tyler presenta il numero medio di vendite più elevato, circa 269,75, e anche il volume medio maggiore, circa 45,77 milioni di dollari. Bryan-College Station registra invece il prezzo mediano medio più elevato, circa 157.488 dollari, mentre Wichita Falls presenta livelli medi più bassi sia nelle vendite sia nel volume.
L’analisi temporale mostra una lieve diminuzione delle vendite nel 2011, seguita da una crescita progressiva fino al 2014, anno in cui le vendite medie raggiungono circa 230,60. È inoltre presente una componente stagionale: le vendite risultano mediamente più basse a gennaio e raggiungono il valore massimo a giugno, evidenziando una maggiore attività nei mesi primaverili ed estivi.
Le nuove variabili hanno permesso di approfondire ulteriormente il mercato. Il prezzo medio degli immobili venduti è pari a circa 154.320 dollari, mentre l’indicatore di assorbimento degli annunci presenta un valore medio di circa 11,87%.
Dal punto di vista operativo, Texas Realty Insights potrebbe quindi concentrare l’attenzione sui periodi dell’anno caratterizzati da maggiore attività, monitorare le forti variazioni del volume delle vendite e differenziare le strategie commerciali in base alle caratteristiche dei diversi mercati locali.
Nel complesso, i risultati suggeriscono che il mercato immobiliare analizzato non presenta un andamento uniforme, ma varia in funzione della città, dell’anno e del mese. Le decisioni strategiche dovrebbero quindi tenere conto sia delle differenze territoriali sia della componente temporale e stagionale.