Análise de Dados do Airbnb | Rio de Janeiro

Rafael Messias Grecco
12 min readSep 19, 2021

--

O que é o Airbnb?

Acredito que muitas pessoas sabem o que é o Airbnb e até mesmo já usaram seus serviços, essa que já é considerada a maior empresa hoteleira da atualidade, tem a missão de conectar pessoas que querem se hospedar a viagem ou a trabalho, com anfitriões que desejam alugar seus imóveis, ou apenas quartos. Ou seja, todos os lados se beneficiam, a pessoa que quer viajar consegue preços mais atrativos, do que redes hoteleiras convencionais e a pessoa que tem um imóvel consegue uma renda extra. Atualmente existem mais de 6 milhões de acomodações registradas na plataforma do Airbnb.

Conhecendo um pouco mais o Rio de Janeiro

O Rio de Janeiro, capital do estado de mesmo nome, é a segunda maior cidade do Brasil com uma população estimada de 6,45 milhões de habitantes, além de ser considerada o maior destino turístico internacional do Brasil. Conhecido popularmente como a ‘Cidade Maravilhosa’, o Rio de Janeiro é com toda certeza uma das cidades mais belas do planeta, com uma natureza exuberante e praias de tirar o fôlego. Um dos principais pontos turísticos, indiscutivelmente, é a estátua do Cristo Redentor, com seus 30 metros de altura e com o braços estendidos horizontalmente por 28 metros, a estátua é um símbolo para a cidade do Rio de Janeiro.

Como é possível perceber a cidade do Rio de Janeiro possui diversos pontos turísticos e devido a isso, recebe milhões de turistas todos anos, ou seja, um lugar muito interessante para analisar os dados do Airbnb, isso justifica o motivo de neste artigo o foco ser a cidade do Rio de Janeiro.

Obtenção dos Dados

Uma das iniciativas da empresa é disponibilizar dados da plataforma de algumas das principais cidades do mundo, por meio do portal Inside Airbnb, onde você consegue encontrar dados de muitas cidades como New York, Londres, Paris entre outras. Para analisar os dados vamos usar o arquivo listings.csv que é uma versão reduzida do arquivo listings.csv.gz, que contém muito mais variáveis, permitindo uma análise mais completa, no entanto, como este artigo também é destinado para pessoas que estão iniciando em Data Science, resolvi utilizar a versão mais amigável do banco de dados.

Conhecendo os Dados

Em nosso dataset vamos encontrar as seguintes colunas/variável:

  • id - número de id do imóvel
  • name - nome da propriedade anunciada
  • host_id - número de id do proprietário da hospedagem
  • host_name - Nome do proprietária
  • neighbourhood_group - esta coluna não contém nenhum valor válido
  • neighbourhood - nome do bairro
  • latitude - coordenada da latitude da propriedade
  • longitude - coordenada da longitude da propriedade
  • room_type - informa o tipo de quarto que é oferecido
  • price - preço para alugar o imóvel
  • minimum_nights - quantidade mínima de noites para reservar
  • number_of_reviews - número de reviews que a propriedade possui
  • last_review - data do último review
  • reviews_per_month - quantidade de reviews por mês
  • calculated_host_listings_count - quantidade de imóveis do mesmo anfitrião
  • availability_365 - número de dias de disponibilidade dentro de 365 dias

Os gráficos que serão plotados ao longo do artigo serão feitos majoritariamente com o seaborn e com a biblioteca Plotly, portanto, existe uma quantidade bem grande de gráficos interativos, onde é possível dar zoom, aproximar etc. Portanto, não deixe de ver o notebook completo para ter essa experiência, o link vai estar no final do artigo.

Análise Exploratória dos Dados

Uma das primeiras coisas que devemos fazer ao pegar um banco de dados é visualizar algumas de suas entradas, usando o método head() podemos visualizar as 5 primeiras entradas do dataset que vamos trabalhar.

Já é possível notar que temos uma coluna com vários valores ausentes (NaN), vamos tratar desse assunto um pouco mais adiante.

Agora vamos visualizar as dimensões do nosso dataset e também vamos usar também o método info() para visualizar quais os tipos de dados que estão armazenados nas colunas.

