Utilizamos uma base de dados do kaggle, carregada pelo usuário Rubens Júnior1 informando detalhes de casas para alugar no Brasil
Link para página Aqui.
Escolhemos esta base por conter dados diversificados e pela simplicidade do conteúdo.
Utilizamos somente as 1000 primeiras linhas da base.
Carregando pacotes
library(ggplot2)
library(dplyr)
library(stringr)
library(knitr)
library(rmarkdown)
library(forcats)
library(patchwork)
library(ggExtra)
library(janitor)
Limpeza dos dados
Path = 'Moradia/houses_to_rent.csv'
Tabela = read.csv(Path)
Tabela <- Tabela[1:1000,]
Tabela <- Tabela %>% select(-X)
Tabela <- Tabela %>% mutate(city = as.factor(city))
Tabela <- Tabela %>% mutate(floor = as.numeric(as.character(floor)))
Tabela <- Tabela %>% mutate(hoa = str_replace(as.character(hoa),",",""))
Tabela <- Tabela %>% mutate(hoa = as.numeric(str_remove(as.character(hoa),"R\\$")))
Tabela <- Tabela %>% mutate(rent.amount = str_replace(as.character(rent.amount),",",""))
Tabela <- Tabela %>% mutate(rent.amount = floor(as.numeric(str_remove(as.character(rent.amount),"R\\$"))))
Tabela <- Tabela %>% mutate(property.tax = str_replace(as.character(property.tax),",",""))
Tabela <- Tabela %>% mutate(property.tax = floor(as.numeric(str_remove(as.character(property.tax),"R\\$"))))
Tabela <- Tabela %>% mutate(fire.insurance = str_replace(as.character(fire.insurance),",",""))
Tabela <- Tabela %>% mutate(fire.insurance= floor(as.numeric(str_remove(as.character(fire.insurance),"R\\$"))))
Tabela <- Tabela %>% mutate(total = str_replace(as.character(total),",",""))
Tabela <- Tabela %>% mutate(total = floor(as.numeric(str_remove(as.character(total),"R\\$"))))
write.csv(Tabela,"Moradia/Dados limpos")
paged_table(head(Tabela,100))
paged_table(Tabela %>%
tabyl(animal) %>%
adorn_totals(where = c("row")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
paged_table(Tabela %>%
tabyl(city) %>%
adorn_totals(where = c("row")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
paged_table(Tabela %>%
tabyl(furniture) %>%
adorn_totals(where = c("row")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
paged_table(Tabela %>%
tabyl(animal,furniture) %>%
adorn_totals(where = c("row","col")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
paged_table(Tabela %>%
tabyl(animal,city) %>%
adorn_totals(where = c("row","col")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
paged_table(Tabela %>%
tabyl(city,furniture) %>%
adorn_totals(where = c("row","col")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
paged_table(Tabela %>%
mutate(rooms = ifelse(rooms >= 5,"5+",rooms) ) %>%
tabyl(rooms) %>%
adorn_totals(where = c("row")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
summary(Tabela$rooms)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 2.00 3.00 2.48 3.00 7.00
var(Tabela$rooms)
## [1] 1.276877
paged_table(Tabela %>%
mutate(bathroom = ifelse(bathroom >= 5,"5+",bathroom) ) %>%
tabyl(bathroom) %>%
adorn_totals(where = c("row")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
summary(Tabela$bathroom)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 2.000 2.356 3.000 10.000
var(Tabela$bathroom)
## [1] 2.085349
paged_table(Tabela %>%
mutate(parking.spaces = ifelse(parking.spaces >= 5,"5+",parking.spaces) ) %>%
tabyl(parking.spaces) %>%
adorn_totals(where = c("row")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
summary(Tabela$parking.spaces)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 1.000 1.000 1.778 2.000 8.000
var(Tabela$parking.spaces)
## [1] 2.525241
paged_table(Tabela %>%
mutate(floor = cut(Tabela$floor,
breaks = c(0,5,10,15,85) ) ) %>%
tabyl(floor) %>%
adorn_totals(where = c("row")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
summary(Tabela$floor)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 3.000 6.000 7.694 11.000 85.000 246
var(!is.na(Tabela$floor) )
## [1] 0.1856697
paged_table(Tabela %>%
mutate(area = cut(Tabela$area,
breaks = c(0,50,100,150,200,250,900) ) ) %>%
tabyl(area) %>%
adorn_totals(where = c("row")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
summary(Tabela$area)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.0 58.0 100.0 147.8 198.0 900.0
var(Tabela$area)
## [1] 17498.37
# Corrigir notação científica de "total"
paged_table(Tabela %>%
mutate(total = cut(Tabela$total,breaks = c(500,1500,3000,4500,6000,9000,12000,25000)) ) %>%
tabyl(total) %>%
adorn_totals(where = c("row")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
summary(Tabela$total)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 660 2550 4279 6026 8598 24890
var(Tabela$total)
## [1] 22836097
paged_table(Tabela %>%
mutate(area = cut(Tabela$area,
breaks = c(0,50,100,150,200,250,900) ),
total = cut(Tabela$total,breaks = c(500,1500,3000,4500,6000,9000,12000,25000)) ) %>%
tabyl(total,area) %>%
adorn_totals(where = c("row","col")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
Covariance <- cov(Tabela$total,Tabela$area)/( sd(Tabela$total) * sd(Tabela$area) )
Covariance
## [1] 0.6942193
Tabela %>% ggplot(aes(x = total, y = area)) + geom_point() +
labs(x = "Total", y = "Área", title = "") +
theme(
plot.title = element_text(hjust = 0.5),
axis.title = element_text(color = "red"),
panel.background = element_rect(fill = "grey"),
panel.grid = element_blank())
0.5 a 0.7 positivo ou negativo indica uma correlação moderada.
paged_table(Tabela %>%
mutate(parking.spaces = ifelse(parking.spaces >= 5,
"5+",parking.spaces),
area = cut(Tabela$area,
breaks = c(0,50,100,150,200,250,900) ) ) %>%
tabyl(parking.spaces,area) %>%
adorn_totals(where = c("row","col")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
Covariance <- cov(Tabela$parking.spaces,Tabela$area)/( sd(Tabela$parking.spaces) * sd(Tabela$area) )
Covariance
## [1] 0.7225513
Tabela %>% ggplot(aes(x = parking.spaces, y = area)) + geom_point() +
labs(x = "Vagas", y = "Área", title = "") +
theme(
plot.title = element_text(hjust = 0.5),
axis.title = element_text(color = "red"),
panel.background = element_rect(fill = "grey"),
panel.grid = element_blank())
0.7 a 0.9 positivo ou negativo indica uma correlação forte.
paged_table(Tabela %>%
mutate(floor = cut(Tabela$floor,
breaks = c(0,5,10,15,85) ),
total = cut(Tabela$total,
breaks = c(500,1500,3000,4500,6000,9000,12000,25000))) %>%
tabyl(total,floor) %>%
adorn_totals(where = c("row","col")) %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns(position = "front"))
Covariance <- cov(Tabela$total, !is.na(Tabela$floor) )/( sd(Tabela$total) * sd( !is.na(Tabela$floor) ) )
Covariance
## [1] 0.02582247
Tabela %>% ggplot(aes(x = floor, y = total)) + geom_point() +
labs(x = "Andar", y = "Total", title = "") +
theme(
plot.title = element_text(hjust = 0.5),
axis.title = element_text(color = "red"),
panel.background = element_rect(fill = "grey"),
panel.grid = element_blank())
0 a 0.3 positivo ou negativo indica uma correlação desprezível.
Covariance <- cov(Tabela$area, !is.na(Tabela$floor) )/( sd(Tabela$area) * sd( !is.na(Tabela$floor) ) )
Covariance
## [1] -0.3375788
Covariance <- cov(Tabela$rooms, !is.na(Tabela$floor) )/( sd(Tabela$rooms) * sd( !is.na(Tabela$floor) ) )
Covariance
## [1] -0.2218664
paged_table( Tabela %>% count(floor) %>% arrange(desc(floor)),
options = list(rows.print = 5))
Tabela %>% ggplot(aes(floor)) + geom_point(stat = 'count', size = 2) +
coord_cartesian(xlim = c(0, 40)) +
scale_x_continuous(breaks = seq(0, 40, 2)) +
labs(x = "Andar", y = "Nº casas", title = "Contagem de casas por andar") +
theme(
plot.title = element_text(hjust = 0.5),
axis.title = element_text(color = "purple"),
panel.background = element_rect(fill = "grey"),
panel.grid = element_blank())
Quanto maior o andar menos imóveis para alugar, o que era esperado.
Vamos a algumas estatísticas de valores
abaixo o boxplot com as variáveis numéricas nos darão uma ideia de dispersão, média e quantis.
p1 <- Tabela %>% ggplot(aes(y = hoa)) + geom_boxplot()
p2 <- Tabela %>% ggplot(aes(y = rent.amount)) + geom_boxplot()
p3 <- Tabela %>% ggplot(aes(y = property.tax)) + geom_boxplot()
p4 <- Tabela %>% ggplot(aes(y = fire.insurance)) + geom_boxplot()
p1+p2+p3+p4
Percebe-se que o valor do aluguel tende a ser mais bem distribuído que as outras cobranças.
Vamos criar uma nova coluna “preço_ relativo_m2” obtida pela razão entre o total em valor e a área. Vejamos os que possuem o \(m^2\) acima de R$100,00.
Tabela <- Tabela %>% mutate(preço_m2 = total/area)
paged_table( head(Tabela) )
Tabela %>% filter(preço_m2 >=100) %>% ggplot(aes(preço_m2)) + geom_point(stat = 'count')
vejamos se o preço por \(m^2\) tem alguma relação com a cidade.
Tabela %>% group_by(city) %>% ggplot(aes(x = city, y = preço_m2)) + geom_boxplot(color = "blue") +
coord_cartesian(ylim = c(0, 200)) +
labs(x = "Cidade", y = "R$/m2", title = "Preço por Metro Quadrado") +
theme(
plot.title = element_text(hjust = 0.5),
axis.title = element_text(color = "red"),
panel.background = element_rect(fill = "grey"),
panel.grid = element_blank())
A cidade 1 tem o \(m^2\) mais caro que a cidade 0, no entanto a cidade 0 tem uma distribuição de preços mais regular.
Vejamos a relação entre preço do aluguel, área e número de quartos.
paged_table(Tabela %>% count(animal))
paged_table(Tabela %>% filter(rent.amount > 12000) %>% count(animal))
Tabela %>% filter(rent.amount > 12000) %>%
ggplot(aes(x = area, y = rent.amount, colour = animal)) + geom_point()
Casas maiores e mais caras tendem a ter mais tolerância com pets uma vez que no total essa proporção é de 0.78 e para casas com aluguel acima de R$12000,00 é de 0.87.
graf <- Tabela %>%
filter( !is.na(Tabela) ) %>%
ggplot() +
geom_point(mapping = aes(x = area, y = total, color = total)) +
scale_color_gradient(low = "orange", high = "red") +
theme(legend.position="none")
graf <- ggMarginal(graf, type="histogram",fill = "darkorange")
show(graf)
colors = c("darkgray","steelblue")
vagas <- Tabela %>% ggplot( aes(x = parking.spaces, fill = city ) ) +
geom_bar(show.legend = FALSE) +
labs(x = "vagas de garagem", y = "número de imóveis") +
scale_fill_manual(values = colors)
quartos <- Tabela %>% ggplot( aes(x = rooms, fill = city ) ) +
geom_bar() +
labs(x = "número de quartos") +
scale_fill_manual(values = colors,
name = "na cidade",
labels = c("não", "sim")) +
theme(axis.title.y = element_blank(),
legend.position="top")
banheiros <- Tabela %>% ggplot( aes(x = bathroom, fill = city ) ) +
geom_bar(show.legend = FALSE) +
labs(x = "número de banheiros") +
scale_fill_manual(values = colors) +
theme(axis.title.y = element_blank() )
vagas + quartos + banheiros
Tabela %>%
ggplot(aes(sample = total) ) +
stat_qq(color = "black",
fill = "gray",
alpha = 1/5,
size = 2) +
stat_qq_line(color = "red") +
labs(title = "Gráfico quantil x quantil do valor total dos imóveis",
x = "quantis teóricos",
y = "quantis amostrais")
Grande parte dos comandos foram feitos utilizando ggplot2,dplyr. stringr auxiliou na limpeza dos dados, forcats,knitr e rmarkdown foram usadas para a construção de estruturas de dados categóricos.Usei patchwork para juntar gráficos distintos.E ggExtra para plotar gráficos marginais.E janitor para tabelas de frequência.