From b3e60648b66775bf1ff0d1f5ac928af50af76994 Mon Sep 17 00:00:00 2001 From: Rafaela Date: Thu, 21 May 2026 14:54:27 -0300 Subject: [PATCH 1/3] desafio_rafaelaAyres: analista de dados e BI --- .../output/generos_maior_receita.png | Bin 0 -> 42652 bytes desafio_RafaelaAyres/output/top_10_filmes.png | Bin 0 -> 36621 bytes desafio_RafaelaAyres/readme.md | 96 ++++++++++++++++++ desafio_RafaelaAyres/requirements.txt | 17 ++++ desafio_RafaelaAyres/sql/__init__.py | 0 desafio_RafaelaAyres/sql/questao_1.sql | 6 ++ desafio_RafaelaAyres/sql/questao_2.sql | 6 ++ desafio_RafaelaAyres/sql/questao_3.sql | 8 ++ desafio_RafaelaAyres/src/__init__.py | 0 desafio_RafaelaAyres/src/cases/__init__.py | 0 desafio_RafaelaAyres/src/cases/questao_1.py | 55 ++++++++++ desafio_RafaelaAyres/src/cases/questao_2.py | 63 ++++++++++++ desafio_RafaelaAyres/src/cases/questao_3.py | 66 ++++++++++++ desafio_RafaelaAyres/src/conexao_db.py | 7 ++ .../src/respostas_questoes.py | 40 ++++++++ 15 files changed, 364 insertions(+) create mode 100644 desafio_RafaelaAyres/output/generos_maior_receita.png create mode 100644 desafio_RafaelaAyres/output/top_10_filmes.png create mode 100644 desafio_RafaelaAyres/readme.md create mode 100644 desafio_RafaelaAyres/requirements.txt create mode 100644 desafio_RafaelaAyres/sql/__init__.py create mode 100644 desafio_RafaelaAyres/sql/questao_1.sql create mode 100644 desafio_RafaelaAyres/sql/questao_2.sql create mode 100644 desafio_RafaelaAyres/sql/questao_3.sql create mode 100644 desafio_RafaelaAyres/src/__init__.py create mode 100644 desafio_RafaelaAyres/src/cases/__init__.py create mode 100644 desafio_RafaelaAyres/src/cases/questao_1.py create mode 100644 desafio_RafaelaAyres/src/cases/questao_2.py create mode 100644 desafio_RafaelaAyres/src/cases/questao_3.py create mode 100644 desafio_RafaelaAyres/src/conexao_db.py create mode 100644 desafio_RafaelaAyres/src/respostas_questoes.py diff --git a/desafio_RafaelaAyres/output/generos_maior_receita.png b/desafio_RafaelaAyres/output/generos_maior_receita.png new file mode 100644 index 0000000000000000000000000000000000000000..91c2368ed318438b4bc1e3f451cbcbd047b7876f GIT binary patch literal 42652 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 JVQaUg{|yIVlEwf4 literal 0 HcmV?d00001 diff --git a/desafio_RafaelaAyres/output/top_10_filmes.png b/desafio_RafaelaAyres/output/top_10_filmes.png new file mode 100644 index 0000000000000000000000000000000000000000..f40515105c453b241f3f5b41403dbae873098fd4 GIT binary patch literal 36621 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 literal 0 HcmV?d00001 diff --git a/desafio_RafaelaAyres/readme.md b/desafio_RafaelaAyres/readme.md new file mode 100644 index 00000000..c8e69e9b --- /dev/null +++ b/desafio_RafaelaAyres/readme.md @@ -0,0 +1,96 @@ +# Desafio Técnico: Analista de Dados e BI (Python/SQL) + +Olá! Meu nome é **Rafaela Ayres** e este repositório contém a minha resolução para o desafio técnico do processo seletivo para a vaga de **Analista de Dados e BI (Python/SQL - Remoto)**. + +O desafio é composto por duas frentes principais: + +- **3 Testes de consultas em SQL** +- **3 Cases práticos desenvolvidos em Python** + +--- + +## 🚀 Como Executar o Projeto + +Para garantir a reprodutibilidade dos scripts, certifique-se de ter o **Python 3** instalado em sua máquina e siga os passos abaixo no seu terminal: + +### 1. Clonar o repositório e acessar a pasta do projeto + +```bash +cd desafio_RafaelaAyres +``` + +### 2. Configurar o Ambiente Virtual (venv) + +Crie e ative o ambiente isolado para evitar conflitos de dependências: + +**Linux / macOS:** + +```bash +python3 -m venv venv +source venv/bin/activate +``` + +**Windows (Prompt de Comando / PowerShell):** + +```bash +python -m venv venv +.\venv\Scripts\activate +``` + +### 3. Instalar as Dependências + +Com o ambiente virtual ativo, instale os pacotes necessários listados dentro da pasta: + +```bash +pip install -r requirements.txt +``` + +> **Nota:** Certifique-se de que o arquivo de requerimentos está nesta pasta antes de rodar o comando. + +--- + +## ⚙️ Estrutura do Projeto e Conexão + +### Conexão com o Banco de Dados + +Toda a lógica de autenticação e comunicação com o banco de dados está centralizada na pasta de módulos principais: + +- 📂 `src/conexao_db.py` + +--- + +## 📊 Resolução dos Testes + +### 1. Testes SQL + +Os arquivos de consulta estruturada contendo a lógica individual de cada questão estão localizados em: + +- 📂 `sql/questao_1.sql` +- 📂 `sql/questao_2.sql` +- 📂 `sql/questao_3.sql` + +Para visualizar as saídas e resultados reais dessas consultas no terminal, execute o script unificado de respostas: + +```bash +python src/respostas_questoes.py +``` + +### 2. Cases Python + +Os scripts de manipulação de dados, lógica de negócios e análises gráficas estão separados por arquivos dentro do diretório de cases: + +- 📂 `src/cases/questao_1.py` +- 📂 `src/cases/questao_2.py` +- 📂 `src/cases/questao_3.py` + +**Como executar:** Você pode rodar cada arquivo separadamente para analisar os outputs. Exemplo: + +```bash +python src/cases/questao_1.py +``` + +> 📌 **Observação sobre a Questão 3:** Os gráficos e visualizações gerados por este script serão salvos automaticamente no diretório de saída em `src/output/`. + +--- + +Disponível para feedbacks e dúvidas técnicas sobre a arquitetura da solução! \ No newline at end of file diff --git a/desafio_RafaelaAyres/requirements.txt b/desafio_RafaelaAyres/requirements.txt new file mode 100644 index 00000000..1ae819c8 --- /dev/null +++ b/desafio_RafaelaAyres/requirements.txt @@ -0,0 +1,17 @@ +contourpy==1.3.3 +cycler==0.12.1 +fonttools==4.63.0 +greenlet==3.5.1 +kiwisolver==1.5.0 +matplotlib==3.10.9 +numpy==2.4.6 +packaging==26.2 +pandas==3.0.3 +pillow==12.2.0 +PyMySQL==1.2.0 +pyparsing==3.3.2 +python-dateutil==2.9.0.post0 +seaborn==0.13.2 +six==1.17.0 +SQLAlchemy==2.0.49 +typing_extensions==4.15.0 diff --git a/desafio_RafaelaAyres/sql/__init__.py b/desafio_RafaelaAyres/sql/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/desafio_RafaelaAyres/sql/questao_1.sql b/desafio_RafaelaAyres/sql/questao_1.sql new file mode 100644 index 00000000..9ae46b64 --- /dev/null +++ b/desafio_RafaelaAyres/sql/questao_1.sql @@ -0,0 +1,6 @@ +-- 1) Quais são os 10 produtos mais caros da empresa? + +SELECT product_cod as codigo, product_name as nome_produto, product_val as valor_produto, dep_name as departamento +FROM data_product +ORDER BY Product_val DESC +LIMIT 10; diff --git a/desafio_RafaelaAyres/sql/questao_2.sql b/desafio_RafaelaAyres/sql/questao_2.sql new file mode 100644 index 00000000..b0a2c997 --- /dev/null +++ b/desafio_RafaelaAyres/sql/questao_2.sql @@ -0,0 +1,6 @@ +-- 2) Quais são as seções dos departamentos 'BEBIDAS' e 'PADARIA'? + +SELECT DISTINCT section_cod AS cod_secao, section_name AS secao, DEP_cod AS cod_dep, dep_name AS departamento +FROM data_product +WHERE dep_name IN ('BEBIDAS', 'PADARIA') +ORDER BY dep_name, section_name; diff --git a/desafio_RafaelaAyres/sql/questao_3.sql b/desafio_RafaelaAyres/sql/questao_3.sql new file mode 100644 index 00000000..563d5f69 --- /dev/null +++ b/desafio_RafaelaAyres/sql/questao_3.sql @@ -0,0 +1,8 @@ +-- 3) Qual foi o total de vendas de produtos (em dólares) de cada área de negócios no primeiro trimestre de 2019? + +SELECT store.business_name AS area_de_negocios, SUM(sales.sales_value) AS total_vendas +FROM data_store_cad as store +JOIN data_store_sales as sales +WHERE store.store_code = sales.store_code AND sales.date BETWEEN '2019-01-01' AND '2019-03-31' +GROUP BY store.business_name +ORDER BY total_vendas DESC; diff --git a/desafio_RafaelaAyres/src/__init__.py b/desafio_RafaelaAyres/src/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/desafio_RafaelaAyres/src/cases/__init__.py b/desafio_RafaelaAyres/src/cases/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/desafio_RafaelaAyres/src/cases/questao_1.py b/desafio_RafaelaAyres/src/cases/questao_1.py new file mode 100644 index 00000000..02957663 --- /dev/null +++ b/desafio_RafaelaAyres/src/cases/questao_1.py @@ -0,0 +1,55 @@ +# 1) A equipe de desenvolvimento estava cansada de desenvolver as mesmas consultas de sempre, +# variando apenas os filtros de acordo com as exigências do chefe. + +import pandas as pd +from src.conexao_db import get_engine + +engine = get_engine() + +def retrieve_data(product_code=None, store_code=None, date=None): + + query = "SELECT * FROM data_product_sales WHERE 1=1" + + if product_code is not None: + query += f" AND PRODUCT_CODE = {product_code}" + + if store_code is not None: + query += f" AND STORE_CODE = {store_code}" + + if date is not None: + query += f" AND DATE BETWEEN '{date[0]}' AND '{date[1]}'" + + df = pd.read_sql(query, engine) + + return df + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= LISTA DE TESTES #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +teste_product = retrieve_data( + product_code=None, + store_code=7, + date=None +) + +teste_store = retrieve_data( + product_code=18, + store_code=None, + date=None +) + +teste_data = retrieve_data( + product_code=None, + store_code=None, + date=['2019-01-01', '2019-01-31'] +) + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= RESULTADOS #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +print("\nTeste por código de produto:") +print(teste_product) + +print("Teste por código de loja:") +print(teste_store) + +print("\nTeste por intervalo de datas:") +print(teste_data) \ No newline at end of file diff --git a/desafio_RafaelaAyres/src/cases/questao_2.py b/desafio_RafaelaAyres/src/cases/questao_2.py new file mode 100644 index 00000000..7391ce13 --- /dev/null +++ b/desafio_RafaelaAyres/src/cases/questao_2.py @@ -0,0 +1,63 @@ +# pylint : disable=line-too-long +# 2) Um novo cliente lhe enviou duas consultas prontas para serem respondidas. Elas estão listadas abaixo: + +import pandas as pd +from src.conexao_db import get_engine + +engine = get_engine() + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= CONSULTAS #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +consulta_1 = """ +SELECT + STORE_CODE, + STORE_NAME, + START_DATE, + END_DATE, + BUSINESS_NAME, + BUSINESS_CODE +FROM data_store_cad +""" + +consulta_2 = """ +SELECT + STORE_CODE, + DATE, + SALES_VALUE, + SALES_QTY +FROM data_store_sales +WHERE DATE BETWEEN '2019-01-01' AND '2019-12-31' +""" + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= MERGE DAS CONSULTAS #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +df1 = pd.read_sql(consulta_1, engine) +df2 = pd.read_sql(consulta_2, engine) + +merge_consultas = df1.merge(df2, on="STORE_CODE", how="inner") + +df_final = ( + merge_consultas + .groupby(["STORE_NAME", "BUSINESS_NAME"], as_index=False) + .agg({ + "SALES_VALUE": "sum", + "SALES_QTY": "sum" + }) +) + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= TRATAMENTO #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +df_final["TM"] = (df_final["SALES_VALUE"] / df_final["SALES_QTY"]).round(2) + +df_final = df_final.rename(columns={ + 'STORE_NAME': 'Loja', + 'BUSINESS_NAME': 'Categoria' +}) + +df_final = df_final[["Loja", "Categoria", "TM"]].to_string(index=False) + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= RESULTADOS #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +print("\nQuestão 2:") +print(df_final) + diff --git a/desafio_RafaelaAyres/src/cases/questao_3.py b/desafio_RafaelaAyres/src/cases/questao_3.py new file mode 100644 index 00000000..52ed5108 --- /dev/null +++ b/desafio_RafaelaAyres/src/cases/questao_3.py @@ -0,0 +1,66 @@ +# 3) Criando sua própria visualização +import pandas as pd +import matplotlib.pyplot as plt +import seaborn as sns +from src.conexao_db import get_engine + +engine = get_engine() + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= CONSULTAS #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +# O top 10 dos filmes mais bem avaliados do IMDB + +Consulta_1 = """ +SELECT Title AS 'Filme', Genre AS 'Gênero', Year as 'Ano de lançamento', Votes as 'Votos' +FROM IMDB_movies +ORDER BY Votos DESC +LIMIT 10; +""" + +# Os gêneros dos filmes que tem maior receita em bilheteria no ano de 2016 + +consulta_2 = """ +SELECT Genre AS 'Gênero', SUM(RevenueMillions) as 'Receita Total(USD Milhões)' +FROM IMDB_movies +WHERE year = 2016 +GROUP BY Genre +ORDER BY SUM(RevenueMillions) DESC +LIMIT 8; +""" + +df_filmes_avaliados = pd.read_sql(Consulta_1, engine) + +df_generos_maior_receita = pd.read_sql(consulta_2, engine) + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= GERAÇÃO DE GRÁFICOS #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +# O top 10 dos filmes mais bem avaliados do IMDB +df_filmes_avaliados['Votos_Milhoes'] = df_filmes_avaliados['Votos'] / 1000000.0 +plt.figure(figsize=(10, 6)) +sns.barplot(x='Votos_Milhoes', y='Filme', data=df_filmes_avaliados, color='royalblue') + +plt.title('TOP 10 Filmes com maior engajamento no IMDB', fontsize=14, pad=15) +plt.xlabel('Votos (Em Milhões)', fontsize=12, labelpad=10) +plt.ylabel('Filme', fontsize=12) +plt.savefig('output/top_10_filmes.png', bbox_inches='tight') +plt.close() + + +# Os gêneros dos filmes que tem maior receita em bilheteria no ano de 2016 +plt.figure(figsize=(10, 6)) +sns.barplot(x='Receita Total(USD Milhões)', y='Gênero', data=df_generos_maior_receita, color='royalblue') +plt.title('Os gêneros com maior receita em 2016', fontsize=12) +plt.xlabel('Receita Total(USD Milhões)', fontsize=12, labelpad=10) +plt.ylabel('Gênero', fontsize=12) +plt.savefig('output/generos_maior_receita.png', bbox_inches='tight') +plt.close() + +# Ambos gráficos foram salvos na pasta output do projeto. + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= RESULTADOS #=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +print("Questão 1:") +print(df_filmes_avaliados) + +print("Questão 2:") +print(df_generos_maior_receita) \ No newline at end of file diff --git a/desafio_RafaelaAyres/src/conexao_db.py b/desafio_RafaelaAyres/src/conexao_db.py new file mode 100644 index 00000000..d1880402 --- /dev/null +++ b/desafio_RafaelaAyres/src/conexao_db.py @@ -0,0 +1,7 @@ +from sqlalchemy import create_engine + +def get_engine(): + return create_engine( + "mysql+pymysql://looqbox-challenge:looq-challenge@35.199.115.174/looqbox-challenge" + ) + diff --git a/desafio_RafaelaAyres/src/respostas_questoes.py b/desafio_RafaelaAyres/src/respostas_questoes.py new file mode 100644 index 00000000..1a1fbb77 --- /dev/null +++ b/desafio_RafaelaAyres/src/respostas_questoes.py @@ -0,0 +1,40 @@ +import pandas as pd +from .conexao_db import get_engine + +engine = get_engine() + +# src/respostas_questoes/questao_1.sql + +with open("sql/questao_1.sql", "r") as file: + query = file.read() + +df = pd.read_sql(query, engine) + +print("Questão 1:") +print(df) + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +# src/respostas_questoes/questao_2.sql + +with open("sql/questao_2.sql", "r") as file: + query = file.read() + +df2 = pd.read_sql(query, engine) + +print("\nQuestão 2:") +print(df2) + +#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#= + +# src/respostas_questoes/questao_3.sql + +with open("sql/questao_3.sql", "r") as file: + query = file.read() + +df3 = pd.read_sql(query, engine) + +df3["total_vendas"] = df3["total_vendas"].map(lambda x: f"$ {x:,.2f}") + +print("\nQuestão 3:") +print(df3) From 7d17e0dcd44524c7fed927ccd288591290d2f9aa Mon Sep 17 00:00:00 2001 From: Rafaela Date: Thu, 21 May 2026 15:24:17 -0300 Subject: [PATCH 2/3] atualizando env --- .gitignore | 6 ++++++ desafio_RafaelaAyres/.env | 4 ++++ desafio_RafaelaAyres/src/conexao_db.py | 13 ++++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 .gitignore create mode 100644 desafio_RafaelaAyres/.env diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..f3acb2dc --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +__pycache__/ +*.pyc +*.pyo +*.pyd +venv/ +.env \ No newline at end of file diff --git a/desafio_RafaelaAyres/.env b/desafio_RafaelaAyres/.env new file mode 100644 index 00000000..219e1b0c --- /dev/null +++ b/desafio_RafaelaAyres/.env @@ -0,0 +1,4 @@ +IP=35.199.115.174 +User=looqbox-challenge +Pass=looq-challenge + diff --git a/desafio_RafaelaAyres/src/conexao_db.py b/desafio_RafaelaAyres/src/conexao_db.py index d1880402..75c3d7b0 100644 --- a/desafio_RafaelaAyres/src/conexao_db.py +++ b/desafio_RafaelaAyres/src/conexao_db.py @@ -1,7 +1,14 @@ +import os from sqlalchemy import create_engine +from dotenv import load_dotenv + +load_dotenv() def get_engine(): + User = os.getenv("User") + Pass = os.getenv("Pass") + IP = os.getenv("IP") + return create_engine( - "mysql+pymysql://looqbox-challenge:looq-challenge@35.199.115.174/looqbox-challenge" - ) - + f"mysql+pymysql://{User}:{Pass}@{IP}/looqbox-challenge" + ) \ No newline at end of file From 5701b0c0ba368236b5f297ea532080f8ef41d799 Mon Sep 17 00:00:00 2001 From: Rafaela Date: Thu, 21 May 2026 15:26:34 -0300 Subject: [PATCH 3/3] atualizando env --- desafio_RafaelaAyres/.env | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 desafio_RafaelaAyres/.env diff --git a/desafio_RafaelaAyres/.env b/desafio_RafaelaAyres/.env deleted file mode 100644 index 219e1b0c..00000000 --- a/desafio_RafaelaAyres/.env +++ /dev/null @@ -1,4 +0,0 @@ -IP=35.199.115.174 -User=looqbox-challenge -Pass=looq-challenge -