options(repos = c(CRAN = "https://cran.rstudio.com/"))
Progetto finale di statistica descrittiva
getwd()
## [1] "C:/Users/Gianpiero/Dati Salvati/Desktop/master data science/1 - Statistica descrittiva"
dati<- read.csv("realestate_texas.csv")
dim(dati)
## [1] 240 8
N<-dim(dati)[1]
freq_ass_city<- table(dati$city)
Il dataframe contiene 240 osservazioni per 8 variabili.
Le 8 variabili sono così definite:
Le variabili quantitative continue sono su scala di rapporti.
La frequenza assoluta delle osservazioni è uguale per la variabile qualitativa analizzata “city”.
Le analisi possono essere condotte su serie temporali concatenando mese e anno per utilizzarle nei grafici e nelle analisi statistiche.
getwd()
## [1] "C:/Users/Gianpiero/Dati Salvati/Desktop/master data science/1 - Statistica descrittiva"
dati <- read.csv("realestate_texas.csv")
attach(dati)
installed.packages("knitr")
## Package LibPath Version Priority Depends Imports LinkingTo Suggests
## Enhances License License_is_FOSS License_restricts_use OS_type Archs
## MD5sum NeedsCompilation Built
library(knitr)
kable(table(city))
| city | Freq |
|---|---|
| Beaumont | 60 |
| Bryan-College Station | 60 |
| Tyler | 60 |
| Wichita Falls | 60 |
La variabile qualitativa city è definibile quadrimodale.
summary(dati)
## city year month sales
## Length:240 Min. :2010 Min. : 1.00 Min. : 79.0
## Class :character 1st Qu.:2011 1st Qu.: 3.75 1st Qu.:127.0
## Mode :character Median :2012 Median : 6.50 Median :175.5
## Mean :2012 Mean : 6.50 Mean :192.3
## 3rd Qu.:2013 3rd Qu.: 9.25 3rd Qu.:247.0
## Max. :2014 Max. :12.00 Max. :423.0
## volume median_price listings months_inventory
## Min. : 8.166 Min. : 73800 Min. : 743 Min. : 3.400
## 1st Qu.:17.660 1st Qu.:117300 1st Qu.:1026 1st Qu.: 7.800
## Median :27.062 Median :134500 Median :1618 Median : 8.950
## Mean :31.005 Mean :132665 Mean :1738 Mean : 9.193
## 3rd Qu.:40.893 3rd Qu.:150050 3rd Qu.:2056 3rd Qu.:10.950
## Max. :83.547 Max. :180000 Max. :3296 Max. :14.900
Le variabili “sales”, “listings” e “months_inventory” mostrano una mediana maggiore della media, che indica un’asimmetria positiva ovvero la presenza di alcuni valori molto alti che spostano la media verso l’alto, mentre la maggior parte dei dati si concentra su valori più bassi. Tale deduzione è confermata dalla distribuzione di frequenza della variabile “sales”.
La variabile “median_price”, al contrario, mostra un’asimmetria negativa.
dati <- read.csv("realestate_texas.csv")
attach(dati)
## I seguenti oggetti sono mascherati da dati (pos = 4):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
IQR(median_price)
## [1] 32750
IQR(sales)
## [1] 120
L’IQR indica la distanza fra il terzo quartile e il primo quartile della variabile in esame
n<-length(sales)
mu<-mean(sales)
sd(sales)
## [1] 79.65111
sd(median_price)
## [1] 22662.15
CV<-function(x){
return(sd(x)/mean(x)*100)
}
CV(sales)
## [1] 41.42203
CV(median_price)
## [1] 17.08218
Il Coefficiente di Variazone permette di confrontare la variabilità fra più variabili in quanto espirme la stessa in maniera relativa rispetto alla media. Per le variabili prese in esame possiamo concludere che la variabile “median_price” ha una variabilità del 17% rispetto alla propria media che risulta più bassa rispetto alla variabilità della variabile “sales” uguale al 41% della propria media.
install.packages("moments")
## Installazione pacchetto in 'C:/Users/Gianpiero/AppData/Local/R/win-library/4.5'
## (perché 'lib' non è specificato)
## pacchetto 'moments' aperto con successo con controllo somme MD5
##
## I pacchetti binari scaricati sono in
## C:\Users\Gianpiero\AppData\Local\Temp\Rtmpa2nFPO\downloaded_packages
library(moments)
variabili <- c("sales", "median_price","volume", "months_inventory")
for (var in variabili) {
norm_values <- rnorm(length(get(var)), mean(get(var)), sd(get(var)))
plot(density(norm_values), main = paste("Densità di", var))
abline(v = mean(get(var)), col = 3)
cat("CV di", var, ":", CV(get(var)), "\n")
cat("L'asimmetria per la variabile", var, "è:", skewness(get(var)), "\n")
cat("La curtosi della variabile ", var, "è:", kurtosis(get(var)) - 3, "\n")
}
## CV di sales : 41.42203
## L'asimmetria per la variabile sales è: 0.718104
## La curtosi della variabile sales è: -0.3131764
## CV di median_price : 17.08218
## L'asimmetria per la variabile median_price è: -0.3645529
## La curtosi della variabile median_price è: -0.6229618
## CV di volume : 53.70536
## L'asimmetria per la variabile volume è: 0.884742
## La curtosi della variabile volume è: 0.176987
## CV di months_inventory : 25.06031
## L'asimmetria per la variabile months_inventory è: 0.04097527
## La curtosi della variabile months_inventory è: -0.1744475
La variabile con maggiore variabilità risulta essere “volume” che presenta un coefficiente di variazione del 54% rispetto alla propria media.
L’asimmetria maggiore si riscontra per la variabile “volume” che ha una leggera asimmetria positiva, come confermato anche dal grafico.
Calcolando asimmetria e curtosi si può concludere che in linea generale tutte le variabili mostrano una distribuzione molto vicino ad una normale. Entrambi i valori per tutte le variabili sono infatti molto vicini a 0.
attach(dati)
## I seguenti oggetti sono mascherati da dati (pos = 4):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
## I seguenti oggetti sono mascherati da dati (pos = 6):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
dati$sales_cl<- cut(sales, seq(70,430,40))
ni<-table(dati$sales_cl)
fi<-ni/n
Ni<- cumsum(ni)
Fi<- Ni/n
distr_freq_cl_sales<-as.data.frame(cbind(ni, fi, Ni, Fi))
kable(distr_freq_cl_sales)
| ni | fi | Ni | Fi | |
|---|---|---|---|---|
| (70,110] | 35 | 0.1458333 | 35 | 0.1458333 |
| (110,150] | 58 | 0.2416667 | 93 | 0.3875000 |
| (150,190] | 46 | 0.1916667 | 139 | 0.5791667 |
| (190,230] | 29 | 0.1208333 | 168 | 0.7000000 |
| (230,270] | 23 | 0.0958333 | 191 | 0.7958333 |
| (270,310] | 26 | 0.1083333 | 217 | 0.9041667 |
| (310,350] | 11 | 0.0458333 | 228 | 0.9500000 |
| (350,390] | 9 | 0.0375000 | 237 | 0.9875000 |
| (390,430] | 3 | 0.0125000 | 240 | 1.0000000 |
kable(table(dati$city, dati$sales_cl))
| (70,110] | (110,150] | (150,190] | (190,230] | (230,270] | (270,310] | (310,350] | (350,390] | (390,430] | |
|---|---|---|---|---|---|---|---|---|---|
| Beaumont | 5 | 11 | 24 | 13 | 6 | 1 | 0 | 0 | 0 |
| Bryan-College Station | 6 | 13 | 14 | 6 | 4 | 10 | 2 | 3 | 2 |
| Tyler | 0 | 1 | 5 | 10 | 13 | 15 | 9 | 6 | 1 |
| Wichita Falls | 24 | 33 | 3 | 0 | 0 | 0 | 0 | 0 | 0 |
kable(table(dati$city, dati$sales_cl)/n)
| (70,110] | (110,150] | (150,190] | (190,230] | (230,270] | (270,310] | (310,350] | (350,390] | (390,430] | |
|---|---|---|---|---|---|---|---|---|---|
| Beaumont | 0.0208333 | 0.0458333 | 0.1000000 | 0.0541667 | 0.0250000 | 0.0041667 | 0.0000000 | 0.0000 | 0.0000000 |
| Bryan-College Station | 0.0250000 | 0.0541667 | 0.0583333 | 0.0250000 | 0.0166667 | 0.0416667 | 0.0083333 | 0.0125 | 0.0083333 |
| Tyler | 0.0000000 | 0.0041667 | 0.0208333 | 0.0416667 | 0.0541667 | 0.0625000 | 0.0375000 | 0.0250 | 0.0041667 |
| Wichita Falls | 0.1000000 | 0.1375000 | 0.0125000 | 0.0000000 | 0.0000000 | 0.0000000 | 0.0000000 | 0.0000 | 0.0000000 |
barplot(distr_freq_cl_sales$ni,
main = "distribuzione di frequenza delle classi di vendita",
xlab = "classi di vendita",
ylab= "frequenze assolute",
ylim = c(0, 60),
col = "blue",
names.arg = rownames(distr_freq_cl_sales),
cex.names = 0.7)
gini.index<- function(e){
ni= table(e)
fi=ni/length(e)
fi2=fi^2
J=length(table(e))
gini=1 -sum(fi2)
gini.normalizzato = gini/((J-1)/J)
return(gini.normalizzato)
}
gini.index(dati$sales_cl)
## [1] 0.9499609
kable(table(city))
| city | Freq |
|---|---|
| Beaumont | 60 |
| Bryan-College Station | 60 |
| Tyler | 60 |
| Wichita Falls | 60 |
gini.index(city)
## [1] 1
Dopo avere creeato delle classi di frequenza per la variabile sales è stato possibile analizzare la distribuzione di frequenza della stessa. La distribuzione di frequenza risulta altamente eterogenea in quanto l’indice di Gini normalizzato risulta esssere molto vicino ad 1 che è il valore massimo previsto dall’indicatore.
A conferma di quanto indicato, provando a calcolare l’indice di Gini per la variabile qualitativa “city”, che come descritto in precedenza risulta essere quadrimodale, otteniamo il valore massimo di eterogeneità 1.
length(month)/12
## [1] 20
kable(table(month))
| month | Freq |
|---|---|
| 1 | 20 |
| 2 | 20 |
| 3 | 20 |
| 4 | 20 |
| 5 | 20 |
| 6 | 20 |
| 7 | 20 |
| 8 | 20 |
| 9 | 20 |
| 10 | 20 |
| 11 | 20 |
| 12 | 20 |
prob.luglio<-20/240*100
prob.meseanno<-1/240*100
prob.Beaumont<-60/240*100
prob.luglio
## [1] 8.333333
prob.meseanno
## [1] 0.4166667
prob.Beaumont
## [1] 25
Qual è la probabilità che, presa una riga a caso di questo dataset, essa riporti la città “Beaumont”? La probabilità che presa una riga a caso essa riporti la città di “Beaumont” è del 25% (prob.Beaumont). La probabilità viene calcolata come il rapporto fra casi favorevoli e il numero di casi possibili.
E la probabilità che riporti il mese di Luglio? La probabilità che sia riportato il mese di luglio, prendendo un’osservazione a caso, è data dal rapporto fra il numero di osservazioni totali afferenti al mese di luglio e il numero totale delle osservazioni e risulta essere di 8,3%.
E la probabilità che riporti il mese di dicembre 2012? La probabilità che riporti il mese di dicembre dello 0,4%.
dati$month_year <- paste(dati$month, dati$year, sep = "/")
dati$medium_price<- (dati$volume)/(dati$sales)*1000000
dati$ad_effectiveness<- (dati$listings)/(dati$sales)
Il rapporto fra i volumi di vendita mensili e le vendite restituisce il prezzo medio di vendita mentre il rapporto fra il numero totale di annunci e le vendite effettivamente conseguite indica quanto siano efficai gli annunci.
install.packages("dplyr")
## Installazione pacchetto in 'C:/Users/Gianpiero/AppData/Local/R/win-library/4.5'
## (perché 'lib' non è specificato)
## pacchetto 'dplyr' aperto con successo con controllo somme MD5
##
## I pacchetti binari scaricati sono in
## C:\Users\Gianpiero\AppData\Local\Temp\Rtmpa2nFPO\downloaded_packages
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
dati<- read.csv("realestate_texas.csv")
kable(dati %>%
group_by(city) %>%
summarise(across(c(sales, median_price),
list(media = mean, dev.st = sd))))
| city | sales_media | sales_dev.st | median_price_media | median_price_dev.st |
|---|---|---|---|---|
| Beaumont | 177.3833 | 41.48395 | 129988.3 | 10104.993 |
| Bryan-College Station | 205.9667 | 84.98374 | 157488.3 | 8852.235 |
| Tyler | 269.7500 | 61.96380 | 141441.7 | 9336.538 |
| Wichita Falls | 116.0667 | 22.15192 | 101743.3 | 11320.034 |
install.packages("ggplot2")
## Installazione pacchetto in 'C:/Users/Gianpiero/AppData/Local/R/win-library/4.5'
## (perché 'lib' non è specificato)
## pacchetto 'ggplot2' aperto con successo con controllo somme MD5
##
## I pacchetti binari scaricati sono in
## C:\Users\Gianpiero\AppData\Local\Temp\Rtmpa2nFPO\downloaded_packages
library(ggplot2)
boxplot1 <- ggplot(data=dati)+
geom_boxplot(aes(x=city,
y=median_price),
col="black",
fill="blue")
print(boxplot1)
boxplot2 <- ggplot(data=dati)+
geom_boxplot(aes(x=city,
y=sales),
col="red",
fill="lightblue")
print(boxplot2)
In base ai valori di media e varianza calcolati rispetto alla variabile qualitativa CITY, si possono desumere le seguenti indicazioni: 1. le vendite medie più alte si riscontrano per la città di Tyler mentre il prezzo medio più alto si registra per la città di Bryan-College Station. 2. il calcolo delle deviazioni standard della variabile SALES mostra come la varianza più alta si registri per la città Bryan-College Station mentre la minima varianza si riscontra per la città Wichita Falls. 3. il calcolo delle deviazioni standard della variabile SAMEDIAN_PRICE mostra una maggiore varianza per la città di Wichita Falls e la minore varianza per la città Bryan-College Station.
Sommare le vendite per anno
library(dplyr)
sales.year.city <- dati %>%
group_by(year, city) %>%
summarise(year_sales = sum(sales))
## `summarise()` has grouped output by 'year'. You can override using the
## `.groups` argument.
df<- data.frame(sales.year.city)
library(ggplot2)
ggplot(data=df)+
geom_bar(aes(x=year,y=year_sales,fill=city),
stat ="identity")+
labs(title = "Vendite per città per anno",x = "Anno", y = "Vendite", fill = "Città")
Le vendite generali per anno segnano un trend di crescita se si esclude il 2011 in cui c’è stata una leggera flessione. A livello di città Wicihta Falls mostra una vendita con livelli costanti durante gli anni mentre le altre città in esame un aumento di vendite negli anni.
Sommare le vendite per mese
library(dplyr)
sales.month.city <- dati %>%
group_by(month, city) %>%
summarise(month_sales = sum(sales))
## `summarise()` has grouped output by 'month'. You can override using the
## `.groups` argument.
df2<- data.frame(sales.month.city)
library(ggplot2)
ggplot(data=df2)+
geom_bar(aes(x=month,y=month_sales,fill=city),
stat ="sum")+
scale_x_continuous(breaks=seq(0,12,1))+
labs(title = "Vendite per città per mese",x = "Mese", y = "Vendite", fill = "Città")
Il grafico prodotto mostra che i mesi in cui le vendite sono più alte sono i mesi da maggio ad agosto. Per la città Wichita Falls il trend Il grafico prodotto mostra che i mesi in cui le vendite sono più alte sono i mesi da maggio ad agosto. Per la città Wichita Falls il trend non sembra confermato ma le vendite si ditribuiscono in maniera costante fra durante l’anno.
attach(dati)
## I seguenti oggetti sono mascherati da dati (pos = 5):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
## I seguenti oggetti sono mascherati da dati (pos = 7):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
## I seguenti oggetti sono mascherati da dati (pos = 9):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
boxplot(dati$median_price~dati$city, col="blue")
install.packages("ggplot2")
## Warning: il pacchetto 'ggplot2' è in uso e non sarà installato
library(ggplot2)
attach(dati)
## I seguenti oggetti sono mascherati da dati (pos = 3):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
## I seguenti oggetti sono mascherati da dati (pos = 6):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
## I seguenti oggetti sono mascherati da dati (pos = 8):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
## I seguenti oggetti sono mascherati da dati (pos = 10):
##
## city, listings, median_price, month, months_inventory, sales,
## volume, year
dati$month_year <- paste(dati$month, dati$year, sep = "/")
dati$dates <- as.Date(paste0("1/", dati$month_year), format = "%d/%m/%Y")
ggplot(data=dati)+
geom_line(aes(x = dates , y = sales, group = city, color = city))+
labs(title="Numero di unità abitative vendute per città negli anni", x="Periodo di osservazione",y="Numero di Vendite", color = "Città")+
scale_x_date(date_breaks = "12 month", date_labels = "%m/%Y", expand = c(0, 0))
ggplot(dati)+
geom_line(aes(x = dates, y = median_price, group = city, color = city))+
labs(title="Prezzo medio di vendita negli anni per città in dollari", x="Periodo di osservazione",y ="Prezzo medio di vendita ($)", color = "Città")+
scale_x_date(date_breaks = "12 month", date_labels = "%m/%Y",expand = c(0, 0))+
theme(panel.background = element_rect(fill = "white", color = NA))
Il primo grafico a linee mostra come la città con il più basso livello di vendite negli anni è Wichita Falls mentre quella che registra il più alto volume di vendite, confermato nel tempo, è la città di Tyler. Si nota come la città di BC Station, abbia subito dal 06/2014 un decremento importante nelle vendite.
Il secondo grafico mostra come il livello dei prezzi medi per città sia stato quasi costante nel tempo e che risulta più alto per la città di BC-Station e più basso per la città di Wichita Falls. Dal grafico si nota come nel periodo iniziale di osservazione fosse la città di Beaumont quella con il prezzo medio più alto. Infatti dall’inizio delle osservazioni all’ultimo campione a disposizione si evince come Beaumont sia l’unica città ad aver un prezzo medio di vendita più basso rispetto all’osservazione iniziale.
In base all’analisi condotta sulle osservazioni delle variabili a disposizione, si possono dedurre le seguenti conclusioni:
La base dati è composta da 240 osservazioni, equamente distribuite per l’unica variabile qualitativa oggetto di studio “City” (60).
Il prezzo medio di vendita più basso si registra per la città di Whichita Falls mentre il prezzo più alto per la città di Bryan College Station. - il più alto livello di vendite si registra per la città di Tyler. Da notare come per la città Bryan College station si registra una variabilità superiore rispetto alle altre città in base al volume di vendita. Da questo punto di vista la variabilità più bassa si registra per Whichita Falls.
Le variabili analizzate con grafici a densità mostrano che le stesse si ditribuiscano quasi tutte come una normale standardizzata con piccole differenze di media e deviazione standard fra le variabili.
Distribuendo le vendite in classi si nota come le classi con maggiori osseervazioni sono le classi da 50 a 150 e da 150 a 250.
Se si considerano le vendite per anno per le varie città si nota che c’è stato sempre un incremento costante delle vnedite nelle varie città tranne per il 2011. La considerazione non è confermata dall’andamento delle sole vendite della città Whichita che è stato quasi costante fra i vari anni.
Analizzandole vendite per città a livello mensile si nota che i mesi in cui le vendite sonopiù alte sono i mesi di maggio, giugno, luglio e agosto. - attraverso l’utilizzo di linechart si sono analizzate le vendite e il prezzo medio negli anni per le varie città. Il grafico conferma come la variabilità delle vendite di Whichita falls è più bassa nel tempo rispetto alle altre città ed è anche la città conle vendite più basse. La crescita nel 2013 e 2014 per le città Tyler e BC Station sono più marcate.
Inoltre la città di BC Station seppur negli ultimi mesi analizzati ha vistro conrarre il numero di vendite ha i prezzi medi delle case vendute più alti rispetto alle altre città analizzate.