url <- 'https://raw.githubusercontent.com/moderndive/moderndive/master/data-raw/kc_house_data.csv'
Precios_de_casas <-read.csv(url)
head(Precios_de_casas)
## id date price bedrooms bathrooms sqft_living sqft_lot
## 1 7129300520 20141013T000000 221900 3 1.00 1180 5650
## 2 6414100192 20141209T000000 538000 3 2.25 2570 7242
## 3 5631500400 20150225T000000 180000 2 1.00 770 10000
## 4 2487200875 20141209T000000 604000 4 3.00 1960 5000
## 5 1954400510 20150218T000000 510000 3 2.00 1680 8080
## 6 7237550310 20140512T000000 1225000 4 4.50 5420 101930
## floors waterfront view condition grade sqft_above sqft_basement yr_built
## 1 1 0 0 3 7 1180 0 1955
## 2 2 0 0 3 7 2170 400 1951
## 3 1 0 0 3 6 770 0 1933
## 4 1 0 0 5 7 1050 910 1965
## 5 1 0 0 3 8 1680 0 1987
## 6 1 0 0 3 11 3890 1530 2001
## yr_renovated zipcode lat long sqft_living15 sqft_lot15
## 1 0 98178 47.5112 -122.257 1340 5650
## 2 1991 98125 47.7210 -122.319 1690 7639
## 3 0 98028 47.7379 -122.233 2720 8062
## 4 0 98136 47.5208 -122.393 1360 5000
## 5 0 98074 47.6168 -122.045 1800 7503
## 6 0 98053 47.6561 -122.005 4760 101930
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
glimpse(Precios_de_casas)
## Rows: 21,613
## Columns: 21
## $ id <dbl> 7129300520, 6414100192, 5631500400, 2487200875, 19544005…
## $ date <chr> "20141013T000000", "20141209T000000", "20150225T000000",…
## $ price <dbl> 221900, 538000, 180000, 604000, 510000, 1225000, 257500,…
## $ bedrooms <int> 3, 3, 2, 4, 3, 4, 3, 3, 3, 3, 3, 2, 3, 3, 5, 4, 3, 4, 2,…
## $ bathrooms <dbl> 1.00, 2.25, 1.00, 3.00, 2.00, 4.50, 2.25, 1.50, 1.00, 2.…
## $ sqft_living <int> 1180, 2570, 770, 1960, 1680, 5420, 1715, 1060, 1780, 189…
## $ sqft_lot <int> 5650, 7242, 10000, 5000, 8080, 101930, 6819, 9711, 7470,…
## $ floors <dbl> 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0, 1.0, 1…
## $ waterfront <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ view <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,…
## $ condition <int> 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 4, 4,…
## $ grade <int> 7, 7, 6, 7, 8, 11, 7, 7, 7, 7, 8, 7, 7, 7, 7, 9, 7, 7, 7…
## $ sqft_above <int> 1180, 2170, 770, 1050, 1680, 3890, 1715, 1060, 1050, 189…
## $ sqft_basement <int> 0, 400, 0, 910, 0, 1530, 0, 0, 730, 0, 1700, 300, 0, 0, …
## $ yr_built <int> 1955, 1951, 1933, 1965, 1987, 2001, 1995, 1963, 1960, 20…
## $ yr_renovated <int> 0, 1991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ zipcode <int> 98178, 98125, 98028, 98136, 98074, 98053, 98003, 98198, …
## $ lat <dbl> 47.5112, 47.7210, 47.7379, 47.5208, 47.6168, 47.6561, 47…
## $ long <dbl> -122.257, -122.319, -122.233, -122.393, -122.045, -122.0…
## $ sqft_living15 <int> 1340, 1690, 2720, 1360, 1800, 4760, 2238, 1650, 1780, 23…
## $ sqft_lot15 <int> 5650, 7639, 8062, 5000, 7503, 101930, 6819, 9711, 8113, …
mean(Precios_de_casas$price)
## [1] 540088.1
# la mediana es la medida utilizada para describir los valores atipicos ya que esta solo es el valor central cuando los datos estan ordenados
mean(Precios_de_casas$sqft_living)
## [1] 2079.9
sd(Precios_de_casas$sqft_living)
## [1] 918.4409
Un valor de 918.4409 indica que, en promedio, el area habitable se desvía 918.4409 unidades de la media. lo que es un valor alto por lo cual se considera que la variación de los datos es alta con respecto a la media
se calcula el promedio, desviacion estandar y el coeficiente de variación al resultado Para comparar la variabilidad entre variables que tienen unidades distintas o medias muy diferentes.
#promedio y desviacion estandar
mean_price<-mean(Precios_de_casas$price)
sd_price<-sd(Precios_de_casas$price)
mean_lot<-mean(Precios_de_casas$sqft_lot)
sd_lot<-sd(Precios_de_casas$sqft_lot)
mean_bedrooms<-mean(Precios_de_casas$bedrooms)
sd_bedrooms<-sd(Precios_de_casas$bedrooms)
# coeficiente de variación
cv_price <- (sd_price/ mean_price) * 100
cv_lot <- (sd_lot / mean_lot) * 100
cv_bedrooms <- (sd_bedrooms / mean_bedrooms) * 100
# Mostrar resultados
cv_price
## [1] 67.97542
cv_lot
## [1] 274.1815
cv_bedrooms
## [1] 27.59138
Se puede concluir que la variable sqft_lot tiene la mayor dispersión, ya que su coeficiente de variación es mucho más alto que el de las otras variables con un 274% aproximadamente. Esto indica que el tamaño de los lotes varía mas entre casas, mientras que los precios y número de habitaciones tienen menor variabilidad.
#Muestra los valores perdidos
Precios_de_casas$sqft_basement[is.na(Precios_de_casas$sqft_basement)]
## integer(0)
Precios_de_casas$yr_renovated[is.na(Precios_de_casas$yr_renovated)]
## integer(0)
#cuenta los valores perdidos
#sum(is.na(Precios_de_casas$sqft_basement))
#(is.na(Precios_de_casas$yr_renovated))
# dado que en el dataframe los valores perdidos se representan como 0 el codigo debe escribir
sum(Precios_de_casas$sqft_basement==0)
## [1] 13126
sum(Precios_de_casas$yr_renovated==0)
## [1] 20699
Es decir que la variable que tiene mayor cantidad de ceros (valores perdidos )es yr_renovated con alrededor de 20,699 datos.
Para esta distribucion se usaria un histograma debido a que son valores continuos y la cantidad de datos son muchos.
hist(Precios_de_casas$price,
main = "Distribución de Precio",
xlab = "Precio de casas",
col = "orange",
border = "black")
la distribución de los precios de las casas es asimétrica a la derecha,
en su mayoría de las viviendas estan en rangos de precios bajos y son
pocas las viviendas con precios altos altos. los cuales serian los
valores atipicos.
hist(Precios_de_casas$sqft_living,
main = "Distribución del area",
xlab = "Area hab.",
col = "green",
border = "black")
El área habitable es asimétrica a la derecha, esto quiere decir que las
casas tienen áreas habitables pequeños o medianos y que son pocas las
viviendas con tamaños excepcionalmente grandes. Esto sugiere la
presencia de valores atípicos que podrían afectar la media
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(Precios_de_casas, aes(x = factor(waterfront), y = price)) +
geom_boxplot(fill = c("pink","lightblue")) +
labs(x = "Frente al mar (0 = Sin vista, 1 = Con vista)",
y = "Precio de la casa",
title = "Precio vs vista al agua") +
theme_minimal()
En el box plot podemos observar que en promedio las casas de un valor
medio tienen una vista al mar, sin embargo hay casas que superan el
valor medio(casas de lujo) y tambien cuentan con vista al mar,podemos
observar que la mediana de los precios de las casa con vista al mar es
significativamente mas alta a comparacion de las casas sin vista lo que
idica que las propiedades que poseen vista al mar tienen un precio mas
significativo. por otro lado aunque la cantidad de propiedades que no
cuenta con vista al mar es mayor dentro de esta categoria tambien se
encuentran casas de lujo.
meanprice<-mean(Precios_de_casas$price)
median(Precios_de_casas$price)
## [1] 450000
sdp<-sd(Precios_de_casas$price)
#coeficiente de variacion
cv<-(sdp/meanprice)*100
print(cv)
## [1] 67.97542
En promedio, el valor de las casas es alrededor de 540,088 pesos.Ademas la mitad de las casas tiene un precio por debajo de 450,000 pesos mientras que,la otra mitad tienen un precio mayor o igual a este valor. lo que indic que los precios estan distribuidos de forma simetrica probablemente debido a la presencia de casa de lujo
La desviacion estandar es de 367,127 aproximadaente lo que significa que haya una alta variabilidad de precios esto significa que los precios de las casas son bastante dispersos con respecto a la media.