Dimensões do Dataset
Tipos de Dados das Variáveis

Ou seja, olhando a primeira imagem, podemos ver que o dataset que estamos trabalhando tem 23635 linhas e 16 colunas. Uma vez que já sabemos as dimensões do banco que estamos trabalhando, podemos visualizar algumas informações estatísticas, aqui, quero analisar somente das variáveis numéricas que pretendo analisar no artigo, portanto, vou selecionar as colunas price, miminum_nights, number_of_reviews, reviews_per_month.

Usando o método describe() vamos obter a seguinte tabela:

Informações estatísticas do banco de dados

Nesta tabela, temos informações, como média da colunas, desvio padrão, mínimo, máximo, e também informações referente aos quantis.

Analisando os valores obtidos da coluna price, podemos notar uma média com valor de 751 e um desvio padrão (std) de 5477, isso mostra que temos um gráfico de distribuição em que os dados estão muito dispersos, indicando a presença de outliers na coluna price, observe a linha max, que nos mostra o preço máximo presente no dataset, é um valor enorme que com toda certeza não condiz com a realidade.

Os valores obtidos na coluna minimum_nights, também indicam a presença de outliers, poque, mais uma vez temos um gráfico de distribuição caracterizado por uma grande diferença entre a média e o desvio padrão. Observe o valor da linha max para essa coluna, temos que a quantidade mínima para alugar o quarto é 1100 noites, com toda certeza podemos afirmar que isso é um outlier.

Outra informação muito importante que podemos extrair dessa tabela, diz respeito aos quantis, para você que não conhece esse termo ou não está familiarizado com estatística, vou fazer um breve resumo desse assunto. Os quartis são medidas que dividem a nossa amostra em quatro partes, o primeiro quartil, ou como também é conhecido quartil inferior, denotado por Q1, esta localizado de tal forma que 25% dos dados são inferiores ou iguais ao valor de Q1, o terceiro quartil, ou qurtil superior (Q3) está localizado de tal forma que 75% dos dados são iguais ou inferiores ao valor de Q3, no centro deles se localiza o segundo quartil que é igual a mediana, ou seja 50% dos dados são inferiores ou iguais ao seu valor.

Observe em nossa tabela que os valores são mostrados da seguinte forma: 25%, 50% e 75% quando esses valores são apresentados, chamamos isso de percentil, a definição é a mesma, portanto, olhando a tabela é possível ver que 75% dos valores de preço estão abaixo de 511 unidades monetárias, ou seja podemos constatar a existência de outliers analisando os percentis apresentados também. Podemos constatar que para a variável minimum_nights, o mesmo ocorre, uma vez que o desvio padrão é de 20,70 e 75% dos dados estão abaixo de 4. Esses valores são muito importantes para analisar boxplots, um tipo de gráfico que vamos ver no decorrer do artigo.

Agora que identificamos que existe a presença de outliers no banco de dados, vamos analisar o quão corrompido está nosso banco de dados, analisando a quantidade de dados faltantes existentes. Ao longo do artigo, vamos voltar a falar sobre outliers, para tratar os que encontramos.

Utilizando o método isnull() podemos encontrar quais valores estão faltando, atrelando isto ao método .sum() vamos obter o número exato de valores faltantes por variável, como eu quero a porcentagem de dados ausentes em cada variável, vou pegar esse valor e dividir ele pela quantidade de linhas do meu banco de dados, utilizando df.shape[0] , onde df é meu banco de dados. Abaixo está o resultado que encontramos ao colocar os resultados em ordem decrescente.

Porcentagem de Valores Ausentes

Este valor está em porcentagem, note que a coluna neighbourhood_group está com 100% de seus dados faltando, logo mais adiante vamos eliminar toda essa coluna, além disso, as variáveis reviews_per_month e last_review também possuem dados faltantes, no entanto, não podemos remover esses valores, pois seria uma perda bem grande de dados, portanto, vamos manter, já os valores ausentes nas outras variáveis que apareceram ali com algum valor maior que zero, a quantidade é extremamente baixa, logo não vai afetar nossa análise.

Uma pergunta que pode surgir naturalmente e que podemos responder usando os dados que temos a disposição, é qual são as localidades com mais ofertas de anfitriões dispostos a alugar quartos ou apartamentos.

