Turma 11080 - Santander Coders 2024 - Engenharia de Dados
Desenvolvimento do projeto "Airbnb" com o intuito de extrair e trasformar dados do site AirbnbInside relacionado a hospedagem na cidade do rio de janeiro. Os dados serão carregados em banco de dados PostgreSQL e tratados utilizando DBT e Great Expectations para obtençãoo de insights de negócio na camada gold.
Todo projeto foi desenvolvido com a linguagem de programação Python e framework Dbt.
Introdução à Base de Dados do Airbnb
O conjunto de dados "Inside Airbnb", disponível no website "http://insideairbnb.com/", é uma valiosa fonte de informações sobre listagens de hospedagem, avaliações de hóspedes e disponibilidade de calendário em várias cidades ao redor do mundo, incluindo o Rio de Janeiro. Antes de prosseguirmos com a engenharia de dados, é importante entender os principais componentes deste conjunto de dados:
-
Listing (Listagem): Este conjunto de dados contém informações detalhadas sobre as propriedades listadas no Airbnb. Cada registro representa uma listagem individual e inclui informações como o tipo de propriedade, preço, localização, número de quartos, comodidades oferecidas e muito mais.
-
Reviews (Avaliações): O conjunto de dados de avaliações contém informações sobre as avaliações feitas por hóspedes que ficaram nas propriedades listadas. Ele inclui dados como a data da avaliação, o identificador da propriedade, os comentários escritos pelos hóspedes, e outras informações.
-
Calendar (Calendário): Este conjunto de dados contém informações sobre a disponibilidade das propriedades ao longo do tempo. Ele lista as datas em que as propriedades estão disponíveis para reserva, bem como os preços para cada data.
O dicionário dos dados também está disponível no website: "http://insideairbnb.com/".
-
Aquisição de Dados e Armazenamento de Dados em PostgreSQL - Camada Bronze
- Baixe o conjunto de dados "Inside Airbnb" do Rio de Janeiro da fonte oficial (http://insideairbnb.com/) e promova uma estruturação simples nos dados.
- Crie um banco de dados PostgreSQL para armazenar os dados brutos das 3 tabelas ("Listing", "Reviews" e Calendar") na camada "bronze".
-
Data Clean - Camada Silver:
- Identifique e lide com valores ausentes, duplicatas e outliers nos dados brutos da camada "bronze".
- Padronize e limpe os nomes das colunas, convertendo-os em um formato consistente.
- Realize uma limpeza textual em campos, como descrições de propriedades, removendo caracteres especiais e erros de digitação.
-
Data Quality - Camada Silver:
- Defina métricas de qualidade de dados, como integridade, precisão e consistência para os dados da camada "bronze".
- Implemente verificações para garantir que os dados da camada "silver" estejam em conformidade com essas métricas.
- Estabeleça um sistema de monitoramento contínuo da qualidade dos dados da camada "silver".
-
Testes de Qualidade - Camada Silver:
- Utilize a biblioteca Great Expectations para criar testes de qualidade automatizados que verifiquem as expectativas definidas para os dados da camada "silver".
- Desenvolva testes que assegurem que os dados da camada "silver" atendam às regras de negócios e aos requisitos de qualidade.
-
Transformação de Dados com dbt - Camada Silver:
- Utilize a ferramenta dbt para criar a camada "silver" de dados, realizando transformações e preparando os dados da camada em questão.
- Mantenha um controle de versão dos modelos dbt relacionados à camada "silver" e automatize a execução das transformações.
-
Armazenamento de Dados em PostgreSQL - Camada Silver:
- Armazene os dados da camada "silver" no mesmo banco de dados PostgreSQL.
- Estabeleça conexões entre o dbt e o PostgreSQL para carregar os dados transformados da camada "silver" no banco.
-
Validação de Expectativas com Great Expectations - Camada Silver:
- Implemente validações adicionais usando Great Expectations nas camadas de dados da camada "silver".
- Monitore a qualidade dos dados da camada "silver" após cada transformação e ajuste os testes de acordo.
-
Transformação de Dados com dbt - Camada Gold:
- Utilize o dbt para criar a camada "gold" de dados, aplicando agregações especializadas, como médias de preços por propriedade, por período, e outras agregações especializadas.
- Mantenha um controle de versão dos modelos dbt relacionados à camada "gold" e automatize a execução das transformações.
- Armazene os dados da camada "gold" no mesmo banco de dados PostgreSQL, mantendo a estrutura de dados otimizada para consultas analíticas.
-
Apresentação e Discussão:
- Apresente os resultados do projeto para a turma, enfatizando os aspectos de engenharia de dados, qualidade de dados e uso de ferramentas como dbt, Great Expectations e o armazenamento em um banco de dados PostgreSQL nas camadas "bronze", "silver" e "gold".
- Os dados foram persistidos no Postgres exatamente do mesmo modo que vieram da base de dados
- Houve tratamento dos dados, seleção de colunas adequadas ao projeto e testes de qualidade utilizando 'Great Expectation'
| Nome da Coluna | Tipo de Dado | Testes |
|---|---|---|
| id | bigint | unique, not_null, dbt_expectations.expect_column_values_to_be_of_type: bigint |
| listing_url | text | unique, not_null |
| scrape_id | bigint | not_null, dbt_expectations.expect_column_values_to_be_of_type: bigint |
| last_scraped | date | not_null, dbt_expectations.expect_column_values_to_be_of_type: Date |
| source | text | |
| name | text | not_null |
| description | text | not_null |
| neighborhood_overview | text | not_null |
| host_id | integer | not_null, dbt_expectations.expect_column_values_to_be_of_type: integer |
| host_url | text | |
| host_name | text | not_null |
| host_since | date | dbt_expectations.expect_column_values_to_be_of_type: Date |
| host_location | text | not_null |
| host_about | text | not_null |
| neighbourhood | text | not_null |
| latitude | numeric | not_null |
| longitude | numeric | not_null |
| property_type | text | not_null |
| room_type | text | not_null, dbt_expectations.expect_column_values_to_be_in_set: Entire home/apt, Shared room, Private room, Hotel room |
| accommodates | integer | not_null, dbt_expectations.expect_column_values_to_be_of_type: integer |
| bedrooms | integer | not_null, check_value_is_not_negative, dbt_expectations.expect_column_values_to_be_of_type: integer |
| beds | integer | not_null, check_value_is_not_negative, dbt_expectations.expect_column_values_to_be_of_type: integer |
| amenities | json | not_null |
| price | double precision | check_value_is_not_negative, not_null |
| minimum_nights | integer | check_value_is_not_negative, not_null, dbt_expectations.expect_column_values_to_be_of_type: integer |
| maximum_nights | integer | check_value_is_not_negative, not_null, dbt_expectations.expect_column_values_to_be_of_type: integer |
| has_availability | boolean | not_null, dbt_expectations.expect_column_values_to_be_of_type: boolean |
| availability_365 | integer | check_value_is_not_negative, not_null, dbt_expectations.expect_column_values_to_be_of_type: integer |
| number_of_reviews | integer | check_value_is_not_negative, not_null, dbt_expectations.expect_column_values_to_be_of_type: integer |
| first_review | date | dbt_expectations.expect_column_values_to_be_of_type: Date |
| last_review | date | dbt_expectations.expect_column_values_to_be_of_type: Date |
| review_scores_rating | numeric | check_value_is_not_negative, dbt_expectations.expect_column_values_to_be_of_type: numeric |
| instant_bookable | boolean | not_null, dbt_expectations.expect_column_values_to_be_of_type: boolean |
| reviews_per_month | numeric | check_value_is_not_negative, dbt_expectations.expect_column_values_to_be_of_type: numeric |
| Nome da Coluna | Tipo de Dado | Testes |
|---|---|---|
| listing_id | bigint | not_null, dbt_expectations.expect_column_values_to_be_of_type: bigint |
| id | bigint | unique, not_null, dbt_expectations.expect_column_values_to_be_of_type: bigint |
| date | date | not_null, dbt_expectations.expect_column_values_to_be_of_type: Date |
| reviewer_id | bigint | not_null, dbt_expectations.expect_column_values_to_be_of_type: bigint |
| reviewer_name | text | not_null |
| comments | text | not_null |
| Nome da Coluna | Tipo de Dado | Testes |
|---|---|---|
| listing_id | bigint | not_null, dbt_expectations.expect_column_values_to_be_of_type: bigint |
| date | date | not_null, dbt_expectations.expect_column_values_to_be_of_type: Date |
| available | boolean | not_null, dbt_expectations.expect_column_values_to_be_of_type: boolean |
| price | double precision | check_value_is_not_negative, not_null |
| minimum_nights | integer | check_value_is_not_negative, not_null, dbt_expectations.expect_column_values_to_be_of_type: integer |
| maximum_nights | integer | check_value_is_not_negative, not_null, dbt_expectations.expect_column_values_to_be_of_type: integer |
Foram criadas 'views' para resolução de problemas de negócio.
- Contagem de imóveis por anfitrião;
- Contagem de reviews por imóvel;
- Média das avaliações para cada anfitrião;
- Ocupação média para cada vizinhança;
- Calcula a contagem de propriedades para cada localidade do anfitrião;
- Taxa média de ocupação por região e por mês;
- Preço médio dos imóveis listados;
- Média das avaliações por região;
- 10 comodidades mais frequentes em listagens de Airbnb com avaliações superiores a 4,5.
- Ter o DBT instalado;
- Ter o PostgreSQL instalado de preferência versão 10 ou superior;
- Configurar a engine de acesso com a senha do PostgreSQL;
- Ajustar o profile.yml para o acesso ao banco local;
- Clone desse projeto;
- Abrir o projeto no VS Code;
- Fazer o download dos 3 arquivos.csv
- Alterar a senha do PostgreSQL que você configurou ao instalá-lo no arquivo 'projeto_analytics_engineering.ipynb':
- Inicializar o notebook 'projeto_analytics_engineering.ipynb' com 'Run All'; Esse processo demora quase uma hora para ser realizado devido a intensa quantidade de dados.
- Abrir o terminar no VS Code com o atalho <Ctrl + '>;
- Acessar o diretório 'airbnb_project' com o comando ;
- Rodar todos os arquivos SQL e testes do Great Expectations com o comando ;
- Verificar todas as tables e views persistidas no PostgreSQL.
Assistir o vídeo de demonstração do projeto!
- Python - Linguagem de Programação
- Postgres) - Gerenciador de banco de dados
- dbt) - Framework de trasformacao de dados
- Great Expectation - Qualidade e testes de dados
- VS Code - IDE
- Configurar todo o ambiente de trabalho, seja o Postgres, o DBT e o Great Expectations;
- SQL, pois infelizmente não faz parte da ementa do curso.
- Saber qual teste de qualidade usar, já que existe uma enorme variedade no Great Expectations.
- Processo demorado na persistência dos dados.
- Aumentar a base de dados para extração de mais insights de negócio;
- Utilizar um banco de dados presente em nuvem para não precisar configurar o PostgreSQL localmente.

