# IMPORT DEL CSV
texas <- read.csv("C:/Users/ce168diedifi/Desktop/Profession.AI/Corso Statistica Descrittiva/Progetto/realestate_texas.csv", sep=",", header=TRUE, encoding="UTF-8")
head(texas)
## 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
city
VARIABILE QUALITATIVA SU SCALA NOMINALE
year, month
VARIABILE QUALITATIVA SU SCALA ORDINALE
sales, median_price, listings
VARIABILE QUANTITATIVA DISCRETA
volume, month_inventory
VARIABILE QUANTITATIVA CONTINUA
year
Le variabili temporali sono molto utili per rappresentare i dati con un
grafico di tipo serie storica basata sul numero totale di venite (sales)
o il volume
Con questa variabile si potrebbe calcolare la distribuzione di frequenza per capire l’andamento annuale del numero totale di vendite (sales) e il valore totale delle vendite (volume).
month
Anche qui un grafico di tipo serie storica è utile.
Penso che un altro tipo di analisi utile potrebbe essere una distribuzione di frequenza con suddivisione in classi ( a gruppi di 3 mesi ) per capire quali il trend delle vendite nei mesi/trimestri dell’anno.
# FUNZIONI
geometric.mean <- function(dataset) {
return(exp(mean(log(dataset))))
}
armonic.mean <- function(dataset){
return(1/(sum(1/dataset)/length(dataset)))
}
coefficient.of.variation <- function(dataset){
return(sd(dataset)/mean(dataset)*100)
}
gini.index <- function(dataset){
#
ni = table(texas$sales)
fi = ni/length(texas$sales)
fi2 = fi^2
J = length(ni)
#
gini = 1-sum(fi2)
gini.norm = gini/((J-1)/J)
return(gini.norm)
}
asimmetria.di.fisher <- function(dataset){
mu <- mean(dataset)
sigma <- sd(dataset)
n <- length(dataset)
m3 <- sum((dataset-mu)^3)/n
return(m3/(sigma^3))
}
curtosi <- function(dataset){
mu <- mean(dataset)
sigma <- sd(dataset)
n <- length(dataset)
m4 <- sum((dataset-mu)^4)/n
return(m4/(sigma^4)) -3
}
# INDICI DI POSIZIONE
INDICI.DI.POSIZIONE.SALES <- data.frame(
"Media Aritmetica" = mean(texas$sales)
, "Media Ponderata" = weighted.mean(texas$volume,texas$sales)
, "Media Geometrica" = geometric.mean(texas$sales)
, "Media Armonica" = armonic.mean(texas$sales)
, "Mediana" = median(texas$sales)
, "Moda" = quantile(sort(texas$sales))[5]
, "Minimo" = quantile(sort(texas$sales))[1]
, "Massimo" = quantile(sort(texas$sales))[5]
, "Percentile (25%)" = quantile(sort(texas$sales))[2]
, "Percentile (50%)" = quantile(sort(texas$sales))[3]
, "Percentile (75%)" = quantile(sort(texas$sales))[4]
, check.names = FALSE
)
INDICI.DI.POSIZIONE.SALES
## Media Aritmetica Media Ponderata Media Geometrica Media Armonica Mediana
## 100% 192.2917 37.71024 176.8815 162.9476 175.5
## Moda Minimo Massimo Percentile (25%) Percentile (50%) Percentile (75%)
## 100% 423 79 423 127 175.5 247
# INDICI DI VARIABILITA'
INDICI.DI.VARIABILITA.SALES <- data.frame(
"Intervallo di variazione" = max(texas$sales)-min(texas$sales)
, "Differenza Interquartile" = IQR(texas$sales)
, "Varianza" = var(texas$sales)
, "Deviaizone Standard" = sd(texas$sales)
, "Coefficiente di variazione" = coefficient.of.variation(texas$sales)
, "Gini" = gini.index(texas$sales)
, check.names = FALSE
)
INDICI.DI.VARIABILITA.SALES
## Intervallo di variazione Differenza Interquartile Varianza
## 1 344 120 6344.3
## Deviaizone Standard Coefficiente di variazione Gini
## 1 79.65111 41.42203 0.998379
# INDICI DI FORMA
INDICI.DI.FORMA.SALES <- data.frame(
"Asimmetria di Fisher" = asimmetria.di.fisher(texas$sales)
, "Curtosi" = curtosi(texas$sales)
, check.names = FALSE
)
INDICI.DI.FORMA.SALES
## Asimmetria di Fisher Curtosi
## 1 0.7136206 2.66448
# INDICI DI POSIZIONE
INDICI.DI.POSIZIONE.VOLUME <- data.frame(
"Media Aritmetica" = mean(texas$volume)
, "Media Ponderata" = weighted.mean(texas$volume,texas$volume)
, "Media Geometrica" = geometric.mean(texas$volume)
, "Media Armonica" = armonic.mean(texas$volume)
, "Mediana" = median(texas$volume)
, "Moda" = quantile(sort(texas$volume))[5]
, "Minimo" = quantile(sort(texas$volume))[1]
, "Massimo" = quantile(sort(texas$volume))[5]
, "Percentile (25%)" = quantile(sort(texas$volume))[2]
, "Percentile (50%)" = quantile(sort(texas$volume))[3]
, "Percentile (75%)" = quantile(sort(texas$volume))[4]
, check.names = FALSE
)
INDICI.DI.POSIZIONE.VOLUME
## Media Aritmetica Media Ponderata Media Geometrica Media Armonica Mediana
## 100% 31.00519 39.91065 26.86046 23.18959 27.0625
## Moda Minimo Massimo Percentile (25%) Percentile (50%) Percentile (75%)
## 100% 83.547 8.166 83.547 17.6595 27.0625 40.893
# INDICI DI VARIABILITA'
INDICI.DI.VARIABILITA.VOLUME <- data.frame(
"Intervallo di variazione" = max(texas$volume)-min(texas$volume)
, "Differenza Interquartile" = IQR(texas$volume)
, "Varianza" = var(texas$volume)
, "Deviaizone Standard" = sd(texas$volume)
, "Coefficiente di variazione" = coefficient.of.variation(texas$volume)
, "Gini" = gini.index(texas$volume)
, check.names = FALSE
)
INDICI.DI.VARIABILITA.VOLUME
## Intervallo di variazione Differenza Interquartile Varianza
## 1 75.381 23.2335 277.2707
## Deviaizone Standard Coefficiente di variazione Gini
## 1 16.65145 53.70536 0.998379
# INDICI DI FORMA
INDICI.DI.FORMA.VOLUME <- data.frame(
"Asimmetria di Fisher" = asimmetria.di.fisher(texas$volume)
, "Curtosi" = curtosi(texas$volume)
, check.names = FALSE
)
INDICI.DI.FORMA.VOLUME
## Asimmetria di Fisher Curtosi
## 1 0.8792182 3.150567
# DISTRIBUZIONE DI FREQUENZA
# ---
df_year <- cut(texas$year,seq(min(texas$year),max(texas$year),1))
table(df_year)
## df_year
## (2010,2011] (2011,2012] (2012,2013] (2013,2014]
## 48 48 48 48
len <- length(df_year)
distr_freq_year <- as.data.frame(
cbind(
ni=table(df_year),
fi=table(df_year)/len,
Ni=cumsum(table(df_year)),
Fi=cumsum(table(df_year))/len
)
)
distr_freq_year
## ni fi Ni Fi
## (2010,2011] 48 0.2 48 0.2
## (2011,2012] 48 0.2 96 0.4
## (2012,2013] 48 0.2 144 0.6
## (2013,2014] 48 0.2 192 0.8
# ---
df_month <- cut(texas$month,seq(1,12,1))
table(df_month)
## df_month
## (1,2] (2,3] (3,4] (4,5] (5,6] (6,7] (7,8] (8,9] (9,10] (10,11]
## 20 20 20 20 20 20 20 20 20 20
## (11,12]
## 20
len <- length(df_month)
distr_freq_month <- as.data.frame(
cbind(
ni=table(df_month),
fi=table(df_month)/len,
Ni=cumsum(table(df_month)),
Fi=cumsum(table(df_month))/len
)
)
min(texas$month)
## [1] 1
max(texas$month)
## [1] 12
distr_freq_month
## ni fi Ni Fi
## (1,2] 20 0.08333333 20 0.08333333
## (2,3] 20 0.08333333 40 0.16666667
## (3,4] 20 0.08333333 60 0.25000000
## (4,5] 20 0.08333333 80 0.33333333
## (5,6] 20 0.08333333 100 0.41666667
## (6,7] 20 0.08333333 120 0.50000000
## (7,8] 20 0.08333333 140 0.58333333
## (8,9] 20 0.08333333 160 0.66666667
## (9,10] 20 0.08333333 180 0.75000000
## (10,11] 20 0.08333333 200 0.83333333
## (11,12] 20 0.08333333 220 0.91666667
gli indici di posizione dicono che:
la differenza tra media aritmetica e mediana suggerisce che la distribuzione dei dati potrebbe essere asimmetrica. La media ponderata molto più bassa rispetto alla media aritmetica potrebbe indicare che alcuni valori con pesi più bassi sono alti, e quelli con pesi più elevati sono piccoli. La presenza di un massimo elevato rispetto al minimo evidenzia una distribuzione con una significativa dispersione.
gli indici di variabilità dicono che:
L’intervallo di variazione e la differenza interquartile indicano che i tuoi dati sono piuttosto dispersi. La varianza e la deviazione standard confermano la presenza di una dispersione relativamente alta. Il coefficiente di variazione suggerisce che la variabilità rispetto alla media è significativa. L’indice di Gini evidenzia una fortissima concentrazione, indicando che pochi valori nel dataset sono responsabili di gran parte del volume totale, suggerendo una distribuzione altamente sbilanciata.
gli indici di forma:
Fisher misura la simmetria della distribuzione rispetto alla media. Qui abbiamo una asimmetria positiva, indica che i dati tendono a essere più concentrati verso i valori inferiori.
variabilità <- data.frame(
"sales" = coefficient.of.variation(texas$sales)
, "volume" = coefficient.of.variation(texas$volume)
, "median_price" = coefficient.of.variation(texas$median_price)
, "listings" = coefficient.of.variation(texas$listings)
, "months_inventory" = coefficient.of.variation(texas$months_inventory)
, check.names = FALSE
)
# la variabile con la variabilità + alta è il volume
variabilità
## sales volume median_price listings months_inventory
## 1 41.42203 53.70536 17.08218 43.30833 25.06031
max(variabilità)
## [1] 53.70536
# - Qual è la variabile con la distribuzione più asimmetrica
fisher <- data.frame(
"sales" = asimmetria.di.fisher(texas$sales)
, "volume" = asimmetria.di.fisher(texas$volume)
, "median_price" = asimmetria.di.fisher(texas$median_price)
, "listings" = asimmetria.di.fisher(texas$listings)
, "months_inventory" = asimmetria.di.fisher(texas$months_inventory)
, check.names = FALSE
)
# la variabile con la distribuzione più asimmetrica è il volume
fisher
## sales volume median_price listings months_inventory
## 1 0.7136206 0.8792182 -0.3622768 0.6454431 0.04071944
max(fisher)
## [1] 0.8792182
PER LA VARIABILE CON LA PIÙ ALTA VARIABILITÀ: si usa il coefficiente di variazione che serve proprio a verificare la variabilità di una variabile. E’ espressa in % che è utile per confrontare unità di misura diverse.
PER LA VARIABILE CON LA DISTRIBUZIONE PIÙ ASIMMETRICA: si usa l’indice di asimmetria di fisher perché fornisce una misura standardizzata e comparabile della distribuzione dei dati
CONSIDERAZIONI STATISTICHE
sales volume median_price listings months_inventory 0.7136206 0.8792182 -0.3622768 0.6454431 0.04071944
l’indice di fisher sul numero totale di vendite è > 0 quindi buono le vendite stanno andando bene. guardando però l’indice di fisher per il prezzo medio di vendita questo è < 0 significa che mediamente i prezzi degli immobili sono troppo bassi
# DISTRIBUZIONE DI FREQUENZA
serie <- cut(texas$volume,seq(1,100,10))
table(serie)
## serie
## (1,11] (11,21] (21,31] (31,41] (41,51] (51,61] (61,71] (71,81] (81,91]
## 12 71 56 43 24 17 12 4 1
len <- length(serie)
distr_freq <- as.data.frame(
cbind(
ni=table(serie),
fi=table(serie)/len,
Ni=cumsum(table(serie)),
Fi=cumsum(table(serie))/len
)
)
distr_freq
## ni fi Ni Fi
## (1,11] 12 0.050000000 12 0.0500000
## (11,21] 71 0.295833333 83 0.3458333
## (21,31] 56 0.233333333 139 0.5791667
## (31,41] 43 0.179166667 182 0.7583333
## (41,51] 24 0.100000000 206 0.8583333
## (51,61] 17 0.070833333 223 0.9291667
## (61,71] 12 0.050000000 235 0.9791667
## (71,81] 4 0.016666667 239 0.9958333
## (81,91] 1 0.004166667 240 1.0000000
library(ggplot2)
distr_freq$serie <- levels(serie)
# plot
ggplot(distr_freq, aes(x = serie, y = ni)) +
geom_bar(stat = "identity", fill = "skyblue") +
labs(
title = "Distribuzione di Frequenza",
x = "Intervalli di Volume",
y = "Frequenza Assoluta"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
gini <- gini.index(serie)
gini
Un indice di Gini pari a 0.998379 indica una quasi totale disuguaglianza nella distribuzione. Questo valore è molto vicino a 1, significa che il numero totale di vendite immobiliari in Texas tendono di più vs uno o + range.
Infatti osservando il grafico a barre vediamo che le vendite maggiori avvengono con immobili del valore tra i 10 e i 40 milioni di dollari.
anche nei punti precedenti è emerso che nei dati c’è un asimmetria e la variabile con la pià alta variabilità e asimmetria è proprio il volume.
probabilità <- function(dataset, val) {
nr.casi.favorevoli <- length(dataset[dataset == val])
nr.casi.possibili <- length(dataset)
return(nr.casi.favorevoli / nr.casi.possibili)
}
probabilità(texas$city,"Beaumont")
## [1] 0.25
La probabilità è pati allo 0.25 quindi 1/4 del dataset. Infatti leggendo il dataset su excel e producendo una pivot il risultato è corretto, ogni valore distinto di city compare 60 volte
probabilità(texas$month,7)
## [1] 0.08333333
La probabilità è pati allo 0.83 quindi 1/12 del dataset. Infatti leggendo il dataset su excel e producendo una pivot il risultato è corretto, ogni valore distinto di month compare 20 volte
nr.casi.favorevoli <- length(texas$year[texas$year == 2012 & texas$month == 12])
nr.casi.possibili <- length(texas$year)
probabilita.doppia <- nr.casi.favorevoli / nr.casi.possibili
probabilita.doppia
## [1] 0.01666667
La probabilità è pati allo 0.01666667 Infatti leggendo il dataset su excel e producendo una pivot il risultato è corretto. La combinazione 2012 e 12 compare 4 volte su 240 valori totali.
texas$average_price <- round((texas$volume/texas$sales)*1000,3)
head(texas)
## 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
## average_price
## 1 170.627
## 2 163.796
## 3 157.698
## 4 134.095
## 5 142.738
## 6 144.016
# % di efficacia delle vendite sul numero totale di annunci attivi
texas$effectiveness <- (texas$sales / texas$listings) * 100
min(texas$effectiveness) # 5%
## [1] 5.014025
max(texas$effectiveness) # 38%
## [1] 38.71278
head(texas)
## 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
## average_price effectiveness
## 1 170.627 5.414220
## 2 163.796 6.809584
## 3 157.698 10.775607
## 4 134.095 11.709602
## 5 142.738 11.405985
## 6 144.016 10.482529
# DISTRIBUZIONE DI FREQUENZA
serie <- cut(texas$effectiveness,seq(1,100,10))
table(serie)
## serie
## (1,11] (11,21] (21,31] (31,41] (41,51] (51,61] (61,71] (71,81] (81,91]
## 120 108 10 2 0 0 0 0 0
len <- length(serie)
distr_freq <- as.data.frame(
cbind(
ni=table(serie),
fi=table(serie)/len,
Ni=cumsum(table(serie)),
Fi=cumsum(table(serie))/len
)
)
distr_freq
## ni fi Ni Fi
## (1,11] 120 0.500000000 120 0.5000000
## (11,21] 108 0.450000000 228 0.9500000
## (21,31] 10 0.041666667 238 0.9916667
## (31,41] 2 0.008333333 240 1.0000000
## (41,51] 0 0.000000000 240 1.0000000
## (51,61] 0 0.000000000 240 1.0000000
## (61,71] 0 0.000000000 240 1.0000000
## (71,81] 0 0.000000000 240 1.0000000
## (81,91] 0 0.000000000 240 1.0000000
Osservando una distribuzione di frequenza sulla colonna “effectiveness” si nota come l’efficacia delle vendite supera a fatica il 20%. L’efficiacia sulle vendite è sicuramente un punto da migliorare.
#install.packages("dplyr")
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
# città
texas %>%
group_by(city) %>%
summarise(mean_volume = mean(volume, na.rm = TRUE)) %>%
arrange(desc(mean_volume))
## # A tibble: 4 × 2
## city mean_volume
## <chr> <dbl>
## 1 Tyler 45.8
## 2 Bryan-College Station 38.2
## 3 Beaumont 26.1
## 4 Wichita Falls 13.9
# città / anno
texas %>%
group_by(city, year) %>%
summarise(mean_volume = mean(volume, na.rm = TRUE)) %>%
arrange(city, desc(year))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
## # A tibble: 20 × 3
## # Groups: city [4]
## city year mean_volume
## <chr> <int> <dbl>
## 1 Beaumont 2014 32.1
## 2 Beaumont 2013 30.3
## 3 Beaumont 2012 24.5
## 4 Beaumont 2011 21.1
## 5 Beaumont 2010 22.7
## 6 Bryan-College Station 2014 52.8
## 7 Bryan-College Station 2013 45.1
## 8 Bryan-College Station 2012 35.4
## 9 Bryan-College Station 2011 28.9
## 10 Bryan-College Station 2010 28.7
## 11 Tyler 2014 59.6
## 12 Tyler 2013 50.3
## 13 Tyler 2012 44.0
## 14 Tyler 2011 38.6
## 15 Tyler 2010 36.3
## 16 Wichita Falls 2014 14.5
## 17 Wichita Falls 2013 14.9
## 18 Wichita Falls 2012 13.2
## 19 Wichita Falls 2011 12.1
## 20 Wichita Falls 2010 15.0
# città / anno / mese
texas %>%
group_by(city, year, month) %>%
summarise(mean_volume = mean(volume, na.rm = TRUE)) %>%
arrange(city, desc(year), desc(month))
## `summarise()` has grouped output by 'city', 'year'. You can override using the
## `.groups` argument.
## # A tibble: 240 × 4
## # Groups: city, year [20]
## city year month mean_volume
## <chr> <int> <int> <dbl>
## 1 Beaumont 2014 12 31.7
## 2 Beaumont 2014 11 24.9
## 3 Beaumont 2014 10 40.9
## 4 Beaumont 2014 9 35.3
## 5 Beaumont 2014 8 41.2
## 6 Beaumont 2014 7 34.9
## 7 Beaumont 2014 6 38.2
## 8 Beaumont 2014 5 36.7
## 9 Beaumont 2014 4 30.2
## 10 Beaumont 2014 3 26.3
## # ℹ 230 more rows
texas %>%
group_by(city) %>%
summarise(
mean_volume = mean(volume, na.rm = TRUE),
sd_volume = sd(volume, na.rm = TRUE)
) %>%
arrange(desc(mean_volume))
## # A tibble: 4 × 3
## city mean_volume sd_volume
## <chr> <dbl> <dbl>
## 1 Tyler 45.8 13.1
## 2 Bryan-College Station 38.2 17.2
## 3 Beaumont 26.1 6.97
## 4 Wichita Falls 13.9 3.24
texas %>%
group_by(city, year) %>%
summarise(
mean_volume = mean(volume, na.rm = TRUE),
sd_volume = sd(volume, na.rm = TRUE)
) %>%
arrange(city, desc(year), desc(mean_volume))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
## # A tibble: 20 × 4
## # Groups: city [4]
## city year mean_volume sd_volume
## <chr> <int> <dbl> <dbl>
## 1 Beaumont 2014 32.1 7.05
## 2 Beaumont 2013 30.3 6.44
## 3 Beaumont 2012 24.5 4.92
## 4 Beaumont 2011 21.1 4.30
## 5 Beaumont 2010 22.7 4.95
## 6 Bryan-College Station 2014 52.8 18.0
## 7 Bryan-College Station 2013 45.1 19.5
## 8 Bryan-College Station 2012 35.4 13.5
## 9 Bryan-College Station 2011 28.9 10.3
## 10 Bryan-College Station 2010 28.7 10.8
## 11 Tyler 2014 59.6 12.8
## 12 Tyler 2013 50.3 10.3
## 13 Tyler 2012 44.0 10.2
## 14 Tyler 2011 38.6 9.41
## 15 Tyler 2010 36.3 8.39
## 16 Wichita Falls 2014 14.5 3.13
## 17 Wichita Falls 2013 14.9 3.11
## 18 Wichita Falls 2012 13.2 2.66
## 19 Wichita Falls 2011 12.1 2.52
## 20 Wichita Falls 2010 15.0 4.07
#install.packages("tidyr")
library(ggplot2)
library(tidyr)
library(dplyr)
summary_city <- texas %>%
group_by(city) %>%
summarise(
mean_volume = mean(volume, na.rm = TRUE),
sd_volume = sd(volume, na.rm = TRUE)
)
summary_city_long <- summary_city %>%
pivot_longer(cols = c(mean_volume, sd_volume),
names_to = "stat_type",
values_to = "value")
ggplot(summary_city_long, aes(x = city, y = value, fill = stat_type)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Media e Deviazione Standard del Volume per Città", x = "Città", y = "Valore") +
scale_fill_manual(values = c("mean_volume" = "skyblue", "sd_volume" = "orange"), labels = c("Media", "Deviazione Standard")) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
library(ggplot2)
ggplot(texas, aes(x = city, y = median_price)) +
geom_boxplot(fill = "lightblue", color = "black") +
labs(title = "Distribuzione del Prezzo Mediano per Città", x = "Città", y = "Prezzo Mediano") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
library(ggplot2)
library(dplyr)
summary_sales <- texas %>%
group_by(city, month) %>%
summarise(total_sales = sum(sales, na.rm = TRUE))
## `summarise()` has grouped output by 'city'. You can override using the
## `.groups` argument.
ggplot(summary_sales, aes(x = factor(month), y = total_sales, fill = city)) +
geom_bar(stat = "identity", position = "dodge") + labs(title = "Totale delle Vendite per Mese e Città", x = "Mese", y = "Totale Vendite") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 0, hjust = 1))
library(ggplot2)
library(dplyr)
texas <- texas %>%
mutate(date = as.Date(paste(year, month, "01", sep = "-")))
ggplot(texas, aes(x = date, y = volume, color = city, group = city)) +
geom_line(size = 1.2) +
geom_point(size = 2) +
labs(title = "Andamento delle Vendite per Città", x = "Data", y = "Volume delle Vendite") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 0, hjust = 1))
## 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.
la tendenza emersa da questa analisi è che il numero delle vendite e il valore delle vendite tende a sbilanciarsi vs una paricolare tipologia di immobili.
La città di Wichila Falls è quella col numero di vendite nel corso degli anni più o meno stabile, mentre tutte le altre hanno avuto un buon incremento dal 2010 al 2014.
La raccomandazioni sono: 1. verificare meglio i prezzi degli immobili 2. migliorare la % di efficacia delle vendite 3. La città col margine più alto di crescita è “Wichita Falls”