A variável neighbourhood armazena o nome dos bairros que possuem opções cadastradas, logo, podemos aplicar o método value_counts() para descobrir qual a quantidade de ofertas por bairro, no gráfico vou mostrar as 10 primeiras localidades em oportunidades.

1–10 Bairros Com Mais Ofertas

A informação de quais lugares possuí maior quantidade de ofertas será muito útil adiante, principalmente quando analisarmos qual localidade é mais cara para alugar uma hospedagem.

Removendo Outliers e Dados Ausentes

Vamos usar apenas algumas linhas para remover alguns outliers que encontramos analisando o desvio padrão dos dados com relação a média, existem técnicas mais robustas para extrair outliers, no entanto, aqui vamos estipular um valor usando as informações que extraímos analisando os percentis, primeiramente vamos considerar toda hospedagem com valor maior que 1500 como um Outlier, já para a variável sobre a quantidade mínima de noites, vamos considerar valores acima de 30 dias, como outliers, uma vez que dificilmente uma pessoa vai alugar a casa somente para casos onde a pessoa planeja ficar mais de 1 mês na hospedagem. Sendo assim, o código necessário para retirar os outliers fica:

É necessário criar uma cópia do banco de dados original com outro nome e alterar esse, para evitar que erros possam acontecer no momento da execução de alguma célula anterior.

Da análise que realizamos, verificamos também que a coluna neighbourhood_group está totalmente vazia, logo devemos remover ela do nosso dataset, para isso, vamos fazer:

Com isso, agora temos um banco de dados novo, denominado df_clean que teve seus outliers removidos e também a coluna com dados ausentes deletada.

Extraíndo Insights

Como agora temos um banco de dados já otimizado, podemos começar a plotar alguns gráficos com a finalidade de extrair algumas informações.

O primeiro gráfico que vamos plotar e analisar suas informações é o plot da distribuição da Variável price, note que essa foi uma das variáveis tratadas, pois havia a presença de outlier.

Histograma da Variáel Preço

Conhecendo o Boxplot

Para aqueles que não estão familiarizados com esse gráfico, seu conceito está diretamente ligado aos percentis que estudamos anteriormente, note:

O que um Boxplot retorna de informação?

Agora compare esse gabarito com o Boxplot que obtemos em nosso banco de dados:

Note a quantidade bem grande de informações que temos!!

Podemos extrair desse gráfico a informação de que podemos considerar que valores acima de 1000 unidades monetárias outliers sem nenhum problema, uma vez que o Terceiro quartil no Boxplot mostra que 75% dos valores estão abaixo de 450 unidades monetárias. (Pratique, mostre que como seria esse boxplot considerando valores acima de 1000 como outliers). Além disso, podemos extrair o que é um grande atrativo para turistas no Airbnb, 50% das hospedagens estão abaixo de 250 unidades monetárias, ou seja existe uma grande variedade de ofertas com preços muito convidativos.

Outra gráfico que é importante uma análise detalhada é da outra variável que tratamos outliers, vamos visualizar agora o gráfico de distribuição e o boxplot da variável minimum_nights.

Histograma da Variável Noites Mínimas

Olhando para os valores do boxplot:

Observe que novamente, poderiamos ter reduzido bastante o valor do corte do outlier, uma vez que o boxplot ainda mostra muitos outliers, e temos que 75% dos dados estão abaixo de 4 noites mínimas (Pratique e verifique como ficaría o boxplot para esse valor de corte para outliers). O gráfico da distribuição nos mostra a facilidade em alugar uma hospedagem no Airbnb, uma vez que, metade das hospedagens querem no mínimo 2 noites para alugar o imóvel.

Outro gráfico que podemos plotar para extrair valores é a matriz de correlação, uma correlação é uma medida que determina o grau de associação entre as variáveis, esse valor é calculado usando o índice de Correlação Linear de Pearson (r) vou colocar as equações de como encontrar esse valor de r de forma manual, para uns será uma nostalgia relembrar essas equações, para outros pode parecer desesperador no ínicio, mas não se preocupe, existe muito material bom e GRÁTIS na internet, no final do artigo vou deixar alguns links para aqueles que desejarem uma outra explicação mais aprofundada.

