getwd()
## [1] "/Users/tyler/Documents/R WORKING DIRECTORY/PROGETTO 1 PAI TEXAS"
dati <- read.csv("realestate_texas.csv", sep = ",")
dim(dati)
## [1] 240 8
head(dati)
## city year month sales volume median_price listings months_inventory
## 1 Beaumont 2010 1 83 14.162 163800 1533 9.5
## 2 Beaumont 2010 2 108 17.690 138200 1586 10.0
## 3 Beaumont 2010 3 182 28.701 122400 1689 10.6
## 4 Beaumont 2010 4 200 26.819 123200 1708 10.6
## 5 Beaumont 2010 5 202 28.833 123100 1771 10.9
## 6 Beaumont 2010 6 189 27.219 122800 1803 11.1
Il dataset contiene 240 osservazioni e 8 variabili:
str(dati)
## 'data.frame': 240 obs. of 8 variables:
## $ city : chr "Beaumont" "Beaumont" "Beaumont" "Beaumont" ...
## $ year : int 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
## $ month : int 1 2 3 4 5 6 7 8 9 10 ...
## $ sales : int 83 108 182 200 202 189 164 174 124 150 ...
## $ volume : num 14.2 17.7 28.7 26.8 28.8 ...
## $ median_price : num 163800 138200 122400 123200 123100 ...
## $ listings : int 1533 1586 1689 1708 1771 1803 1857 1830 1829 1779 ...
## $ months_inventory: num 9.5 10 10.6 10.6 10.9 11.1 11.7 11.6 11.7 11.5 ...
Le variabili sono:
• city: variabile di tipo character
• year: variabile di tipo int
• month: variabile di tipo int
• sales: variabile di tipo int
• volume: variabile di tipo num
• median_price: variabile di tipo num
• listings: variabile di tipo int
• months_inventory: variabile di tipo num
Alcune variabili devono essere riclassificate:
dati$city <- as.factor(dati$city)
dati$year <- as.factor(dati$year)
dati$month <- as.factor(dati$month)
dati$sales <- as.numeric(dati$sales)
dati$listings <- as.numeric(dati$listings)
dati$months_inventory <- as.numeric(dati$months_inventory)
Eseguo un riassunto delle variabili
summary(dati)
## city year month sales
## Beaumont :60 2010:48 1 : 20 Min. : 79.0
## Bryan-College Station:60 2011:48 2 : 20 1st Qu.:127.0
## Tyler :60 2012:48 3 : 20 Median :175.5
## Wichita Falls :60 2013:48 4 : 20 Mean :192.3
## 2014:48 5 : 20 3rd Qu.:247.0
## 6 : 20 Max. :423.0
## (Other):120
## 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
##
Il summary dei dati visualizzato in console riporta quanto segue: 1. La variabile city (variabile di tipo character, qualitativa): contiene 4 città del Texas per le quali sono state condotte le osservazioni, ogni città sembra avere una frequenza di 60.
La variabile year (variabile di tipo character, qualitativa): rappresenta l’anno dell’osservazione. Sono state fatte osservazioni per 5 anni (dal 2010 al 2014). In particolare, ci sono 48 osservazioni per ogni anno .
La variabile month (variabile di tipo character, qualitativa): rappresenta il mese dell’ossevazione. Ci sono in tutto 12 livelli che rappresentano i 12 mesi (probabilmente in ordine crescente) e per ciascun mese sono state condotte 20 osservazioni.
La variabile sales (variabile di tipo character, quantitativa): rappresenta probabilmente il numero di vendite immobiliari. Ha un minimo di 79 ed un massimo di 423. il primo quartile è 127, la mediana 175 ed il terzo quartile di 247. La media è di 192.
La variabile volume (variabile di tipo character, quantitativa): rappresenta probabilmente il volume. Ha un minimo di 8.166 ed un massimo di 83.547 il primo quartile è 17.660, la mediana 27.062 ed il terzo quartile di 40.893. La media è di 31.005.
La variabile median_price (variabile di tipo character, quantitativa): rappresenta probabilmente il prezzo mediano degli immobili venduti. Ha un minimo di 73800 ed un massimo di 180000. il primo quartile è 117300, la mediana è 134500 ed il terzo quartile di 150050. La media è di 132665.
La variabile listings (variabile di tipo character, quantitativa): rappresenta probabilmente il numero di immobili in vendita. Ha un minimo di 743 ed un massimo di 3296. il primo quartile è 1026, la mediana 1618 ed il terzo quartile di 2056. La media è di 1738.
La variabile months_inventory: rappresenta probabilmente l’inventario. Ha un minimo di 1 ed un massimo di 80. il primo quartile è 26, la mediana 37.50 ed il terzo quartile di 56.25. La media è di 39.70.
Calcolo le distribuzioni di frequenza per le variabili qualitative (city, year, month):
dim(dati)
## [1] 240 8
N=dim(dati)[1]
Dato che la funzione dim() restituisce le dimensioni del dataset e che il numero di righe totali equivale al numero di osservazioni, assegno il risultato di dim() all’oggetto N che restituisce un vettore di 2 elementi di cui io prenderò solo la prima colonna cioè 240. Quindi calcolo le distribuzioni di city, year e month. Parto da queste per avere più chiara la composizione ed il razionale del dataset.
PER LA VARIABILE CITY
table (dati["city"])
## city
## Beaumont Bryan-College Station Tyler
## 60 60 60
## Wichita Falls
## 60
freq_ass_city<-table(dati$city) #calcolo frequenze assolute
freq_rel_city<-table(dati$city)/N #calcolo relative
distr_freq_city<-cbind(freq_ass_city, freq_rel_city) #concatenare le 2 frequenze
distr_freq_city #visualizzare il tutto
## freq_ass_city freq_rel_city
## Beaumont 60 0.25
## Bryan-College Station 60 0.25
## Tyler 60 0.25
## Wichita Falls 60 0.25
distr_freq_ass_cumulate_city<-cumsum(freq_ass_city) #calcolo frequenze assolute cumulate
distr_freq_rel_cumulate_city<-distr_freq_ass_cumulate_city/N #calcolo frequenze relative cumulate
freq_city<-cbind(freq_ass_city, freq_rel_city, distr_freq_ass_cumulate_city, distr_freq_rel_cumulate_city)
freq_city #visualizzare il tutto
## freq_ass_city freq_rel_city distr_freq_ass_cumulate_city
## Beaumont 60 0.25 60
## Bryan-College Station 60 0.25 120
## Tyler 60 0.25 180
## Wichita Falls 60 0.25 240
## distr_freq_rel_cumulate_city
## Beaumont 0.25
## Bryan-College Station 0.50
## Tyler 0.75
## Wichita Falls 1.00
PER LA VARIABILE YEAR
table (dati["year"])
## year
## 2010 2011 2012 2013 2014
## 48 48 48 48 48
freq_ass_year<-table(dati$year)
freq_rel_year<-table(dati$year)/N
distr_freq_year<-cbind(freq_ass_year, freq_rel_year)
distr_freq_year
## freq_ass_year freq_rel_year
## 2010 48 0.2
## 2011 48 0.2
## 2012 48 0.2
## 2013 48 0.2
## 2014 48 0.2
distr_freq_ass_cumulate_year<-cumsum(freq_ass_year)
distr_freq_rel_cumulate_year<-distr_freq_ass_cumulate_year/N
freq_year<-cbind(freq_ass_year, freq_rel_year, distr_freq_ass_cumulate_year, distr_freq_rel_cumulate_year)
freq_year
## freq_ass_year freq_rel_year distr_freq_ass_cumulate_year
## 2010 48 0.2 48
## 2011 48 0.2 96
## 2012 48 0.2 144
## 2013 48 0.2 192
## 2014 48 0.2 240
## distr_freq_rel_cumulate_year
## 2010 0.2
## 2011 0.4
## 2012 0.6
## 2013 0.8
## 2014 1.0
PER LA VARIABILE MONTH
table (dati["month"])
## 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
freq_ass_month<-table(dati$month)
freq_rel_month<-table(dati$month)/N
distr_freq_month<-cbind(freq_ass_month, freq_rel_month)
distr_freq_month
## freq_ass_month freq_rel_month
## 1 20 0.08333333
## 2 20 0.08333333
## 3 20 0.08333333
## 4 20 0.08333333
## 5 20 0.08333333
## 6 20 0.08333333
## 7 20 0.08333333
## 8 20 0.08333333
## 9 20 0.08333333
## 10 20 0.08333333
## 11 20 0.08333333
## 12 20 0.08333333
distr_freq_ass_cumulate_month<-cumsum(freq_ass_month)
distr_freq_rel_cumulate_month<-distr_freq_ass_cumulate_month/N
freq_month<-cbind(freq_ass_month,freq_rel_month,distr_freq_ass_cumulate_month, distr_freq_rel_cumulate_month)
freq_month
## freq_ass_month freq_rel_month distr_freq_ass_cumulate_month
## 1 20 0.08333333 20
## 2 20 0.08333333 40
## 3 20 0.08333333 60
## 4 20 0.08333333 80
## 5 20 0.08333333 100
## 6 20 0.08333333 120
## 7 20 0.08333333 140
## 8 20 0.08333333 160
## 9 20 0.08333333 180
## 10 20 0.08333333 200
## 11 20 0.08333333 220
## 12 20 0.08333333 240
## distr_freq_rel_cumulate_month
## 1 0.08333333
## 2 0.16666667
## 3 0.25000000
## 4 0.33333333
## 5 0.41666667
## 6 0.50000000
## 7 0.58333333
## 8 0.66666667
## 9 0.75000000
## 10 0.83333333
## 11 0.91666667
## 12 1.00000000
Come passo successivo mi concentro sulle variabili numeriche sales, volume, median_price, listings, month inventory
min(dati$sales)
## [1] 79
max(dati$sales)
## [1] 423
mean(dati$sales)
## [1] 192.2917
median(dati$sales)
## [1] 175.5
quantile(dati$sales)
## 0% 25% 50% 75% 100%
## 79.0 127.0 175.5 247.0 423.0
Tutto ciò per tutte le variabili è possibile farlo con un summary()
summary(dati$sales)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 79.0 127.0 175.5 192.3 247.0 423.0
summary(dati$volume)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 8.166 17.660 27.062 31.005 40.893 83.547
summary(dati$median_price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 73800 117300 134500 132665 150050 180000
summary(dati$listings)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 743 1026 1618 1738 2056 3296
summary(dati$months_inventory)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.400 7.800 8.950 9.193 10.950 14.900
Indici di variabilità sales
range(dati$sales)
## [1] 79 423
IQR(dati$sales)
## [1] 120
var(dati$sales)
## [1] 6344.3
sd(dati$sales)
## [1] 79.65111
mean(dati$sales)
## [1] 192.2917
median(dati$sales)
## [1] 175.5
CV<-function(x){
return (sd (x)/mean(x) *100)
}
CV(dati$sales)
## [1] 41.42203
Indici di variabilità volume
range(dati$volume)
## [1] 8.166 83.547
IQR(dati$volume)
## [1] 23.2335
var(dati$volume)
## [1] 277.2707
sd(dati$volume)
## [1] 16.65145
mean(dati$volume)
## [1] 31.00519
median(dati$volume)
## [1] 27.0625
CV<-function(x){
return (sd (x)/mean(x) *100)
}
CV(dati$volume)
## [1] 53.70536
Indici di variabilità listings
range(dati$listings)
## [1] 743 3296
IQR(dati$listings)
## [1] 1029.5
var(dati$listings)
## [1] 566569
sd(dati$listings)
## [1] 752.7078
mean(dati$listings)
## [1] 1738.021
median(dati$listings)
## [1] 1618.5
CV<-function(x){
return (sd (x)/mean(x) *100)
}
CV(dati$listings)
## [1] 43.30833
Indici di variabilità median_price
range(dati$median_price)
## [1] 73800 180000
IQR(dati$median_price)
## [1] 32750
var(dati$median_price)
## [1] 513572983
sd(dati$median_price)
## [1] 22662.15
mean(dati$median_price)
## [1] 132665.4
median(dati$median_price)
## [1] 134500
CV<-function(x){
return (sd (x)/mean(x) *100)
}
CV(dati$median_price)
## [1] 17.08218
Indici di variabilità months_inventory
range(dati$months_inventory)
## [1] 3.4 14.9
IQR(dati$months_inventory)
## [1] 3.15
var(dati$months_inventory)
## [1] 5.306889
sd(dati$months_inventory)
## [1] 2.303669
mean(dati$months_inventory)
## [1] 9.1925
median(dati$months_inventory)
## [1] 8.95
CV<-function(x){
return (sd (x)/mean(x) *100)
}
CV(dati$months_inventory)
## [1] 25.06031
provo a farlo con una funzione che calcola l’indice
indici_variabilita <- function(x) {
data.frame(
Range = range(x, na.rm = TRUE),
IQR = IQR(x, na.rm = TRUE),
Varianza = var(x, na.rm = TRUE),
Deviazione_Std = sd(x, na.rm = TRUE),
Media = mean(x, na.rm = TRUE),
Mediana = median(x, na.rm = TRUE),
CV = (sd(x, na.rm = TRUE) / mean(x, na.rm = TRUE)) * 100
)
}
indici_variabilita(dati$sales)
## Range IQR Varianza Deviazione_Std Media Mediana CV
## 1 79 120 6344.3 79.65111 192.2917 175.5 41.42203
## 2 423 120 6344.3 79.65111 192.2917 175.5 41.42203
indici_variabilita(dati$volume)
## Range IQR Varianza Deviazione_Std Media Mediana CV
## 1 8.166 23.2335 277.2707 16.65145 31.00519 27.0625 53.70536
## 2 83.547 23.2335 277.2707 16.65145 31.00519 27.0625 53.70536
indici_variabilita(dati$months_inventory)
## Range IQR Varianza Deviazione_Std Media Mediana CV
## 1 3.4 3.15 5.306889 2.303669 9.1925 8.95 25.06031
## 2 14.9 3.15 5.306889 2.303669 9.1925 8.95 25.06031
indici_variabilita(dati$listings)
## Range IQR Varianza Deviazione_Std Media Mediana CV
## 1 743 1029.5 566569 752.7078 1738.021 1618.5 43.30833
## 2 3296 1029.5 566569 752.7078 1738.021 1618.5 43.30833
indici_variabilita(dati$median_price)
## Range IQR Varianza Deviazione_Std Media Mediana CV
## 1 73800 32750 513572983 22662.15 132665.4 134500 17.08218
## 2 180000 32750 513572983 22662.15 132665.4 134500 17.08218
la variabile con indice di variabilità più elevato è “volume”.
Ho provato anche a fare una tabella generale utilizzando una funzione: è corretta come impostazione di codice?
varsum<-function(x){
min = min (x)
First_qu = quantile(x, 0.25, names=F)
median = median(x)
mean = round(mean(x),1)
Third_qu=quantile(x, 0.75, names=F)
max = max (x)
IQR=IQR(x)
var=var(x)
sd=round(sd(dati$sales),1)
cv=round(sd (x)/mean(x) *100 ,1)
var=round(var(x))
sd=round(sd(x))
unito=cbind(min, First_qu, median, mean, Third_qu,
max,IQR, sd, var, cv)
return(t(unito))
}
varsum_sales<-varsum(dati$sales)
varsum_volume<-varsum(dati$volume)
varsum_median_price<-varsum(dati$median_price)
varsum_listings<-varsum(dati$listings)
varsum_months_inventory<-varsum(dati$months_inventory)
varsum_tot<- as.data.frame(cbind(varsum_sales, varsum_volume, varsum_median_price,
varsum_listings, varsum_months_inventory))
colnames(varsum_tot) <- c("Sales", "Volume", "Median_Price", "Listings", "Months_Inventory")
write.csv(varsum_tot, "summary di tutte le variabili.csv", row.names = T)
Creo anche il boxplot che metta in mostra le sue caratteristiche con una funzione
indici_variabilita_boxplot <- function(x) {
boxplot(x)
abline(h=quantile(x), col=3)
abline(h=quantile(x,0.75)+1.5*IQR(x), col=3)
}
indici_variabilita_boxplot(dati$sales) #per la variabile sales
indici_variabilita_boxplot(dati$volume) #per la variabile volume
indici_variabilita_boxplot(dati$months_inventory) #per la variabile months inventory
indici_variabilita_boxplot(dati$listings) #per la variabile listings
indici_variabilita_boxplot(dati$median_price) #per la variabile median price
Indici di forma delle VARIABILI QUANTITATIVE
#install.packages ("moments")
library (moments)
indici_forma <- function(x) {
data.frame(skewness = skewness (x, na.rm=TRUE),
kurtosis = kurtosis (x, na.rm=TRUE) -3)
}
indici_forma(dati$sales)
## skewness kurtosis
## 1 0.718104 -0.3131764
indici_forma(dati$volume)
## skewness kurtosis
## 1 0.884742 0.176987
indici_forma(dati$months_inventory)
## skewness kurtosis
## 1 0.04097527 -0.1744475
indici_forma(dati$listings)
## skewness kurtosis
## 1 0.6494982 -0.79179
indici_forma(dati$median_price)
## skewness kurtosis
## 1 -0.3645529 -0.6229618
la variabile più asimmetrica è volume con un valore di skewness di 0.88
plot(density(dati$volume))
Suddivisione di una variabile quantitativa in classi: 1. Valutare il range della variabile volume
min (dati$sales)
## [1] 79
max (dati$sales)
## [1] 423
Osservo il range in cui è compresa la variabile volume: [79-423]. Quindi potrebbe essere ragionevole costruire delle classi che spaziano da 79 a 200 e da 200 ad 423. Creo le classi:
dati$sales_class <- cut (dati$sales,
breaks=c(78, 200,423),
labels=c("low", "high"))
summary(dati$sales_class)
## low high
## 149 91
Ho così creato una nuova colonna che rappresenta una variabile qualitativa (di tipo factor). Costruisco adesso la distribuzione di frequenze come ho fatto per le variabili precedenti.
table (dati["sales_class"])
## sales_class
## low high
## 149 91
freq_ass_sales_class<-table(dati$sales_class)
freq_rel_sales_class<-table(dati$sales_class)/N
distr_freq_sales_class<-cbind(freq_ass_sales_class, freq_rel_sales_class)
distr_freq_sales_class
## freq_ass_sales_class freq_rel_sales_class
## low 149 0.6208333
## high 91 0.3791667
distr_freq_ass_cumulate_sales_class<-cumsum(freq_ass_sales_class)
distr_freq_rel_cumulate_sales_class<-distr_freq_ass_cumulate_sales_class/N
freq_sales_class<-cbind(freq_ass_sales_class, freq_rel_sales_class, distr_freq_ass_cumulate_sales_class, distr_freq_rel_cumulate_sales_class)
freq_sales_class
## freq_ass_sales_class freq_rel_sales_class
## low 149 0.6208333
## high 91 0.3791667
## distr_freq_ass_cumulate_sales_class distr_freq_rel_cumulate_sales_class
## low 149 0.6208333
## high 240 1.0000000
Giusto per fare una tabella esportabile: fa schifo ma è solo per esercitarmi (ho trasposto però righe e colonne perchè avevano lunghezza variabile)
freq_city_t <- as.data.frame(t(freq_city))
freq_year_t <- as.data.frame(t(freq_year))
freq_month_t <- as.data.frame(t(freq_month))
freq_sales_class_t <- as.data.frame(t(freq_sales_class))
distribuzioni<- as.data.frame(cbind(freq_city_t, freq_year_t, freq_month_t, freq_sales_class_t))
write.csv(distribuzioni, "distribuzione di frequenza di tutte le variabili.csv")
Grafico a barre nuova variabile sales_class delle variabili assolute
barplot(freq_ass_sales_class,
main = "frequenze assolute sales class",
xlab = "classi",
ylab = "frequenza assoluta",
ylim = c(0,250),
col = c(3,4))
barplot(freq_rel_sales_class,
main = "frequenze relative sales class",
xlab = "classi",
ylab = "frequenza assoluta",
ylim = c(0,1),
col = c(2,7))
Calcolo indice di Gini nuova variabile sales_class
1.fatto con la formula
gini.index<-function(x){
ni=table(x)
fi=ni/length(x)
fi2=fi^2
J=length(table(x))
gini=1-sum(fi2)
gini.normalizzato1=gini/((J-1)/J)
return(gini.normalizzato1)
}
gini.index(dati$sales_class)
## [1] 0.9415972
Fatto solo per la variabile di interesse
fi_2=freq_rel_sales_class^2
gini= 1-sum (fi_2)
gini.normalizzato=gini/((2-1)/2)
gini.normalizzato
## [1] 0.9415972
gini.index(dati$city)
## [1] 1
Indice di Gini della variabile city = 1
Qual è la probabilità che presa una riga a caso di questo dataset essa riporti la città “Beaumont”? E la probabilità che riporti il mese di Luglio? E la probabilità che riporti il mese di dicembre 2012?
Probabilità che presa una riga a caso dal dataset riporta la probabilità che riporti la città Beaumont: righe del dataset che hanno la dicitura Beaumont/Righe totali del dataset.
freq_ass_city
##
## Beaumont Bryan-College Station Tyler
## 60 60 60
## Wichita Falls
## 60
#per la città di Beaumont la probabilità è data dai casi favorevoli/casi totali
# Funzione per calcolare la probabilità di "Beaumont"
calcola_probabilita_beaumont <- function(dati) {
numero_Beaumont <- sum(dati == "Beaumont")
numero_totale <- nrow(dati)
probabilita_Beaumont <- numero_Beaumont / numero_totale
return(probabilita_Beaumont)
}
probabilita <- calcola_probabilita_beaumont(dati)
print(probabilita)
## [1] 0.25
60/240
## [1] 0.25
probabilità Mese di Luglio
calcola_probabilita_beaumont <- function(dati) {
numero_Beaumont <- sum(dati[,3] == "7")
numero_totale <- nrow(dati)
probabilita_Beaumont <- numero_Beaumont / numero_totale
return(probabilita_Beaumont)
}
probabilita <- calcola_probabilita_beaumont(dati)
print(probabilita)
## [1] 0.08333333
5*4
## [1] 20
20/240
## [1] 0.08333333
Probabilità dicembre 2012
calcola_probabilita_dic_2012 <- function(dati) {
numero_dic_2012 <- sum(dati[,2] == "2012" & dati[,3] == "7")
numero_totale <- nrow(dati)
probabilita_dic_2012 <- numero_dic_2012 / numero_totale
return(probabilita_dic_2012)
}
probabilita <- calcola_probabilita_dic_2012(dati)
print(probabilita)
## [1] 0.01666667
4/240
## [1] 0.01666667
Esiste una colonna col prezzo mediano, creane una che indica invece il prezzo medio, utilizzando le altre variabili che hai a disposizione.
Si può calcolare il prezzo medio di vendita per ogni mese dividendo volume/vendite: quindi la nuova colonna dovrà contenere questo rapporto:
dati$mean_price <- dati$volume/dati$sales
I valori sono piccoli perché probabilmente il volume andrebbe calcolato in 1000 dollari, quindi basterà aggiungere nella stringa precedente un *1000
dati$mean_price <- dati$volume/dati$sales*1000
summary(dati$mean_price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 97.01 132.94 156.59 154.32 173.92 213.23
Prova a creare un’altra colonna che dia un’idea di “efficacia” degli annunci di vendita.
L’efficacia degli annunci la si può valutare attraverso una nuova colonna che sia effettivamente rappresentativa degli annunci. Ho pensato che un raggruppamento degli annunci in classi di qualitative potrebbe dare l’idea dell’efficacia di questa variabile se relazionata ad altre variabili. Mi costruisco anche il barplot per capire la relazione tra le variabili di interesse.
dati$listings_class <- cut (dati$listings,
breaks=c(742, 1100, 2000, 3296),
labels=c("low", "medium", "high"))
library(ggplot2)
ggplot(dati,
aes(y=sales,
x=city))+
geom_col()+
facet_grid(.~listings_class)+
theme_classic()
ggplot(dati,
aes(y=sales,
x=city,
fill=year))+
geom_col()+
facet_grid(.~listings_class)+
theme_classic()
Creando una nuova colonna raggruppando in un range la variabile “listings” cioè gli annunci attivi in 3 categorie di range “low”, “medium” e “high” quello che balza subito all’occhio osservando il rapporto di questa nuova categoria con la variabile “sales” e “city”, è che: - La città di Wichita Falls ha il numero di annunci attivi più basso (o meglio compreso tra i 700 e 1100) rispetto alle altre città e allo stesso tempo ha avuto un numero di vendite minore (tra le 500 e 1000). - Benché, Bryan College abbia anch’esso un certo numero di annunci attivi basso, la maggior parte degli annunci attivi ricade nel range “medium” (tra 1100 e 2000), assieme a Beaumont (che ha un numero di annunci attivi tra i 1100 e 2000) sono le città che hanno avuto un numero di vendite tra le 10000 e le 15000. - Infine, la l’unica città con più annunci attivi è Tyler che rientra nella fascia di annunci attivi “high” (tra 2000 e 3300) e allo stesso tempo è l’unica città ad aver avuto un numero di vendite maggiore che supera le 15000. Sulla base di queste osservazioni è possibile speculare che il numero di annunci attivi basso avere una relazione (positiva) con il numero di vendite.
Si può anche esplorare come mai Bryan College ha un numero di annunci attivi low. Se esploro per la variabile year, noto che in realtà Bryan College, per qualche motivo, ha avuto un numero di annunci attivi “low” quasi esclusivamente nel 2014.
ggplot(dati,
aes(y=sales,
x=city,
fill=year))+
geom_col()+
facet_grid(.~listings_class)+
theme_classic()
Prova a creare dei summary(), o semplicemente media e deviazione standard, di alcune variabili a tua scelta, condizionatamente alla città, agli anni e ai mesi.
A questo punto creo dei summary, di alcune variabili come sales e volume condizionatamente alla città, agli anni e ai mesi. Con il pacchetto dplyr unito alla creazione di una funzione.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
summary_city<-function(x) {dati %>%
group_by(dati$city) %>%
summarize(mean=mean(x),
sd=sd(x),
skewness=skewness(x))
}
summary_city(dati$sales)
## # A tibble: 4 × 4
## `dati$city` mean sd skewness
## <fct> <dbl> <dbl> <dbl>
## 1 Beaumont 192. 79.7 0.718
## 2 Bryan-College Station 192. 79.7 0.718
## 3 Tyler 192. 79.7 0.718
## 4 Wichita Falls 192. 79.7 0.718
#Per anno
summary_year<-function(x) {dati %>%
group_by(dati$year) %>%
summarize(mean=mean(x),
sd=sd(x),
skewness=skewness(x))
}
summary_year(dati$sales)
## # A tibble: 5 × 4
## `dati$year` mean sd skewness
## <fct> <dbl> <dbl> <dbl>
## 1 2010 192. 79.7 0.718
## 2 2011 192. 79.7 0.718
## 3 2012 192. 79.7 0.718
## 4 2013 192. 79.7 0.718
## 5 2014 192. 79.7 0.718
#Per mese
summary_month<-function(x) {dati %>%
group_by(dati$year) %>%
summarize(mean=mean(x),
sd=sd(x),
skewness=skewness(x))
}
summary_month(dati$sales)
## # A tibble: 5 × 4
## `dati$year` mean sd skewness
## <fct> <dbl> <dbl> <dbl>
## 1 2010 192. 79.7 0.718
## 2 2011 192. 79.7 0.718
## 3 2012 192. 79.7 0.718
## 4 2013 192. 79.7 0.718
## 5 2014 192. 79.7 0.718
Utilizza i boxplot per confrontare la distribuzione del prezzo mediano delle case tra le varie città. Commenta il risultato.
Utilizza i boxplot per confrontare la distribuzione del valore totale delle vendite tra le varie città ma anche tra i vari anni. Qualche considerazione da fare?
library(ggplot2)
Boxplot per confrontare la distribuzione del valore totale delle vendite tra le varie città ma anche tra i vari anni
ggplot(dati, aes(x = city, y = median_price)) +
geom_boxplot(fill = "lightblue", color = "darkblue") +
labs(title = "Distribuzione del prezzo mediano delle Vendite per Città", x = "Città", y = "Prezzo mediano") +
theme_minimal()
ggplot(dati, aes(x = city, y = sales)) +
geom_boxplot(fill = "lightblue", color = "darkblue") +
labs(title = "Distribuzione del Valore Totale delle Vendite per Città", x = "Città", y = "Valore Totale delle Vendite") +
theme_minimal()
ggplot(dati, aes(x = year, y = sales)) +
geom_boxplot(fill = "lightblue", color = "darkblue") +
labs(title = "Distribuzione del Valore Totale delle Vendite per anno", x = "anno", y = "Valore Totale delle Vendite") +
theme_minimal()
Per quanto riguarda il prezzo mediano tra le varie città, dal boxplot si può stimare che la città di Bryan-College Station ha un prezzo mediano più alto rispetto alle altre, mentre la città di Wichita Falls ha un prezzo mediano più basso. Le città di Beaumont e Tyler hanno un prezzo simile, più alto di Wichita Falls ma più basso di Bryan-College Station.
Dai boxplot per città e per anno si intuisce che le città di Beaumont e Wichita Falls sono quelle che hanno avuto una vendita mediana più bassa. Tuttavia è anche apprezzabile che la città di Bryan-College Station, nonostante abbia una mediana molto simile alla città di Beaumont, essa ha un range di vendite massimo molto più alto. Per quanto riguarda il periodo temporale che va dal 2010 al 2014, dal boxplot è possibile speculare che Il 2014 è stato complessivamente l’anno in cui si sono registrate più vendite seguito dal 2013, 2012 e 2010. L’anno 2011 è stato invece l’anno che ha registrato meno vendite complessivamente.
Usa un grafico a barre sovrapposte per confrontare il totale delle vendite nei vari mesi, sempre considerando le città.
ggplot(dati,
aes(y=sales,
x=month,
fill=city))+
geom_col()+
theme_classic()
ggplot(dati,
aes(y=sales,
x=year,
fill=month))+
geom_col(col="grey")+
facet_grid(.~city)+
theme_classic()
ggplot(dati)+
geom_bar(aes(x=year,
fill=month),
position="fill",
stat="count",
col="black")+
scale_y_continuous(breaks = seq(0, 1, 0.1))+
facet_grid(.~city)+
theme_classic()
Con i barplot si intuisce che l’incremento di vendite nella città di Tyler e Bryan-College Station si è avuto maggiormente nel 2014. Inoltre se nelle prime 3 città si è avuto un incremento maggiore negli ultimi 2 anni, Wichita Falls non ha registrato incrementi con il passare degli anni. Nel grafico a barre sovrapposte si vede come Beaumont e Wichita Falls hanno avuto vendite costanti nei mesi mentre le altre 2 città hanno avuto maggiori vendite nei mesi centrali (Maggio-Settembre).
N.B. Non sono riuscito benissimo ad eseguire il grafico normalizzato. Non ho capito esattamente come eseguirlo e a cosa serve. Potresti aiutarmi a capirlo?
Prova a creare un line chart di una variabile a tua scelta per fare confronti commentati fra città e periodi storici.
beaumont_data <- dati[dati$city == "Beaumont", ]
beaumont_data$date <- seq.Date(from = as.Date("2010-01-01"),
to = as.Date("2014-12-01"),
by = "month")
beaumont_final <- beaumont_data[, c("city", "date", "sales")]
Bryan_data <- dati[dati$city == "Bryan-College Station", ]
Bryan_data$date <- seq.Date(from = as.Date("2010-01-01"),
to = as.Date("2014-12-01"),
by = "month")
Bryan_final <- Bryan_data[, c("city", "date", "sales")]
Tyler_data <- dati[dati$city == "Tyler", ]
Tyler_data$date <- seq.Date(from = as.Date("2010-01-01"),
to = as.Date("2014-12-01"),
by = "month")
Tyler_final <- Tyler_data[, c("city", "date", "sales")]
Wichita_data <- dati[dati$city == "Wichita Falls", ]
Wichita_data$date <- seq.Date(from = as.Date("2010-01-01"),
to = as.Date("2014-12-01"),
by = "month")
Wichita_final <- Wichita_data[, c("city", "date", "sales")]
Il passo successivo è quello di graficare le serie temporali di ciascuna città separatamente:
library(ggplot2)
ggplot(data = beaumont_final)+
#geom_col (aes (x=date, y=sales))
geom_line (aes (x=date, y=sales), col="red",lwd=1)
ggplot(data = Bryan_final)+
#geom_col (aes (x=date, y=sales))
geom_line (aes (x=date, y=sales), col="red",lwd=1)
ggplot(data = Tyler_final)+
#geom_col (aes (x=date, y=sales))
geom_line (aes (x=date, y=sales), col="red",lwd=1)
ggplot(data = Wichita_final)+
#geom_col (aes (x=date, y=sales))
geom_line (aes (x=date, y=sales), col="red",lwd=1)
Infine, per mettere insieme nello stesso grafico città e periodo storico mi sono ucciso letteralmente!!!
beaumont_final$city <- "Beaumont"
Bryan_final$city <- "Bryan"
Tyler_final$city <- "Tyler"
Wichita_final$city <- "Wichita"
Ho unito tutti i dataset per riga
combined_data <- rbind(beaumont_final, Bryan_final, Tyler_final, Wichita_final)
summary(combined_data)
## city date sales
## Length:240 Min. :2010-01-01 Min. : 79.0
## Class :character 1st Qu.:2011-03-24 1st Qu.:127.0
## Mode :character Median :2012-06-16 Median :175.5
## Mean :2012-06-16 Mean :192.3
## 3rd Qu.:2013-09-08 3rd Qu.:247.0
## Max. :2014-12-01 Max. :423.0
Concludo con il grafico finale per confrontarli
ggplot(combined_data,
aes(x=date, y=sales, col=city))+
geom_line() + geom_point()
oppure con le rette di tendenza
ggplot(combined_data,
aes(x=date, y=sales, col=city))+
geom_line(lty=2) + geom_smooth(se=F)
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Sulla base di quest’ultimo grafico posso dire che la città di tyler, oltre ad essere quella che ha venduto di più è stata anche quella, assieme a Beaumont ad avere una crescita di vendite nel tempo. Anche la città Bryan ha avuto una crescita analoga a quella di Braumont, tuttavia sembra che da fine 2013 sia andata in contro ad un plateau. La città di Wichita invece non solo non ha avuto in 5 anni una crescita nelle vendite, ma si assiste addirittura ad una riduzione generale, accentuata tra il 2011 e metà 2012 e a fine 2014. Ho preso questi ultimi codici da un libro di analisi grafica R “Data visualization in R.