texas <- read.csv("realestate_texas.csv")
head(texas, 5)
## 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
Nel dataset è presente una variabile stringa (city) e 7 varaibili numeriche, di cui 4 caratterizzate da numeri interi (year, month, sales e listings).
In particolare, le tipologie di variabili sono le seguenti:
city: qualitativa nominale
year: quantitativa continua
month: qualitativa ordinale codificata in numeri
sales: quantitativa discreta
volume: quantitativa continua
median_price: quantitativa continua
listings: quantitativa discreta
months_inventory: quantitativa discreta
La variabile year e la variabile month sottintendono una dimensione temporale e possono essere utilizzate per visualizzare grafici di serie storiche: con la variabile year si può studiare l’andamento delle vendite immobiliari negli anni e, con la variabile month, all’interno dello stesso anno, si può osservare l’andamento stagionale.
str(texas)
## 'data.frame': 240 obs. of 8 variables:
## $ city : chr "Beaumont" "Beaumont" "Beaumont" "Beaumont" ...
## $ year : int 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
## $ month : int 1 2 3 4 5 6 7 8 9 10 ...
## $ sales : int 83 108 182 200 202 189 164 174 124 150 ...
## $ volume : num 14.2 17.7 28.7 26.8 28.8 ...
## $ median_price : num 163800 138200 122400 123200 123100 ...
## $ listings : int 1533 1586 1689 1708 1771 1803 1857 1830 1829 1779 ...
## $ months_inventory: num 9.5 10 10.6 10.6 10.9 11.1 11.7 11.6 11.7 11.5 ...
#min, max, median, mean, 1st quartile, 3rd quartile
summary(texas$sales)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 79.0 127.0 175.5 192.3 247.0 423.0
#range
print(paste("range: ", max(texas$sales) - min(texas$sales)))
## [1] "range: 344"
#IQR
print(paste("IQR: ", IQR(texas$sales)))
## [1] "IQR: 120"
#variance
print(paste("variance: ", var(texas$sales)))
## [1] "variance: 6344.29951185495"
#standard deviation
print(paste("standard deviation: ", sd(texas$sales)))
## [1] "standard deviation: 79.6511111777793"
#form indexes
library(moments)
print(paste("skwness: ", skewness(texas$sales)))
## [1] "skwness: 0.718104024884959"
print(paste("kurtosi: ", kurtosis(texas$sales) - 3))
## [1] "kurtosi: -0.313176409071494"
#min, max, median, mean, 1st quartile, 3rd quartile
summary(texas$volume)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 8.166 17.660 27.062 31.005 40.893 83.547
#range
print(paste("range: ", max(texas$volume) - min(texas$volume)))
## [1] "range: 75.381"
#IQR
print(paste("IQR: ", IQR(texas$volume)))
## [1] "IQR: 23.2335"
#variance
print(paste("variance: ", var(texas$volume)))
## [1] "variance: 277.270692404027"
#standard deviation
print(paste("standard deviation: ", sd(texas$volume)))
## [1] "standard deviation: 16.6514471564494"
#form indexes
print(paste("skwness: ", skewness(texas$volume)))
## [1] "skwness: 0.884742026325995"
print(paste("kurtosi: ", kurtosis(texas$volume) - 3))
## [1] "kurtosi: 0.176986997089741"
#min, max, median, mean, 1st quartile, 3rd quartile
summary(texas$median_price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 73800 117300 134500 132665 150050 180000
#range
print(paste("range: ", max(texas$median_price) - min(texas$median_price)))
## [1] "range: 106200"
#IQR
print(paste("IQR: ", IQR(texas$median_price)))
## [1] "IQR: 32750"
#variance
print(paste("variance: ", var(texas$median_price)))
## [1] "variance: 513572983.089261"
#standard deviation
print(paste("standard deviation: ", sd(texas$median_price)))
## [1] "standard deviation: 22662.148686505"
#form indexes
print(paste("skwness: ", skewness(texas$median_price)))
## [1] "skwness: -0.364552878177372"
print(paste("kurtosi: ", kurtosis(texas$median_price) - 3))
## [1] "kurtosi: -0.622961820755544"
#min, max, median, mean, 1st quartile, 3rd quartile
summary(texas$listings)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 743 1026 1618 1738 2056 3296
#range
print(paste("range: ", max(texas$listings) - min(texas$listings)))
## [1] "range: 2553"
#IQR
print(paste("IQR: ", IQR(texas$listings)))
## [1] "IQR: 1029.5"
#variance
print(paste("variance: ", var(texas$listings)))
## [1] "variance: 566568.966091353"
#standard deviation
print(paste("standard deviation: ", sd(texas$listings)))
## [1] "standard deviation: 752.707756098841"
#form indexes
print(paste("skwness: ", skewness(texas$listings)))
## [1] "skwness: 0.649498226273971"
print(paste("kurtosi: ", kurtosis(texas$listings) - 3))
## [1] "kurtosi: -0.791790033332591"
#min, max, median, mean, 1st quartile, 3rd quartile
summary(texas$months_inventory)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.400 7.800 8.950 9.193 10.950 14.900
#range
print(paste("range: ", max(texas$months_inventory) - min(texas$months_inventory)))
## [1] "range: 11.5"
#IQR
print(paste("IQR: ", IQR(texas$months_inventory)))
## [1] "IQR: 3.15"
#variance
print(paste("variance: ", var(texas$months_inventory)))
## [1] "variance: 5.30688912133891"
#standard deviation
print(paste("standard deviation: ", sd(texas$months_inventory)))
## [1] "standard deviation: 2.30366862229334"
#form indexes
print(paste("skwness: ", skewness(texas$months_inventory)))
## [1] "skwness: 0.040975265871081"
print(paste("kurtosi: ", kurtosis(texas$months_inventory) - 3))
## [1] "kurtosi: -0.174447541638487"
Tutte le variabili quantitative mostrano una media e una mediana molto simili tra loro, pertanto non ci si aspetta di trovare valori estremamente anomali all’interno dei dati. Tuttavia le distribuzioni non sono simmetriche, infatti si può osservare, ad esempio nella variabile sales, che il valore medio è più vicino al minimo che al massimo, ad indicare che i dati sono maggiormente distribuiti sui valori bassi; questo è confermato dal valore di skewness positivo. Dal valore di skewness si può osservare che, oltre a sales, anche volume e listings hanno un’asimmetria positiva, mentre median_price ha un’asimmetria negativa e months_inventory è praticamente simmetrica. Per quanto riguarda i valori di kurtosi, invece, tutte le variabili risultano leggermente platicurtiche, ad eccezione di volume che è leggermente leptocurtica.
#select the number of rows as the number of samples N
N = dim(texas)[1]
frq_ass <- table(texas$city)
frq_rel <- frq_ass/N
distr_frq_city <- cbind(frq_ass,frq_rel)
distr_frq_city
## frq_ass frq_rel
## Beaumont 60 0.25
## Bryan-College Station 60 0.25
## Tyler 60 0.25
## Wichita Falls 60 0.25
frq_ass <- table(texas$year)
frq_rel <- frq_ass/N
frq_cum <- cumsum(frq_ass)
frq_rel_cum <- frq_cum/N
distr_frq_year <- cbind(frq_ass,frq_rel, frq_cum, frq_rel_cum)
distr_frq_year
## frq_ass frq_rel frq_cum frq_rel_cum
## 2010 48 0.2 48 0.2
## 2011 48 0.2 96 0.4
## 2012 48 0.2 144 0.6
## 2013 48 0.2 192 0.8
## 2014 48 0.2 240 1.0
frq_ass <- table(texas$month)
frq_rel <- frq_ass/N
frq_cum <- cumsum(frq_ass)
frq_rel_cum <- frq_cum/N
distr_frq_month <- cbind(frq_ass,frq_rel, frq_cum, frq_rel_cum)
distr_frq_month
## frq_ass frq_rel frq_cum frq_rel_cum
## 1 20 0.08333333 20 0.08333333
## 2 20 0.08333333 40 0.16666667
## 3 20 0.08333333 60 0.25000000
## 4 20 0.08333333 80 0.33333333
## 5 20 0.08333333 100 0.41666667
## 6 20 0.08333333 120 0.50000000
## 7 20 0.08333333 140 0.58333333
## 8 20 0.08333333 160 0.66666667
## 9 20 0.08333333 180 0.75000000
## 10 20 0.08333333 200 0.83333333
## 11 20 0.08333333 220 0.91666667
## 12 20 0.08333333 240 1.00000000
Dalle distibuzioni di frequenza si osserva che per tutte le variabili qualitative i dati sono distribuiti equamente tra tutte le categorie, quindi sia nei vari anni, sia nei mesi e sia nelle quattro città. Ci si aspetta quindi massima eterogeneità e un indice di Gini pari a 1.
Per confrontare la variabilità delle diverse variabili si può calcolare il coefficiente di variazione per ognuna delle variabili quantitative, il quale misura la variabilità relativa rispetto alla media.
cv_sales <- sd(texas$sales)/mean(texas$sales) *100
cv_volume <- sd(texas$volume)/mean(texas$volume) *100
cv_median_price <- sd(texas$median_price)/mean(texas$median_price) *100
cv_listings <- sd(texas$listings)/mean(texas$listings) *100
cv_months_inventory <- sd(texas$months_inventory)/mean(texas$months_inventory) *100
cbind(cv_sales,cv_volume,cv_median_price,cv_listings,cv_months_inventory)
## cv_sales cv_volume cv_median_price cv_listings cv_months_inventory
## [1,] 41.42203 53.70536 17.08218 43.30833 25.06031
La variabile con il coefficiente di variazione maggiore risulta essere volume, pertanto è quella a più alta variabilità. Essa infatti ha una variabilità attorno alla media del 54% circa.
Inoltre, osservando i valori di skewness calcolati per ogni variabile, volume risulta anche la variabile più asimmetrica, essendo quella con il valore assoluto di skewness più alto. In particolare, essendo il valore maggiore di zero, avrà un’asimmetria positiva, ovvero una distribuzione scodata verso valori più alti della media. Questo implica che potrebbero essere presenti alcuni valori molto alti rispetto al resto della distribuzione dei dati rispetto a questa variabile.
cbind(skewness(texas$sales), skewness(texas$volume), skewness(texas$median_price), skewness(texas$listings), skewness(texas$months_inventory))
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.718104 0.884742 -0.3645529 0.6494982 0.04097527
L’asimettria della distribuzione si può osservare anche nel seguente grafico.
plot(density(texas$volume), main="Density curve - Volume")
Si considera la variabile sales e, considerando i suoi valori di minimo e massimo, si decide di dividerla in 8 classi da 50 a 450 che spaziano di 50.
min(texas$sales)
## [1] 79
max(texas$sales)
## [1] 423
N = dim(texas)[1]
texas$sales_cl <- cut(texas$sales, breaks=c(50,100,150,200,250,300,350,400,450))
frq_ass <-table(texas$sales_cl)
frq_rel <-frq_ass/N
frq_cum <-cumsum(frq_ass)
frq_rel_cum <-frq_cum/N
cbind(frq_ass,frq_rel,frq_cum,frq_rel_cum)
## frq_ass frq_rel frq_cum frq_rel_cum
## (50,100] 21 0.08750000 21 0.0875000
## (100,150] 72 0.30000000 93 0.3875000
## (150,200] 56 0.23333333 149 0.6208333
## (200,250] 32 0.13333333 181 0.7541667
## (250,300] 34 0.14166667 215 0.8958333
## (300,350] 13 0.05416667 228 0.9500000
## (350,400] 9 0.03750000 237 0.9875000
## (400,450] 3 0.01250000 240 1.0000000
barplot(frq_rel,
main = "Distribution of sales classes",
xlab = "Sales classes",
ylab = "Relative frequencies",
col="lightgreen",
)
Si calcola l’indice di gini per le classi costruite
#define the function for the gini index calculus
gini_index <- function(x){
ni = table(x) #freq assolute
fi = ni/length(x) #freq relative
fi2 = fi^2 #freq rel al quad
J = length(table(x)) #numero di classi
gini = 1-sum(fi2)
gini_norm = gini/((J-1)/J)
return(gini_norm)
}
frq_ass
##
## (50,100] (100,150] (150,200] (200,250] (250,300] (300,350] (350,400] (400,450]
## 21 72 56 32 34 13 9 3
gini_index(texas$sales_cl)
## [1] 0.9206349
Si può osservare che la classe più numerosa è quella compresa tra 100 e 150 vendite, con il 30% delle osservazioni. Inoltre più del 50% delle osservazioni (il 62% per l’esattezza) si trova ad un valore inferiore a 200, infatti la mediana della variabile sales, corrispondente al cinquantesimo percentile, è pari a 175.5, incluso quindi nella classe 150-200 (classe mediana). Le classi più alte sono invece poco popolate, ad indicare che raramente è stato registrato un numero di vendite così elevato. Nonostante la bassa popolazione delle ultime due classi, l’indice di gini normalizzato, che misura l’eterogeneità delle classi, rimane elevato, pari a 0.92, ad indicare che i dati sono distribuiti in maniera abbastanza equa tra le varie categorie e, nonostante ci sia una classe più popolata, essa non è preponderante al punto da rendere la variabile omogenea.
Per calcolare la probabilità che, presa una riga a caso, essa si riferisca alla città Beaumont, si devono contare quante osservazioni della città Beaumont sono presenti rispetto al totale (numero di casi favorevoli rispetto al numero di casi possibili)
table(texas$city)
##
## Beaumont Bryan-College Station Tyler
## 60 60 60
## Wichita Falls
## 60
Prob_beaumont = 60/240
Prob_beaumont
## [1] 0.25
Ci sono 60 osservazioni con Beaumont rispetto a 240 totali, ovvero il 25% di probabilità che esca la città Beaumont.
Si procede allo stesso modo per calcolare la probabilità che esca il mese di luglio
table(texas$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
Prob_july = 20/240
Prob_july
## [1] 0.08333333
C’è l’8.33% di probabilità che, prendendo una riga a caso, essa riporti il mese di luglio.
Per calcolare la probabilità che esca il mese dicembre 2012 bisogna calcolare la probabilità che si verifichino contemporaneamente l’evento del mese dicembre e dell’anno 2012 e poi moltiplicare le due probabilità.
table(texas$year)
##
## 2010 2011 2012 2013 2014
## 48 48 48 48 48
table(texas$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
prob_2012 = 48/240
prob_dic = 20/240
print(prob_2012)
## [1] 0.2
print(prob_dic)
## [1] 0.08333333
prob_dic_2012 = prob_2012*prob_dic
prob_dic_2012
## [1] 0.01666667
La probabilità che esca il mese dicembre 2012 risulta essere dell’1.667%.
Si può calcolare la stessa probabilità andando a contare quante osservazioni di dicembre ci sono nell’anno 2012 e rapportarle al totale delle osservazioni
table(texas$month[texas$year == 2012])
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 4 4 4 4 4 4 4 4 4 4 4 4
prob_dic_2012_bis = 4/240
prob_dic_2012_bis
## [1] 0.01666667
Questo calcolo conferma che la probabilià di osservare dicembre 2012 è dell’1.667%.
Per calcolare il prezzo medio degli immobili si divide la variabile volume, che rappresenta il valore totale delle vendite (ovvero la somma totale del ricavato delle vendite effettuate) per il numero di vendite. Si converte poi il valore in dollari moltiplicando per 1000000.
texas$mean_price <- texas$volume/texas$sales *1000000
Per valutare l’efficacia degli annunci di vendita, si crea una variabile data dal rapporto tra numero di vendite e numero di annunci. In questo modo si può osservare il numero di vendite effettuate rispetto al numero di annunci pubblicati: più il rapporto è alto più la presenza di annunci è efficace nell’effettuare le vendite, più è basso più indica che non c’è stata particolare relazione tra vendite e annunci.
texas$listings_eff <- texas$sales/texas$listings
summary(texas$listings_eff)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.05014 0.08980 0.10963 0.11874 0.13492 0.38713
Si osserva che in media il numero di vendite è circa il 10% degli annunci pubblicati
library(dplyr)
##
## 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
#calculate monthly mean
monthly_mean <-
texas %>%
group_by(year, month) %>%
summarise(mean_efficacy = mean(listings_eff), .groups="drop")
#calculate annual mean
annual_mean <- monthly_mean %>%
group_by(year) %>%
summarise(annual_mean_efficacy = mean(mean_efficacy))
Il seguente grafico a barre mostra l’andamento medio dell’efficacia degli annunci negli anni, la quale è andata ad aumentare.
library(ggplot2)
ggplot(annual_mean, aes(x=as.factor(year), y=annual_mean_efficacy)) +
geom_col(fill="skyblue") +
labs(title = "Mean efficacy per year (sales)",
x = "Year",
y = "Annual mean efficacy (number of sales/list)")+
theme(plot.title = element_text(hjust = 0.5))
Nel grafico sottostante sono mostrati gli andamenti mensili per ogni anno. Si può osservare come da aprile ad agosto l’efficacia è maggiore. Inoltre anche da questo grafico si evince l’aumento dell’efficacia dal 2010 nal 2014.
ggplot(monthly_mean, aes(x = as.factor(month), y = mean_efficacy, group = year, color = as.factor(year))) +
geom_line(linewidth=1) +
geom_point() +
labs(title = "Monthly trend of efficacy by year (sales)",
x = "Month", y = "Mean efficacy (number of sales/list)", color= "Year")+
theme(plot.title = element_text(hjust = 0.5))
Si può inoltre creare una colonna che misuri anche l’efficacia degli annunci in termini di fatturato, dividendo quindi il valore totale delle vendite (volume) per il numero di annunci e osservando il ricavato medio per annuncio. Più il rapporto è elevato più l’efficacia sarà alta.
texas$listings_eff_vol <- texas$volume/texas$listings
#calculate monthly mean
monthly_mean_vol <-
texas %>%
group_by(year, month) %>%
summarise(mean_efficacy_vol = mean(listings_eff_vol), .groups="drop")
#calculate annual mean
annual_mean_vol <- monthly_mean_vol %>%
group_by(year) %>%
summarise(annual_mean_efficacy_vol = mean(mean_efficacy_vol))
ggplot(annual_mean_vol, aes(x=as.factor(year), y=annual_mean_efficacy_vol)) +
geom_col(fill="skyblue") +
labs(title = "Mean efficacy per year (volume)",
x = "Anno",
y = "Annual mean efficacy (millions of dollars/list)")+
theme(plot.title = element_text(hjust = 0.5))
ggplot(monthly_mean_vol, aes(x = as.factor(month), y = mean_efficacy_vol, group = year, color = as.factor(year))) +
geom_line(linewidth=1) +
geom_point() +
labs(title = "Monthly trend of efficacy by year (volume)",
x = "Month", y = "Mean efficacy (millions of dollars/list)", color = "Year")+
theme(plot.title = element_text(hjust = 0.5))
L’andamento risulta in linea con quello dell’efficacia per numero di annunci.
Si calcola la media e la deviazione standard del numero di vendite per città e si mostrano in un barplot.
city_summary <-
texas %>%
group_by(city) %>%
summarise(mean = mean(sales),
dv_std = sd(sales))
city_summary
## # A tibble: 4 × 3
## city mean dv_std
## <chr> <dbl> <dbl>
## 1 Beaumont 177. 41.5
## 2 Bryan-College Station 206. 85.0
## 3 Tyler 270. 62.0
## 4 Wichita Falls 116. 22.2
ggplot(city_summary)+theme_bw()+
geom_col(aes(x=city, y=mean),fill="darkgreen")+
geom_errorbar(aes(x=city,
ymin=mean-dv_std,
ymax=mean+dv_std),col=2)+
labs(title="Number of sales by city", x="City", y="Mean of sales")+
theme(plot.title = element_text(hjust = 0.5))
La città con il maggior numero di vendite medio risulta essere Tyler.
Si calcolano media e deviazione standard del numero di vendite per ogni anno
year_summary <-
texas %>%
group_by(year) %>%
summarise(mean = mean(sales),
dv_std = sd(sales))
year_summary
## # A tibble: 5 × 3
## year mean dv_std
## <int> <dbl> <dbl>
## 1 2010 169. 60.5
## 2 2011 164. 63.9
## 3 2012 186. 70.9
## 4 2013 212. 84.0
## 5 2014 231. 95.5
ggplot(year_summary)+theme_bw()+
geom_col(aes(x=year, y=mean),fill="darkgreen")+
geom_errorbar(aes(x=year,
ymin=mean-dv_std,
ymax=mean+dv_std),col=2)+
labs(title="Number of sales by year", x="Year", y="Mean of sales")+
theme(plot.title = element_text(hjust = 0.5))
Si conferma l’aumento delle vendite negli anni.
Si calcola media e deviazione standard del numero di vendite in ogni mese, considerando tutti gli anni.
month_summary <-
texas %>%
group_by(month) %>%
summarise(mean = mean(sales),
dv_std = sd(sales))
month_summary
## # A tibble: 12 × 3
## month mean dv_std
## <int> <dbl> <dbl>
## 1 1 127. 43.4
## 2 2 141. 51.1
## 3 3 189. 59.2
## 4 4 212. 65.4
## 5 5 239. 83.1
## 6 6 244. 95.0
## 7 7 236. 96.3
## 8 8 231. 79.2
## 9 9 182. 72.5
## 10 10 180. 75.0
## 11 11 157. 55.5
## 12 12 169. 60.7
ggplot(month_summary)+theme_bw()+
geom_col(aes(x=as.factor(month), y=mean),fill="darkgreen")+
geom_errorbar(aes(x=month,
ymin=mean-dv_std,
ymax=mean+dv_std),col=2)+
labs(title="Number of sales by month (all years)", x="Month", y="Mean of sales")+
theme(plot.title = element_text(hjust = 0.5))
Si conferma una maggior vendita nei mesi centrali dell’anno.
Si raggruppano i dati per anno e mese e si calcolano media e deviazione standard del numero di vendite per ogni mese di ogni anno.
month_per_year_summary <-
texas %>%
group_by(year, month) %>%
summarise(mean = mean(sales),
dv_std = sd(sales))
## `summarise()` has grouped output by 'year'. You can override using the
## `.groups` argument.
month_per_year_summary
## # A tibble: 60 × 4
## # Groups: year [5]
## year month mean dv_std
## <int> <int> <dbl> <dbl>
## 1 2010 1 105. 36.6
## 2 2010 2 122. 40.3
## 3 2010 3 189. 43.6
## 4 2010 4 229 64.0
## 5 2010 5 233. 58.8
## 6 2010 6 216. 71.4
## 7 2010 7 178 62.5
## 8 2010 8 184. 45
## 9 2010 9 150. 47.2
## 10 2010 10 141. 45.7
## # ℹ 50 more rows
Si mostra in un lineplot l’andamento del numero di vendite mensile in ogni anno.
ggplot(month_per_year_summary, aes(x = as.factor(month), y = mean, group = year, color = as.factor(year))) +
geom_line(linewidth=1) +
geom_point() +
labs(title = "Numero di vendite mensili per anno",
x = "Mese", y = "Numero di vendite medio", color="Year")+
labs(title="Number of sales by month (per years)", x="Month", y="Mean of sales")+
theme(plot.title = element_text(hjust = 0.5))
Si analizza la distribuzione dei prezzi mediani di vendita per città
ggplot(data= texas)+
geom_boxplot(aes(
x = city,
y = median_price),
col = "black",
fill="lightblue")+
labs(title = "Distribution of median sale prices in cities",
x = "City",
y="Median price (dollars)")+
theme(plot.title = element_text(hjust = 0.5))
Si può osservare come la città con i prezzi più alti sia Bryan-Colege Station, mentre quella con i prezzi più bassi è Wichita Falls.
Ora si osserva la stessa distribuzione ma aggiungendo l’informazione dell’anno
ggplot(data= texas)+
geom_boxplot(aes(
x = city,
y = median_price,
fill=as.factor(year)),
col = "black")+
labs(title = "Distribution of median sale prices in cities by year",
x = "City",
y="Median price (dollars)",
fill="Year")+
theme(plot.title = element_text(hjust = 0.5))
Si osserva che negli anni si è registrato un aumento dei prezzi di vendita maggiormente evidente nella città di Bryan-College Station e di Tyler. Anche nella città di Beaumont, ad eccezione del 2010, gli altri anni mostrano questo andamento crescente.
Con i boxplot seguenti si osserva che anche il valore totale delle vendite è aumentato negli anni per tutte le città, ad eccezione di Wichita Falls in cui è rimasto praticamente invariato.
ggplot(data= texas)+
geom_boxplot(aes(
x = city,
y = volume,
fill=as.factor(year)),
col = "black")+
labs(title = "Distribution of total sales value in the cities by year",
x = "City",
y="Volume (million of dollars)",
fill="Year")+
theme(plot.title = element_text(hjust = 0.5))
Il numero delle vendite segue lo stesso andamento osservato per prezzi e valore: crescente per tutte le città ad eccezione di Wichita Falls. Si può osservare come, mentre la città di Bryan-College Station è quella con i prezzi mediani più alti, quella che ha avuto un maggior numero di vendite e che ha fatturato maggiormente è Tyler.
ggplot(data= texas)+
geom_boxplot(aes(
x = city,
y = sales,
fill=as.factor(year)),
col = "black")+
labs(title = "Distribution of the number of sales in the cities by year",
x = "City",
y="Number of sales",
fill="Year")+
theme(plot.title = element_text(hjust = 0.5))
Questo si può spiegare andando ad osservare il numero degli annunci attivi per ogni città.
ggplot(data= texas)+
geom_boxplot(aes(
x = city,
y = listings,
fill=as.factor(year)),
col = "black")+
labs(title = "Distribution of the number of listings in the cities by year",
x = "City",
y="Number of listings",
fill="Year")+
theme(plot.title = element_text(hjust = 0.5))
Si può osservare come la città di Tyler abbia pubblicato un numero di annunci nettamente superiore alle altre città e come, Wichita Falls, sia invece la città con meno annunci. In generale in tutte le città il numero di annunci negli anni è andato però a diminuire. Probabilmente però sono stati sviluppati in numero inferiore ma in maniera più efficace, infatti, se osserviamo l’andamento degli anni dell’efficacia degli annunci, sia rispetto al numero di vendite sia rispetto al fatturato, osserviamo un andamento crescente.
ggplot(data= texas)+
geom_boxplot(aes(
x = city,
y = listings_eff,
fill=as.factor(year)),
col = "black")+
labs(title = "Distribution of the efficacy (sales) of listings in cities per year",
x = "City",
y="Efficacy (number of sales)",
fill = "Year")+
theme(plot.title = element_text(hjust = 0.5))
ggplot(data= texas)+
geom_boxplot(aes(
x = city,
y = listings_eff_vol,
fill=as.factor(year)),
col = "black")+
labs(title = "Distribution of the efficacy (value) of listings in cities per year",
x = "City",
y="Efficacy (million of dollars)",
fill="Year")+
theme(plot.title = element_text(hjust = 0.5))
Si può osservare come in generale la città di Bryan-College Station abbia degli annunci più efficaci rispetto alla città di Tyler, tuttavia quest’ultima, compensando con un elevato numero di annunci, tende a fatturare maggiormente.
library(viridis)
## Caricamento del pacchetto richiesto: viridisLite
Grafico a barre sovrapposte
ggplot(data = texas)+
geom_col(aes(x=city,
y=sales,
fill = as.factor(month)), position = "stack")+
labs(title = "Total sales by month and cities",
x="City",
y="Number of sales",
fill="Month")+
scale_fill_viridis_d(option="H")+
theme(plot.title = element_text(hjust = 0.5))
Grafico a barre sovrapposte normalizzato
ggplot(data = texas)+
geom_col(aes(x=city,
y=sales,
fill = as.factor(month)), position = "fill")+
labs(title = "Total sales by month and cities",
x="City",
y="Number of sales",
fill="Month")+
scale_fill_viridis_d(option="H")+
theme(plot.title = element_text(hjust = 0.5))
Dai grafici a barre Si osserva che il numero di vendite della città di Tyler, come già emerso dai boxplot, è quello più elevato. Dal grafico normalizzato si osserva che negli stessi mesi le città hanno all’incirca gli stessi quantitativi di vendite rispetto al totale. In tutte le città inoltre c’è un aumento delle vendite nei mesi centrali dell’anno ovvero da aprile ad agosto.
Ora si mostrano gli stessi grafici divisi per anno
ggplot(data = texas)+
geom_col(aes(x=city,
y=sales,
fill = as.factor(month)), position = "stack")+
facet_wrap(~year)+
labs(title = "Total sales by month and cities per year",
x="City",
y="Number of sales",
fill = "Month")+
scale_fill_viridis_d(option="H")+
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(hjust = 0.5))
Si fa lo stesso con i grafici a barre normalizzati
ggplot(data = texas)+
geom_col(aes(x=city,
y=sales,
fill = as.factor(month)), position = "fill")+
facet_wrap(~year)+
labs(title = "Total sales by month and cities per year",
x="City",
y="Number of sales",
fill="Month")+
scale_fill_viridis_d(option="H")+
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(hjust = 0.5))
Si costruiscono dei lineplot per mostrare l’andamento delle vendite mensili (plot 1) e del numero degli annunci (plot 2) per ogni mese nei diversi anni e nelle diverse città.
ggplot(data = texas) +
geom_line(aes(x = month, y = sales, color = as.factor(year))) +
geom_point(aes(x = month, y = sales, color = as.factor(year))) +
scale_x_continuous(breaks = 1:12, labels = 1:12) +
facet_wrap(~city) +
labs(
x = "Month",
y = "Number of sales",
color = "Year",
title = "Plot 1: Trend of monthly sales by city and year"
)+
theme(plot.title = element_text(hjust = 0.5))
Si può osservare, come osservato in precedenza, che negli anni il numero di vendite è andato ad aumentare e che, in particolare per la città di Bryan-College Station e di Tyler, le vendite all’interno dell’anno sono più numerose nei mesi centrali.
ggplot(data = texas) +
geom_line(aes(x = month, y = listings, color = as.factor(year))) +
geom_point(aes(x = month, y = listings, color = as.factor(year))) +
scale_x_continuous(breaks = 1:12, labels = 1:12) +
facet_wrap(~city) +
labs(
x = "Month",
y = "Number of sales",
color = "Year",
title = "Plot 2: Trend of monthly number of listings by city and year"
)+
theme(plot.title = element_text(hjust = 0.5))
Dall’analisi è emerso che le città con fatturato maggiore sono quelle in cui gli annunci attivi o sono più efficaci, quindi fatti probabilmente con maggior attenzione, come nel caso di Bryan-College Station, oppure sono più numerosi. Infatti, nel caso della città di Tyler, anche se per singolo annuncio le vendite risultano inferiori, il numero elevato di annunci presenti consente alla città di essere quella con il valore totale delle vendite più alto. Nel caso della città di Wichita Falls, la quale ha un’efficacia di annunci pari a quella delle altre città, bisognerebbe probabilmente incrementare il numero di annunci che invece è sempre rimasto esiguo.