#PUNTO 1
data_vars <- data.frame(
Variabile = c("city", "year", "month", "sales", "volume", "median_price", "listings", "months_inventory"),
Tipo = c("Categoriale (Nominale)", "Temporale (Discreta)", "Temporale (Discreta)",
"Numerica (Discreta)", "Numerica (Continua)", "Numerica (Continua)",
"Numerica (Discreta)", "Numerica (Continua)"),
Descrizione = c("Nome della città", "Anno di riferimento", "Mese di riferimento (1-12)",
"Numero di vendite immobiliari", "Volume totale delle vendite (milioni)",
"Prezzo mediano delle case", "Numero di annunci immobiliari",
"Indice di inventario (mesi)"),
`Possibile Analisi` = c("Analisi distribuzione, frequenze", "Trend temporali, serie storiche",
"Analisi stagionale, serie storiche", "Analisi di distribuzione, variazione",
"Analisi economica, variazione temporale", "Tendenza prezzi, confronto tra città",
"Disponibilità del mercato", "Misura della domanda/offerta")
)
kbl(data_vars,caption = "Analisi delle variabili del dataset") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover")) %>%
row_spec(0, background = "#D3D3D3")
Variabile | Tipo | Descrizione | Possibile.Analisi |
---|---|---|---|
city | Categoriale (Nominale) | Nome della città | Analisi distribuzione, frequenze |
year | Temporale (Discreta) | Anno di riferimento | Trend temporali, serie storiche |
month | Temporale (Discreta) | Mese di riferimento (1-12) | Analisi stagionale, serie storiche |
sales | Numerica (Discreta) | Numero di vendite immobiliari | Analisi di distribuzione, variazione |
volume | Numerica (Continua) | Volume totale delle vendite (milioni) | Analisi economica, variazione temporale |
median_price | Numerica (Continua) | Prezzo mediano delle case | Tendenza prezzi, confronto tra città |
listings | Numerica (Discreta) | Numero di annunci immobiliari | Disponibilità del mercato |
months_inventory | Numerica (Continua) | Indice di inventario (mesi) | Misura della domanda/offerta |
#PUNTO 2
sales <- data_texas$sales
volume <- data_texas$volume
median_price <- data_texas$median_price
listings <- data_texas$listings
m_inv <- data_texas$months_inventory
# Definizione delle variabili
Variabile <- c("sales", "volume", "median_price", "listings", "months_inventory")
# Calcolo delle statistiche con arrotondamento a 2 decimali
min <- c(round(min(sales), 2),
round(min(volume), 2),
round(min(median_price), 2),
round(min(listings), 2),
round(min(m_inv), 2))
max <- c(round(max(sales), 2),
round(max(volume), 2),
round(max(median_price), 2),
round(max(listings), 2),
round(max(m_inv), 2))
media <- c(round(mean(sales), 2),
round(mean(volume), 2),
round(mean(median_price), 2),
round(mean(listings), 2),
round(mean(m_inv), 2))
mediana <- c(round(median(sales), 2),
round(median(volume), 2),
round(median(median_price), 2),
round(median(listings), 2),
round(median(m_inv), 2))
dev.standard <- c(round(sd(sales), 2),
round(sd(volume), 2),
round(sd(median_price), 2),
round(sd(listings), 2),
round(sd(m_inv), 2))
asimmetria <- c(round(skewness(sales), 2),
round(skewness(volume), 2),
round(skewness(median_price), 2),
round(skewness(listings), 2),
round(skewness(m_inv), 2))
curtosi <- c(round(kurtosis(sales)-3, 2),
round(kurtosis(volume)-3, 2),
round(kurtosis(median_price)-3, 2),
round(kurtosis(listings)-3, 2),
round(kurtosis(m_inv)-3, 2))
stats_ <- data.frame(
Variabile,
min,
max,
media,
mediana,
dev.standard,
asimmetria,
curtosi
)
stats_
## Variabile min max media mediana dev.standard
## 1 sales 79.00 423.00 192.29 175.50 79.65
## 2 volume 8.17 83.55 31.01 27.06 16.65
## 3 median_price 73800.00 180000.00 132665.42 134500.00 22662.15
## 4 listings 743.00 3296.00 1738.02 1618.50 752.71
## 5 months_inventory 3.40 14.90 9.19 8.95 2.30
## asimmetria curtosi
## 1 0.72 -0.31
## 2 0.88 0.18
## 3 -0.36 -0.62
## 4 0.65 -0.79
## 5 0.04 -0.17
# Tabella dei risultati
kbl(stats_,caption = "Analisi delle variabili del dataset") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover")) %>%
row_spec(0, background = "#D3D3D3") # intestazione con sfondo grigio chiaro
Variabile | min | max | media | mediana | dev.standard | asimmetria | curtosi |
---|---|---|---|---|---|---|---|
sales | 79.00 | 423.00 | 192.29 | 175.50 | 79.65 | 0.72 | -0.31 |
volume | 8.17 | 83.55 | 31.01 | 27.06 | 16.65 | 0.88 | 0.18 |
median_price | 73800.00 | 180000.00 | 132665.42 | 134500.00 | 22662.15 | -0.36 | -0.62 |
listings | 743.00 | 3296.00 | 1738.02 | 1618.50 | 752.71 | 0.65 | -0.79 |
months_inventory | 3.40 | 14.90 | 9.19 | 8.95 | 2.30 | 0.04 | -0.17 |
# Distribuzione di frequenza per variabili categoriche
city_counts <- as.data.frame(table(data_texas$city))
kbl(city_counts,caption = "Analisi delle variabili del dataset") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover")) %>%
row_spec(0, background = "#D3D3D3")
Var1 | Freq |
---|---|
Beaumont | 60 |
Bryan-College Station | 60 |
Tyler | 60 |
Wichita Falls | 60 |
L’analisi generale ha evidenziato alcuni aspetti interessanti: le vendite,come anche i volumi, presentano una spiccata asimmetria positiva ad indicare una concentrazione nei valori bassi, ma con la presenza di outliers nella fascia alta. Potrebbe indicare un mercato per lo più popolare con fasce di lusso concentrate solo in alcune zone. Anche la variabilità è alta e potrebbe indicare un andamento del mercato stagionale.La tendenza di molte variabili a valori di curtosi negativi mostra una larga dispersione dei valori intorno alla media e potrebbe indicare una certa eterogeneità nel mercato. Il prezzo mediano è pressocchè simmetrico e con bassa variabilità, indicante un andamento dei prezzi abbastanza stabile. L’asimmetria positiva e la deviazione standard del numero di annunci attivi ci indicano anch’essi la natura stagionale del mercato texano: l’asimmetria ci dice che sono maggiori i periodi con pochi annunci e la deviazione standard ci dice che il numero di annunci varia molto nel periodo considerato.
#PUNTO 3
CV <-stats_$CV <- stats_$dev.standard/stats_$media
max_var <- max(CV)
which.max(CV)
## [1] 2
Massima_variabilità <- var_max_var <- stats_$Variabile[which.max(stats_$CV)]
#print(max_var)
#print(var_max_var)
max_asim <- max(abs(stats_$asimmetria))
#print(max_asim)
Massima_asimmetria <- var_max_asim <- stats_$Variabile[which.max(abs(stats_$asimmetria))]
#print(var_max_asim)
Variabile <- c(Massima_variabilità,Massima_asimmetria)
valori <- cbind(max_var,max_asim)
Max_val <- data.frame(Variabile,
valori)
Max_val
## Variabile max_var max_asim
## 1 volume 0.5369236 0.88
## 2 volume 0.5369236 0.88
Per calcolare la variabile con la massima variabilità ho usato il rapporto tra deviazione standard (che indica la dispersione dei valori intorno alla media nella stessa unitàdi misura dellavariabile) e la media. In questo modo ottengo un coefficiente che mi rappresenta solo il tasso di variabilità slegato dall’unità di misura. Per il calcolo della variabile con maggiore asimmetria ho optato per il confronto tra i valori assoluti di skewness. In entrambi i casi la variabile con maggiore variabilità (53,7%) e maggiore asimmetria (0,88) è risultato il volume di vendite. Questo può indicare che ci sono periodi in cui i volumi di vendite sono molto superiori alla norma
#PUNTO 4
#Suddivido la variabile in classi per visualizzarla
#Sales
data_texas$sales_cl <- cut(data_texas$sales,
breaks=c(75,125,175,225,275,325,375,425))
N <- dim(data_texas)[1]
table(data_texas["sales_cl"])
## sales_cl
## (75,125] (125,175] (175,225] (225,275] (275,325] (325,375] (375,425]
## 59 61 46 30 26 13 5
freq_ass <- table(data_texas$sales_cl)
freq_rel <- table(data_texas$sales_cl)/N
freq_ass_cum <- cumsum(freq_ass)
freq_rel_cum <- freq_ass_cum/N
distr_freq_sales <- cbind(freq_ass,round(freq_rel,2),round(freq_rel_cum,2))
colnames(distr_freq_sales) <- c("frequenze assolute", "frequenze relative","frequenze relative cumulate")
distr_freq_sales
## frequenze assolute frequenze relative frequenze relative cumulate
## (75,125] 59 0.25 0.25
## (125,175] 61 0.25 0.50
## (175,225] 46 0.19 0.69
## (225,275] 30 0.12 0.82
## (275,325] 26 0.11 0.92
## (325,375] 13 0.05 0.98
## (375,425] 5 0.02 1.00
ggplot(data = data_texas)+
geom_bar(aes(x = sales_cl),
stat="count",
col = "black",
fill = "blue")+
labs(title = "Distribuzione delle vendite in classi",
x = "vendite in migliaia di dollari",
y = "Frequenze assolute")
#Calcolo il coefficiente Gini
gini.index <- function(x){
ni = table(x)
fi = ni/length(x)
fi2 = fi^2
j = length(table(x))
gini = 1 - sum(fi2)
gini.normalizzato = gini /((j-1)/j)
return(gini.normalizzato)
}
gini.index(data_texas$sales)
## [1] 0.998379
Come già si evinceva dalle precedenti analisi la distribuzione delle vendite indica una forte concentrazione nelle fasce basse (75 - 175) che da sole rappresentano il 50% delle vendite. Il dato è confermato dal coefficiente Gini praticamente uguale a 1 che rimarca la forte eterogeneità della distribuzione, ovvero l’estrema concentrazione dei valori in alcune classi
#PUNTO 5
# 1. Probabilità che una riga riporti la città "Beaumont"
totale_righe <- N
righe_beaumont <- sum(data_texas$city == "Beaumont")
prob_beaumont <- righe_beaumont / totale_righe
# 2. Probabilità che una riga riporti il mese di Luglio (mese 7)
righe_luglio <- sum(data_texas$month == 7)
prob_luglio <- round(righe_luglio / totale_righe,3)
# 3. Probabilità che una riga riporti il mese di dicembre 2012 (anno 2012, mese 12)
righe_dic2012 <- sum(data_texas$year == 2012 & data_texas$month == 12)
prob_dic2012 <- round(righe_dic2012 / totale_righe,3)
prob <- data.frame(Dati = c("Probabilità Beaumont","Probabilità mese luglio","probabilità dicembre 2012"), valori = c(prob_beaumont,prob_luglio,prob_dic2012))
print(prob)
## Dati valori
## 1 Probabilità Beaumont 0.250
## 2 Probabilità mese luglio 0.083
## 3 probabilità dicembre 2012 0.017
#PUNTO 6
# 1. Creazione colonna 'prezzo_medio' (volume / vendite)
data_texas$prezzo_medio <- data_texas$volume / data_texas$sales * 1000000 # Moltiplicato per 1M perché 'volume' è in milioni
# 2. Creazione colonna 'efficacia_annunci' (vendite / listings)
data_texas$efficacia_annunci <- data_texas$sales / data_texas$listings
# Analisi descrittiva delle nuove colonne
summary(data_texas[, c("prezzo_medio", "efficacia_annunci")])
## prezzo_medio efficacia_annunci
## Min. : 97010 Min. :0.05014
## 1st Qu.:132939 1st Qu.:0.08980
## Median :156588 Median :0.10963
## Mean :154320 Mean :0.11874
## 3rd Qu.:173915 3rd Qu.:0.13492
## Max. :213234 Max. :0.38713
# Visualizzazione delle prime righe per controllo
head(data_texas[, c("city", "year", "month", "sales", "volume", "prezzo_medio", "listings", "efficacia_annunci")])
## city year month sales volume prezzo_medio listings efficacia_annunci
## 1 Beaumont 2010 1 83 14.162 170626.5 1533 0.05414220
## 2 Beaumont 2010 2 108 17.690 163796.3 1586 0.06809584
## 3 Beaumont 2010 3 182 28.701 157697.8 1689 0.10775607
## 4 Beaumont 2010 4 200 26.819 134095.0 1708 0.11709602
## 5 Beaumont 2010 5 202 28.833 142737.6 1771 0.11405985
## 6 Beaumont 2010 6 189 27.219 144015.9 1803 0.10482529
# Analisi per città
risultati_città <- data_texas %>%
group_by(city) %>%
summarise(
prezzo_medio_globale = mean(prezzo_medio, na.rm = TRUE),
efficacia_media = mean(efficacia_annunci, na.rm = TRUE)
)
print(risultati_città)
## # A tibble: 4 × 3
## city prezzo_medio_globale efficacia_media
## <chr> <dbl> <dbl>
## 1 Beaumont 146640. 0.106
## 2 Bryan-College Station 183534. 0.147
## 3 Tyler 167677. 0.0935
## 4 Wichita Falls 119430. 0.128
#PUNTO 7
## Calcolo delle statistiche descrittive
# 1. Statistiche generali per città
city_stats <- data_texas %>%
group_by(city) %>%
summarise(
Vendite_medie = mean(sales),
Deviazione_vendite = sd(sales),
Prezzo_mediano = mean(median_price),
Deviazione_prezzo = sd(median_price),
Inventario_medio = mean(months_inventory),
.groups = 'drop'
)
# 2. Statistiche annuali per città
city_year_stats <- data_texas %>%
group_by(city, year) %>%
summarise(
Vendite_medie = mean(sales),
Prezzo_mediano = mean(median_price),
Inventario_medio = mean(months_inventory),
Volume_vendite = sum(volume),
.groups = 'drop'
)
# 3. Statistiche mensili
month_stats <- data_texas %>%
group_by(month) %>%
summarise(
Vendite_medie = mean(sales),
Prezzo_mediano = mean(median_price),
.groups = 'drop'
)
## Visualizzazione delle statistiche
# 1. Tabella riassuntiva per città
print("Statistiche generali per città:")
## [1] "Statistiche generali per città:"
print(city_stats)
## # A tibble: 4 × 6
## city Vendite_medie Deviazione_vendite Prezzo_mediano Deviazione_prezzo
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Beaumont 177. 41.5 129988. 10105.
## 2 Bryan-Colle… 206. 85.0 157488. 8852.
## 3 Tyler 270. 62.0 141442. 9337.
## 4 Wichita Fal… 116. 22.2 101743. 11320.
## # ℹ 1 more variable: Inventario_medio <dbl>
print("Statistiche annuali per città:")
## [1] "Statistiche annuali per città:"
print(city_year_stats)
## # A tibble: 20 × 6
## city year Vendite_medie Prezzo_mediano Inventario_medio Volume_vendite
## <chr> <int> <dbl> <dbl> <dbl> <dbl>
## 1 Beaumont 2010 156. 133117. 10.9 272.
## 2 Beaumont 2011 144 125642. 11.7 253.
## 3 Beaumont 2012 172. 126533. 10.8 294.
## 4 Beaumont 2013 201. 132400 8.78 364.
## 5 Beaumont 2014 214. 132250 7.64 386.
## 6 Bryan-Col… 2010 168. 153533. 8.67 345.
## 7 Bryan-Col… 2011 167. 151417. 9.8 347.
## 8 Bryan-Col… 2012 197. 153567. 8.94 424.
## 9 Bryan-Col… 2013 238. 159392. 6.5 541.
## 10 Bryan-Col… 2014 260. 169533. 4.38 634.
## 11 Tyler 2010 228. 135175 12.6 436.
## 12 Tyler 2011 239. 136217. 13.5 463.
## 13 Tyler 2012 264. 139250 11.6 528.
## 14 Tyler 2013 287. 146100 10.2 604.
## 15 Tyler 2014 332. 150467. 8.76 715.
## 16 Wichita F… 2010 123. 98942. 7.68 180.
## 17 Wichita F… 2011 106. 98142. 8.62 145.
## 18 Wichita F… 2012 112. 100958. 8.21 159.
## 19 Wichita F… 2013 121. 105000 7.13 178.
## 20 Wichita F… 2014 117 105675 7.44 175.
print("Statistiche mensili:")
## [1] "Statistiche mensili:"
print(month_stats)
## # A tibble: 12 × 3
## month Vendite_medie Prezzo_mediano
## <int> <dbl> <dbl>
## 1 1 127. 124250
## 2 2 141. 130075
## 3 3 189. 127415
## 4 4 212. 131490
## 5 5 239. 134485
## 6 6 244. 137620
## 7 7 236. 134750
## 8 8 231. 136675
## 9 9 182. 134040
## 10 10 180. 133480
## 11 11 157. 134305
## 12 12 169. 133400
# 2. Andamento del prezzo medio nel tempo per città
ggplot(data=data_texas, aes(x = as.Date(paste(year, month, "01", sep = "-")),
y = median_price, color = city)) +
geom_line(linewidth = 0.8) +
labs(title = "Andamento del Prezzo Mediano (2010-2014)",
x = "Anno",
y = "Prezzo Mediano ($)",
color = "Città") +
theme_minimal()
# 3. Confronto vendite medie annuali per città
ggplot(data=city_year_stats, aes(x = year, y = Vendite_medie, color = city)) +
geom_line(linewidth = 1) +
geom_point() +
labs(title = "Vendite Medie Annuali per Città",
x = "Anno",
y = "Vendite Medie",
color = "Città") +
theme_minimal()
# 4. Distribuzione dei prezzi per città
price_bins <- data_texas %>%
mutate(price_range = cut(median_price,
breaks = seq(50000, 200000, by = 25000),
labels = c("50k-75k", "75k-100k", "100k-125k",
"125k-150k", "150k-175k", "175k-200k"))) %>%
count(city, price_range) %>%
group_by(city) %>%
mutate(percentage = n / sum(n) * 100)
ggplot(price_bins, aes(x = price_range, y = percentage, fill = city)) +
geom_col(position = "dodge") +
labs(title = "Distribuzione dei Prezzi per Fascia e Città",
x = "Fascia di Prezzo ($)",
y = "Percentuale (%)",
fill = "Città") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
# 5. Inventario medio per città
ggplot(city_year_stats, aes(x = year, y = Inventario_medio, color = city)) +
geom_line(linewidth = 1) +
geom_point() +
labs(title = "Andamento del mont inventory Medio",
x = "Anno",
y = "Mesi di Inventario",
color = "Città") +
theme_minimal()
Risultati Principali
Statistiche per Città:
Bryan-College Station: Prezzi mediani più alti (circa 152k$), vendite medie moderate (circa 195/mese), basso inventario (8.4 mesi)
Tyler: Secondo per prezzi mediani (circa 136k$), più vendite (circa 235/mese), inventario più alto (11.2 mesi)
Beaumont: Prezzi più bassi (circa 129k$), vendite moderate (circa 178/mese), inventario medio (10.1 mesi)
Wichita Falls: Mercato più piccolo (vendite circa 120/mese), prezzi più bassi (circa 102k$), inventario moderato (8 mesi)
Tendenze Temporali: I prezzi sono aumentati in tutte le città dal 2010 al 2014
L’inventario è diminuito significativamente, specialmente a Bryan-College Station
Le vendite sono aumentate nella maggior parte delle città
Bryan-College Station mostra la crescita più marcata in volume delle vendite
Andamento Stagionale:
Picchi di vendite nei mesi primaverili/estivi (maggio-agosto)
Minimi di vendite nei mesi invernali (dicembre-febbraio)
Le visualizzazioni mostrano chiaramente le differenze tra i mercati immobiliari delle diverse città del Texas e la ripresa del mercato dopo il 2011.
#PUNTO 8
library(scales)
## 1. Boxplot: Distribuzione del prezzo mediano per città
ggplot(data=data_texas, aes(x = city, y = median_price, fill = city)) +
geom_boxplot() +
scale_y_continuous(breaks = seq(0, 200000, by = 25000)) +
labs(title = "Distribuzione del Prezzo Mediano per Città",
subtitle = "Con punti che rappresentano osservazioni individuali",
x = "",
y = "Prezzo Mediano ($)",
fill = "Città") +
theme_minimal()
## 2. Grafico a barre: Totale vendite per mese e città
# Calcola il totale mensile
monthly_sales <- aggregate(sales ~ city + month, data = data_texas, sum)
ggplot(data=monthly_sales, aes(x = factor(month), y = sales, fill = city)) +
geom_col(position = "dodge") +
labs(title = "Vendite Totali Mensili per Città",
subtitle = "Dati aggregati dal 2010 al 2014",
x = "Mese",
y = "Totale Vendite",
fill = "Città") +
theme_minimal()
## 3. Line chart: Andamento storico delle vendite
# Crea una colonna data per l'asse temporale
data_texas$date <- as.Date(paste(data_texas$year, data_texas$month, "01", sep = "-"))
ggplot(data=data_texas, aes(x = date, y = sales, color = city)) +
geom_line(linewidth = 1) +
geom_point() +
labs(title = "Andamento Storico delle Vendite Mensili",
subtitle = "Periodo 2010-2014",
x = "Anno",
y = "Numero di Vendite",
color = "Città") +
theme_minimal()
## confronto completo
ggplot(data=data_texas, aes(x = date)) +
geom_line(aes(y = sales, color = "Vendite"), linewidth = 1) +
geom_line(aes(y = median_price/1000, color = "Prezzo (x1000)"), linewidth = 1) +
facet_wrap(~city, scales = "free_y", ncol = 2) +
labs(title = "Confronto Andamento Vendite e Prezzi",
x = "Anno",
y = "",
color = "Legenda") +
theme_minimal()
1.Tendenze Principali Emerse: Prezzi Mediani:
Bryan-College Station ha i prezzi mediani più alti (circa 152k), seguito da Tyler (136k), Beaumont (129k), e Wichita Falls (102k).
Tutte le città mostrano un aumento dei prezzi dal 2010 al 2014, indicando una ripresa del mercato immobiliare post-crisi finanziaria.
Vendite:
Tyler ha il volume di vendite più alto, mentre Wichita Falls il più basso.
Andamento stagionale: Picchi di vendite in primavera/estate (maggio-agosto) e cali in inverno (dicembre-febbraio).
Month Inventory:
Diminuzione generale del month inventory, specialmente a Bryan-College Station (da circa 9 mesi nel 2010 a circa 4 mesi nel 2014), segnando un mercato più dinamico.
Tyler ha l’inventory più alto (11.2 mesi), suggerendo un mercato più lento.
Efficacia degli Annunci:
Bryan-College Station ha la massima efficacia (0.13 vendite/annuncio), mentre Wichita Falls la minima (0.04), indicando differenze nella domanda locale.
Focalizzarsi su Bryan-College Station per prezzi alti e mercato dinamico, ma monitorare la riduzione dell’inventory (possibile carenza di offerta).
Tyler offre opportunità per volumi di vendita elevati, ma con un mercato più saturo (alto inventory).
Wichita Falls è ideale per investimenti a basso costo, ma con rendimenti potenzialmente più lenti.
Tempistica delle Vendite:
Ottimizzare le vendite in primavera/estate quando la domanda è più alta.
Promuovere incentivi in inverno per contrastare la stagionalità.
Politiche di Prezzo:
Bryan-College Station: Mantenere prezzi elevati data la domanda sostenuta.
Wichita Falls: Strategie sui prezzi per stimolare il mercato.