tx <- read.csv(“/Users/filomena/Desktop/1 esercizio con r/Texax.csv”)
str(tx) # Controlla la struttura del dataset
names(tx) # Visualizza i nomi delle colonne
#city:categorica nominale.
#median_price :variabile quantitativa continua=> posso calcolare:#Media/ Mediana/Moda
#volume: variabile quantitativa continua => assumono valore infinito,ci aiutano a comprednere la distribuzione, la variabilità
#listings:variabile quantitativa discreta
#punto 2.1 indice di posizione
calcola_indici <- function(x) { media <- mean(x, na.rm = TRUE) mediana <- median(x, na.rm = TRUE) moda <- as.numeric(names(sort(table(x), decreasing = TRUE)[1])) # Calcolo della moda return(list(media = media, mediana = mediana, moda = moda)) }
variabili_numeriche <- c(“sales”, “volume”, “median_price”, “listings”)
risultati_indici <- list()
for (var in variabili_numeriche) { risultati_indici[[var]] <- calcola_indici(tx[[var]]) }
print(risultati_indici)
cat(“Commento sulla scelta delle statistiche:”) cat(“1. Media: La media è utile per avere un’idea generale del valore centrale di un dataset. Tuttavia, può essere influenzata da valori estremi (outliers).”) cat(“2. Mediana: La mediana rappresenta il valore centrale che divide il dataset in due parti uguali, rendendola più robusta rispetto agli outliers. È particolarmente utile quando i dati non seguono una distribuzione normale.”) cat(“3. Moda: La moda indica il valore più frequente in un dataset. È importante in contesti dove è utile sapere quali valori sono più comuni, come nel caso di vendite o prezzi.”) cat(“Ho scelto di calcolare solo queste tre statistiche per ottenere una comprensione rapida e chiara della distribuzione dei dati, in particolare nei contesti delle vendite e dei prezzi, dove il valore centrale e la frequenza dei dati possono fornire informazioni preziose per l’analisi delle tendenze.”)
#punto 2.2 indice di variabiltà
calcola_variabilita <- function(x) { dev_standard <- sd(x, na.rm = TRUE) # Calcolo della deviazione standard varianza <- var(x, na.rm = TRUE) # Calcolo della varianza return(list(dev_standard = dev_standard, varianza = varianza)) }
variabili_numeriche <- c(“sales”, “volume”, “median_price”, “listings”)
risultati_variabilita <- list()
for (var in variabili_numeriche) { risultati_variabilita[[var]] <- calcola_variabilita(tx[[var]]) }
print(risultati_variabilita)
cat(“Commento sulla scelta delle variabili:”) cat(“Ho scelto di calcolare gli indici di variabilità per le seguenti variabili:”) cat(“1. Sales: Questo dato rappresenta il numero di vendite effettuate e ci aiuta a comprendere quanto le vendite possono variare nel tempo. Un’alta variabilità nelle vendite può indicare fluttuazioni stagionali o influenze di mercato.”) cat(“2. Volume: Rappresenta il volume totale delle vendite e la sua variabilità è importante per analizzare l’andamento del mercato. Un volume molto variabile può segnalare cambiamenti significativi nella domanda o nell’offerta.”) cat(“3. Median Price: Indica il prezzo mediano delle proprietà e la sua variabilità è cruciale per comprendere l’andamento del mercato immobiliare. Prezzi variabili possono riflettere cambiamenti nel valore delle proprietà in diverse aree.”) cat(“4. Listings: Rappresenta il numero di annunci di vendita e la sua variabilità è importante per capire la disponibilità delle proprietà. Una grande variabilità può indicare condizioni di mercato dinamiche, come un eccesso o una scarsità di offerta.”) cat(“Queste variabili sono state selezionate perché forniscono una panoramica delle dinamiche di vendita e del mercato immobiliare, e la loro variabilità offre informazioni preziose per prendere decisioni informate.”)
#puto 2.3 forma
calcola_forma <- function(x) { n <- sum(!is.na(x)) # Conta solo i valori non NA media <- mean(x, na.rm = TRUE) dev_standard <- sd(x, na.rm = TRUE)
# Calcolo della curtosi curtosi <- (n * (n + 1) / ((n - 1) * (n - 2) * (n - 3))) * sum(((x - media) / dev_standard)^4, na.rm = TRUE) - (3 * (n - 1)^2) / ((n - 2) * (n - 3))
# Calcolo dell’asimmetria asimmetria <- (n / ((n - 1) * (n - 2))) * sum(((x - media) / dev_standard)^3, na.rm = TRUE)
return(list(curtosi = curtosi, asimmetria = asimmetria)) }
variabili_numeriche <- c(“sales”, “volume”, “median_price”, “listings”)
risultati_forma <- list()
for (var in variabili_numeriche) { risultati_forma[[var]] <- calcola_forma(tx[[var]]) }
print(risultati_forma)
cat(“Commento sulla scelta delle variabili:”) cat(“Ho scelto di calcolare curtosi e asimmetria per analizzare la forma della distribuzione delle seguenti variabili:”) cat(“1. Sales: Importante per identificare picchi e fluttuazioni nelle vendite.”) cat(“2. Volume: Rilevante per capire l’attività di mercato.”) cat(“3. Median Price: Essenziale per comprendere le dinamiche dei prezzi immobiliari.”) cat(“4. Listings: Utile per analizzare la disponibilità di proprietà nel mercato.”)
#punto 3.4 distribuzioni di frequenze
calcola_frequenza <- function(x, breaks) { freq_table <- table(cut(x, breaks, include.lowest = TRUE)) # Tabella di frequenza return(freq_table) }
breaks_sales <- seq(0, max(tx\(sales, na.rm = TRUE), by = 50) breaks_volume <- seq(0, max(tx\)volume, na.rm = TRUE), by = 5) breaks_median_price <- seq(0, max(tx\(median_price, na.rm = TRUE), by = 10000) breaks_listings <- seq(0, max(tx\)listings, na.rm = TRUE), by = 100)
frequenze <- list( Sales = calcola_frequenza(tx\(sales, breaks_sales), Volume = calcola_frequenza(tx\)volume, breaks_volume), Median_Price = calcola_frequenza(tx\(median_price, breaks_median_price), Listings = calcola_frequenza(tx\)listings, breaks_listings) )
print(frequenze)
variabilita <- sapply(variabili_numeriche, function(var) sd(tx[[var]], na.rm = TRUE))
variabile_magg_variabilita <- variabili_numeriche[which.max(variabilita)] variabile_magg_variabilita
#creare classi per una variabile quantitativa : prendiamo sales :)
breaks_sales <- seq(0, max(tx$sales, na.rm = TRUE) + 50, by = 50) # Aggiungi un margine al massimo
hist(tx$sales, breaks = breaks_sales, main = “Distribuzione di Frequenza di Sales”, xlab = “Numero di Vendite”, ylab = “Frequenza”, col = “blue”, border = “yellow”)
#3. Rappresentazione Grafica della Distribuzione di “sales”
hist(tx$sales, breaks = breaks_sales, main = “Distribuzione di Frequenza di Sales”, xlab = “Numero di Vendite”, ylab = “Frequenza”, col = “blue”, border = “yellow”)
#Calcolo dell’Indice di Gini per “sales”
calcola_gini <- function(x) { # Rimuovi i valori NA x <- x[!is.na(x)]
# Ordina i valori x <- sort(x)
# Calcola la lunghezza di x n <- length(x)
# Se la lunghezza di x è minore di 2, l’indice di Gini non ha senso if (n < 2) return(NA)
# Calcola il numeratore e il denominatore dell’indice di Gini numeratore <- 2 * sum((1:n) * x) denominatore <- n * sum(x)
# Indice di Gini gini <- (numeratore / denominatore) - (n + 1) / n
return(gini) }
#ok
#calcolo della probabilità
#città “Beaumont
n_totale <- nrow(tx)
n_beaumont <- sum(tx$city == “Beaumont”, na.rm = TRUE)
p_beaumont <- n_beaumont / n_totale
cat(“La probabilità che una riga a caso riporti la città Beaumont è:”, p_beaumont, “”)
#mese di luglio
n_luglio <- sum(tx$month == 7, na.rm = TRUE)
p_luglio <- n_luglio / n_totale
cat(“La probabilità che una riga a caso riporti il mese di luglio è:”, p_luglio, “”)
#dicembre del 2012
n_dicembre_2012 <- sum(tx\(month == 12 & tx\)year == 2012, na.rm = TRUE)
p_dicembre_2012 <- n_dicembre_2012 / n_totale
p_dicembre_2012
#ok
#creazioni delle variabili # Evitiamo la divisione per zero tx\(prezzo_medio <- ifelse(tx\)sales > 0, tx\(volume / tx\)sales, NA)
head(tx[, c(“volume”, “sales”, “prezzo_medio”)])
tx\(efficacia_annunci <- ifelse(tx\)listings > 0, (tx\(sales / tx\)listings) * 100, NA)
head(tx[, c(“sales”, “listings”, “efficacia_annunci”)])
#Interpretazioneosservo che: il prezzo medio varia in base al volume e al numero di vendite.Se il prezzo medio è in calo mentre il volume delle vendite aumenta, potrebbe indicare una strategia di prezzo aggressiva per stimolare le vendite.
#Interpretazione:L’efficacia degli annunci fornisce un’indicazione di quanto ogni annuncio stia contribuendo alle vendite. Valori più alti indicano che ci sono più vendite per ogni annuncio, suggerendo una maggiore efficacia.
#in buona sostanza : L’analisi del prezzo medio degli immobili e dell’efficacia degli annunci offre importanti informazioni sul mercato immobiliare. Queste variabili aiutano a comprendere l’impatto delle strategie di vendita e dei prezzi, fornendo indicazioni utili per ottimizzare le decisioni strategiche e migliorare le performance di vendita.
#7 analisi condizionata install.packages(“dplyr”) library(dplyr)
summary_stats <- tx %>% group_by(city, year, month) %>% summarise( mean_sales = mean(sales, na.rm = TRUE), sd_sales = sd(sales, na.rm = TRUE), mean_volume = mean(volume, na.rm = TRUE), sd_volume = sd(volume, na.rm = TRUE) )
#visualizzo i grafici
install.packages(“ggplot2”) library(ggplot2)
ggplot(summary_stats, aes(x = city, y = mean_sales, fill = city)) + geom_bar(stat = “identity”) + labs(title = “Media delle Vendite per Città”, x = “Città”, y = “Media delle Vendite”) + theme_minimal()
library(ggplot2)
ggplot(summary_stats, aes(x = city, y = mean_sales, fill = city)) + geom_bar(stat = “identity”, position = “dodge”, width = 0.7) + geom_errorbar(aes(ymin = mean_sales - sd_sales, ymax = mean_sales + sd_sales), width = 0.2, position = position_dodge(0.7)) + labs(title = “Media delle Vendite con Deviazione Standard per Città”, x = “Città”, y = “Media delle Vendite”) + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
#ok
#punto 8-creazione boxplot
#1. Boxplot per la distribuzione del prezzo mediano tra le città:
library(ggplot2)
ggplot(tx, aes(x = city, y = median_price, fill = city)) + geom_boxplot() + labs(title = “Distribuzione del Prezzo Mediano tra le Città”, x = “Città”, y = “Prezzo Mediano”) + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
#2. Grafico a barre per il totale delle vendite per mese e città:
sales_by_city_month <- tx %>% group_by(city, month) %>% summarise(total_sales = sum(sales, na.rm = TRUE))
ggplot(sales_by_city_month, 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 = 45, hjust = 1))
#Line chart per confrontare l’andamento delle vendite in periodi storici differenti:
sales_over_time <- tx %>% filter(year %in% c(2010, 2020)) %>% # Sostituisci con gli anni desiderati group_by(year, month) %>% summarise(total_sales = sum(sales, na.rm = TRUE))
ggplot(sales_over_time, aes(x = month, y = total_sales, color = factor(year), group = year)) + geom_line(size = 1.2) + geom_point(size = 3) + labs(title = “Andamento delle Vendite in Periodi Storici Differenti”, x = “Mese”, y = “Totale Vendite”, color = “Anno”) + theme_minimal()