índice de Corr. Lin. de Pearson
r está entre -1 e +1

Os valores Sxx, Syy e Sxy, podem ser encontrados da seguinte forma, respectivamente:

Valor de Sxx
Valor de Syy
Valor de Sxy

Dependendo do valor que encontramos para o valor de r a correlação entre duas variáveis poderá ser Forte, Moderada e Fraca, dizemos que existe uma correlação forte entre duas variáveis, quando:

lê-se módulo de r maior ou igual que 0,9

Agora, para as duas variáveis terem uma correlação moderada, é necessário que r assuma algum no valor no seguinte intervalo:

lê-se módulo de r é maior ou igual que 0,7 e menor que 0,9

E por último, temos uma correlação, dita como fraca, que acontece quando r assume o valor de:

lê-se módulo de r menor que 0,7

Vamos visualizar na prática como isso funciona, para isso vamos plotar um mapa de calor, onde podemos analisar a correlação entre as variáveis. Para interpretar o gráfico, escolhemos uma linha e uma coluna e encontramos o ponto que as une, esse ponto representa o valor de r.

Mapa de Calor — Matriz de Correlação

Observe que aqui não notamos nada muito especial nesse banco de dados, no entanto em muitos datasets, conseguimos extrair informações muito úteis de um gráfico com uma matriz de correlação entre variáveis. Existem outros métodos para calcular a correlação entre variáveis, por padrão a função corr() que usamos para encontrar a matriz, vem com o parâmetro method igual a pearson (Método que estudamos), no entanto existem outras opções como Kendall e Spearman, é fácil encontrar muito material na internet, caso você tenha curiosidade em conhece-los.

Outra questão que podemos responder usando o banco de dados disponível, é qual o tipo de hospedagem mais alugada no Airbnb? Para isso vamos novamente usar um gráfico, o da distribuição da variável room_tipe.

Observe que o tipo de imóvel mais alugado em larga escala é Casas e Apartamentos inteiros, o que é muito condizente com a realidade, a maioria das pessoas viajam com a família, logo ter uma casa toda para a família é muito mais aconchegante, em seguida, aparece quartos privados, quartos compartilhados e por último, quartos de hotel.

A última questão que vamos responder é quais são as localidades/bairros com os preços mais elevados, usando o método groupby() podemos responder a essa questão com apenas uma linha, observe a tabela de saída:

10 localidades mais caras

Note que existe algo errado, o bairro caju, está sendo o mais caro, para quem conhece o Rio de Janeiro, esperariam que localidades como Copacabana, iriam liderar esse ranking, logo concluímos que algo está errado. Aqui plotamos a média dos preços desses lugares, vamos visualizar quantas entradas o bairro caju possui, usando o método shape :

Saída

Temos apenas uma entrada, logo o bairro Caju não representa a localidade mais cara, essa posição foi garantida a ele devido a um outlier presente no banco de dados. Uma vez que ele possúi apenas uma entrada com o preço de 1208.

Por fim, vamos plotar um gráfico usando as coordenadas de latitude e longitude do banco de dados para ver a distribuição dos preços em um mapa geográfico.

Gráfico da distribuição geográfica dos preços

Esse gráfico, assim como todos os outros mostrados, são interativos logo, não deixe de conferir o notebook com todos os códigos e também para aproveitar a interatividade dos gráficos.

E com isso chegamos ao final deste artigo, muito obrigado a todos que acompanharam o artigo e espero que ele consiga te ajudar em seu caminho de aprendizagem. Bons estudos!!!

Wordcloud com as palavras que mais aparecem nos títulos das hospedagens do dataset

[NOTEBOOK COMPLETO C/CÓDIOS] - Obs: Clicar no botão Open in colab para ver os gráficos interativos.

[CONTEÚDOS DE ESTATÍSTICA] — Khan Academy.

Onde me Encontrar?

[Linkedin]

[Github] — Portfólio

--

--

Rafael Messias Grecco

Electrical engineering student and technology enthusiast. Projects in fields such as Machine Learning, Time Series and Computer Vision. https://www.linkedin.com