In questa analisi statistica, verrà esaminato il mercato immobiliare del Texas utilizzando il dataset realestate_texas.csv. Verranno calcolati vari indici statistici, analizzate le distribuzioni delle variabili e create visualizzazioni per comprendere meglio le dinamiche delle vendite immobiliari nelle diverse città del Texas.
required_packages <- c("tidyverse", "ggplot2", "dplyr", "readr", "e1071", "ineq", "zoo", "reshape2", "ggcorrplot")
installed_packages <- rownames(installed.packages())
for(p in required_packages){
if(!(p %in% installed_packages)){
install.packages(p)
}
}
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(dplyr)
library(readr)
library(e1071)
library(ineq)
library(zoo)
##
## Attaching package: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(reshape2)
##
## Attaching package: 'reshape2'
##
## The following object is masked from 'package:tidyr':
##
## smiths
library(ggcorrplot)
data <- read_csv("C:/Users/milan/Desktop/Master Profession Ai/Statistica_descrittiva/realestate_texas.csv")
## Rows: 240 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): city
## dbl (7): year, month, sales, volume, median_price, listings, months_inventory
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
summary(data)
## 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
str(data)
## spc_tbl_ [240 × 8] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ city : chr [1:240] "Beaumont" "Beaumont" "Beaumont" "Beaumont" ...
## $ year : num [1:240] 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
## $ month : num [1:240] 1 2 3 4 5 6 7 8 9 10 ...
## $ sales : num [1:240] 83 108 182 200 202 189 164 174 124 150 ...
## $ volume : num [1:240] 14.2 17.7 28.7 26.8 28.8 ...
## $ median_price : num [1:240] 163800 138200 122400 123200 123100 ...
## $ listings : num [1:240] 1533 1586 1689 1708 1771 ...
## $ months_inventory: num [1:240] 9.5 10 10.6 10.6 10.9 11.1 11.7 11.6 11.7 11.5 ...
## - attr(*, "spec")=
## .. cols(
## .. city = col_character(),
## .. year = col_double(),
## .. month = col_double(),
## .. sales = col_double(),
## .. volume = col_double(),
## .. median_price = col_double(),
## .. listings = col_double(),
## .. months_inventory = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
| Variabile | Tipo |
|---|---|
| city | col_character() |
| year | col_double() |
| month | col_double() |
| sales | col_double() |
| volume | col_double() |
| median_price | col_double() |
| listings | col_double() |
| months_inventory | col_double() |
# Analisi delle Variabili
variabili <- data.frame(
Variabile = c("city", "year", "month", "sales", "volume", "median_price", "listings", "months_inventory"),
Tipo = c(
"Categorica Nominale", # city
"Categorica Ordinale", # year
"Categorica Ordinale", # month
"Quantitativa Continua", # sales
"Quantitativa Continua", # volume
"Quantitativa Continua", # median_price
"Quantitativa Discreta", # listings
"Quantitativa Continua" # months_inventory
),
Descrizione = c(
"Città in cui si sono verificate le vendite",
"Anno di riferimento",
"Mese dell'anno",
"Numero totale di vendite",
"Valore totale delle vendite (milioni di dollari)",
"Prezzo mediano degli immobili venduti",
"Numero totale di annunci attivi",
"Tempo necessario per vendere tutte le inserzioni attive (mesi)"
)
)
# Stampa della tabella aggiornata
print(variabili)
## Variabile Tipo
## 1 city Categorica Nominale
## 2 year Categorica Ordinale
## 3 month Categorica Ordinale
## 4 sales Quantitativa Continua
## 5 volume Quantitativa Continua
## 6 median_price Quantitativa Continua
## 7 listings Quantitativa Discreta
## 8 months_inventory Quantitativa Continua
## Descrizione
## 1 Città in cui si sono verificate le vendite
## 2 Anno di riferimento
## 3 Mese dell'anno
## 4 Numero totale di vendite
## 5 Valore totale delle vendite (milioni di dollari)
## 6 Prezzo mediano degli immobili venduti
## 7 Numero totale di annunci attivi
## 8 Tempo necessario per vendere tutte le inserzioni attive (mesi)
| Variabile | Tipo | Tipo Statistico | Descrizione |
|---|---|---|---|
city |
col_character() |
Categorica Nominale | Nome della città in cui sono avvenute le vendite immobiliari |
year |
col_double() |
Categorica Ordinale | Anno di riferimento |
month |
col_double() |
Categorica Ordinale | Mese di riferimento (valori da 1 a 12) |
sales |
col_double() |
Quantitativa Continua | Numero totale di vendite |
volume |
col_double() |
Quantitativa Continua | Valore totale delle vendite, in milioni di dollari |
median_price |
col_double() |
Quantitativa Continua | Prezzo mediano degli immobili venduti, in dollari |
listings |
col_double() |
Quantitativa Discreta | Numero totale di annunci immobiliari attivi |
months_inventory |
col_double() |
Quantitativa Continua | Tempo necessario per vendere tutte le inserzioni correnti, espresso in mesi |
# Calcolo degli indici di posizione e variabilità per le variabili quantitative
stats_summary <- data %>%
select(sales, volume, median_price, listings, months_inventory) %>% # Solo variabili quantitative
summarise_all(list(
Mean = ~mean(., na.rm = TRUE),
Median = ~median(., na.rm = TRUE),
SD = ~sd(., na.rm = TRUE),
Range = ~diff(range(., na.rm = TRUE)),
IQR = ~IQR(., na.rm = TRUE)
))
# Aggiungi i nomi delle variabili alla tabella
stats_summary <- tibble::rownames_to_column(as.data.frame(stats_summary), "Variabile")
# Stampa il risultato
print(stats_summary)
## Variabile sales_Mean volume_Mean median_price_Mean listings_Mean
## 1 1 192.2917 31.00519 132665.4 1738.021
## months_inventory_Mean sales_Median volume_Median median_price_Median
## 1 9.1925 175.5 27.0625 134500
## listings_Median months_inventory_Median sales_SD volume_SD median_price_SD
## 1 1618.5 8.95 79.65111 16.65145 22662.15
## listings_SD months_inventory_SD sales_Range volume_Range median_price_Range
## 1 752.7078 2.303669 344 75.381 106200
## listings_Range months_inventory_Range sales_IQR volume_IQR median_price_IQR
## 1 2553 11.5 120 23.2335 32750
## listings_IQR months_inventory_IQR
## 1 1029.5 3.15
| Variabile | Media | Mediana | Dev. Std. | Range | IQR |
|---|---|---|---|---|---|
| sales | 192.3 | 175.5 | 78.43 | 344 | 120 |
| volume (milioni $) | 31.00 | 27.06 | 15.0126 | 75.38 | 23.23 |
| median_price ($) | 132,665 | 134,500 | 22,662.15 | 106,200 | 32,75 |
| listings | 1738 | 1618 | 752.71 | 2553 | 1030 |
| months_inventory | 9.19 | 8.95 | 2.30 | 11.5 | 3.15 |
Sales
Media: 192.3, mediana: 175.5, leggera asimmetria positiva.
Variabilità: elevata, con un range di 344 e un IQR di 120.
Volume
Media: 31 milioni, mediana: 27.06 milioni, significativa diversità nei dati.
Variabilità: importante, con un range di 75.38 milioni.
Median Price
Media: $132,665, mediana: $134,500, distribuzione quasi simmetrica.
Variabilità: elevata, con un range di $106,200.
Listings
Media: 1738, mediana: 1618, distribuzione relativamente uniforme.
Variabilità: ampia, con un range di 2553 e un IQR di 1030.
Months Inventory
Media: 9.19 mesi, mediana: 8.95 mesi, buona coerenza nei dati.
Variabilità: moderata, con un range di 11.5 mesi e un IQR di 3.15.
x11(width = 12, height = 6)
# Calcolo della distribuzione di frequenza per 'city'
freq_city <- table(data$city)
# Impostazione limite massimo dell'asse y
max_freq_city <- max(freq_city) + 5 # Aggiungi un margine superiore
barplot(
freq_city,
main = "Distribuzione delle Città",
col = "skyblue",
xlab = "Città",
ylab = "Frequenza",
las = 2,
ylim = c(0, max_freq_city) # Imposta il limite dell'asse y
)
Caratteristica Principale: La distribuzione mostra che le quattro città analizzate (Beaumont, College Station, Tyler e Wichita Falls) hanno un numero uniforme di osservazioni, con una frequenza di circa 60 per ciascuna.
Osservazione: Questo suggerisce che i dati sono equamente distribuiti tra le città, il che permette un confronto bilanciato tra di esse per le analisi successive.
x11(width = 12, height = 6)
# Calcolo dela distribuzione di frequenza per 'year'
freq_year <- table(data$year)
# Impostazione limite massimo dell'asse y
max_freq_year <- max(freq_year) + 5 # Aggiungi un margine superiore
barplot(
freq_year,
main = "Distribuzione degli Anni",
col = "lightgreen",
xlab = "Anno",
ylab = "Frequenza",
ylim = c(0, max_freq_year), # Imposta il limite dell'asse y
las = 1
)
Caratteristica Principale: La distribuzione degli anni è uniforme, con una frequenza di circa 48 osservazioni per ciascun anno dal 2010 al 2014.
Osservazione: Questa distribuzione indica che i dati sono stati raccolti in modo omogeneo nel periodo analizzato, garantendo una rappresentazione consistente delle tendenze temporali.
x11(width = 12, height = 6)
# Calcolo della distribuzione di frequenza per 'month'
freq_month <- table(data$month)
# Impostazione limite massimo dell'asse y
max_freq_month <- max(freq_month) + 5 # Aggiunge un margine superiore
barplot(
freq_month,
main = "Distribuzione dei Mesi",
col = "salmon",
xlab = "Mese",
ylab = "Frequenza",
ylim = c(0, max_freq_month), # Imposta il limite dell'asse y
las = 1
)
Caratteristica Principale: La distribuzione mensile mostra una frequenza costante di 20 osservazioni per ciascun mese dell’anno, da gennaio a dicembre.
Osservazione: Questo evidenzia che i dati sono distribuiti uniformemente durante l’anno, consentendo un’analisi equa delle variazioni stagionali.
# Caricamento della libreria scales per la formattazione
library(scales)
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
# Calcolo della variabilità assoluta (Varianza)
variability_var <- data %>%
select(sales, volume, median_price, listings, months_inventory) %>% # Escludiamo 'month'
summarise_all(var, na.rm = TRUE) %>%
pivot_longer(cols = everything(), names_to = "Variabile", values_to = "Varianza") %>%
mutate(
Varianza = format(Varianza, big.mark = ".", decimal.mark = ",", scientific = FALSE) # Formattazione dei valori
)
# Stampa delle varianze calcolate
print("Varianza per tutte le variabili quantitative:")
## [1] "Varianza per tutte le variabili quantitative:"
print(variability_var)
## # A tibble: 5 × 2
## Variabile Varianza
## <chr> <chr>
## 1 sales " 6.344,299512"
## 2 volume " 277,270692"
## 3 median_price "513.572.983,089261"
## 4 listings " 566.568,966091"
## 5 months_inventory " 5,306889"
| Variabile | Varianza |
|---|---|
| sales | 6344.00 |
| volume | 277.00 |
| median_price ($) | 513,572,983.00 |
| listings | 566,569.00 |
| months_inventory | 5.31 |
# Calcolo della variabilità relativa (CV) per le variabili quantitative
variability_cv <- data %>%
select(sales, volume, median_price, listings, months_inventory) %>%
summarise_all(list(CV = ~sd(., na.rm = TRUE) / mean(., na.rm = TRUE))) %>%
pivot_longer(cols = everything(), names_to = "Variabile", values_to = "CV") %>%
mutate(
CV = format(CV, big.mark = ".", decimal.mark = ",", scientific = FALSE)
) %>%
arrange(desc(as.numeric(gsub(",", ".", CV)))) # Ordinazione dei valori numerici
# Stampa dei risultati
print("Coefficiente di variazione (CV) per tutte le variabili quantitative:")
## [1] "Coefficiente di variazione (CV) per tutte le variabili quantitative:"
print(variability_cv)
## # A tibble: 5 × 2
## Variabile CV
## <chr> <chr>
## 1 volume_CV 0,5370536
## 2 listings_CV 0,4330833
## 3 sales_CV 0,4142203
## 4 months_inventory_CV 0,2506031
## 5 median_price_CV 0,1708218
| Variabile | CV |
|---|---|
| Volume | 0.54 |
| Listings | 0.43 |
| Sales | 0.41 |
| Months Inventory | 0.25 |
| Median Price | 0.17 |
# Calcolo della variabilità assoluta (varianza) per le variabili quantitative
variability_var <- data %>%
select(sales, volume, median_price, listings, months_inventory) %>%
summarise_all(var, na.rm = TRUE) %>%
pivot_longer(cols = everything(), names_to = "Variabile", values_to = "Varianza") %>%
arrange(desc(Varianza)) %>%
mutate(
Varianza = format(Varianza, big.mark = ".", decimal.mark = ",", scientific = FALSE) # Rende i valori leggibili
) %>%
slice(1) # Seleziona la variabile con la massima varianza
# Stampa del risultato
print("Variabile con la massima varianza assoluta:")
## [1] "Variabile con la massima varianza assoluta:"
print(variability_var)
## # A tibble: 1 × 2
## Variabile Varianza
## <chr> <chr>
## 1 median_price 513.572.983,089261
| Variabile | Varianza max |
|---|---|
| median_price ($) | 513572983 |
Massima variabilità assoluta (varianza):
Variabile: median_price
Valore della varianza: 513,572,983 (molto alta,
dovuta alla scala dei valori di median_price).
# Calcolo della massima variabilità relativa (CV)
variability_cv <- data %>%
select(sales, volume, median_price, listings, months_inventory) %>%
summarise_all(list(CV = ~sd(., na.rm = TRUE) / mean(., na.rm = TRUE))) %>%
pivot_longer(cols = everything(), names_to = "Variabile", values_to = "CV") %>%
mutate(
CV = format(CV, big.mark = ".", decimal.mark = ",", scientific = FALSE) # Rende i valori leggibili
) %>%
arrange(desc(as.numeric(gsub(",", ".", CV)))) %>%
slice(1) # Seleziona la variabile con il massimo CV
# Stampa del risultato
print("Variabile con il massimo coefficiente di variazione (CV):")
## [1] "Variabile con il massimo coefficiente di variazione (CV):"
print(variability_cv)
## # A tibble: 1 × 2
## Variabile CV
## <chr> <chr>
## 1 volume_CV 0,5370536
| Variabile | CV max |
|---|---|
| Volume ($) | 0.53 |
Massima variabilità relativa (CV - Coefficiente di Variazione):
Variabile: volume
Valore del CV: 0.537 (indica che
volume ha una variabilità relativa alta rispetto alla
media).
# Calcolo della skewness per le variabili numeriche
skewness_vals <- data %>%
select(sales, volume, median_price, listings, months_inventory) %>%
summarise_all(e1071::skewness, na.rm = TRUE) %>%
pivot_longer(cols = everything(), names_to = "Variabile", values_to = "Skewness") %>%
mutate(
Skewness = round(Skewness, 2) # Arrotonda a 2 cifre decimali
)
# Stampa dei risultati
print("Skewness delle variabili numeriche rilevanti:")
## [1] "Skewness delle variabili numeriche rilevanti:"
print(skewness_vals)
## # A tibble: 5 × 2
## Variabile Skewness
## <chr> <dbl>
## 1 sales 0.71
## 2 volume 0.88
## 3 median_price -0.36
## 4 listings 0.65
## 5 months_inventory 0.04
| Variabile | Skewness |
|---|---|
| sales | 0.71 |
| volume | 0.88 |
| median_price ($) | -0.36 |
| listings | 0.65 |
| months_inventory | 0.04 |
sales (0.714): Distribuzione leggermente asimmetrica a destra, con una coda più lunga verso valori alti.
volume (0.879): Distribuzione con maggiore
asimmetria positiva rispetto a sales, indicante la presenza
di valori elevati che spostano la distribuzione.
median_price (-0.362): Leggera asimmetria a sinistra, suggerendo la presenza di valori più concentrati verso la fascia alta dei prezzi.
listings (0.645): Moderata asimmetria positiva, con una coda a destra più lunga.
months_inventory (0.0407): Praticamente simmetrica.
# Identificazione della variabile con la skewness maggiore
most_asymmetric <- skewness_vals %>%
arrange(desc(abs(Skewness))) %>%
slice(1)
# Stampa della variabile con maggiore asimmetria
print("Variabile con la distribuzione più asimmetrica (skewness):")
## [1] "Variabile con la distribuzione più asimmetrica (skewness):"
print(most_asymmetric)
## # A tibble: 1 × 2
## Variabile Skewness
## <chr> <dbl>
## 1 volume 0.88
| Variabile | Skewness |
|---|---|
| volume | 0.88 |
La variabile volume ha la
skewness più elevata (0.88), indicando una
distribuzione asimmetrica positiva. Questo suggerisce che una parte
significativa dei valori è concentrata verso l’estremo inferiore, con
una coda lunga verso l’estremo superiore.
# Creazione di classi per median_price utilizzando 5 intervalli equidistanti
breaks <- seq(
min(data$median_price, na.rm = TRUE),
max(data$median_price, na.rm = TRUE),
length.out = 6
)
data <- data %>%
mutate(price_class = cut(median_price, breaks = breaks, include.lowest = TRUE))
# Calcolo della distribuzione di frequenza per le classi
price_class_freq <- table(data$price_class)
# Stampa della distribuzione di frequenza
print("Distribuzione di frequenza delle classi di prezzo mediano:")
## [1] "Distribuzione di frequenza delle classi di prezzo mediano:"
print(price_class_freq)
##
## [7.38e+04,9.5e+04] (9.5e+04,1.16e+05] (1.16e+05,1.38e+05] (1.38e+05,1.59e+05]
## 18 40 73 84
## (1.59e+05,1.8e+05]
## 25
library(ggplot2)
library(scales)
# Creazione del grafico
plot2 <- ggplot(data, aes(x = price_class)) +
geom_bar(fill = "darkorange", color = "black") +
labs(
title = "Distribuzione delle Classi di Prezzo Mediano",
x = "Classe di Prezzo",
y = "Frequenza"
) +
scale_x_discrete(labels = function(x) {
# Formattazione dei limiti delle classi per renderli leggibili
gsub("\\(|\\)|\\[|\\]", "", x) %>%
gsub(",", " - ", .) %>%
strsplit(split = " - ") %>%
lapply(function(y) paste0(format(as.numeric(y), big.mark = ".", decimal.mark = ","), collapse = " - ")) %>%
unlist()
}) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotazione delle etichette per leggibilità
# Visualizzazione del grafico
print(plot2)
Il grafico rappresenta la distribuzione delle classi di prezzo mediano suddivise in 5 intervalli equidistanti. Analizzando il grafico:
Range di prezzo:
Le classi vanno da 73.800 a 180.000 dollari, con intervalli ben definiti.
Ogni intervallo rappresenta un range uniforme calcolato tra il minimo e il massimo dei prezzi mediani.
Distribuzione delle frequenze:
La classe 138.000 - 159.000 ha la frequenza più alta, suggerendo che la maggior parte delle vendite si concentra in questa fascia di prezzo.
La classe più bassa 73.800 - 95.000 ha la frequenza minore, indicando che immobili con prezzi così bassi sono rari.
Uniformità della distribuzione:
Osservazioni generali:
# Funzione per calcolare l'indice di Gini normalizzato
gini.index <- function(x) {
ni <- table(x) # Frequenze assolute
fi <- ni / length(x) # Frequenze relative
fi2 <- fi^2 # Quadrato delle frequenze relative
J <- length(table(x)) # Numero di modalità
gini <- 1 - sum(fi2) # Calcolo dell'indice di Gini
gini.normalizzato <- gini / ((J - 1) / J) # Normalizzazione
return(gini.normalizzato)
}
# Applicazione alla variabile median_price (utilizzando le classi create)
gini_median_price <- gini.index(data$price_class)
# Stampa del risultato
print(paste("Indice di Gini normalizzato per 'median_price':", round(gini_median_price, 2)))
## [1] "Indice di Gini normalizzato per 'median_price': 0.93"
L’indice di Gini normalizzato calcolato per la variabile
median_price è 0.93, indicando un’elevata
eterogeneità nella distribuzione dei prezzi mediani. Questo significa
che i prezzi mediani degli immobili sono distribuiti in modo
relativamente uniforme tra le classi definite, senza una concentrazione
marcata in una sola classe.
Un valore così alto suggerisce che il mercato immobiliare analizzato presenta una significativa varietà nei prezzi mediani, riflettendo potenzialmente la diversità delle caratteristiche degli immobili o le dinamiche di mercato tra diverse località o periodi temporali.
# Probabilità della città “Beaumont”
prob_beaumont <- mean(data$city == "Beaumont", na.rm = TRUE)
print(paste("Probabilità di Beaumont:", round(prob_beaumont, 4)))
## [1] "Probabilità di Beaumont: 0.25"
| Evento | Probabilità |
|---|---|
| Città: Beaumont | 0.2500 |
Probabilità della città “Beaumont”:
La probabilità calcolata rappresenta la proporzione di righe nel dataset
associate alla città di Beaumont. Un valore di 0.25 indica che il 25%
delle osservazioni appartengono a questa città.
# Probabilità del mese di luglio
prob_luglio <- mean(data$month == 7, na.rm = TRUE)
print(paste("Probabilità di Luglio:", round(prob_luglio, 4)))
## [1] "Probabilità di Luglio: 0.0833"
| Evento | Probabilità |
|---|---|
| Mese: Luglio | 0.08 |
Probabilità del mese di luglio:
La probabilità rappresenta la proporzione di righe nel dataset che si
riferiscono al mese di luglio, indipendentemente dall’anno. Un valore di
0.0833 indica che l’8.33% delle righe corrisponde a questo mese.
# Probabilità di dicembre 2012
prob_dicembre_2012 <- mean(data$year == 2012 & data$month == 12, na.rm = TRUE)
print(paste("Probabilità di dicembre 2012:", round(prob_dicembre_2012, 4)))
## [1] "Probabilità di dicembre 2012: 0.0167"
| Evento | Probabilità |
|---|---|
| Mese: Dicembre 2012 | 0.01 |
Probabilità di dicembre 2012:
Questa probabilità è calcolata considerando le righe in cui l’anno è il
2012 e il mese è dicembre. Un valore di 0.0167 indica che solo l’1.67%
delle righe del dataset soddisfa entrambe le condizioni.
library(ggplot2)
# Creazione della colonna che calcola il prezzo medio degli immobili
data <- data %>%
mutate(prezzo_medio = volume / sales)
# Verifica della colonna creata
print("Esempio di Prezzo Medio calcolato:")
## [1] "Esempio di Prezzo Medio calcolato:"
print(head(data$prezzo_medio))
## [1] 0.1706265 0.1637963 0.1576978 0.1340950 0.1427376 0.1440159
#calcolo statistiche del prezzo medio
summary(data$prezzo_medio)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.09701 0.13294 0.15659 0.15432 0.17392 0.21323
# Creazione dell'istogramma
plot_prezzo_medio <- ggplot(data, aes(x = prezzo_medio)) +
geom_histogram(
binwidth = 0.01, # valore in base alla granularità scelta
fill = "steelblue",
color = "black"
) +
labs(
title = "Distribuzione del Prezzo Medio degli Immobili (milioni $)",
x = "Prezzo Medio ($)",
y = "Frequenza"
) +
theme_minimal()
# Visualizzazione del grafico
print(plot_prezzo_medio)
L’istogramma mostra una distribuzione relativamente simmetrica, con una concentrazione di valori nella fascia tra 0.15 e 0.17 milioni di dollari. La distribuzione suggerisce che i prezzi medi degli immobili sono raggruppati intorno a un valore centrale, senza evidenti picchi o outlier estremi.
Minimo: 0.0970 milioni di dollari – il prezzo medio più basso osservato.
Primo Quartile (Q1): 0.1329 milioni di dollari – il 25% dei prezzi medi è inferiore a questo valore.
Mediana: 0.1566 milioni di dollari – metà dei prezzi medi si trova al di sotto di questo valore.
Media: 0.1543 milioni di dollari – rappresenta il valore medio dell’intera distribuzione.
Terzo Quartile (Q3): 0.1739 milioni di dollari – il 75% dei prezzi medi è inferiore a questo valore.
Massimo: 0.2132 milioni di dollari – il prezzo medio più alto registrato.
Simmetria della Distribuzione: La vicinanza tra media (0.1543 milioni di dollari) e mediana (0.1566 milioni di dollari) conferma una distribuzione simmetrica, come evidenziato dall’istogramma.
Variabilità Moderata: Il range tra il minimo e il massimo (0.2132 - 0.0970 = 0.1162 milioni di dollari) evidenzia una variabilità moderata nei prezzi medi degli immobili.
Focalizzazione dei Prezzi: La maggior parte dei valori è concentrata intorno a 0.15 milioni di dollari, riflettendo una tendenza generale dei prezzi medi a essere uniformemente distribuiti, senza significative deviazioni.
# Creazione della colonna per l'efficacia degli annunci (vendite / annunci attivi)
data <- data %>%
mutate(efficacia_annunci = sales / listings)
# Gestione dei valori Inf o NaN
data$efficacia_annunci[is.infinite(data$efficacia_annunci)] <- NA
data$efficacia_annunci[is.nan(data$efficacia_annunci)] <- NA
La colonna efficacia_annunci è stata calcolata dividendo
il numero di vendite (sales) per il numero di annunci
attivi (listings). Questo rapporto rappresenta la
percentuale di annunci che hanno portato a una vendita, fornendo
un’indicazione di quanto efficacemente gli annunci siano stati
convertiti in vendite. Eventuali valori infiniti (derivanti da divisioni
con zero) o non numerici (NaN) sono stati gestiti e sostituiti con
valori mancanti (NA) per evitare distorsioni
nell’analisi
# Riassunto delle statistiche per l'efficacia degli annunci
summary_efficacia <- summary(data$efficacia_annunci)
print("Summary dell'efficacia degli annunci:")
## [1] "Summary dell'efficacia degli annunci:"
print(summary_efficacia)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.05014 0.08980 0.10963 0.11874 0.13492 0.38713
| Statistica | Valore |
|---|---|
| Minimo | 0.05 |
| 1° Quartile | 0.08 |
| Mediana | 0.10 |
| Media | 0.11 |
| 3° Quartile | 0.13 |
| Massimo | 0.38 |
Le statistiche descrittive della colonna
efficacia_annunci sono state calcolate per identificare i
valori principali:
Il valore minimo di efficacia degli annunci è 0.05, indicando che solo il 5% degli annunci è stato convertito in vendite in alcuni casi.
Il valore massimo è 0.38, suggerendo che in alcuni casi il 38% degli annunci ha portato a una vendita.
La mediana è 0.10, il che implica che il 50% degli annunci ha un’efficacia di almeno il 10%.
Il primo e il terzo quartile (0.08 e 0.13) mostrano che la maggior parte dei dati è compresa in questo intervallo.
library(ggplot2)
plot_efficacia <- ggplot(data, aes(x = efficacia_annunci)) +
geom_histogram(
binwidth = 0.03, # Scelta ottimale per rappresentare la distribuzione
fill = "steelblue",
color = "black"
) +
labs(
title = "Distribuzione dell'Efficacia degli Annunci di Vendita",
x = "Efficacia degli Annunci (Vendite per Annuncio)",
y = "Frequenza"
) +
theme_minimal()
# Visualizzazione del grafico
print(plot_efficacia)
l grafico mostra una distribuzione asimmetrica positiva, con la maggior parte degli annunci che hanno un’efficacia compresa tra 0.1 e 0.2, rappresentando la fascia più frequente di conversione degli annunci in vendite. I valori superiori a 0.2 diventano progressivamente meno frequenti, con una coda che si estende fino a circa 0.4, evidenziando che solo pochi annunci raggiungono un’efficacia elevata. Questa distribuzione suggerisce che, in generale, l’efficacia degli annunci nel dataset tende ad essere moderata, con un numero limitato di casi di alta efficacia. La presenza di questa asimmetria positiva indica un mercato immobiliare in cui l’efficacia massima è rara e concentrata in un numero limitato di annunci.
# Analisi per Città
summary_city <- data %>%
group_by(city) %>%
summarise(
mean_sales = round(mean(sales, na.rm = TRUE), 2),
sd_sales = round(sd(sales, na.rm = TRUE), 2),
mean_median_price = round(mean(median_price, na.rm = TRUE), 2),
sd_median_price = round(sd(median_price, na.rm = TRUE), 2),
mean_efficacia_annunci = round(mean(efficacia_annunci, na.rm = TRUE), 2),
sd_efficacia_annunci = round(sd(efficacia_annunci, na.rm = TRUE), 2)
)
print("Summary per città:")
## [1] "Summary per città:"
print(summary_city)
## # A tibble: 4 × 7
## city mean_sales sd_sales mean_median_price sd_median_price
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Beaumont 177. 41.5 129988. 10105.
## 2 Bryan-College Station 206. 85.0 157488. 8852.
## 3 Tyler 270. 62.0 141442. 9337.
## 4 Wichita Falls 116. 22.2 101743. 11320.
## # ℹ 2 more variables: mean_efficacia_annunci <dbl>, sd_efficacia_annunci <dbl>
# Grafico: Vendite Medie per Città (orientamento orizzontale)
plot_city <- ggplot(summary_city, aes(x = reorder(city, mean_sales), y = mean_sales)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(
title = "Vendite Medie per Città",
x = "Città",
y = "Media Vendite"
) +
coord_flip() +
theme_minimal()
print(plot_city)
| Città | Media Vendite | Dev. Std. Vendite | Media Prezzo Mediano | Media Efficacia Annunci | Dev. Std. Efficacia Annunci |
|---|---|---|---|---|---|
| Beaumont | 177.0 | 41.5 | 129,988 | 10,105 | 0.10 |
| Bryan-College Station | 206.0 | 85.0 | 157,488 | 8,852 | 0.14 |
| Tyler | 270.0 | 62.0 | 141,442 | 9,337 | 0.09 |
| Wichita Falls | 116.0 | 22.2 | 101,743 | 11,320 | 0.12 |
Statistiche:
La città con la media più alta di vendite è Tyler (270.0), seguita da Bryan-College Station (206.0).
Le deviazioni standard sono relativamente alte per Bryan-College Station (85.0) e Tyler (62.0), suggerendo una maggiore variabilità nelle vendite rispetto a Wichita Falls e Beaumont.
Per quanto riguarda i prezzi medi, Bryan-College Station mostra il valore più alto (157,488), mentre Wichita Falls ha il più basso (101,743).
L’efficacia degli annunci è più alta a Bryan-College Station (media: 0.14), mentre Tyler ha l’efficacia più bassa (media: 0.09).
Grafico:
# Analisi per Anno
summary_year <- data %>%
group_by(year) %>%
summarise(
mean_sales = round(mean(sales, na.rm = TRUE), 2),
sd_sales = round(sd(sales, na.rm = TRUE), 2),
mean_median_price = round(mean(median_price, na.rm = TRUE), 2),
sd_median_price = round(sd(median_price, na.rm = TRUE), 2),
mean_efficacia_annunci = round(mean(efficacia_annunci, na.rm = TRUE), 2),
sd_efficacia_annunci = round(sd(efficacia_annunci, na.rm = TRUE), 2)
)
print("Summary per anno:")
## [1] "Summary per anno:"
print(summary_year)
## # A tibble: 5 × 7
## year mean_sales sd_sales mean_median_price sd_median_price
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2010 169. 60.5 130192. 21822.
## 2 2011 164. 63.9 127854. 21318.
## 3 2012 186. 70.9 130077. 21432.
## 4 2013 212. 84 135723. 21708.
## 5 2014 231. 95.5 139481. 25625.
## # ℹ 2 more variables: mean_efficacia_annunci <dbl>, sd_efficacia_annunci <dbl>
# Grafico: Prezzo Mediano per Anno
plot_year <- ggplot(summary_year, aes(x = as.factor(year), y = mean_median_price)) +
geom_bar(stat = "identity", fill = "steelblue", color = "black") +
labs(
title = "Prezzo Mediano per Anno",
x = "Anno",
y = "Prezzo Mediano ($)"
) +
scale_y_continuous(
limits = c(0, 150000), # Impostazione limite dell'asse Y
labels = scales::comma
) +
theme_minimal()
print(plot_year)
| Anno | Media Vendite | Dev. Std. Vendite | Media Prezzo Mediano | Media Efficacia Annunci | Dev. Std. Efficacia Annunci |
|---|---|---|---|---|---|
| 2010 | 169.0 | 60.5 | 130,192 | 21,822 | 0.09 |
| 2011 | 164.0 | 63.9 | 127,854 | 21,318 | 0.09 |
| 2012 | 186.0 | 70.9 | 130,077 | 21,432 | 0.11 |
| 2013 | 212.0 | 84.0 | 135,723 | 21,708 | 0.13 |
| 2014 | 231.0 | 95.5 | 139,481 | 25,625 | 0.15 |
Statistiche:
Il numero medio di vendite aumenta progressivamente dal 2010 (169.0) al 2014 (231.0), indicando una crescita costante del mercato.
Il prezzo mediano degli immobili segue una tendenza simile, passando da $130,192 nel 2010 a $139,481 nel 2014.
L’efficacia degli annunci aumenta gradualmente, con il valore più alto registrato nel 2014 (0.15), suggerendo un miglioramento delle strategie di vendita.
Grafico:
# Analisi per Mese
summary_month <- data %>%
group_by(month) %>%
summarise(
mean_sales = round(mean(sales, na.rm = TRUE), 2),
sd_sales = round(sd(sales, na.rm = TRUE), 2),
mean_median_price = round(mean(median_price, na.rm = TRUE), 2),
sd_median_price = round(sd(median_price, na.rm = TRUE), 2),
mean_efficacia_annunci = round(mean(efficacia_annunci, na.rm = TRUE), 2),
sd_efficacia_annunci = round(sd(efficacia_annunci, na.rm = TRUE), 2)
)
print("Summary per mese:")
## [1] "Summary per mese:"
print(summary_month)
## # A tibble: 12 × 7
## month mean_sales sd_sales mean_median_price sd_median_price
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 127. 43.4 124250 25151.
## 2 2 141. 51.1 130075 22823.
## 3 3 189. 59.2 127415 23442.
## 4 4 212. 65.4 131490 21458.
## 5 5 239. 83.1 134485 18796.
## 6 6 244. 95 137620 19231.
## 7 7 236. 96.3 134750 21945.
## 8 8 231. 79.2 136675 22488.
## 9 9 182. 72.5 134040 24344.
## 10 10 180. 75.0 133480 26358.
## 11 11 157. 55.5 134305 24691.
## 12 12 169. 60.8 133400 22810.
## # ℹ 2 more variables: mean_efficacia_annunci <dbl>, sd_efficacia_annunci <dbl>
# Grafico: Efficacia degli Annunci per Mese
plot_month <- ggplot(summary_month, aes(x = as.factor(month), y = mean_efficacia_annunci)) +
geom_bar(stat = "identity", fill = "lightgreen", color = "black") +
labs(
title = "Efficacia degli Annunci per Mese",
x = "Mese",
y = "Media Efficacia"
) +
theme_minimal()
print(plot_month)
| Mese | Media Vendite | Dev. Std. Vendite | Media Prezzo Mediano | Media Efficacia Annunci | Dev. Std. Efficacia Annunci |
|---|---|---|---|---|---|
| 1 | 127.0 | 43.4 | 124,250 | 25,151 | 0.08 |
| 2 | 141.0 | 51.1 | 130,075 | 22,823 | 0.08 |
| 3 | 189.0 | 59.2 | 127,415 | 23,442 | 0.11 |
| 4 | 212.0 | 65.4 | 131,490 | 21,458 | 0.12 |
| 5 | 239.0 | 83.1 | 134,485 | 18,796 | 0.14 |
| 6 | 244.0 | 95.0 | 137,620 | 19,231 | 0.14 |
| 7 | 236.0 | 96.3 | 134,750 | 21,945 | 0.14 |
| 8 | 231.0 | 79.2 | 136,675 | 22,488 | 0.14 |
| 9 | 182.0 | 72.5 | 134,040 | 24,344 | 0.11 |
| 10 | 180.0 | 75.0 | 133,480 | 26,358 | 0.11 |
| 11 | 157.0 | 55.5 | 134,305 | 24,691 | 0.10 |
| 12 | 169.0 | 60.7 | 133,400 | 22,810 | 0.11 |
Statistiche:
Le vendite medie sono più alte nei mesi estivi (giugno e luglio), con un massimo di 244.0 a giugno, probabilmente a causa della stagionalità.
L’efficacia degli annunci raggiunge il picco tra maggio e agosto (media intorno a 0.14), suggerendo che i mesi estivi siano più propizi per il mercato.
La deviazione standard dell’efficacia degli annunci è generalmente bassa, indicando una distribuzione abbastanza uniforme.
Grafico:
Il grafico mostra che i mesi estivi sono i più produttivi in termini di efficacia.
I valori per gennaio e febbraio sono i più bassi, probabilmente influenzati da una minore attività del mercato durante i mesi invernali.
plot_box <- ggplot(data, aes(x = city, y = volume)) +
geom_boxplot(fill = "darkgreen", color = "black", outlier.color = "red") +
labs(
title = "Distribuzione del Valore Totale delle Vendite per Città",
x = "Città",
y = "Volume delle Vendite (Milioni di $)"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
print(plot_box)
Commento: Il grafico mostra la distribuzione del valore totale delle vendite (in milioni di $) per ciascuna città. Le barre verticali rappresentano l’intervallo interquartile (IQR), mentre i pallini rossi identificano eventuali outliers, ossia valori atipici che si discostano significativamente dal resto della distribuzione.
Osservazioni principali:
Bryan-College Station presenta una distribuzione piuttosto ampia rispetto alle altre città, suggerendo maggiore variabilità nei valori delle vendite totali.
Tyler ha un outlier particolarmente alto (pallino rosso), indicando che in alcuni casi si sono registrati valori di vendite molto elevati rispetto alla media.
Wichita Falls ha la distribuzione più concentrata, con un range molto stretto di valori.
Beaumont mostra una distribuzione compatta, con valori generalmente più bassi rispetto a Bryan-College Station e Tyler.
# Boxplot del Prezzo Mediano per Città
plot8 <- ggplot(data, aes(x = reorder(city, median_price, FUN = median), y = median_price)) +
geom_boxplot(fill = "purple", color = "black", outlier.color = "red", outlier.shape = 16) +
labs(
title = "Distribuzione del Prezzo Mediano per Città",
x = "Città",
y = "Prezzo Mediano ($)"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1), # Rotazione per miglior leggibilità
plot.title = element_text(size = 14, face = "bold") # Miglioramento del titolo
)
# Visualizzazione del grafico
print(plot8)
Commento generale: Il grafico rappresenta la distribuzione del prezzo mediano degli immobili per ciascuna città. Anche in questo caso, i pallini rossi indicano la presenza di outliers.
Osservazioni principali:
Bryan-College Station registra il prezzo mediano più alto, con un outlier che si colloca al di sopra del valore massimo .
Tyler ha una distribuzione simile a Bryan-College Station, ma con valori leggermente più bassi.
Beaumont mostra una distribuzione più compatta, con prezzi medi più contenuti rispetto a Bryan-College Station e Tyler (presenza di outlier).
Wichita Falls ha il prezzo mediano più basso tra tutte le città, suggerendo che in questa città gli immobili tendono a essere più economici (presenza di outlier).
# Grafico: Vendite Medie per Anno
plot_mean_sales <- ggplot(summary_year, aes(x = year, y = mean_sales)) +
geom_line(color = "blue", size = 1.5) + # Linea blu per il trend
geom_point(color = "red", size = 3) + # Punti rossi per evidenziare le medie
labs(
title = "Vendite Medie per Anno",
x = "Anno",
y = "Vendite Medie"
) +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Visualizzazione del grafico
print(plot_mean_sales)
Osservazioni:
Il grafico evidenzia una tendenza generale di crescita delle vendite medie annuali nel periodo dal 2010 al 2014.
Dopo un leggero calo tra il 2010 e il 2011, si nota una ripresa costante dal 2012 fino a raggiungere il valore massimo nel 2014.
Gli incrementi maggiori si verificano tra il 2012 e il 2014, suggerendo un’accelerazione nel mercato immobiliare in questi anni.
sales_month_city <- data %>%
group_by(month, city) %>%
summarise(total_sales = sum(sales, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'month'. You can override using the
## `.groups` argument.
plot_dodge <- ggplot(sales_month_city, aes(x = factor(month), y = total_sales, fill = city)) +
geom_bar(stat = "identity", position = "dodge") +
labs(
title = "Totale Vendite per Mese e Città",
x = "Mese",
y = "Totale Vendite",
fill = "Città"
) +
theme_minimal()
print(plot_dodge)
Osservazioni:
Tyler emerge come la città con il volume maggiore di vendite nei mesi di picco, seguita da Bryan-College Station.
Il mese di giugno il totale delle vendite più alto nelle città Tyler e Bryan-College Station. Per le altre due,invece, risulta essere il mese di Agosto.
Wichita Falls mostra il volume di vendite più basso rispetto alle altre città, mantenendo un trend costante durante l’anno.
plot_fill <- ggplot(sales_month_city, aes(x = factor(month), y = total_sales, fill = city)) +
geom_bar(stat = "identity", position = "fill") +
labs(
title = "Totale Vendite per Mese e Città (Normalizzato)",
x = "Mese",
y = "Proporzione Vendite",
fill = "Città"
) +
scale_y_continuous(labels = scales::percent_format()) +
theme_minimal()
print(plot_fill)
Osservazioni:
La normalizzazione consente di confrontare le proporzioni relative delle vendite tra le città in ogni mese.
Tyler domina in termini di proporzione di vendite per quasi tutti i mesi, mentre Wichita Falls rappresenta una percentuale minore.
Bryan-College Station mantiene una proporzione relativamente costante nel corso dell’anno.
Considerazioni:
La proporzione maggiore di vendite per Tyler può indicare un mercato con una domanda più alta.
Questo grafico aiuta a osservare la distribuzione relativa delle vendite tra le città, indipendentemente dal totale assoluto.
x11()
# Preparazione dei dati
sales_month_city_year <- data %>%
group_by(year, month, city) %>%
summarise(total_sales = sum(sales, na.rm = TRUE), .groups = "drop") # Rimuove l'avviso
# Creazione del grafico
plot_facet <- ggplot(sales_month_city_year, aes(x = factor(month), y = total_sales, fill = city)) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~ year, ncol = 1) + # Faceting per anno, con disposizione verticale
labs(
title = "Totale Vendite per Mese e Città per Anno",
x = "Mese",
y = "Totale Vendite",
fill = "Città"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1), # Migliora la leggibilità delle etichette
strip.text = element_text(size = 12), # Incrementa la dimensione del testo per le etichette del faceting
panel.spacing = unit(1.5, "lines") # Aumenta lo spazio tra i pannelli
)
# Visualizzazione del grafico
print(plot_facet)
Osservazioni:
Il grafico conferma il trend di crescita delle vendite durante i mesi estivi (giugno e luglio) per la maggior parte degli anni.
L’anno 2010 sembra deviare da questo pattern, mostrando un andamento più uniforme senza un picco evidente nei mesi estivi.
Tyler continua a essere la città dominante in termini di vendite in tutti gli anni, con Wichita Falls che rimane la città con i volumi più bassi.
sales_time_city <- data %>%
mutate(date = as.Date(paste(year, month, "01", sep = "-"))) %>%
group_by(date, city) %>%
summarise(total_sales = sum(sales, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'date'. You can override using the
## `.groups` argument.
plot_line <- ggplot(sales_time_city, aes(x = date, y = total_sales, color = city)) +
geom_line(size = 1) +
labs(
title = "Andamento delle Vendite nel Tempo per Città",
x = "Data",
y = "Vendite Totali",
color = "Città"
) +
theme_minimal()
print(plot_line)
Osservazioni:
Questo grafico mostra l’andamento delle vendite totali nel tempo per
ciascuna città. È evidente che le città hanno pattern di vendita
distinti. Tyler ha il volume di vendite più alto in
quasi tutti gli anni. Bryan-College Station segue un
andamento simile ma con valori inferiori. Beaumont e
Wichita Falls mostrano volumi di vendita più contenuti,
con Wichita Falls che si distingue per un andamento più
irregolare e volumi significativamente più bassi rispetto alle altre
città.
sales_city <- data %>%
group_by(city) %>%
summarise(total_sales = sum(sales, na.rm = TRUE)) %>%
ungroup()
plot_total_city <- ggplot(sales_city, aes(x = reorder(city, total_sales), y = total_sales)) +
geom_bar(stat = "identity", fill = "gold") +
labs(
title = "Totale Vendite per Città",
x = "Città",
y = "Totale Vendite"
) +
coord_flip() +
theme_minimal()
print(plot_total_city)
Commento:
In questo grafico a barre orizzontali, possiamo osservare chiaramente il
totale delle vendite per ciascuna città. Tyler domina
il totale con oltre 15.000 vendite, seguita da Bryan-College
Station con circa 13.000 vendite. Beaumont e
Wichita Falls presentano volumi inferiori,
rispettivamente con circa 10.000 e 7.000 vendite. Questo conferma
l’importanza di Tyler come centro dominante per il mercato immobiliare
in quest’area, probabilmente per fattori come popolazione, economia
locale o attrattiva.
L’analisi del mercato immobiliare del Texas tra il 2010 e il 2014 ha rivelato una serie di trend e caratteristiche fondamentali che consentono una comprensione approfondita delle dinamiche di vendita. Attraverso un dataset equilibrato di 240 osservazioni, distribuite equamente tra le città di Beaumont, Bryan-College Station, Tyler e Wichita Falls, è stato possibile esplorare le principali variabili del mercato e individuare le differenze geografiche, temporali e stagionali.
Il mercato immobiliare texano ha registrato una crescita costante durante il periodo analizzato. Le vendite medie annuali sono aumentate da 169 nel 2010 a 231 nel 2014, con un miglioramento continuo dell’efficacia degli annunci di vendita, che è passata dal 9% al 15%. Questo suggerisce un mercato in espansione, supportato probabilmente da strategie di marketing più efficaci e da una domanda crescente.
La stagionalità è un elemento chiave del mercato: i mesi estivi (da maggio ad agosto) si confermano come il periodo più favorevole, con picchi di vendite e un’efficacia degli annunci superiore al 14%. Al contrario, i mesi invernali registrano vendite medie più basse e un’efficacia che scende sotto il 10%. Questo pattern stagionale è visibile sia nei dati aggregati che nei grafici, confermando l’impatto delle condizioni stagionali sulle transazioni immobiliari.
L’analisi geografica ha evidenziato significative differenze tra le città:
Tyler si distingue per il volume di vendite più alto, con oltre 15.000 transazioni totali, ma presenta un’efficacia degli annunci relativamente bassa (9,35%). Questo potrebbe indicare un mercato molto competitivo o una saturazione dell’offerta.
Bryan-College Station emerge come il mercato più efficiente, con l’efficacia degli annunci più alta (14,7%) e il prezzo mediano degli immobili più elevato ($157.488). Questo suggerisce un mercato caratterizzato da immobili di maggior valore e da una domanda stabile.
Wichita Falls, pur registrando il numero di vendite più basso, mostra un’efficacia degli annunci sorprendentemente alta (12,8%), indicando un mercato più piccolo ma ben bilanciato.
Beaumont si colloca in una posizione intermedia, con volumi di vendita e prezzi mediani inferiori rispetto a Bryan-College Station e Tyler.
Il prezzo mediano degli immobili è la variabile con la maggiore variabilità assoluta, con una varianza di oltre $513 milioni. Questo riflette la significativa eterogeneità del mercato, influenzata da differenze economiche regionali e dalle caratteristiche specifiche degli immobili.
L’asimmetria positiva nella distribuzione del volume delle vendite (skewness di 0,88) evidenzia che, mentre la maggior parte dei mesi registra volumi moderati, esistono periodi con picchi elevati, spesso legati alla stagionalità o a condizioni di mercato favorevoli.
La creazione di classi di prezzo mediano ha permesso di osservare che la maggior parte delle vendite si concentra nella fascia medio-alta ($138.000 - $159.000), confermata da un indice di Gini di 0,0968, che indica una distribuzione abbastanza equa dei prezzi.
L’introduzione della variabile “efficacia degli annunci” (rapporto tra vendite e annunci attivi) ha fornito una nuova prospettiva sul mercato. L’efficacia media è risultata essere intorno al 12%, con una distribuzione asimmetrica positiva. I picchi di efficacia (oltre il 30%) suggeriscono che esistono condizioni specifiche in cui il mercato immobiliare è particolarmente dinamico, probabilmente legate a una forte domanda o a strategie di marketing ben mirate.
Le visualizzazioni avanzate hanno supportato le analisi, rendendo più chiari i trend e le relazioni tra le variabili:
Il grafico delle vendite medie per anno ha evidenziato la crescita costante del mercato.
Il boxplot del volume delle vendite per città ha mostrato la presenza di outlier significativi, specialmente a Tyler e Bryan-College Station.
Il grafico dell’andamento temporale delle vendite per città ha confermato la forza del mercato di Tyler e Bryan-College Station, con Wichita Falls che rimane la città con i volumi più bassi.
L’analisi ha messo in evidenza un mercato immobiliare in crescita, con differenze geografiche significative e una chiara stagionalità. Le città , come Tyler e Bryan-College Station, dominano per volume di vendite, mentre le città più piccole mostrano efficienza nella conversione degli annunci. La stagionalità estiva rappresenta una finestra cruciale per il mercato, suggerendo opportunità strategiche per le agenzie immobiliari.
Questi risultati migliorano la comprensione delle dinamiche del mercato immobiliare texano e offrono anche indicazioni pratiche per strategie di vendita e marketing più mirate.