Il presente studio intende analizzare la situazione inerente al mercato immobiliare nel Texas, nel contesto del Master in Data Science erogato da Profession.AI. Nello studio saranno analizzati indici di posizione, di variabilità e di forma delle variabili in gioco, tutto corredato da svariati plots esplicativi per individuare tendenze positive e negative nei dati che possano essere utili alla comprensione della situazione immobiliare generale, con analisi specifiche nelle città e nei periodi storici presenti nel dataset.
Si procede ad ispezionare il dataset per capire da quali variabili è formato. Per questo si usano le funzioni ‘summary’, ‘head’ e ‘tail’ per visualizzare le principali statistiche del dataset e le prime ed ultime 5 righe.
data=read.csv("realestate_texas.csv")
library(knitr)
library(kableExtra)
kable(summary(data), format='html', caption="<b><span style='color: black;'>Sommario dataset<span></b>")%>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:8, extra_css = "padding-right: 10px;")
| city | year | month | sales | volume | median_price | listings | months_inventory | |
|---|---|---|---|---|---|---|---|---|
| Length:240 | Min. :2010 | Min. : 1.00 | Min. : 79.0 | Min. : 8.166 | Min. : 73800 | Min. : 743 | Min. : 3.400 | |
| Class :character | 1st Qu.:2011 | 1st Qu.: 3.75 | 1st Qu.:127.0 | 1st Qu.:17.660 | 1st Qu.:117300 | 1st Qu.:1026 | 1st Qu.: 7.800 | |
| Mode :character | Median :2012 | Median : 6.50 | Median :175.5 | Median :27.062 | Median :134500 | Median :1618 | Median : 8.950 | |
| NA | Mean :2012 | Mean : 6.50 | Mean :192.3 | Mean :31.005 | Mean :132665 | Mean :1738 | Mean : 9.193 | |
| NA | 3rd Qu.:2013 | 3rd Qu.: 9.25 | 3rd Qu.:247.0 | 3rd Qu.:40.893 | 3rd Qu.:150050 | 3rd Qu.:2056 | 3rd Qu.:10.950 | |
| NA | Max. :2014 | Max. :12.00 | Max. :423.0 | Max. :83.547 | Max. :180000 | Max. :3296 | Max. :14.900 |
kable(head(data), format='html', caption="<b><span style='color: black;'>Prime righe dataset<span></b>")%>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:8, extra_css = "padding-right: 2px;")
| city | year | month | sales | volume | median_price | listings | months_inventory |
|---|---|---|---|---|---|---|---|
| Beaumont | 2010 | 1 | 83 | 14.162 | 163800 | 1533 | 9.5 |
| Beaumont | 2010 | 2 | 108 | 17.690 | 138200 | 1586 | 10.0 |
| Beaumont | 2010 | 3 | 182 | 28.701 | 122400 | 1689 | 10.6 |
| Beaumont | 2010 | 4 | 200 | 26.819 | 123200 | 1708 | 10.6 |
| Beaumont | 2010 | 5 | 202 | 28.833 | 123100 | 1771 | 10.9 |
| Beaumont | 2010 | 6 | 189 | 27.219 | 122800 | 1803 | 11.1 |
kable(tail(data), format='html', caption="<b><span style='color: black;'>Ultime righe dataset<span></b>")%>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:8, extra_css = "padding-right: 2px;")
| city | year | month | sales | volume | median_price | listings | months_inventory | |
|---|---|---|---|---|---|---|---|---|
| 235 | Wichita Falls | 2014 | 7 | 150 | 18.672 | 102500 | 941 | 8.0 |
| 236 | Wichita Falls | 2014 | 8 | 137 | 16.129 | 99600 | 973 | 8.3 |
| 237 | Wichita Falls | 2014 | 9 | 110 | 12.015 | 90000 | 940 | 8.1 |
| 238 | Wichita Falls | 2014 | 10 | 112 | 13.817 | 113300 | 905 | 7.8 |
| 239 | Wichita Falls | 2014 | 11 | 96 | 11.308 | 108000 | 870 | 7.5 |
| 240 | Wichita Falls | 2014 | 12 | 109 | 13.884 | 103800 | 821 | 7.0 |
Come si nota, sono presenti 8 variabili diverse.
Le variabili quantitative continue sono su scale di rapporti. Le variabili ‘year’, ‘month’ e ‘months_inventory’ sottintendono un tempo. In particolare, ‘year’ e ‘month’ si prestano per analisi in cui si valuta una delle altre variabili al variare del tempo, cioè una serie storica o sui mesi o sugli anni, oppure su mesi fissati per anni diversi e/o città diverse. Per le altre variabili esclusa ‘city’, essendo tutte quantitative si potrebbe studiare la loro distribuzione di densità (per quelle continue) e la distribuzione discreta (per quelle discrete), anche condizionando l’analisi per città o periodo di tempo.
Si procede al calcolo di indici di posizione, variabilità e forma per le variabili ‘sales’, ‘volume’, ‘median_price’, ‘listings’, ‘months_inventory’. Gli indici di posizione sono già presentati nella tabella precedente.
library(moments)
sd_s=sd(data$sales)
range_s=max(data$sales)-min(data$sales)
inter_q_s=IQR(data$sales)
vc_s=sd(data$sales)/mean(data$sales)*100
skew_s=skewness(data$sales)
kurt_s=kurtosis(data$sales)-3
cat("Sales:\n",
"Standard Deviation:", round(sd_s,2), "\n",
"Range:", round(range_s,2), "\n",
"Interquartile Range:", round(inter_q_s,2), "\n",
"Coefficient of Variation (%):", round(vc_s,2), "\n",
"Skewness:", round(skew_s,2), "\n",
"Kurtosis:", round(kurt_s,2), "\n")
## Sales:
## Standard Deviation: 79.65
## Range: 344
## Interquartile Range: 120
## Coefficient of Variation (%): 41.42
## Skewness: 0.72
## Kurtosis: -0.31
La variabile ‘sales’ risulta asimmetrica a favore di valori piccoli della variabile, come si evince dalla skewness positiva. Inoltre la curtosi indica che i valori tendono ad essere meno concentrati verso la media rispetto ad una distribuzione normale. Il range interquartile indica la tendenza del corpo centrale dei dati ad essere abbastanza concentrato, mentre il coefficiente di variazione suggerisce la presenza di valori anche molto variabili tra loro.
library(moments)
sd_v=sd(data$volume)
range_v=max(data$volume)-min(data$volume)
inter_q_v=IQR(data$volume)
vc_v=sd(data$volume)/mean(data$volume)*100
skew_v=skewness(data$volume)
kurt_v=kurtosis(data$volume)-3
cat("Volume:\n",
"Standard Deviation:", round(sd_v,2), "\n",
"Range:", round(range_v,2), "\n",
"Interquartile Range:", round(inter_q_v,2), "\n",
"Coefficient of Variation (%):", round(vc_v,2), "\n",
"Skewness:", round(skew_v,2), "\n",
"Kurtosis:", round(kurt_v,2), "\n")
## Volume:
## Standard Deviation: 16.65
## Range: 75.38
## Interquartile Range: 23.23
## Coefficient of Variation (%): 53.71
## Skewness: 0.88
## Kurtosis: 0.18
La variabile ‘volume’ risulta anch’essa asimmetrica a favore di valori piccoli della variabile, come da skewness positiva. La curtosi indica che i valori tendono ad essere più concentrati verso la media rispetto ad una distribuzione normale. Il coefficiente di variazione indica una dispersione dei dati rispetto alla media relativamente elevata, mentre il range interquartile suggerisce un corpo centrale dei dati abbastanza concentrato, con valori vicini uno all’altro.
library(moments)
sd_med=sd(data$median_price)
range_med=max(data$median_price)-min(data$median_price)
inter_q_med=IQR(data$median_price)
vc_med=sd(data$median_price)/mean(data$median_price)*100
skew_med=skewness(data$median_price)
kurt_med=kurtosis(data$median_price)-3
cat("Median price:\n",
"Standard Deviation:", round(sd_med,2), "\n",
"Range:", round(range_med,2), "\n",
"Interquartile Range:", round(inter_q_med,2), "\n",
"Coefficient of Variation (%):", round(vc_med,2), "\n",
"Skewness:", round(skew_med,2), "\n",
"Kurtosis:", round(kurt_med,2), "\n")
## Median price:
## Standard Deviation: 22662.15
## Range: 106200
## Interquartile Range: 32750
## Coefficient of Variation (%): 17.08
## Skewness: -0.36
## Kurtosis: -0.62
La variabile ‘median_price’ risulta asimmetrica a favore di valori grandi della variabile, come si nota dalla skewness negativa. La curtosi indica che il picco risulta essere meno accentuato rispetto ad una distribuzione normale. Il coefficiente di variazione indica una dispersione dei dati rispetto alla media relativamente bassa, inoltre il range interquartile assume un valore piccolo rispetto al range totale, suggerendo una buona concentrazione del corpo centrale dei dati.
library(moments)
sd_l=sd(data$listings)
range_l=max(data$listings)-min(data$listings)
inter_q_l=IQR(data$listings)
vc_l=sd(data$listings)/mean(data$listings)*100
skew_l=skewness(data$listings)
kurt_l=kurtosis(data$listings)-3
cat("Listings:\n",
"Standard Deviation:", round(sd_l,2), "\n",
"Range:", round(range_l,2), "\n",
"Interquartile Range:", round(inter_q_l,2), "\n",
"Coefficient of Variation (%):", round(vc_l,2), "\n",
"Skewness:", round(skew_l,2), "\n",
"Kurtosis:", round(kurt_l,2), "\n")
## Listings:
## Standard Deviation: 752.71
## Range: 2553
## Interquartile Range: 1029.5
## Coefficient of Variation (%): 43.31
## Skewness: 0.65
## Kurtosis: -0.79
La skewness della variabile ‘listings’ indica che questa risulta asimmetrica positiva, a favore di piccoli valori della variabile. La curtosi indica che il picco risulta essere meno accentuato rispetto ad una distribuzione normale in modo moderato. Il coefficiente di variazione indica una dispersione dei dati rispetto alla media abbastanza alta. Anche il range interquartile assume un valore elevato rispetto al range totale, suggerendo una dispersione del corpo centrale dei dati importante.
library(moments)
sd_mo=sd(data$months_inventory)
range_mo=max(data$months_inventory)-min(data$months_inventory)
inter_q_mo=IQR(data$months_inventory)
vc_mo=sd(data$months_inventory)/mean(data$months_inventory)*100
skew_mo=skewness(data$months_inventory)
kurt_mo=kurtosis(data$months_inventory)-3
cat("Months inventory:\n",
"Standard Deviation:", round(sd_mo,2), "\n",
"Range:", round(range_mo,2), "\n",
"Interquartile Range:", round(inter_q_mo,2), "\n",
"Coefficient of Variation (%):", round(vc_mo,2), "\n",
"Skewness:", round(skew_mo,2), "\n",
"Kurtosis:", round(kurt_mo,2), "\n")
## Months inventory:
## Standard Deviation: 2.3
## Range: 11.5
## Interquartile Range: 3.15
## Coefficient of Variation (%): 25.06
## Skewness: 0.04
## Kurtosis: -0.17
La skewness della variabile ‘months_invetory’ suggerisce una quasi perfetta simmetria. La curtosi indica che il picco risulta essere meno accentuato rispetto ad una distribuzione normale, anche se non di molto. Il coefficiente di variazione indica una dispersione dei dati rispetto alla media non eccessiva. Il range interquartile assume un valore di un quarto circa rispetto al range totale, suggerendo che il corpo centrale dei dati è concentrato.
Per le variabili ‘city’, ‘year’ e ‘month’ si costruisce la distribuzione delle frequenze.
ni_city=table(data$city)
print(ni_city)
##
## Beaumont Bryan-College Station Tyler
## 60 60 60
## Wichita Falls
## 60
La variabile ‘city’ risulta presente in quattro categorie rappresentative di quattro diverse città analizzate. Tutte sono equamente presenti nel dataset.
ni_year=table(data$year)
print(ni_year)
##
## 2010 2011 2012 2013 2014
## 48 48 48 48 48
La variabile ‘year’ presenta cinque diverse categorie equipopolate che rappresentano gli anni dal 2010 al 2014.
ni_month=table(data$month)
print(ni_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
La variabile ‘month’ è presente in 12 categorie rappresentative dei mesi dell’anno (1=Gennaio, 12=Dicembre), tutti presenti con 20 occorrenze ciascuno.
Nota: le variabili ‘city’, ‘month’ e ‘year’ sono tutte variabili n-modali dove n è il numero di categorie di ognuna, in quanto tutte le loro categorie sono equipopolate.
Considerando i risultati presentati in sezione 2, per individuare la variabile con maggior variabilità si confrontano i vari coefficienti di variazione che permettono di confrontare variabili diverse, presenatandone la variabilità in forma adimensionale e quindi confrontabile. La variabile con maggior variabilità risulta quindi essere ‘volume’, con un coefficiente di variazione che si attesta sul 53.71%. La variabile con la distribuzione più asimmetrica risulta ancora ‘volume’ con un coefficiente di asimmetria di Fisher(skewness) di 0.88, con lo 0 riferito ad una distribuzione gaussiana, per costruzione simmetrica. Questo porta ad avere la distribuzione della variabile più concentrata verso valori piccoli della variabile stessa, essendo asimmetrica positiva, e ad avere il valore della media superiore a quello della mediana, come si può notare nella tabella riassuntiva in sezione 1, colonna ‘volume’. A ulteriore conferma dell’asimmetria si può notare come il terzo quartile, che per definizione si lascia alle spalle il 75% dei dati ordinati, si attesti intorno al valore di 41, pur avendo un range che va da un minimo di 8.2 a un massimo di 83.5.
Si procede lo studio del dataset facendo un focus sulla variable ‘sales’, dividendola in classi.
library(knitr)
library(kableExtra)
sales_cl=cut(data$sales, breaks=seq(75,425,35))
ni_sales=table(sales_cl)
fi_sales=(ni_sales/length(data$sales))
Ni_sales=cumsum(ni_sales)
Fi_sales=cumsum(fi_sales)
sales_matrix=cbind(ni_sales, round(fi_sales,3), Ni_sales, round(Fi_sales,3))
colnames(sales_matrix) <- c("ni", "fi", "Ni", "Fi")
kable(sales_matrix, format='html') %>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:4, extra_css = "padding-right: 5px;")
| ni | fi | Ni | Fi | |
|---|---|---|---|---|
| (75,110] | 35 | 0.146 | 35 | 0.146 |
| (110,145] | 47 | 0.196 | 82 | 0.342 |
| (145,180] | 43 | 0.179 | 125 | 0.521 |
| (180,215] | 36 | 0.150 | 161 | 0.671 |
| (215,250] | 20 | 0.083 | 181 | 0.754 |
| (250,285] | 21 | 0.088 | 202 | 0.842 |
| (285,320] | 18 | 0.075 | 220 | 0.917 |
| (320,355] | 9 | 0.038 | 229 | 0.954 |
| (355,390] | 8 | 0.033 | 237 | 0.988 |
| (390,425] | 3 | 0.013 | 240 | 1.000 |
Dopo aver diviso la variabile in classi seguendo il criterio tale per cui si limitano le classi troppo vuote o troppo piene con un numero adeguato di bins, si genera la tabella delle frequenze con le seguenti colonne: frequenze assolute (ni), frequenze relative (fi), frequenze assolute comulate (Ni) e frequenze relative comulate (Fi). Dalla prima colonna della tabella delle frequenze si può notare nuovamente l’asimmetria positiva già chiara nelle analisi della sezione 2. Si possono anche individuare i quartili: la classe ‘117-131’ contiene il primo quartile, la classe ‘173-187’ la mediana e la classe ‘243-257’ il terzo quartile, come già visibile in tabella nella sezione 1.
library("ggplot2")
ggplot(data=data)+
geom_bar(aes(x=sales_cl), stat='count', col='blue', fill='light blue')+
theme_classic()+
labs( x = "Classi variabile 'sales'", y = "Conteggi variabile 'sales'", title = "Variabile 'sales' divisa in classi")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
#calcolo del coeff. di Gini
gini=function(matrix){
J=length(matrix[,1])
fi2=matrix[,2]^2
g=1-sum(fi2)
g_norm=g/((J-1)/J)
return (g_norm)
}
gini_c=gini(sales_matrix)
cat("Coeff. di Gini normalizzato: ", round(gini_c,2))
## Coeff. di Gini normalizzato: 0.96
Dal grafico a barre e dal coefficiente di Gini normalizzato (valore 0: omogeneità, valore 1: eterogeneità) si nota come la distribuzione della variabile ‘sales’ (numero di vendite mensili) tenda ad assumere valori anche molto diversi tra loro (coeff. di Gini tende a 1). Dal grafico si può anche notare come la classe modale corrisponda all’intervallo di vendite tra 110 e 145. Dalla tendenza generale del grafico si nota come un numero di vendite molto elevato sia molto poco frequente, avendo la distribuzione una tendenza a prediligere numeri medio-bassi di vendite, come si nota dall’asimmetria positiva della distribuzione che si addensa maggiormente verso l’origine degli assi del grafico.
La probabilità di estrarre una riga del dataset corrispondente alla città “Beaumont” si può dedurre tramite approccio classico, come numero di casi favorevoli diviso casi totali, con i casi favorevoli pari alle righe dove compare la città in esame e i casi totali pari al numero totale di righe del dataset. Allo stesso modo si possono calcolare la probabilità di estrarre una riga riportante il mese di luglio oppure il mese di dicembre relativo all’anno 2012. Il numero di casi favorevoli da inserire in ogni probabilità da analizzare è stato già calcolato in sezione 2 nella tabella delle occorrenze.
p_beau=60/nrow(data)
p_lugl=20/nrow(data)
p_dic_2012=4/nrow(data)
cat("P_Beaumont (%): ",round(p_beau*100,2) , "\n",
"P_Luglio (%): ", round(p_lugl*100,2) , "\n",
"P_Dic_2012 (%): ",round(p_dic_2012*100,2) , "\n")
## P_Beaumont (%): 25
## P_Luglio (%): 8.33
## P_Dic_2012 (%): 1.67
Si può notare che la probabilità relativa alla città è la stessa per tutte le città e lo stesso vale per la probabilità di ognuno dei mesi. Questo perchè il dataset è equipopolato in tal senso. Esaminando la probabilità relativa al mese di dicembre 2012, si può notare una tendenza interessante: si nota come ponenedo più di una condizione sull’evento che si vuole osservare, la sua probabilità diventi più piccola perchè può realizzarsi in meno casi favorevoli.
Si procede col creare una nuova colonna del dataset immobiliare che contenga il prezzo medio degli immobili espresso in dollari, ‘mean_price’, tramite divisione della variabile ‘volume’ per la variabile ‘sales’.
library(dplyr)
data=data %>%
mutate(mean_price = as.integer(((data$volume/data$sales)*1000000)))
Si studia inoltre l’efficacia degli annunci di vendita tramite un indice appositamente creato , ‘sale_efficiency’, inteso come il complemento a uno della differenza tra il numero di annunci attivi e il numero di vendite effettuate normalizzata tramite divisione per il numero di annunci attivi. In tal modo la variabile sarà compresa tra 0 (minima efficacia degli annunci: no vendite) e 1 (massima efficacia: vendite=annunci attivi). In tal modo la si può leggere anche come una percentuale di efficienza semplicemente moltiplicandola per cento.
library(dplyr)
data=data %>%
mutate(sale_effciency = round((1-((data$listings - data$sales)/(data$listings))),2))
kable(head(data), format='html', caption="<b><span style='color: black;'>Prime righe dataset<span></b>")%>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:10, extra_css = "padding-right: 2px;")
| city | year | month | sales | volume | median_price | listings | months_inventory | mean_price | sale_effciency |
|---|---|---|---|---|---|---|---|---|---|
| Beaumont | 2010 | 1 | 83 | 14.162 | 163800 | 1533 | 9.5 | 170626 | 0.05 |
| Beaumont | 2010 | 2 | 108 | 17.690 | 138200 | 1586 | 10.0 | 163796 | 0.07 |
| Beaumont | 2010 | 3 | 182 | 28.701 | 122400 | 1689 | 10.6 | 157697 | 0.11 |
| Beaumont | 2010 | 4 | 200 | 26.819 | 123200 | 1708 | 10.6 | 134095 | 0.12 |
| Beaumont | 2010 | 5 | 202 | 28.833 | 123100 | 1771 | 10.9 | 142737 | 0.11 |
| Beaumont | 2010 | 6 | 189 | 27.219 | 122800 | 1803 | 11.1 | 144015 | 0.10 |
kable(tail(data), format='html', caption="<b><span style='color: black;'>Ultime righe dataset<span></b>")%>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:10, extra_css = "padding-right: 2px;")
| city | year | month | sales | volume | median_price | listings | months_inventory | mean_price | sale_effciency | |
|---|---|---|---|---|---|---|---|---|---|---|
| 235 | Wichita Falls | 2014 | 7 | 150 | 18.672 | 102500 | 941 | 8.0 | 124480 | 0.16 |
| 236 | Wichita Falls | 2014 | 8 | 137 | 16.129 | 99600 | 973 | 8.3 | 117729 | 0.14 |
| 237 | Wichita Falls | 2014 | 9 | 110 | 12.015 | 90000 | 940 | 8.1 | 109227 | 0.12 |
| 238 | Wichita Falls | 2014 | 10 | 112 | 13.817 | 113300 | 905 | 7.8 | 123366 | 0.12 |
| 239 | Wichita Falls | 2014 | 11 | 96 | 11.308 | 108000 | 870 | 7.5 | 117791 | 0.11 |
| 240 | Wichita Falls | 2014 | 12 | 109 | 13.884 | 103800 | 821 | 7.0 | 127376 | 0.13 |
cat("Sale_efficiency \n",
"Mean: ", round(mean(data$sale_effciency),2), "\n",
"Standard Deviation: ", round(sd(data$sale_effciency),2), "\n"
)
## Sale_efficiency
## Mean: 0.12
## Standard Deviation: 0.05
Come si può notare esaminando i primi e gli ultimi valori delle colonne ‘median_price’ e ‘mean_price’, definendo una ipotetica variabile inerente al prezzo di vendita della singola abitazione, questa avrebbe presumibilmente una distribuzione asimmetrica positiva, in quanto si nota come il prezzo medio sia sistematicamnete maggiore di quello mediano. Ciò indica che il prezzo di vendita delle case predilige valori medio-bassi rispetto al possibile range di valori, indicando inoltre la presenza di pochi valori estremamente alti. Inoltre, l’ispezione dell’indice ‘sale_efficiency’ suggerisce come l’efficacia degli annunci sia relativamente bassa, con una media del 12% portando ad un bilancio tra annunci aperti e vendite decisamente in negativo per il mercato immobiliare, denotando la necessità dell’adozione di strategie di mercato differenti.
In questa sezione saranno presentate analisi condizionate tre le varie variabili per individuare andamenti utili all’azienda. Per facilitare la visualizzazione, si usano sempre gli stessi colori per le variabili esaminate declinate nelle varie analisi condizionate.
Si inizia esaminando i dati raggruppati per città, stimando medie e deviazioni standard per le principali variabili.
library(dplyr)
library(knitr)
sales_city=data %>%
group_by(city) %>%
summarise(
mean_sal = round(mean(sales),2),
sd_sal = round(sd(sales),2),
mean_vol=round(mean(volume),2),
sd_vol=round(sd(volume),2),
m_med_p=round(mean(median_price),0),
sd_med=round(sd(median_price),0),
mean_lis=as.integer(mean(listings)),
m_eff.index=round(mean(sale_effciency),2)
)
kable(sales_city, format = "html", caption="<b><span style='color: black;'>Medie e dev. standard variabili in base alla città</span></b>") %>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:8, extra_css = "padding-right: 2px;")
| city | mean_sal | sd_sal | mean_vol | sd_vol | m_med_p | sd_med | mean_lis | m_eff.index |
|---|---|---|---|---|---|---|---|---|
| Beaumont | 177.38 | 41.48 | 26.13 | 6.97 | 129988 | 10105 | 1679 | 0.11 |
| Bryan-College Station | 205.97 | 84.98 | 38.19 | 17.25 | 157488 | 8852 | 1458 | 0.15 |
| Tyler | 269.75 | 61.96 | 45.77 | 13.11 | 141442 | 9337 | 2905 | 0.09 |
| Wichita Falls | 116.07 | 22.15 | 13.93 | 3.24 | 101743 | 11320 | 909 | 0.13 |
library(ggplot2)
library(gridExtra)
g1=ggplot(data=sales_city)+
geom_col(aes(x=city, y=mean_sal), col=2, fill="orange")+
theme_classic()+
labs( x = "Città", y = "Vendite", title = "Vendite medie per città")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
g2=ggplot(data=sales_city)+
geom_col(aes(x=city, y=mean_vol), fill="orange")+
geom_text(aes(x = city, y = mean_vol, label = round(mean_vol, 2)),
vjust = +1.5, # Posiziona il testo leggermente sopra le barre
color = "black") +
theme_classic()+
labs( x = "Città", y = "Introiti totali in milioni di dollari", title = "Guadagni di vendita medi per città")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
g3=ggplot(data=sales_city)+
geom_col(aes(x=city, y=m_eff.index), col="darkblue", fill="skyblue")+
theme_classic()+
labs( x = "Città", y = "Efficienza di vendita", title = "Efficienza vendita media \nper città")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
g4=ggplot(data=sales_city)+
geom_col(aes(x=city, y=m_med_p), col="darkblue", fill="skyblue")+
theme_classic()+
labs( x = "Città", y = "Prezzo mediano di vendita mediato", title = "Prezzo mediano medio \nper città")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
grid.arrange(g1, g2, ncol = 2)
grid.arrange(g3, g4, ncol = 2)
Come si nota dai grafici, pur essendo Tyler la città con più vendite (e quindi più introiti totali), questa tendenza non è dovuta ad una maggiore efficacia di annunci: infatti l’elevato valore di annunci rispetto alle vendite comporta un valore dell’indice di efficienza di vendita che è il più basso tra le città indagate, anche se non è presente una grande differenza tra i vaori di efficenza per le varie città. Al contrario la politica di annunci risulta più efficace nella città di Bryan-College Station. Si può inoltre notare come Wichita Falls sia la città con meno rendimento rispetto alla vendita di immobili. C’è però da aggiungere che proprio Wichita Falls è anche la città che offre il numero di vendite (e quindi di introiti) più stabile, mentre Bryan-College Station è caratterizzata dalla più alta variabilità dei risultati. Infine, si può notare come passando dal grafico sulle vendite a quello sugli introiti vengano rispettate le classifiche delle città seppur con variazioni di livelli rispettivi. Questo è dovuto al fatto che gli introiti oltre che dal numero di vendite, sono influenzati anche dal prezzo di vendita che varia tra le varie città, come evidenziato dal prezzo mediano. Si nota anche come il prezzo mediano sia maggiormente variabile nella città di Wichita Falls, mentre sia relativamente più stabile a Bryan-College Station.
Si procede analizzando i dati raggruppati per anno.
library(dplyr)
sales_year=data %>%
group_by(year) %>%
summarise(
mean_sal = round(mean(sales),2),
sd_sal = round(sd(sales),2),
mean_vol=round(mean(volume),2),
sd_vol=round(sd(volume),2),
m_med_p=round(mean(median_price),0),
sd_med=round(sd(median_price),0),
mean_lis=as.integer(mean(listings)),
m_eff.index=round(mean(sale_effciency),2)
)
kable(sales_year,format = 'html', caption="<b><span style='color: black;'>Medie e dev.standard delle variabili su base annuale<span></b>") %>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:8, extra_css = "padding-right: 2px;")
| year | mean_sal | sd_sal | mean_vol | sd_vol | m_med_p | sd_med | mean_lis | m_eff.index |
|---|---|---|---|---|---|---|---|---|
| 2010 | 168.67 | 60.54 | 25.68 | 10.80 | 130192 | 21822 | 1826 | 0.10 |
| 2011 | 164.12 | 63.87 | 25.16 | 12.20 | 127854 | 21318 | 1849 | 0.09 |
| 2012 | 186.15 | 70.91 | 29.27 | 14.52 | 130077 | 21432 | 1776 | 0.11 |
| 2013 | 211.92 | 84.00 | 35.15 | 17.93 | 135723 | 21708 | 1677 | 0.13 |
| 2014 | 230.60 | 95.51 | 39.77 | 21.19 | 139481 | 25625 | 1560 | 0.16 |
library(ggplot2)
library(gridExtra)
g1=ggplot(data=sales_year, aes(x=year, y=mean_sal))+
geom_point(col='red',size = 3)+
geom_line(aes(x=year, y=mean_sal), size=1, col='orange')+
theme_classic()+
labs( x = "Anno", y = "Vendite", title = "Vendite medie per anno")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
g2=ggplot(data=sales_year, aes(x=year, y=mean_vol))+
geom_point(col='darkviolet', size=3)+
geom_line(aes(x=year, y=mean_vol), size=1, col='violet')+
theme_classic()+
labs( x = "Anno", y = "Introiti in milioni di dollari", title = "Introiti medi per anno")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
grid.arrange(g1, g2, ncol = 2)
g3=ggplot(data=sales_year, aes(x=year, y=m_eff.index))+
geom_point(col='darkgreen', size=3)+
geom_line(aes(x=year, y=m_eff.index), size=1, col='green')+
theme_classic()+
labs( x = "Anno", y = "Efficienza annunci di vendita", title = "Efficienza media vendita \nper anno")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
g4=ggplot(data=sales_year, aes(x=year, y=m_med_p))+
geom_point(col='darkblue', size=3)+
geom_line(aes(x=year, y=m_med_p), size=1, col='skyblue')+
theme_classic()+
labs( x = "Anno", y = "Prezzo mediano di vendita", title = "Prezzo mediano medio \nper anno")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
grid.arrange(g3, g4, ncol = 2)
Dall’analisi condizionata sui vari anni si nota come in media la vendita di immobili sia cresciuta nel tempo, con l’unica eccezione con decrescita segnata dall’anno 2011, aumentando di conseguenza gli introiti totali dell’azienda, pur notando un parallelo incremento della variabilità del numero di vendite e introiti. Si nota anche come l’efficienza degli annunci di vendita sia migliorata, ma questo è anche dovuto alla diminuzione del numero di annunci attivi medio nel tempo. Anche il prezzo mediano è salito nel corso degli anni, mantenendo una variabilità piuttosto stabile, con unca eccezione per l’anno 2014.
Infine si analizzano i dati su base mensile.
library(dplyr)
sales_month=data %>%
group_by(month) %>%
summarise(
mean_sal = round(mean(sales),2),
sd_sal = round(sd(sales),2),
mean_vol=round(mean(volume),2),
sd_vol=round(sd(volume),2),
m_med_p=round(mean(median_price),0),
sd_med=round(sd(median_price),0),
mean_lis=as.integer(mean(listings)),
m_eff.index=round(mean(sale_effciency),2)
)
kable(sales_month, format='html', caption="<b><span style='color: black;'>Medie e dev.standard delle variabili su base mensile<span></b>") %>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:8, extra_css = "padding-right: 2px;")
| month | mean_sal | sd_sal | mean_vol | sd_vol | m_med_p | sd_med | mean_lis | m_eff.index |
|---|---|---|---|---|---|---|---|---|
| 1 | 127.40 | 43.38 | 19.00 | 8.37 | 124250 | 25151 | 1647 | 0.08 |
| 2 | 140.85 | 51.07 | 21.65 | 10.09 | 130075 | 22823 | 1692 | 0.09 |
| 3 | 189.45 | 59.18 | 29.38 | 12.02 | 127415 | 23442 | 1756 | 0.12 |
| 4 | 211.70 | 65.40 | 33.30 | 14.52 | 131490 | 21458 | 1825 | 0.13 |
| 5 | 238.85 | 83.12 | 39.70 | 19.02 | 134485 | 18796 | 1823 | 0.14 |
| 6 | 243.55 | 95.00 | 41.30 | 21.08 | 137620 | 19231 | 1833 | 0.14 |
| 7 | 235.75 | 96.27 | 39.12 | 21.41 | 134750 | 21945 | 1821 | 0.14 |
| 8 | 231.45 | 79.23 | 38.01 | 18.05 | 136675 | 22488 | 1786 | 0.14 |
| 9 | 182.35 | 72.52 | 29.60 | 15.22 | 134040 | 24344 | 1748 | 0.11 |
| 10 | 179.90 | 74.95 | 29.08 | 15.13 | 133480 | 26358 | 1710 | 0.11 |
| 11 | 156.85 | 55.47 | 24.81 | 11.15 | 134305 | 24691 | 1652 | 0.10 |
| 12 | 169.40 | 60.75 | 27.09 | 12.57 | 133400 | 22810 | 1557 | 0.12 |
library(ggplot2)
library(gridExtra)
g1=ggplot(data=sales_month, aes(x=factor(month), y=mean_sal))+
scale_x_discrete(labels = c("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")) +
geom_point(col='red', size=3)+
geom_line(aes(x=month, y=mean_sal), size=1, col='orange')+
theme_classic()+
labs( x = "Mese", y = "Vendite", title = "Vendite medie per mese")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
g2=ggplot(data=sales_month, aes(x=factor(month), y=mean_vol))+
scale_x_discrete(labels = c("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")) +
geom_point(col='darkviolet', size=3)+
geom_line(aes(x=month, y=mean_vol), size=1, col='violet')+
theme_classic()+
labs( x = "Mese", y = "Introiti in milioni di dollari", title = "Introiti medi per mese")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
grid.arrange(g1, g2, ncol = 2)
g3=ggplot(data=sales_month, aes(x=factor(month), y=m_eff.index))+
scale_x_discrete(labels = c("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")) +
geom_point(col='darkgreen', size=3)+
geom_line(aes(x=month, y=m_eff.index), size=1, col='green')+
theme_classic()+
labs( x = "Mese", y = "Efficienza annunci di vendita", title = "Efficienza media per mese")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
g4=ggplot(data=sales_month, aes(x=factor(month), y=m_med_p))+
scale_x_discrete(labels = c("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")) +
geom_point(col='darkblue', size=3)+
geom_line(aes(x=month, y=m_med_p), size=1, col='skyblue')+
theme_classic()+
labs( x = "Mese", y = "Prezzo mediano di vendita", title = "Prezzo mediano medio \nper mese")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
grid.arrange(g3, g4, ncol = 2)
Dalle analisi condizionate per mese, si può notare come il mercato immobiliare sia più attivo nella stagione primavera-estate, raggiungendo un picco in estate. Questo si nota anche dal fatto che pur avendo un numero di annunci maggiore in tale stagione, l’efficienza di vendita si alza, suggerendo che nonostante il numero di annunci attivi sia in crescita, anche la domanda da parte dei clienti lo sia, portando ad un maggior numero di vendite. In corrispondenza alla maggior attività estiva, si raggiungono anche picchi di prezzo mediano. Va inoltre osservato come il prezzo mediano risulti meno variabile nei mesi di maggio e giugno, mentre abbia massima variabilità nei mesi autunno/inverno.
Tramite alcune ulteriori visulaizzazioni si esplorano nuove relazione tra le variabili.
In queata sezione si vuole studiare la distribuzione del prezzo mediano e degli introiti tra le città usando un boxplot unito al grafico di distribuzione di densità della variabile.
library(ggplot2)
library(gghalves)
group_city=data%>%
group_by(city)
ggplot(data=group_city)+
geom_half_boxplot(aes(x=city, y=median_price), side='l', fill='skyblue')+
geom_half_violin(aes(x=city, y=median_price), side='r', fill='lightgreen')+
theme_linedraw()+
labs( x = "Città", y = "Prezzo mediano di vendita", title = "Distribuzione prezzo mediano di vendita per città")+
theme(plot.title = element_text(face = "bold"))
ggplot(data=group_city)+
geom_half_boxplot(aes(x=city, y=volume), side='l', fill='yellow')+
geom_half_violin(aes(x=city, y=volume), side='r', fill='red')+
theme_linedraw()+
labs( x = "Città", y = "Intriti totali di vendita in milioni di dollari", title = "Distribuzione introiti di vendita per città")+
theme(plot.title = element_text(face = "bold"))
Ogni città è rappresentata da un simbolo grafico diviso in due. Sulla metà sinistra sono rappresentati il range interquartile, la mediana, massimo e minimi relativi (posti ripsettivamente sul valore pari al terzo/primo quartile +/-1.5 volte il range interquartile) e eventuali outliers, cioè valori che distano dal corpo centrale della distribuzione più di max e min relativi. Sulla metà di destra è raffigurata la distribuzione della variabile stessa per la determinata città. Dal grafico sul prezzo mediano si può notare come la distribuzione del prezzo mediano per Bryan-College Station sia la più stretta in termimi di corpo centrale dei dati, indicando come la variabilità del prezzo mediano per tale città sia la più bassa. La stessa città è anche quella con il prezzo mediano con valori più alti, ad indicare come il prezzo dell’immobile sia mediamente più elevato. Wichita Falls si conferma ancora una volta la meno remunerativa tra le città, anche considerando il prezzo del singolo immobile. Per concludere, le distribuzioni di prezzo mediano per Tyler e Wichita Falls risultano essere le più simmetriche, mentre le restanti presentano asimmetrie maggiori, non coerenti tra loro in tendenza, dato che in un caso c’è asimmetria positiva (Bryan-College Station), negativa nell’altro(Beaumont).
Il secondo grafico mostra la distribuzione della variabile ‘volume’ sulle varie città. Si nota come Tyler segni la città con introiti mediamete maggiori, dovuti sia ad un maggior numero di vendite che ad un prezzo mediano relativamente alto, data la seconda posizione nel plot precedente sul prezzo mediano. Si può inoltre osservare come le distribuzioni di introiti siano molto allungate sia per Bryan-College Station che per Tyler, ad indicare una elevata variabilità dei valori. La situazione si capovolge per Beaumont e Wichita Falls, aventi varibilità inferiore. Questo indica come le città più redditizie siano anche le più variabili in guadagni generati. Per conlcudere, si nota come le disrtibuzioni di introiti siano in media asimmetriche positive.
Si studiano adesso le vendite totali per mese e città.
library(dplyr)
library(ggplot2)
library(gridExtra)
month.names=c("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre")
sales_tot_city=data %>%
group_by(city) %>%
summarise(sales_sum = round(sum(sales),2), volume_sum=round(sum(volume),0))
kable(sales_tot_city, format='html', caption = "<b><span style='color: black;'>Riepilogo delle Vendite totali per Città<span></b>") %>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:3, extra_css = "padding-right: 2px;")
| city | sales_sum | volume_sum |
|---|---|---|
| Beaumont | 10643 | 1568 |
| Bryan-College Station | 12358 | 2291 |
| Tyler | 16185 | 2746 |
| Wichita Falls | 6964 | 836 |
g1=ggplot(data=sales_tot_city)+
geom_col(aes(x=city, y=sales_sum), col='blue', fill='lightblue')+
theme_classic()+
labs( x = "Città", y = "Vendite totali", title = "Vendite totali per città")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
g3=ggplot(data=sales_tot_city)+
geom_col(aes(x=city, y=volume_sum), col='darkviolet', fill='pink')+
theme_classic()+
labs( x = "Città", y = "Introiti totali in milioni di dollari", title = "Introiti totali per città")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
sales_tot_month=data %>%
group_by(month) %>%
summarise(sales_sum = round(sum(sales),2), volume_sum=round(sum(volume),2))
kable(sales_tot_month, factor='html', caption = "<b><span style='color: black;'>Riepilogo delle Vendite totali per mese<span></b>") %>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:3, extra_css = "padding-right: 2px;")
| month | sales_sum | volume_sum |
|---|---|---|
| 1 | 2548 | 380.02 |
| 2 | 2817 | 433.03 |
| 3 | 3789 | 587.69 |
| 4 | 4234 | 666.09 |
| 5 | 4777 | 794.04 |
| 6 | 4871 | 826.06 |
| 7 | 4715 | 782.44 |
| 8 | 4629 | 760.28 |
| 9 | 3647 | 591.98 |
| 10 | 3598 | 581.57 |
| 11 | 3137 | 496.14 |
| 12 | 3388 | 541.89 |
g2=ggplot(data=sales_tot_month)+
geom_col(aes(x=format(month), y=sales_sum), col='blue', fill='lightblue')+
scale_x_discrete(labels = month.names) +
theme_classic()+
labs( x = "Mese", y = "Vendite totali", title = "Vendite totali per mese")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
g4=ggplot(data=sales_tot_month)+
geom_col(aes(x=format(month), y=volume_sum), col='darkviolet', fill='pink')+
scale_x_discrete(labels = month.names) +
theme_classic()+
labs( x = "Mese", y = "Introiti totali in milioni di dollari", title = "Introiti totali per mese")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
grid.arrange(g1, g2, ncol = 2)
grid.arrange(g3,g4, ncol=2)
sales_tot_city_month=data %>%
group_by(city, month) %>%
summarise(sales_sum_city_month=round(sum(sales),2))
sales_tot_city_month=sales_tot_city_month %>%
group_by(city)%>%
mutate(percent=round((sales_sum_city_month/sum(sales_sum_city_month)),2))
sales_tot_month_city=data %>%
group_by(month,city,year)%>%
summarise(sales_sum_month_city=round(sum(sales),2))
sales_tot_month_city=sales_tot_month_city %>%
group_by(month)%>%
mutate(percent=round((sales_sum_month_city/sum(sales_sum_month_city)),2))
#grafici a barre sovrapposte con le città sovrapposte
ggplot(data=sales_tot_month_city)+
geom_col(aes(x=factor(month), y=sales_sum_month_city, fill=factor(city)), position='stack')+
scale_fill_brewer(palette = "Paired")+
scale_x_discrete(labels = month.names) +
theme_classic()+
labs( x = "Mesi", y = "Vendite totali", title = "Vendite totali per mese in base alla città e all'anno", fill = "Città")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))+
facet_wrap(~year, scales='free')+
theme(panel.spacing.y = unit(1, "lines"), panel.spacing.x = unit(0.5, "lines"),axis.text.x = element_text(angle = 45, hjust = 1, size = 7)) # Regola spazio tra i pannelli
ggplot(data=sales_tot_month_city)+
geom_col(aes(x=factor(month), y=sales_sum_month_city, fill=factor(city)), position='fill')+
scale_fill_brewer(palette = "Paired")+
scale_x_discrete(labels = month.names) +
theme_classic()+
labs( x = "Mesi", y = "Vendite totali", title = "Vendite totali per mese in base alla città e all'anno-normalizzato", fill = "Città")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))+
facet_wrap(~year, scales='free')+
theme(panel.spacing.y = unit(1, "lines"), panel.spacing.x = unit(0.5, "lines"), axis.text.x = element_text(angle = 45, hjust = 1, size = 7))
Anche in questi grafici sulle vendite totali si ripropongono gli andamenti delle vendite medie per città e mese già esaminati in precedenza. Si nota sempre come Tyler sia la città con più vendite e come le vendite siano concentrate in generale nella stagione primavera/estate. Nal grafico a colonne normalizzato non è possibile confrontare in modo diretto l’ampiezza dei singoli contributi delle varie città per mesi diversi, in quanto i vari mesi hanno vendite totali diverse e per effetto della normalizzazione subiscono distorsioni. Si nota inoltre come in generale le vendite siano aumentate negli anni (si veda sezione successiva).
Si analizzano le vendite e gli introiti nel tempo.
library(dplyr)
sales_time=data %>%
group_by(year, month) %>%
arrange(year, month, city) %>%
summarize(
tot_s=sum(sales),
tot_vol=round(sum(volume),2)
)
sales_time$month_year=as.Date(paste(sales_time$year, sales_time$month, "01", sep = "-"), format = "%Y-%m-%d")
kable(sales_time, format='html', caption="<b><span style='color: black;'>Vendite totali per periodo storico</span></b>") %>%
kable_styling(bootstrap_options = c("striped", "hover")) %>%
column_spec(1:5, extra_css = "padding-right: 2px;")
| year | month | tot_s | tot_vol | month_year |
|---|---|---|---|---|
| 2010 | 1 | 421 | 63.75 | 2010-01-01 |
| 2010 | 2 | 487 | 76.90 | 2010-02-01 |
| 2010 | 3 | 755 | 111.88 | 2010-03-01 |
| 2010 | 4 | 916 | 135.20 | 2010-04-01 |
| 2010 | 5 | 931 | 143.69 | 2010-05-01 |
| 2010 | 6 | 866 | 138.19 | 2010-06-01 |
| 2010 | 7 | 712 | 106.76 | 2010-07-01 |
| 2010 | 8 | 738 | 114.36 | 2010-08-01 |
| 2010 | 9 | 598 | 88.83 | 2010-09-01 |
| 2010 | 10 | 565 | 87.16 | 2010-10-01 |
| 2010 | 11 | 503 | 73.66 | 2010-11-01 |
| 2010 | 12 | 604 | 92.07 | 2010-12-01 |
| 2011 | 1 | 425 | 60.66 | 2011-01-01 |
| 2011 | 2 | 469 | 69.38 | 2011-02-01 |
| 2011 | 3 | 668 | 101.57 | 2011-03-01 |
| 2011 | 4 | 716 | 110.27 | 2011-04-01 |
| 2011 | 5 | 780 | 122.04 | 2011-05-01 |
| 2011 | 6 | 885 | 138.99 | 2011-06-01 |
| 2011 | 7 | 812 | 130.86 | 2011-07-01 |
| 2011 | 8 | 786 | 120.82 | 2011-08-01 |
| 2011 | 9 | 629 | 95.10 | 2011-09-01 |
| 2011 | 10 | 594 | 88.27 | 2011-10-01 |
| 2011 | 11 | 549 | 86.29 | 2011-11-01 |
| 2011 | 12 | 565 | 83.35 | 2011-12-01 |
| 2012 | 1 | 499 | 69.79 | 2012-01-01 |
| 2012 | 2 | 574 | 82.50 | 2012-02-01 |
| 2012 | 3 | 711 | 109.13 | 2012-03-01 |
| 2012 | 4 | 747 | 112.13 | 2012-04-01 |
| 2012 | 5 | 882 | 147.53 | 2012-05-01 |
| 2012 | 6 | 898 | 149.33 | 2012-06-01 |
| 2012 | 7 | 928 | 152.46 | 2012-07-01 |
| 2012 | 8 | 954 | 154.27 | 2012-08-01 |
| 2012 | 9 | 707 | 112.76 | 2012-09-01 |
| 2012 | 10 | 742 | 115.00 | 2012-10-01 |
| 2012 | 11 | 650 | 102.55 | 2012-11-01 |
| 2012 | 12 | 643 | 97.39 | 2012-12-01 |
| 2013 | 1 | 576 | 91.74 | 2013-01-01 |
| 2013 | 2 | 593 | 89.95 | 2013-02-01 |
| 2013 | 3 | 814 | 125.50 | 2013-03-01 |
| 2013 | 4 | 878 | 145.62 | 2013-04-01 |
| 2013 | 5 | 1057 | 184.47 | 2013-05-01 |
| 2013 | 6 | 1045 | 184.32 | 2013-06-01 |
| 2013 | 7 | 1127 | 188.55 | 2013-07-01 |
| 2013 | 8 | 1107 | 185.64 | 2013-08-01 |
| 2013 | 9 | 814 | 136.78 | 2013-09-01 |
| 2013 | 10 | 738 | 124.59 | 2013-10-01 |
| 2013 | 11 | 690 | 110.20 | 2013-11-01 |
| 2013 | 12 | 733 | 119.96 | 2013-12-01 |
| 2014 | 1 | 627 | 94.08 | 2014-01-01 |
| 2014 | 2 | 694 | 114.30 | 2014-02-01 |
| 2014 | 3 | 841 | 139.62 | 2014-03-01 |
| 2014 | 4 | 977 | 162.88 | 2014-04-01 |
| 2014 | 5 | 1127 | 196.32 | 2014-05-01 |
| 2014 | 6 | 1177 | 215.24 | 2014-06-01 |
| 2014 | 7 | 1136 | 203.80 | 2014-07-01 |
| 2014 | 8 | 1044 | 185.20 | 2014-08-01 |
| 2014 | 9 | 899 | 158.51 | 2014-09-01 |
| 2014 | 10 | 959 | 166.54 | 2014-10-01 |
| 2014 | 11 | 745 | 123.45 | 2014-11-01 |
| 2014 | 12 | 843 | 149.12 | 2014-12-01 |
library(ggplot2)
ggplot(data=sales_time, aes(x=month_year, y=tot_s))+
geom_point(col='red', size=3)+
geom_line(aes(x=month_year, y=tot_s), size=1, col='orange')+
geom_smooth(method = "loess", se = FALSE, color = "red") +
theme_linedraw()+
labs( x = "Tempo", y = "Vendite totali", title = "Vendite totali nel tempo")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
ggplot(data=sales_time, aes(x=month_year, y=tot_vol))+
geom_point(col='darkblue', size=3)+
geom_line(aes(x=month_year, y=tot_vol), size=1, col='skyblue')+
geom_smooth(method = "loess", se = FALSE, color = "blue") +
theme_linedraw()+
labs( x = "Tempo", y = "Introiti totali in milioni di dollari", title = "Introiti totali nel tempo", color = "Legenda")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
theme(plot.title = element_text(face = "bold"))
Il grafico in rosso rappresenta l’andamento delle vendite totali della società nel tempo, cioè la somma delle vendite in ogni città ad un dato tempo. Si nota un andamento altalenante: il grafico mostra massimi relativi nei punti corripondenti alla stagione estiva mentre mostra minimi relativi nella stagione invernale. La tendenza generale del grafico (curva rossa), mediando l’andamento oscillante su base stagionale, è di crescita nel tempo, ad indicare come le vendite effettuate siano aumentate negli anni. Bisogna comunque segnalare un’eccezione a questo andamento di crescita presente nell’anno 2011 che ha registrato un lieve calo delle vendite. Il grafico in blu mostra l’andamento temporale per gli introiti complessivi delle varie città nel tempo. Le tendenze già discusse si riporongono anche su tale variabile.
Dalle analisi svolte sul mercato immobiliare texano si possono estrarre diverse conclusioni utili. Si è notato infatti, come il mercato immobiliare sia cresciuto negli anni dal 2010 a 2014, aumentando le vendite, gli incassi, l’efficienza delle vendite (vedi dopo) e anche il prezzo mediano di vendita, traducendo il tutto in un incasso generale crescene nel tempo. L’unica parentesi negativa è risultata l’anno 2011. Su base mensile il mercato presenta un andamento oscillante, con picchi di vendite e incassi nei mesi estivi e minimi in quelli invernali. Per studiare l’efficienza degli annunci di vendita si è messo a punto un indice con valore tra zero (annunci inadatti, invenduti) e uno (annunci di successo, vendite pari agli annunci aperti). Da tale indice si nota come la strategia di marketing possa essere notevomente migliorata, dato che in media solo un numero di annunci tra 10-20% viene venduto. Anche tale efficienza mostra miglioramenti nei mesi estivi e questo, unito ad un maggior numero di annunci, indica la presenza di una tendenza della popolazione a cercare casa soprattutto in estate, evidenziando possibili scenari di ulteriore investimento per le società immobiliari. Per quello che concerne le città, dallo studio risulta che Tyler sia la città più remunerativa, in contrapposaizione a Wichita Falls, la meno produttiva in termini economici. C’è però da aggiungere che la tendenza generale mostra come le città più remunerative, come Tyler e Bryan-College Satation siano anche quelle con variabilità di incasso maggiore, mentre Wichita Falls rappresenti la città con la minor variabilità in introiti. In ultima analisi, si è notato come le disrtibuzioni delle vendite, incassi e prezzo mediano tendano a privilegiare valori medio-bassi, mentre valori elevati sono più rari.