Nota: Assicurarsi di aver installato i seguenti pacchetti prima di eseguire questo documento: ggplot2, modeest, dplyr, moments, rmarkdown, knitr.
Il dataset caricato presenta le seguenti variabili:
rm(list = ls())
set.seed(13)
library(ggplot2) # Per la visualizzazione grafica
library(modeest) # Per calcolare la moda
library(dplyr) # Per manipolare gli oggetti
##
## Caricamento pacchetto: 'dplyr'
## I seguenti oggetti sono mascherati da 'package:stats':
##
## filter, lag
## I seguenti oggetti sono mascherati da 'package:base':
##
## intersect, setdiff, setequal, union
library(moments) # Per calcolare i momenti 3 e 4 di una variabile
##
## Caricamento pacchetto: 'moments'
## Il seguente oggetto è mascherato da 'package:modeest':
##
## skewness
library(rmarkdown)
library(knitr)
# Calcola la frequenza relativa e assoluta per una variabile data
calcola_frequenza <- function(x) {
# Calcola la lunghezza del vettore
n = length(x)
# Calcola la frequenza assoluta
ni = table(x)
# Calcola la frequenza relativa
fi = ni / n
# Calcola la funzione di ripartizione assoluta
NI = cumsum(ni)
# Calcola la funzione di ripartizione relativa
FI = cumsum(fi)
# Unisco le frequenze e le trasformo in un data frame
frequenza <- as.data.frame(
cbind(
ni,
fi,
NI,
FI
)
)
# ritorno il dataframe ottenuto
return(frequenza)
}
# Calcola il coefficiente di variazione
CV <- function(x) {
# sigma/mu * 100
return (sd(x) / mean(x) * 100)
}
calcolo_indice_Gini <- function(x) {
# Calcola frequenza assoluta
ni = table(x)
# Calcola frequenza relativa
fi = ni / length(x)
# Seleziona quante modalità ha la variabile
J = length(
table(x)
)
# Calcola indice di gini
gini = 1 - sum(fi ^ 2)
# Normalizza tra 0 e 1 l'indice di gini per semplificarne l'interpretazione
gini_normalizzato = gini / (J - 1) / J
# Ritorna l'indice di gini normalizzato
return(gini_normalizzato)
}
calcola_media_armonica <- function(x) {
n = length(x)
return (n / sum(1 / x))
}
setwd("C:/Users/simon/OneDrive/Desktop/Progetto_Statistica_Descrittiva")
getwd() # assicurarsi che il percorso sia corretto
## [1] "C:/Users/simon/OneDrive/Desktop/Progetto_Statistica_Descrittiva"
L’azienda Texas Realty Insights desidera analizzare le tendenze del mercato immobiliare nello stato del Texas, sfruttando i dati storici relativi alle vendite di immobili. L’obiettivo è fornire insight statistici e visivi che supportino le decisioni strategiche di vendita e ottimizzazione delle inserzioni immobiliari.
Identificare e interpretare i trend storici delle vendite immobiliari in Texas. Valutare l’efficacia delle strategie di marketing delle inserzioni immobiliari. Offrire una rappresentazione grafica dei dati che evidenzi la distribuzione dei prezzi e delle vendite tra città, mesi e anni.
dati <- read.csv("realestate_texas.csv")
head(dati,5) # verifico importazione dei dati
## 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
str(dati)
## '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 ...
city Indica la città di riferimento
# tabella con i conteggi per ogni modalità
table(dati$city)
##
## Beaumont Bryan-College Station Tyler
## 60 60 60
## Wichita Falls
## 60
# Numero di modalità
length(
table(dati$city)
)
## [1] 4
year: Indica l’anno di riferimentotable(dati$year)
##
## 2010 2011 2012 2013 2014
## 48 48 48 48 48
length(
table(dati$year)
)
## [1] 5
months: indica il mese di riferimentotable(dati$month)
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 20 20 20 20 20 20 20 20 20 20 20 20
length(
table(dati$month)
)
## [1] 12
sales: indica numero totale di venditetable(dati$sales)
##
## 79 80 81 83 89 90 91 92 93 94 95 96 97 98 100 101 102 104 105 107
## 2 1 1 1 3 1 1 1 2 2 1 1 2 1 1 3 2 1 1 1
## 108 109 110 111 112 113 114 115 116 117 119 121 122 123 124 125 127 128 129 130
## 3 1 2 2 1 2 2 2 1 1 2 1 1 2 5 2 2 2 1 3
## 131 132 134 135 137 140 141 143 144 146 147 148 149 150 151 152 155 159 160 162
## 1 2 1 3 1 2 1 3 1 1 1 2 3 4 1 1 2 3 3 2
## 163 164 165 166 167 169 170 171 173 174 175 176 177 180 181 182 186 187 188 189
## 2 2 1 2 1 2 1 1 1 1 1 2 2 1 2 4 3 1 1 2
## 190 193 196 197 198 200 202 204 206 208 209 210 212 213 218 220 224 225 227 232
## 1 2 2 2 2 2 3 1 1 2 1 1 2 1 2 1 1 1 2 1
## 233 234 238 239 241 244 246 250 253 254 255 258 260 262 267 271 272 273 275 278
## 1 1 3 1 1 2 2 1 3 1 1 1 1 2 1 2 1 1 1 1
## 281 282 284 286 287 289 292 293 294 295 296 298 300 302 303 313 316 317 322 323
## 1 3 1 1 1 3 1 1 1 1 1 2 1 1 1 1 1 1 1 1
## 326 328 332 335 341 347 353 357 361 369 371 377 388 402 403 423
## 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1
volume: indica il valore totale delle vendite (in
milioni di dollari)table(dati$volume)
##
## 8.166 8.747 8.951 9.382 9.4 9.507 9.626 9.666 9.695 10.274 10.697
## 1 1 1 1 1 1 1 1 1 1 1
## 10.844 11.176 11.261 11.308 11.486 11.792 11.82 11.92 12.015 12.355 12.451
## 1 1 1 1 1 1 1 1 1 1 1
## 12.47 13.031 13.104 13.396 13.443 13.496 13.524 13.594 13.605 13.817 13.876
## 1 1 1 1 1 1 1 1 1 1 1
## 13.884 13.925 14.003 14.162 14.47 14.69 14.876 15.151 15.242 15.283 15.325
## 1 1 2 1 1 1 1 1 1 1 1
## 15.489 15.547 16.103 16.125 16.129 16.166 16.187 16.2 16.475 16.715 16.908
## 1 1 1 1 1 1 1 1 1 1 1
## 17.126 17.212 17.233 17.568 17.69 17.79 17.793 17.833 18.077 18.107 18.192
## 1 1 1 1 1 1 1 1 1 1 1
## 18.25 18.571 18.672 18.686 18.977 19.059 19.192 19.684 19.686 19.772 19.789
## 1 1 1 1 1 1 1 1 1 1 1
## 20.301 20.342 20.58 20.635 20.881 21.05 21.235 21.534 22.183 22.564 22.706
## 1 1 1 1 1 1 1 1 1 1 1
## 22.887 22.906 22.983 23.029 23.464 23.904 23.916 24.052 24.087 24.228 24.411
## 1 1 1 1 1 1 1 1 1 1 1
## 24.86 24.921 24.925 24.956 25.237 25.281 25.359 25.386 25.487 25.551 25.686
## 1 1 1 1 1 1 1 1 1 1 1
## 25.714 25.86 25.981 26.344 26.371 26.644 26.819 26.891 26.961 27.164 27.219
## 1 1 1 1 1 1 1 1 1 1 1
## 27.35 28.32 28.434 28.48 28.507 28.701 28.833 28.882 29.117 29.433 29.457
## 1 1 1 1 1 1 1 1 1 1 1
## 29.754 30.139 30.159 30.181 30.773 30.818 31.146 31.263 31.656 31.667 31.684
## 1 1 1 1 1 1 1 1 1 1 1
## 32.083 32.087 32.135 32.538 32.681 32.814 33.326 33.633 33.859 34.057 34.359
## 1 1 1 1 1 1 1 1 1 1 1
## 34.669 34.806 34.861 34.903 35.169 35.22 35.335 35.395 35.866 36.275 36.739
## 1 1 1 1 1 1 2 1 1 1 1
## 36.916 36.965 37.28 37.961 38.189 38.691 38.707 39.049 39.737 39.788 40.306
## 1 1 1 1 1 1 1 1 1 1 1
## 40.493 40.883 40.923 40.93 41.191 42.028 42.42 42.553 42.584 42.941 44.022
## 1 1 1 1 1 1 1 2 1 1 1
## 44.327 45.53 45.84 46.485 46.696 46.763 47.453 47.776 48.445 48.481 48.948
## 1 1 1 1 1 1 1 1 1 1 1
## 49.352 49.377 49.914 50.348 50.404 51.056 51.099 51.608 51.619 51.716 52.314
## 1 1 1 1 1 1 1 1 1 1 1
## 52.319 52.928 53.2 53.674 54.325 55.448 55.913 57.388 59.974 60.581 60.639
## 1 1 1 1 1 1 1 1 1 1 1
## 61.032 61.164 62.85 63.046 63.759 65.316 66.725 67.244 68.161 68.744 69.643
## 1 1 1 1 1 1 1 1 1 1 1
## 70.289 71.456 76.116 77.983 80.814 83.547
## 1 1 1 1 1 1
median_price: indica il prezzo mediano di vendita (in
dollari)table(dati$median_price)
##
## 73800 82100 85900 86400 87000 87200 87500 88600 89400 90000 90800
## 1 1 1 1 1 1 1 1 1 2 1
## 91200 91700 92200 93000 94000 95000 96000 96700 97500 99300 99600
## 1 1 1 1 1 1 1 1 2 1 1
## 1e+05 100700 101400 102300 102500 102900 103800 104700 105000 105200 105800
## 2 2 1 3 2 1 1 2 1 2 1
## 106700 108000 108300 109100 109400 110000 111100 112100 113300 113600 114000
## 1 1 1 1 1 2 2 1 1 1 1
## 114300 115700 116000 116500 116700 117500 118200 118800 119200 120000 120600
## 1 1 1 1 1 1 1 2 1 1 1
## 120700 121100 121200 121300 121800 122400 122800 123100 123200 123800 124200
## 1 2 1 1 1 1 1 1 1 1 1
## 124300 126100 126200 127000 128100 128200 128800 129100 129200 129400 129600
## 2 1 1 1 1 1 1 1 1 1 1
## 130000 130700 130800 131200 131400 131500 132100 132400 132500 132800 132900
## 4 2 2 1 1 1 1 1 2 1 1
## 133200 133300 133600 133800 134100 134200 134300 134400 134500 134700 135000
## 2 1 1 1 2 2 1 1 2 1 1
## 135100 135300 135700 136000 136100 136300 136800 137600 138200 138300 138500
## 1 1 2 1 1 1 1 1 1 1 1
## 138900 139200 139400 139600 140000 140500 140600 140700 142000 142200 142400
## 1 1 1 1 2 1 1 1 1 1 2
## 142700 143100 143600 144000 144100 144600 144800 144900 145000 145800 146700
## 1 1 1 1 2 2 2 1 1 1 1
## 146900 147000 147400 147600 147700 147900 148100 148300 148400 148500 148700
## 1 1 1 1 1 1 1 1 1 2 1
## 148900 149100 149300 149400 150000 150200 150700 151000 151200 151500 151700
## 1 1 2 1 1 1 1 1 1 1 1
## 151900 152000 152100 152200 152300 152600 153100 153300 153900 154300 154400
## 1 1 2 1 1 1 2 1 1 1 1
## 155200 155300 155500 155600 155700 156200 156400 156500 156600 157300 158200
## 2 2 1 2 1 1 1 3 1 1 1
## 158800 159300 159400 159700 161000 161200 161400 161600 163700 163800 165200
## 1 1 1 1 2 1 1 1 1 1 1
## 165300 166100 167300 168500 169500 169600 170000 172200 172600 172800 176100
## 1 1 1 1 1 1 1 1 1 1 1
## 177300 180000
## 1 1
listings: indica il numero totale di annunci
attivitable(dati$listings)
##
## 743 746 774 777 796 801 812 821 830 838 844 850 852 854 859 861
## 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1
## 868 870 877 882 887 895 899 900 902 904 905 907 908 914 915 923
## 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1
## 931 933 934 938 940 941 946 950 955 961 963 968 972 973 993 996
## 1 1 1 1 1 2 1 1 1 1 1 2 1 2 1 1
## 1004 1005 1016 1022 1028 1029 1030 1031 1041 1052 1057 1132 1152 1155 1199 1201
## 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1
## 1212 1218 1261 1271 1298 1362 1385 1416 1439 1442 1445 1458 1462 1480 1486 1492
## 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1
## 1498 1500 1501 1510 1518 1530 1533 1534 1536 1539 1544 1549 1562 1567 1570 1575
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
## 1577 1581 1586 1588 1596 1599 1604 1613 1617 1620 1624 1634 1636 1646 1647 1652
## 1 3 1 1 1 2 1 1 1 2 1 1 1 2 1 1
## 1655 1657 1659 1662 1666 1669 1671 1672 1675 1677 1680 1681 1683 1687 1689 1691
## 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1
## 1696 1704 1708 1722 1723 1724 1730 1734 1735 1742 1749 1750 1758 1762 1765 1767
## 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1
## 1771 1779 1785 1789 1793 1803 1806 1822 1829 1830 1832 1833 1834 1840 1845 1857
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 1984 2272 2460 2500 2602 2609 2625 2633 2658 2666 2696 2701 2720 2727 2729 2737
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## 2744 2763 2778 2788 2791 2811 2830 2852 2855 2857 2868 2875 2876 2878 2897 2917
## 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1
## 2920 2938 2940 2946 2953 2981 2986 2998 3014 3041 3042 3056 3072 3094 3101 3156
## 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1
## 3175 3196 3218 3256 3263 3266 3267 3272 3294 3296
## 1 1 1 1 1 1 1 1 1 1
months_inventory: indica la quantità di tempo necessaria
per vendere tutte le inserzioni correnti, espresso in mesi Variabile
quantitativa su scala continua Anche qua valutare come negli anni sia
cresciuta la promozione pubblicitaria
table(dati$months_inventory)
##
## 3.4 3.8 4 4.1 4.4 4.5 4.8 4.9 5 5.2 6 6.1 6.3 6.4 6.6 6.7
## 1 1 3 1 1 1 1 1 5 1 1 3 1 2 1 1
## 6.9 7 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 8 8.1 8.2 8.3 8.4
## 2 3 5 4 3 2 5 7 2 7 7 7 10 1 4 5
## 8.5 8.6 8.7 8.8 8.9 9 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.9 10 10.1
## 4 4 6 4 3 7 6 3 3 6 3 1 2 2 4 1
## 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8
## 3 1 3 3 4 3 3 2 4 2 5 4 2 7 5 1
## 11.9 12 12.2 12.3 12.4 12.6 12.7 13 13.3 13.4 13.5 13.8 14 14.5 14.6 14.9
## 1 4 1 3 3 2 1 3 2 2 1 2 1 2 1 1
INDICI DI POSIZIONE:
alla stessa unità di misura della variabile
distribuiscono i dati
La distribuzione presenta 4 modalità, ciascuna con frequenza pari a 60 osservazioni, configurandosi quindi come una distribuzione quadrimodale. Essendo una variabile qualitativa nominale, non è possibile calcolare altri indici di posizione, come la media (in quanto non numerica), non avendo un ordine proprio nemmeno la mediana.
# INDICE DI POSIZIONE
modeest::mlv(
dati$city,
method = 'mfv'
)
## [1] "Beaumont" "Bryan-College Station" "Tyler"
## [4] "Wichita Falls"
# Calcolo la frequenza assoluta e relativa per city
frequenza_city <- calcola_frequenza(dati$city)
print(frequenza_city)
## ni fi NI FI
## Beaumont 60 0.25 60 0.25
## Bryan-College Station 60 0.25 120 0.50
## Tyler 60 0.25 180 0.75
## Wichita Falls 60 0.25 240 1.00
Nel caso osservato, otteniamo un valore dell’indice di Gini (normalizzato) pari a 0.06, vicino allo zero, indicazione di eterogeità scarsa
calcolo_indice_Gini(dati$city)
## [1] 0.0625
Sales ha un valore modale di 124. Il valore medio invece risulta 192, cioè in media, ci sono 192 vendite, potremmo avere qualche vendità più alta, qualche più bassa mentre il valore mediano è pari a 175.5
modeest::mlv(
dati$sales,
method = 'mfv'
)
## [1] 124
mean(dati$sales)
## [1] 192.2917
median(dati$sales)
## [1] 175.5
var(dati$sales)
## [1] 6344.3
sd(dati$sales)
## [1] 79.65111
# Intervallo di variazione(o Range)
# I dati si distribuiscono tra il massimo ed il minimo, su un range di 344
max(dati$sales) - min(dati$sales) # 344
## [1] 344
# Primo interquantile: Il 25% delle vendite ha avuto un numero di vendite pari
# o inferiore a 127.
summary(dati$sales)[2]
## 1st Qu.
## 127
# Il terzo interquantile: Il 25% delle vendite ha avuto un numero di vendite superiore a 247.
summary(dati$sales)[5] # 247
## 3rd Qu.
## 247
# sottraendo il terzo e il primo quantile,
# ottengo IQR. Il quale mi dice il 50% (centrale) dei dati sulle vendite si trova
# in un intervallo di 120 unità (tra 127 e 247 vendite).
IQR(dati$sales)
## [1] 120
Y1 = 0.72 > 0 quindi distribuzione asimmetrica positiva in accordo con questo, abbiamo che la media > mediana > moda
Questo si traduce che la coda dei dati meno frequenti si estende verso destra (valori alti) Quindi abbiamo una maggiore concentrazione di valori medio bassi e pochi alti che portano su la media
skewness(dati$sales)
## [1] 0.718104
Y2 = -0.31 < 0 quindi abbiamo che è platicurtica, cioè è più appiattita rispetto alla Normale. Questo si traduce che abbiamo meno valori vicino alla media (come invece accade con una Normale). Inoltre guardando alle code abbiamo una diminuizione più rapida man mano che ci allontaniamo dalla media cioè valori alti e bassi sono meno probabili di quanto ci aspetterebbe da una normale
kurtosis(dati$sales) - 3
## [1] -0.3131764
L’analisi visiva della densità della distribuzione delle vendite rivela un quadro più dettagliato rispetto ai soli indici di forma. Sebbene l’asimmetria positiva indichi una coda più lunga a destra, la rapida discesa della curva dopo la media suggerisce che i valori di vendita molto elevati, quindi una tendenza verso volumi di vendita inferiori, con episodi occasionali di vendite più elevate che spostano la media verso l’alto
plot(
density(dati$sales)
)
abline(
v = mean(dati$sales)
)
La variabile volume indica che abbiamo una distribuzione trimodale, con valori rispettivamente 14, 35 e 42.5
modeest::mlv(
dati$volume,
method = 'mfv'
)
## [1] 14.003 35.335 42.553
# Il vlore medio è di 31
mean(dati$volume)
## [1] 31.00519
# Il vlore mediano è di 27
median(dati$volume)
## [1] 27.0625
var(dati$volume) # 277
## [1] 277.2707
sd(dati$volume) # 16.65
## [1] 16.65145
max(dati$volume) - min(dati$volume) # 75.4
## [1] 75.381
summary(dati$volume)[2]
## 1st Qu.
## 17.6595
summary(dati$volume)[5]
## 3rd Qu.
## 40.893
IQR(dati$volume)
## [1] 23.2335
distribuzione asimmetrica positiva in accordo con questo, abbiamo media > mediana > moda
skewness(dati$volume) # Y1= 0.88 > 0
## [1] 0.884742
Y2 > 0 quindi abbiamo che è leptocurtica, più allungata rispetto alla Normale Abbiamo i dati più concentrati attorno alla media ed inoltre abbiamo una probabilità maggiore di incontrare valori alti o bassi rispetto alla media di quanto si avrebbe rispetto ad una normale
# curtosi
kurtosis(dati$volume) - 3 # Y2=0.17 > 0
## [1] 0.176987
plot(
density(dati$volume)
)
abline(
v = mean(dati$volume)
)
modeest::mlv(
dati$median_price,
method = 'mfv'
) # 130000
## [1] 130000
mean(dati$median_price) # 132665
## [1] 132665.4
median(dati$median_price) # 134500
## [1] 134500
var(dati$median_price) # 513572983
## [1] 513572983
sd(dati$median_price) # 22662
## [1] 22662.15
max(dati$median_price) - min(dati$median_price) # 75
## [1] 106200
summary(dati$median_price)[2]
## 1st Qu.
## 117300
summary(dati$median_price)[5]
## 3rd Qu.
## 150050
IQR(dati$median_price)
## [1] 32750
skewness(dati$median_price) # Y1= -0.36
## [1] -0.3645529
kurtosis(dati$median_price) - 3 # Y2=-0.62
## [1] -0.6229618
plot(
density(dati$median_price)
)
abline(
v = mean(dati$median_price)
)
modeest::mlv(
dati$listings,
method = 'mfv'
) # 1581
## [1] 1581
mean(dati$listings) # 1738
## [1] 1738.021
median(dati$listings) # 1618
## [1] 1618.5
var(dati$listings) # 566569
## [1] 566569
sd(dati$listings) # 752.7
## [1] 752.7078
max(dati$listings) - min(dati$listings) # 2553
## [1] 2553
summary(dati$listings)[2]
## 1st Qu.
## 1026.5
summary(dati$listings)[5]
## 3rd Qu.
## 2056
IQR(dati$listings)
## [1] 1029.5
skewness(dati$listings) # Y1= 0.65
## [1] 0.6494982
kurtosis(dati$listings) - 3 # Y2=-0.79 < 0
## [1] -0.79179
plot(
density(dati$listings)
)
abline(
v = mean(dati$listings)
)
modeest::mlv(
dati$months_inventory,
method = 'mfv'
) # 8.1
## [1] 8.1
mean(dati$months_inventory) # 9.1
## [1] 9.1925
median(dati$months_inventory) # 8.9
## [1] 8.95
var(dati$months_inventory) # 5.3
## [1] 5.306889
sd(dati$months_inventory) # 2.3
## [1] 2.303669
max(dati$months_inventory) - min(dati$months_inventory) # 11.5
## [1] 11.5
summary(dati$months_inventory)[2] # 7.8
## 1st Qu.
## 7.8
summary(dati$months_inventory)[5] # 10.95
## 3rd Qu.
## 10.95
IQR(dati$months_inventory) # 3.15
## [1] 3.15
skewness(dati$months_inventory) # Y1 = 0.04
## [1] 0.04097527
Y2 < 0 quindi abbiamo che è platicurtica, più appiatita rispetto alla Normale
kurtosis(dati$months_inventory) - 3 # Y2=-0.17
## [1] -0.1744475
Visualizzazione grafica della densità della variabile months_inventory
plot(
density(dati$months_inventory)
)
abline(
v = mean(dati$months_inventory)
)
Determina: Qual è la variabile con la più alta variabilità Qual è la variabile con la distribuzione più asimmetrica Spiega come sei giunto a queste conclusioni e fornisci considerazioni statistiche.
Calcolo il coefficiente di variazione per poter confrontare le variaiblità tra variabili con scala diversa
CV(dati$sales) # 41
## [1] 41.42203
CV(dati$volume) # 53
## [1] 53.70536
CV(dati$median_price) # 17
## [1] 17.08218
CV(dati$listings) # 43
## [1] 43.30833
CV(dati$months_inventory) # 25
## [1] 25.06031
Seleziono una variabile quantitativa (median_price) e la suddivido in classi. Creo una distribuzione di frequenze e rappresento i dati con un grafico a barre. Calcolo l’indice di eterogeneità Gini e discuti i risultati.
# Calcola l'ampiezza ottimale della classe (Freedman-Diaconis)
ampiezza_classe <- 2 * IQR(dati$median_price) /
(length(dati$median_price) ^ (1/3))
# Calcola il numero di classi approssimativo
num_classi <- (max(dati$median_price) - min(dati$median_price)) /
ampiezza_classe
# Crea i punti di interruzione delle classi usando seq()
punti_interruzione_fd <- seq(
from = min(dati$median_price),
to = max(dati$median_price),
by = ampiezza_classe
)
dati$class_median_price_fd <- cut(
dati$median_price,
breaks = punti_interruzione_fd,
include.lowest = TRUE,
right = FALSE
)
table(dati$class_median_price_fd)
##
## [7.38e+04,8.43e+04) [8.43e+04,9.49e+04) [9.49e+04,1.05e+05) [1.05e+05,1.16e+05)
## 2 15 24 16
## [1.16e+05,1.26e+05) [1.26e+05,1.37e+05) [1.37e+05,1.48e+05) [1.48e+05,1.58e+05)
## 26 48 34 49
## [1.58e+05,1.69e+05) [1.69e+05,1.79e+05]
## 17 8
# Calcolo della frequenza per la classe appena creata
frequenza_class_median_price_fd <- calcola_frequenza(dati$class_median_price_fd)
# Calcola i punti medi delle classi
punti_medi_classi_fd <- (
punti_interruzione_fd[-length(punti_interruzione_fd)] +
punti_interruzione_fd[-1]) /
2
# Calcola la media ponderata
media_ponderata_prezzo_fd <- weighted.mean(
punti_medi_classi_fd,
frequenza_class_median_price_fd$ni
)
media_ponderata_prezzo_fd # 132431
## [1] 132431.1
# Grafico a barre sulla classe creata
barplot(frequenza_class_median_price_fd$fi,
main = "Distribuzione di frequenza assoluta delle classi di prezzo mediano",
xlab = "Classi di prezzo",
ylab = "Frequenza relativa",
col = "skyblue",
border = "black",
ylim = c(0, 1),
names.arg = rownames(frequenza_class_median_price_fd),
las = 2)
# la classse 6 e 8 risultano con la frequenza maggiore
# Calcolo indice di gini
calcolo_indice_Gini(dati$class_median_price_fd)
## [1] 0.009577353
# indicando scarsa eterogeneità tra le modalità
Qual è la probabilità che, presa una riga a caso di questo dataset, essa riporti la città “Beaumont”? # P(Evento = ‘Beaumont’) = casi favorevoli / casi possibili = 60 / 240 = 0.25 = 25% # Il 25% di pescare Beaumont
prob_beaumont <- sum(dati$city == "Beaumont") / length(dati$city)
prob_beaumont
## [1] 0.25
E la probabilità che riporti il mese di Luglio?
prob_luglio <- sum(dati$month == 7) / length(dati$month)
prob_luglio
## [1] 0.08333333
# assume una probabilità del 8.3%
E la probabilità che riporti il mese di dicembre 2012?
prob_12_2012 <- sum(
dati$month == 12 & dati$year == 2012
) /
length(dati$month)
prob_12_2012 # assume una probabilità del 1.6%
## [1] 0.01666667
Creo una nuova colonna che calcoli il prezzo medio degli immobili utilizzando le variabili disponibili. Creo una colonna che misuri l’efficacia degli annunci di vendita. Commento e discuto i risultati.
Creiamo la variabile prezzo_medio che è stata ottenuta facendo il rapporto dell’ammontare in dollari dalla vendita e il totale delle vendite. Un valore alto indicherà E’ una variabile quantitativa su scala continua
dati$prezzo_medio <- (dati$volume) * 1000000 / dati$sales
table(dati$prezzo_medio)
##
## 97010.2040816326 97847.6190476191 99948.4536082474 100573.033707865
## 1 1 1 1
## 102075 102782.608695652 103098.901098901 105125.786163522
## 1 1 1 1
## 107039.37007874 108157.303370787 109064.516129032 109227.272727273
## 1 1 1 1
## 110192.592592593 110721.518987342 111008 111793.81443299
## 1 1 1 1
## 112965.517241379 112966.386554622 113845.528455285 116049.382716049
## 1 1 1 1
## 117396.396396396 117729.927007299 117791.666666667 117884.615384615
## 1 1 1 1
## 118019.801980198 118395.209580838 118548.672566372 118798.076923077
## 1 1 1 1
## 118855.555555556 119398.4375 120172.043010753 120398.230088496
## 1 1 1 1
## 120713.333333333 121086.021505376 122068.62745098 122141.891891892
## 1 1 1 1
## 122191.489361702 122354.430379747 122469.696969697 122690.909090909
## 1 1 1 1
## 123366.071428571 123755.102040816 123806.666666667 124126.315789474
## 1 1 1 1
## 124405.594405594 124480 124810.606060606 124911.290322581
## 1 1 1 1
## 125409.395973154 125555.555555556 125804.6875 126153.153153153
## 1 1 1 1
## 126551.515151515 126929.824561404 127376.146788991 127378.571428571
## 1 1 1 1
## 127496.296296296 128487.603305785 132153.846153846 132354.166666667
## 1 1 1 1
## 133133.858267717 134095 135543.47826087 136291.390728477
## 1 1 1 1
## 136519.607843137 136627.659574468 136869.230769231 137650.34965035
## 1 1 1 1
## 138451.219512195 138472.222222222 138975.806451613 141395.061728395
## 1 1 1 1
## 141709.844559586 141795.454545455 142737.623762376 142752.747252747
## 1 1 1 1
## 142871.559633028 143464 143479.72972973 143915.966386555
## 1 1 1 1
## 143974.747474747 144015.873015873 144747.252747253 144836.477987421
## 1 1 1 1
## 144908.571428571 145040.229885057 145100.961538462 145102.409638554
## 1 1 1 1
## 145300 145574.193548387 146043.010752688 146068.181818182
## 1 1 1 1
## 146101.694915254 146132.947976879 147202.797202797 148373.983739837
## 1 1 1 1
## 148651.515151515 148775.19379845 148988.700564972 149345.528455285
## 1 1 1 1
## 149601.941747573 149879.62962963 150000 150043.47826087
## 1 1 1 1
## 150213.017751479 150300 150350.393700787 151544.715447154
## 1 1 1 1
## 151816 151938.356164384 152726.872246696 153091.370558376
## 1 1 1 1
## 153481.132075472 153948.717948718 154693.333333333 155109.243697479
## 1 1 1 1
## 155756.25 156357.75862069 156368.421052632 156464.08839779
## 1 1 1 1
## 156712.871287129 157217.557251908 157396.153846154 157490.322580645
## 1 1 1 1
## 157697.802197802 157745.535714286 157955.696202532 157970.085470085
## 1 1 1 1
## 158461.240310078 158846.534653465 159293.75 159360
## 1 1 1 1
## 159588.709677419 159653.465346535 160051.383399209 160157.142857143
## 1 1 1 1
## 160509.803921569 160712.5 161309.85915493 161453.90070922
## 1 1 1 1
## 161566.326530612 161577.85467128 162029.045643154 162148.936170213
## 1 1 1 1
## 162442.804428044 162820.105820106 162857.868020305 163796.296296296
## 1 1 1 1
## 164438.679245283 164892.086330935 165437.5 165694.630872483
## 1 1 1 1
## 165919.58041958 165993.827160494 166055.793991416 166476.987447699
## 1 1 1 1
## 166513.812154696 166962.18487395 167153.354632588 167294.915254237
## 1 1 1 1
## 168188.854489164 168225.352112676 168316.205533597 169187.022900763
## 1 1 1 1
## 169318.611987382 169352.941176471 170168.269230769 170235.95505618
## 1 1 1 1
## 170344.086021505 170515.418502203 170626.506024096 170798.507462687
## 1 1 1 1
## 170856.368563686 171327.731092437 171790.780141844 171836.177474403
## 1 1 1 1
## 172530.24911032 172557.195571956 173574.468085106 173760.204081633
## 1 1 1 1
## 174380 174397.540983607 174723.926380368 175680
## 1 1 1 1
## 175904.761904762 175987.704918033 177008.130081301 178045.296167247
## 1 1 1 1
## 178223.602484472 178574.394463668 178818.791946309 179240.963855422
## 1 1 1 1
## 179434.782608696 179851.752021563 180492.307692308 181064.171122995
## 1 1 1 1
## 181157.216494845 181260.273972603 181647.798742138 182564.885496183
## 1 1 1 1
## 183082.901554404 183287.272727273 183831.325301205 183969.325153374
## 1 1 1 1
## 183981.308411215 184083.044982699 184148.148148148 185100
## 1 1 1 1
## 185142.38410596 187324.324324324 187611.940298507 188385.245901639
## 1 1 1 1
## 188894.736842105 189343.28358209 189354.838709677 189775.735294118
## 1 1 1 1
## 190426.592797784 190832.214765101 191049.645390071 191212.765957447
## 1 1 1 1
## 191220.973782772 191797.54601227 193786.74351585 193796.052631579
## 1 1 1 1
## 194387.195121951 194888.888888889 195078.431372549 195387.096774194
## 1 1 1 1
## 199885.630498534 199937.293729373 200085.365853659 201000
## 1 1 1 1
## 202424.92917847 203486.577181208 206526.627218935 206851.458885942
## 1 1 1 1
## 207312.655086849 207941.176470588 212765 213233.944954128
## 1 1 1 1
modeest::mlv(
dati$prezzo_medio,
method = 'mfv'
)
## [1] 97010.20 97847.62 99948.45 100573.03 102075.00 102782.61 103098.90
## [8] 105125.79 107039.37 108157.30 109064.52 109227.27 110192.59 110721.52
## [15] 111008.00 111793.81 112965.52 112966.39 113845.53 116049.38 117396.40
## [22] 117729.93 117791.67 117884.62 118019.80 118395.21 118548.67 118798.08
## [29] 118855.56 119398.44 120172.04 120398.23 120713.33 121086.02 122068.63
## [36] 122141.89 122191.49 122354.43 122469.70 122690.91 123366.07 123755.10
## [43] 123806.67 124126.32 124405.59 124480.00 124810.61 124911.29 125409.40
## [50] 125555.56 125804.69 126153.15 126551.52 126929.82 127376.15 127378.57
## [57] 127496.30 128487.60 132153.85 132354.17 133133.86 134095.00 135543.48
## [64] 136291.39 136519.61 136627.66 136869.23 137650.35 138451.22 138472.22
## [71] 138975.81 141395.06 141709.84 141795.45 142737.62 142752.75 142871.56
## [78] 143464.00 143479.73 143915.97 143974.75 144015.87 144747.25 144836.48
## [85] 144908.57 145040.23 145100.96 145102.41 145300.00 145574.19 146043.01
## [92] 146068.18 146101.69 146132.95 147202.80 148373.98 148651.52 148775.19
## [99] 148988.70 149345.53 149601.94 149879.63 150000.00 150043.48 150213.02
## [106] 150300.00 150350.39 151544.72 151816.00 151938.36 152726.87 153091.37
## [113] 153481.13 153948.72 154693.33 155109.24 155756.25 156357.76 156368.42
## [120] 156464.09 156712.87 157217.56 157396.15 157490.32 157697.80 157745.54
## [127] 157955.70 157970.09 158461.24 158846.53 159293.75 159360.00 159588.71
## [134] 159653.47 160051.38 160157.14 160509.80 160712.50 161309.86 161453.90
## [141] 161566.33 161577.85 162029.05 162148.94 162442.80 162820.11 162857.87
## [148] 163796.30 164438.68 164892.09 165437.50 165694.63 165919.58 165993.83
## [155] 166055.79 166476.99 166513.81 166962.18 167153.35 167294.92 168188.85
## [162] 168225.35 168316.21 169187.02 169318.61 169352.94 170168.27 170235.96
## [169] 170344.09 170515.42 170626.51 170798.51 170856.37 171327.73 171790.78
## [176] 171836.18 172530.25 172557.20 173574.47 173760.20 174380.00 174397.54
## [183] 174723.93 175680.00 175904.76 175987.70 177008.13 178045.30 178223.60
## [190] 178574.39 178818.79 179240.96 179434.78 179851.75 180492.31 181064.17
## [197] 181157.22 181260.27 181647.80 182564.89 183082.90 183287.27 183831.33
## [204] 183969.33 183981.31 184083.04 184148.15 185100.00 185142.38 187324.32
## [211] 187611.94 188385.25 188894.74 189343.28 189354.84 189775.74 190426.59
## [218] 190832.21 191049.65 191212.77 191220.97 191797.55 193786.74 193796.05
## [225] 194387.20 194888.89 195078.43 195387.10 199885.63 199937.29 200085.37
## [232] 201000.00 202424.93 203486.58 206526.63 206851.46 207312.66 207941.18
## [239] 212765.00 213233.94
mean(dati$prezzo_medio) # 154320.4
## [1] 154320.4
median(dati$prezzo_medio) # 156588.5
## [1] 156588.5
var(dati$prezzo_medio) # 736984385
## [1] 736984385
sd(dati$prezzo_medio) # 27147.46
## [1] 27147.46
max(dati$prezzo_medio) - min(dati$prezzo_medio) # 116223.7
## [1] 116223.7
quantile(dati$prezzo_medio, 0.25) # 132938.9
## 25%
## 132938.9
quantile(dati$prezzo_medio, 0.75) # 173915.2
## 75%
## 173915.2
IQR(dati$prezzo_medio) # 40976.22
## [1] 40976.22
Il valore di skewness che hai ottenuto indica che la distribuzione del prezzo medio è molto vicina alla simmetria, con una leggerissima tendenza all’asimmetria negativa. Questo significa che la coda dei valori più bassi è leggermente più estesa di quella dei valori più alti
skewness(dati$prezzo_medio) # Y1 = - 0.06870528
## [1] -0.06870528
Y2 < 0 quindi abbiamo che è platicurtica, più appiatita rispetto alla Normale
kurtosis(dati$prezzo_medio) - 3 # Y2=-0.77
## [1] -0.7784329
plot(
density(dati$prezzo_medio)
)
abline(
v = mean(dati$prezzo_medio)
)
Creiamo la variabile efficacia che è alta ci sono tante case in vendita, ma si vendono velocemente. Basso se ci sono meno case in vendita rispetto a quanto tempo ci vuole per venderle.
dati$efficacia <- dati$listings / dati$months_inventory
table(dati$efficacia)
##
## 106.835443037975 107.011494252874 107.529411764706 107.97619047619
## 1 1 1 1
## 108.488372093023 108.674698795181 108.73417721519 108.987341772152
## 1 1 1 1
## 109.418604651163 109.431818181818 109.506172839506 109.574468085106
## 1 1 1 1
## 109.625 109.882352941176 110.43956043956 110.609756097561
## 1 1 1 1
## 110.909090909091 111.842105263158 111.847826086957 111.914893617021
## 1 1 1 1
## 112.808988764045 112.816901408451 114.210526315789 114.48275862069
## 1 1 1 1
## 114.74358974359 116 116.025641025641 116.049382716049
## 1 1 1 1
## 116.388888888889 116.835443037975 117.228915662651 117.285714285714
## 1 1 1 1
## 117.625 118.289473684211 118.333333333333 118.421052631579
## 1 1 1 1
## 118.641975308642 118.87323943662 119.506172839506 120.289855072464
## 1 1 1 1
## 120.9375 121 121.666666666667 121.794871794872
## 1 1 1 1
## 121.803278688525 122.295081967213 122.435897435897 122.592592592593
## 1 1 1 1
## 123.030303030303 123.333333333333 123.421052631579 123.855421686747
## 1 1 1 1
## 124.074074074074 124.375 125.342465753425 126.133333333333
## 1 1 1 1
## 126.233766233766 127.887323943662 128.732394366197 129.142857142857
## 1 1 1 1
## 143.783783783784 144.188034188034 144.473684210526 145.121951219512
## 1 1 1 1
## 145.447154471545 145.932203389831 146.140350877193 146.428571428571
## 1 1 1 1
## 146.935483870968 147.741935483871 149.137931034483 149.568965517241
## 1 1 1 1
## 152.327586206897 153.928571428571 154.695652173913 154.778761061947
## 1 1 1 1
## 154.824561403509 155.535714285714 155.929203539823 156.324786324786
## 1 1 1 1
## 156.761904761905 157.758620689655 158.03738317757 158.207547169811
## 1 1 1 1
## 158.378378378378 158.6 158.620689655172 158.717948717949
## 1 1 1 1
## 159.339622641509 160.285714285714 161.132075471698 161.368421052632
## 1 1 1 1
## 162.212389380531 162.432432432432 162.477064220183 162.941176470588
## 1 1 1 1
## 162.98969072165 163.404255319149 165.436893203883 165.673076923077
## 1 1 1 1
## 165.777777777778 166.091954022989 167.777777777778 167.956989247312
## 1 1 1 1
## 168.148148148148 168.181818181818 168.571428571429 168.787878787879
## 1 1 1 1
## 168.863636363636 169.814814814815 170.208333333333 170.309278350515
## 1 1 1 1
## 170.377358490566 171.910112359551 172.527472527473 175.151515151515
## 1 1 1 1
## 175.666666666667 175.714285714286 175.78431372549 176.022727272727
## 1 1 1 1
## 176.067415730337 176.086956521739 178.526315789474 179.462365591398
## 1 1 1 1
## 180.879120879121 182.307692307692 182.816901408451 184.48717948718
## 1 1 1 1
## 185.529411764706 186.111111111111 187.407407407407 188.952380952381
## 1 1 1 1
## 189.047619047619 189.620253164557 189.777777777778 192.02380952381
## 1 1 1 1
## 192.528735632184 194.4 194.705882352941 195.46511627907
## 1 1 1 1
## 195.66265060241 197.534246575342 198.133333333333 199.367088607595
## 1 2 1 1
## 199.875 201.149425287356 201.842105263158 204.5
## 1 1 1 1
## 205.063291139241 205.2 205.641025641026 207.125
## 1 1 1 1
## 207.307692307692 207.407407407407 208.472222222222 209
## 1 1 1 1
## 212.837837837838 213.648648648649 214.285714285714 214.444444444444
## 1 1 1 1
## 218.208955223881 219.194630872483 220.413793103448 223.013698630137
## 1 1 1 1
## 224.710144927536 225.034482758621 226 226.349206349206
## 1 1 1 1
## 226.614173228346 227.014925373134 227.049180327869 229.857142857143
## 1 1 1 1
## 230.833333333333 230.961538461538 231 231.020408163265
## 1 1 1 1
## 232.631578947368 233.777777777778 235.076923076923 238.59649122807
## 1 1 1 1
## 238.840579710145 239.666666666667 239.8 240.227272727273
## 1 1 1 1
## 240.25641025641 240.260869565217 241.327433628319 241.504424778761
## 1 1 1 1
## 243.6 243.805970149254 244.188034188034 246.015037593985
## 1 1 1 1
## 247.058823529412 247.235772357724 247.241379310345 248.416666666667
## 1 1 1 1
## 251.166666666667 251.803278688525 252.2 252.5
## 1 1 1 1
## 253.384615384615 253.5 253.90243902439 254
## 1 1 1 1
## 254.2 254.568965517241 255.5 256
## 1 1 1 1
## 256.048387096774 256.052631578947 257.75 259.411764705882
## 1 1 1 1
## 259.633027522936 260.990990990991 263.3 265.8
## 1 1 1 1
## 266.6 268.076923076923 270.37037037037 275.327102803738
## 1 1 1 1
## 276.481481481481 280.18691588785 282.376237623762 283.942307692308
## 1 1 1 1
## 285.980392156863 287.340425531915 287.35632183908 289.888888888889
## 1 1 1 1
## 291.170212765957 291.666666666667 292.421052631579 298.260869565217
## 1 1 1 1
## 305.851063829787 306.703296703297 306.989247311828 313.488372093023
## 1 1 1 1
## 321.234567901235 323.684210526316 329.275362318841
## 1 1 1
modeest::mlv(
dati$efficacia,
method = 'mfv'
) # 197.5
## [1] 197.5342
# è un tasso di conseguenza applico la media armonica
mean(dati$efficacia) # 187.3
## [1] 187.3386
median(dati$efficacia) # 176.04
## [1] 176.0451
var(dati$efficacia) # 3343.94
## [1] 3343.947
sd(dati$efficacia) # 57.8
## [1] 57.82687
max(dati$efficacia) - min(dati$efficacia) # 222
## [1] 222.4399
quantile(dati$efficacia, 0.25) # 140
## 25%
## 140.1236
quantile(dati$efficacia, 0.75) # 236
## 75%
## 235.9568
IQR(dati$efficacia) # 96
## [1] 95.83326
Y1 > 0 distribuzione asimmetrica positiva in accordo con questo, abbiamo media > mediana > moda
skewness(dati$efficacia) # Y1 = 0.36
## [1] 0.3672083
Y2 < 0 quindi abbiamo che è platicurtica, più appiatita rispetto alla Normale
kurtosis(dati$efficacia) - 3 # Y2 = -0.88
## [1] -0.8832775
plot(
density(dati$efficacia)
)
abline(
v = mean(dati$efficacia)
)
# Violin plot “globale” per tutta la distribuzione di efficacia
ggplot(dati, aes(x = factor(city), y = efficacia)) +
geom_violin(trim = FALSE, fill = "lightblue") +
geom_boxplot(width = 0.1) +
labs(
title = "Distribuzione di efficacia per città",
x = "Città",
y = "Efficacia (listings/months_inventory)"
) +
theme_minimal()
Uso il pacchetto dplyr per generare dei summary (media, deviazione standard) ed effettuare analisi statistiche condizionate per città, anno e mese, poi rappresentiamo graficamente i risultati.
Estraiamo dentro a summary_stats, la vendita media di ogni mese per la città di Tyler nell’anno 2013, insieme alla sua deviazione standard
summary_stats <- dati %>%
filter(city == "Tyler") %>%
group_by(
city,
year,
month)%>%
summarise(
avg_sales = mean(sales, na.rm = TRUE),
sd_sales = sd(sales, na.rm = TRUE),
n_sales = n()
)
## `summarise()` has grouped output by 'city', 'year'. You can override using the
## `.groups` argument.
print(summary_stats)
## # A tibble: 60 × 6
## # Groups: city, year [5]
## city year month avg_sales sd_sales n_sales
## <chr> <int> <int> <dbl> <dbl> <int>
## 1 Tyler 2010 1 160 NA 1
## 2 Tyler 2010 2 181 NA 1
## 3 Tyler 2010 3 250 NA 1
## 4 Tyler 2010 4 316 NA 1
## 5 Tyler 2010 5 282 NA 1
## 6 Tyler 2010 6 262 NA 1
## 7 Tyler 2010 7 255 NA 1
## 8 Tyler 2010 8 238 NA 1
## 9 Tyler 2010 9 220 NA 1
## 10 Tyler 2010 10 202 NA 1
## # ℹ 50 more rows
ggplot(summary_stats,
aes(
x = factor(month),
y = avg_sales,
fill = city)) +
geom_bar(stat = "identity",
position = "dodge") +
facet_wrap(~ year) +
labs(
title = "Media delle vendite per città, anno e mese",
x = "Mese",
y = "Media delle vendite",
fill = "Red"
) +
theme_minimal()
summary_monthly <- dati %>%
group_by(month) %>%
summarise(
avg_sales = mean(sales, na.rm = TRUE),
sd_sales = sd(sales, na.rm = TRUE),
n_sales = n()
)
print(summary_monthly)
## # A tibble: 12 × 4
## month avg_sales sd_sales n_sales
## <int> <dbl> <dbl> <int>
## 1 1 127. 43.4 20
## 2 2 141. 51.1 20
## 3 3 189. 59.2 20
## 4 4 212. 65.4 20
## 5 5 239. 83.1 20
## 6 6 244. 95.0 20
## 7 7 236. 96.3 20
## 8 8 231. 79.2 20
## 9 9 182. 72.5 20
## 10 10 180. 75.0 20
## 11 11 157. 55.5 20
## 12 12 169. 60.7 20
ggplot(summary_monthly,
aes(
x = factor(month),
y = avg_sales)) +
geom_bar(stat = "identity",
fill = "steelblue") +
labs(
title = "Vendite Totali per Mese (aggregando tutti gli anni)",
x = "Mese",
y = "Vendite Totali"
) +
theme_minimal()
plot(
density(summary_monthly$avg_sales)
)
abline(
v = mean(summary_monthly$avg_sales)
)
I mesi dove vengono venduti più immobili sono da aprile ad agosto, abbiamo il massimo delle vendite a giugno. Mentre i primi mesi dell’anno da gennaio a febbraio abbiamo il picco più basso Ma più vendite indica anche più soldi? Verifichiamolo
summary_volume <- dati %>%
group_by(month) %>%
summarise(
total_volume = sum(volume, na.rm = TRUE),
avg_volume = mean(volume, na.rm = TRUE),
n_obs = n()
)
print(summary_volume)
## # A tibble: 12 × 4
## month total_volume avg_volume n_obs
## <int> <dbl> <dbl> <int>
## 1 1 380. 19.0 20
## 2 2 433. 21.7 20
## 3 3 588. 29.4 20
## 4 4 666. 33.3 20
## 5 5 794. 39.7 20
## 6 6 826. 41.3 20
## 7 7 782. 39.1 20
## 8 8 760. 38.0 20
## 9 9 592. 29.6 20
## 10 10 582. 29.1 20
## 11 11 496. 24.8 20
## 12 12 542. 27.1 20
ggplot(summary_volume,
aes(
x = factor(month),
y = total_volume)) +
geom_bar(stat = "identity",
fill = "darkgreen") +
labs(
title = "Valore Totale (Volume) per Mese (aggregando tutti gli anni)",
x = "Mese",
y = "Volume Totale (valore in soldi)"
) +
theme_minimal()
Si, i mesi da aprile ad agosto risultano con il numero di vendite maggiori, nonchè quelli con il volume in milioni di dollari più alto
Utilizziamo ggplot2 per creare grafici personalizzati. Assicurati di esplorare: - Boxplot per confrontare la distribuzione del prezzo mediano tra le città. - Grafici a barre per confrontare il totale delle vendite per mese e città. Line charts per confrontare l’andamento delle vendite in periodi storici differenti.
ggplot(dati,
aes(x = city,
y = median_price)) + # median_price
geom_boxplot() +
labs(
title = "Distribuzione del prezzo mediano tra le città",
x = "Città",
y = "Prezzo mediano"
) +
theme_minimal()
total_dollari <- dati %>%
group_by(
city,
month
) %>%
summarise(total_dollari = sum(volume, na.rm = TRUE)
)
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
ggplot(total_dollari,
aes(x = factor(month),
y = total_dollari,
fill = city)) +
geom_bar(stat = "identity",
position = "dodge") +
labs(
title = "Valore totale dalle vendite in milioni di dollari, divisi per anno e per città",
x = "Anno",
y = "Totale milioni di dollari",
fill = "Città"
) +
theme_minimal()
# Aggrega i dati per calcolare il totale delle vendite per città e anno
vendite_annuali <- dati %>%
group_by(
city,
year
) %>%
summarise(totale_vendite_annue = sum(sales, na.rm = TRUE)) # na.rm = TRUE gestisce eventuali valori mancanti
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
ggplot(vendite_annuali,
aes(
x = year,
y = totale_vendite_annue,
color = city,
group = city)) +
geom_line(linewidth = 0.8) +
geom_point(size = 2) + # Aggiunge punti per evidenziare gli anni
labs(
title = "Vendite Totali Annuali per Città (2010-2014)",
x = "Anno",
y = "Totale Vendite Annuali",
color = "Città"
) +
scale_x_continuous(breaks = unique(dati$year)) + # Assicura che tutti gli anni siano sull'asse x
theme_minimal() +
theme(
legend.position = "right",
axis.title = element_text(face = "bold"),
axis.text = element_text(size = 10),
legend.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
# 9. Conclusioni
Fornisci una sintesi dei risultati ottenuti, facendo riferimento alle principali tendenze emerse e fornendo raccomandazioni basate sull’analisi.
L’analisi delle vendite evidenzia che Tyler è il mercato più performante, con vendite consistentemente più elevate. Bryan-College Station mostra alta variabilità, indicando un mercato instabile. Wichita Falls presenta le performance peggiori con trend negativo. Le vendite hanno una chiara stagionalità, con picchi tra aprile e agosto e cali nei mesi freddi. Il mercato complessivo mostra crescita nel tempo, con l’eccezione di Wichita Falls in declino. Un outlier significativo è stato identificato a Tyler, suggerendo un periodo di vendite eccezionali. Wichita Falls deve puntare su più annunci e a dare visibilità agli stessi, visto che permangono diversi mesi senza vendite. Mentre Tyler ha tanti annunci ed è un mercato veloce in quanto gli annunci restono attivi per poco con conseguente vendita
sessionInfo()
## R version 4.5.0 (2025-04-11 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 22631)
##
## Matrix products: default
## LAPACK version 3.12.1
##
## locale:
## [1] LC_COLLATE=Italian_Italy.utf8 LC_CTYPE=Italian_Italy.utf8
## [3] LC_MONETARY=Italian_Italy.utf8 LC_NUMERIC=C
## [5] LC_TIME=Italian_Italy.utf8
##
## time zone: Europe/Rome
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] knitr_1.50 rmarkdown_2.29 moments_0.14.1 dplyr_1.1.4 modeest_2.4.0
## [6] ggplot2_3.5.2
##
## loaded via a namespace (and not attached):
## [1] statip_0.2.3 gtable_0.3.6 jsonlite_2.0.0
## [4] compiler_4.5.0 fBasics_4041.97 rpart_4.1.24
## [7] tidyselect_1.2.1 stable_1.1.6 cluster_2.1.8.1
## [10] jquerylib_0.1.4 scales_1.3.0 timeSeries_4041.111
## [13] rmutil_1.1.10 yaml_2.3.10 fastmap_1.2.0
## [16] R6_2.6.1 labeling_0.4.3 generics_0.1.3
## [19] tibble_3.2.1 spatial_7.3-18 munsell_0.5.1
## [22] timeDate_4041.110 bslib_0.9.0 pillar_1.10.2
## [25] rlang_1.1.5 utf8_1.2.4 stabledist_0.7-2
## [28] cachem_1.1.0 xfun_0.52 sass_0.4.10
## [31] cli_3.6.4 withr_3.0.2 magrittr_2.0.3
## [34] digest_0.6.37 grid_4.5.0 rstudioapi_0.17.1
## [37] clue_0.3-66 lifecycle_1.0.4 vctrs_0.6.5
## [40] evaluate_1.0.3 glue_1.8.0 farver_2.1.2
## [43] colorspace_2.1-1 tools_4.5.0 pkgconfig_2.0.3
## [46] htmltools_0.5.8.1