- Autor: Cícero Henrique dos Santos
- E-mail: [email protected]
- Linkedin: https://www.linkedin.com/in/cicero-henrique-santos/
- Descrição do projeto
- Objetivos
- Pré-requisitos
- Como rodar a aplicação
- Tarefas em aberto
- Linguagens, dependencias e libs utilizadas
- Referências
- Conclusão
O Desafio Python tem como objetivo refletir alguns desafios que um Engenheiro de Dados possa enfrentar na Sauter.
⚠ É importante saber que há múltiplos formatos para a resolução do desafio e será necessário consultar documentações (algumas das quais estão identificadas abaixo).
Sua primeira tarefa é utilizar a library google-play-scrape para capturar dados de apps. O app selecionado é o Alexa, da Amazon.
- Utilizando as informações de avaliação do aplicativo, você deve chegar em um Data Frame de review parecido com o demonstrado abaixo:
A partir desse Data Frame, seguem as atividades propostas na tarefa:
-
Criar 3 arquivos .csv a partir do dataframe, com a seguinte classificação:
- aval_positiva.csv para score maior ou igual a 4;
- aval_neutra.csv para score igual a 3;
- aval_negativa.csv para score inferior a 3.
-
Criar um report simples para essas variáveis utilizando a library pandas-profiling para cada uma das separações (aval_neutra, aval_positiva, aval_negativa).
⚠ É importante notar os principais pontos de cada análise para sua apresentação.
Finalmente, salvar o resultado do profile em formato .html.
-
A partir dos dados criados, subir as tabelas para um banco de dados. Aqui é completamente opcional qual banco de dados utilizar, mas considerar utilizar o BigQuery da Google, pois é totalmente gratuito (para o tamanho do dataset) e em cloud.
⚠ Caso prefira utilizar outro banco de dados de seu domínio também vale como problema resolvido.
- Criar objeto com operações de captura de dados, com atualização da tabela. O objetivo aqui é criar um pipeline simplificado de dados para o banco, de forma que a tabela seja sempre atualizada com as últimas informações de reviews.
Para realização da Tarefa 1 utilize alguma plataforma notebook de sua preferência.
Exemplo: Google Colab Jupiter Notebook
Entre outros...
Para realização da Tarefa 2 é possível realizar de forma manual pela plataforma do Google CLoud Platform ou através de comandos no próprio Google Colab ou Jupiter Notebook.
Para a Tarefa 3, configure o docker em sua máquina (no caso utilizei Windows) seguindo os passos abaixo:
Download Docker: Docker
Download Docker Compose: Docker Compose
- Verificar se o Windows está atualizado. Caso seja inferiro a 18362, clique no link ao lado para atualizar o Windows 10. Atualizar o Windows;
- Pesquise por Ativar ou desativar recursos do Windows e siga os passos abaixo:
- Desativar Hyper-V;
- Desativar Plataforma do Hipervisor do Windows;
- Habilitar a Plataforma de Máquina Virtual;
- Habilitar o Subsistema do Windows para Linux (WSL).
- Faça o Download do WSL 2 clicando no link ao lado: Download WSL 2;
- Acesse a Microsoft Store, e faça download e instale a distribuição Linux Ubuntu 20.04 LTS (recomendado);
- Instale o Docker Desktop no Windows: Docker Desktop;
- Obs: Abra o Docker Desktop e verifique se estão habilitados o "Enable integration with my default WSL distro" e "Ubuntu-20.04" em Settings->Resource->WSL Integration.
- Documentação - Executando o Airflow no Docker
- Abra o terminal do WSL2 e crie um diretório para o projeto no home/<seu-diretório> com o comando:
mkdir apache-airflow
; - Acesse o diretório
cd apache-airflow
; - No diretório apache-airflow, baixe o arquivo
docker-compose.yaml
disponibilizado na documentação oficial através do comando:curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.2.3/docker-compose.yaml'
; - Confirme se o arquivo foi baixado com o comando de listar:
ls
; - No Linux , o início rápido precisa saber a id do usuário do host e precisa ter a id do grupo definida como 0. Caso contrário, os arquivos criados no dags, logs e plugins serão criados com usuário root. Você deve certificar-se de configurá-los para o docker-compose:
mkdir -p ./dags ./logs ./plugins
|echo -e "AIRFLOW_UID=$(id -u)" > .env
; - Em todos os sistemas operacionais, você precisa executar migrações de banco de dados e criar a primeira conta de usuário. Para fazer isso, execute:
docker-compose up airflow-init
; - Inicie todos os serviços através do comando:
docker-compose up -d
; - Acesse o servidor web do Apache Airflow disponível em: http://localhost:8080. A conta padrão possui o login airflow e a senha airflow.
-
Tarefa 1 - Capturar dados de Loja de Aplicativo - Google Play
- Acessar o Google Colab: https://colab.research.google.com/drive/1ak9TAlvzWBj5Hh39swM8iG-uF1dVaDe6?usp=sharing;
- Acessar diretamente o arquivo no diretório: Google Colab - Capturando dados com Google-Play-Scraper
-
Tarefa 2 - Subir as tabelas para um BD
- Acesse o arquivo com o passo a passo manual: Armazenar dados no BigQuery;
- Siga os passos dentro do Google Colab Google Colab - Capturando dados com Google-Play-Scraper no tópico Enviar dados CSV para bucket no Cloud Storage e Big Query.
-
Tarefa 3 - Criar Pipeline de dados
- Transfira os arquivos do pipeline da Pasta dags para a pasta dags do Airflow (esta pasta foi criada no momento da instalação juntamente com as pastas logs e plugins no último passo do tópico Instalação do Apache Airflow no Docker). Utilize o comando
cp /mnt/c/Users/<caminho onde até a pasta desafio-case-python-sauter>/dags /home/<seu diretório>/apache airflow/
; - Acesso o arquivo etl_with_gcp_and_airflow.py dentro da pasta dags/etl_with_gcp_and_airflow. Dentro do arquivo, na funçao
def __init__(self)
comente as linhas com o caminho para teste WINDOWS e descomente as linhas de teste para LINUX. - A fim de evitar conflitos por falta de dependências, execute o arquivo shell dentro da pasta \dags\etl_with_gcp_and_airflow:
- Dentro da pasta mencionada, acesso o arquivo através do de um editor de texto de sua oreferência (no caso utilizei o NANO). Através do comando
nano pip_install_requirements.sh
desabilite os comentários de acordo com seu sistema operacional. Salve com o comandoCTRL + O
e depois feche o editor de texto com o comandoCTRL + X
; - Agora (no WSL/Linux) execute o script através do comando
sh pip_install_requirements.sh
.
- Dentro da pasta mencionada, acesso o arquivo através do de um editor de texto de sua oreferência (no caso utilizei o NANO). Através do comando
- Crie uma conta se serviço para autenticação de acesso ao Google Cloud seguindo os passos através do link: Como criar uma conta de serviço e salve o arquivo dentro da pasta \dags\etl_with_gcp_and_airflow;
- Com as configurações necessárias realizadas, (caso não esteja com o Apache Airflow iniciado) execute o comando
docker-compose up -d
dentro do diretório onde o arquivo se encontra: /home/<seu diretório>/apache airflow; - Acesse o servidor web do Apache Airflow disponível em: http://localhost:8080. A conta padrão possui o login airflow e a senha airflow;
- Dentro do Apache Airflow, na aba DAGs, procure pelo DAG pipeline_etl_with_gcp_and_airflow e execute para certificar que tudo está funcionando corretamente. Por padrão as sinalizações de execução devem conter o status com a cor verde, indicando sucess na execução.
- Transfira os arquivos do pipeline da Pasta dags para a pasta dags do Airflow (esta pasta foi criada no momento da instalação juntamente com as pastas logs e plugins no último passo do tópico Instalação do Apache Airflow no Docker). Utilize o comando
Lang/Lib/Framwork | Version |
---|---|
Python | 3.10 |
google-play-scraper | 1.0.2 |
pandas | 1.3.5 |
pandas-profiling | 3.1.0 |
pandas_gbq | 0.15.0 |
Docker | 4.3.2 |
Docker Compose | 1.29.2 |
Apache Airflow | 2.0.2 |
google-cloud-storage | 1.43.0 |
pip | 21.3.1 |
Google Cloud Storage (GCS) | |
Google BigQuery (GBQ) | |
Google Colab | |
Visual Studio Code |
- Documentação google-play-scraper 1.0.2
- Documentação Pandas API reference
- Documentação Package pandas_profiling
- Como criar um projeto no GCP
- Como criar buckets de armazenamento
- Como criar um conjunto de dados
- Como carregar dados CSV em uma tabela BigQuery
- Executando o Airflow no Docker
- ETL com Airflow, Google Cloud Storage e BigQuery
- Google Cloud Client Libraries for google-cloud-storage
- Google Auth Library for Python
- Documentação pandas-gbq
- Como fazer o download de objetos
- Como fazer upload de objetos
- Como configurar a variável de ambiente para autenticação
- Autenticação com pandas-bq
- Módulo de autenticação google-auth
- Documentation pip v21.3.1
- Documentação Apache Airflow Exemplo de Pipeline
- Módulos de providers do google disponíveis
Com o desenvolvido do projeto foi possível obter maiores conhecimentos de libs que facilitam o trabalho de ETL (Extração, Transformação e Carregamento) para o dia a dia de um Engenheiro de Dados, como:
- Utilizar a lib google-plat-scraper em vez da comumente usada beautifulsoup;
- um diferencial foi conhecer a lib pandas-profiling, com acesso a funções de análise de dados de forma rápida e bem completa para usos mais comuns, encurtando o processo de construção de scripts para cada tipo de análise;
- Utilizar o Google Coud Storage em formato de comandos, já que através do qwiklabs é demonstrado em formato manual em sua forma normal;
- Um dos maiores desafios dentre os 3 foi buscar informações sobre como construir as DAGs no Apache Airflow. Sua documentação principal é mais limitada, mas após encontrar a documentação com exemplos de Pipeline, foi possível ter uma maior clareza e rapidez em montar as Tasks e DAGs.
Por fim, o desafio foi uma ótima oportunidade de auto desafio, confiança em desenvolver um projeto "real" utilizando tantas stacks diferentes e construção de um projeto que servirá também como portifólio.
Aprendizados:
A maior dificuldade foi em tentar resolver o erro de módulo google-play-scraper não identificado no Apache Airflow.
Busquei desenvolver o pipeline completo seguindo o script etl_with_gcp_and_airflow.py, mas, devido o Apache Airflow ainda não possuir dentro de seu repositório de providers do Google suporte ao módulo do google-play-scrapper (conforme a documentação Módulos de providers do google disponíveis), não foi possível realizar o pipeline com a função de capturar os dados, somente as funções de download dos CSVs do Cloud Storage e envio ao Big Query foi possível realizar (Conforme solicitado no objetivo de tarefa 3).
Caso deseje executar o script completo, descomente as últimas linhas do arquivo da função main, execute os comandos para evitar erros de dependências ao executar o script.