Você está na página 1de 1

tryber /

sd-032-b-project-job-i…

Code Issues Pull requests 47

0 stars 0 forks 9 watching

50 Branches 0 Tags Activity

Custom properties

Private repository

main Code

trybe-tech-ops last week

.github last week

.images last week

.trybe last week

.vscode last week

data last week

src last week

tests last week

.gitignore last week

Dockerfile last week

README.md last week

View all files

README

Boas-vindas ao
repositório do Job
Insights!
Para realizar o projeto, atente-se a cada passo
descrito a seguir, e se tiver qualquer dúvida,
nos envie por Slack! #vqv

Aqui você vai encontrar os detalhes de como


estruturar o desenvolvimento do seu projeto a
partir deste repositório, utilizando uma branch
específica e um Pull Request para colocar seus
códigos.

Termos e acordos
Ao iniciar este projeto, você concorda com as
diretrizes do Código de Conduta e do Manual
da Pessoa Estudante da Trybe.

Entregáveis
Como entregar

O que deverá ser desenvolvido

Data de Entrega

Orientações
⚠ Antes de começar a desenvolver

Durante o desenvolvimento

Estrutura do Projeto

Linter

Ambiente Virtual

Testes

Para executar os testes certifique-se de que


você está com o ambiente virtual ativado.

Executar os testes

$ python3 -m pytest

O arquivo pyproject.toml já configura


corretamente o pytest. Entretanto, caso você
tenha problemas com isso e queira
explicitamente uma saída completa, o comando
é:

python3 -m pytest -s -vv

Caso precise executar apenas um arquivo de


testes basta executar o comando:

python3 -m pytest tests/nomedoarquivo.py

Caso precise executar apenas uma função de


testes basta executar o comando:

python3 -m pytest -k nome_da_func_de_tests

Se desejar que os testes parem de ser


executados quando acontecer o primeiro erro,
use o parâmetro -x

python3 -m pytest -x tests/test_jobs.py

Para executar um teste específico de um


arquivo, basta executar o comando:

python3 -m pytest tests/nomedoarquivo.py::te

Se quiser saber mais sobre a instalação de


dependências com pip , veja esse artigo.

Depois de terminar o desenvolvimento


(opcional)

Revisando um pull request

Nos dê feedbacks sobre o projeto!

Compartilhe seu portfólio!

Requisitos Obrigatórios

1 - Count Ocurrences (Testes)

Implemente em:
tests/counter/test_counter.py

A empresa cliente contratou um relatório que


informa a quantidade de ocorrências das
palavra Python e Javascript nos dados e, para
isso, temos uma implementação pronta em
src/pre_built/counter.py . Durante o
desenvolvimento, sofremos com alguns bugs ,
que já foram resolvidos. Para termos certeza e
confiança da nossa entrega, no entanto, e não
corrermos riscos, precisaremos de testes
automatizados que garantam isso!

O nome deste teste deve ser test_counter , e


ele deve garantir que atenda estas
especificações:

Chamar a função count_ocurrences


passando dois parâmetros:
path uma string com o caminho do
arquivo ( data/jobs.csv );
word uma string com a palavra a ser
contabilizada;
Garantir que a função retorna corretamente
a quantidade de ocorrências da palavra
solicitada;
A contagem de palavras deve ser case
insentitive, ou seja, não diferenciar
letras maiúsculas de minúsculas;

Como seu teste é avaliado

O que será verificado pelo avaliador

2 - Implemente o método read

Implemente em: src/insights/jobs.py

Preparando para Processar Dados de


Arquivos CSV com a Classe ProcessJobs

O cliente ficou muito satisfeito com o excelente


trabalho que você realizou, implementando
todos os testes solicitados. Agora, eles estão
empolgados para dar continuidade a um de
seus projetos. A próxima etapa envolverá o
processamento de dados contidos em arquivos
CSV.

A classe ProcessJobs é fundamental nesse


contexto, pois é responsável por lidar com
operações relacionadas à leitura e
processamento de dados sobre trabalhos a
partir de um arquivo CSV. A classe apresenta
métodos que permitem ler os dados de um
arquivo CSV, obter tipos únicos de trabalhos e
filtrar os trabalhos com base em seus tipos.

Antes de iniciar vamos compreender a


funcionalidade da classe ProcessJobs. O
código encontra-se no arquivo
src/insights/jobs.py . Neste arquivo, você
encontrará a implementação da classe
ProcessJobs, que contém métodos específicos
para realizar tarefas detalhadas, de acordo com
os requisitos a seguir:

Para começarmos a processar os dados,


devemos antes carregá-los em nossa
aplicação. E o método read será responsável
por abrir o arquivo CSV e retornar os dados no
formato de uma lista de dicionários.

O método deve receber um path (uma


string com o caminho para um arquivo).
O método deve abrir o arquivo e ler seus
conteúdos.
O método deve tratar o arquivo como CSV.
O método read deve ler o csv e armazenar
os dados em self.job_list , que será
lista dicionários, onde as chaves são os
cabeçalhos de cada coluna e os valores
correspondem a cada linha.

Exemplo

Teste manual

O que será verificado pelo avaliador

3 - Implemente o método
get_unique_job_types

Implemente em: src/insights/jobs.py

Agora já temos como carregar os dados e


podemos começar a extrair informação deles.
Primeiro, vamos identificar quais tipos de
empregos existem.

A função deve retornar uma lista de valores


únicos presentes na coluna job_type .

O que será verificado pelo avaliador

4 - Implemente o método
filter_by_multiple_crit
eria

Implemente em: src/insights/jobs.py

Os empregos estão listados em um aplicativo


web. Para permitir que a pessoa usuária possa
filtrar os empregos por tipo de emprego, vamos
precisar implementar mais um método na nossa
classe ProcessJobs .

O método deve receber uma lista de


empregos representados por dicionários.
Deve receber um dicionário filter_criteria
que contém pares chave-valor, onde a -
chave é o critério de filtragem ( industry
ou job_type ) e o valor é o valor associado
a esse critério.
O método deve retornar uma lista de
empregos que correspondem a todos os
critérios fornecidos.

Exemplo do tipo de dado que o primeiro


parâmetro do nosso método pode receber:

jobs = [
{"id": 1, "industry": "IT", "job_type"
{"id": 2, "industry": "Healthcare"
{"id": 3, "industry": "Finance"
{"id": 4, "industry": "IT", "job_type"
{"id": 5, "industry": "Healthcare"
{"id": 6, "industry": "Finance"
{"id": 7, "industry": "IT", "job_type"
{"id": 8, "industry": "Healthcare"
]

Exemplo de uso dos métodos:

process_jobs = ProcessJobs()

# Filtrar por indústria "Healthcare" e tipo


result_by_multiple_criteria = process_jobs.f
jobs, {"industry": "Healthcare", "job_ty
)

O que será verificado pelo avaliador

5 - Implemente o método
get_unique_industries

Implemente em:
src/insights/industries.py

Agora iremos identificar quais indústrias estão


representadas nesse conjunto de dados. Para
facilitar o trabalho, a outra pessoa
desenvolvedora envolvida no projeto já deixou a
classe ProcessIndustries implementada
herdando a classe ProcessJobs .

O método deve retornar uma lista de


valores únicos presentes na coluna
industry .

O método desconsidera valores vazios.

O que será verificado pelo avaliador

6 - Implemente o método
get_max_salary

Implemente em:
src/insights/salaries.py

Dentro do arquivo mencionado, você


encontrará a classe ProcessSalaries .

O método get_max_salary deve extrair o


maior salário dos dados que foram lidos e
armazenados previamente na lista
self.jobs_list . A classe ProcessSalaries
herda funcionalidades da classe ProcessJobs ,
o que inclui a capacidade de acessar dados
previamente lidos sem a necessidade de uma
nova leitura do arquivo.

Os dados contêm informações sobre as faixas


salariais de cada emprego apresentado. Agora,
nossa tarefa é identificar o valor mais alto entre
todas essas faixas.

O método deve ignorar os valores


ausentes.
O método deve retornar um valor inteiro
com o maior salário presente na
coluna. max_salary .

O que será verificado pelo avaliador

7 - Implemente o método
get_min_salary

Implemente em:
src/insights/salaries.py

Os dados apresentam faixas salariais para cada


emprego exibido. Vamos agora encontrar o
menor valor de todas as faixas.

O método get_min_salary deve extrair o


menor salário dos dados que foram lidos e
armazenados previamente na lista
self.jobs_list .

O método deve ignorar os valores


ausentes.
O método deve retornar um valor inteiro
com o menor salário presente na coluna
min_salary .

O que será verificado pelo avaliador

8 - Implemente o método
matches_salary_range

Implemente em:
src/insights/salaries.py

O aplicativo vai precisar filtrar os empregos por


salário também. Implemente o método
matches_salary_range para conferir que o
salário procurado está dentro da faixa salarial
daquele emprego. Vamos aproveitar também
para conferir se a faixa salarial faz sentido --
isto é, se o valor mínimo é menor que o valor
máximo.

O método deve receber um dicionário job


como primeiro parâmetro, com as chaves
min_salary e max_salary , que podem
ser números ou strings que representem
números.
O método deve receber um número ou
string que represente o número salary
como segundo parâmetro.
O método deve lançar um erro
ValueError nos seguintes casos:
alguma das chaves min_salary ou
max_salary estão ausentes no
dicionário;
alguma das chaves min_salary ou
max_salary tem valores não-
numéricos;
o valor de min_salary é maior que o
valor de max_salary ;
o parâmetro salary tem valores não
numéricos;
O método deve retornar True se o salário
procurado estiver dentro da faixa salarial
ou False se não estiver.

O que será verificado pelo avaliador

Requisitos Bônus

9 ( Bônus ) - Implemente o
método
filter_by_salary_range

Implemente em:
src/insights/salaries.py

Agora vamos implementar o filtro propriamente


dito. Para esta filtragem, podemos usar a
método implementado no requisito anterior --
tomando o cuidado de descartar os empregos
que apresentarem faixas salariais inválidas.

O método deve receber uma lista de


dicionários jobs como primeiro
parâmetro.
O método deve receber um número ou
string salary como segundo parâmetro.
O método deve ignorar os empregos com
valores inválidos para min_salary ou
max_salary .
Observação: strings que representem
números são valores válidos para
min_salary ou max_salary .

O método deve retornar uma lista com


todos os empregos onde o salário salary .
estiver entre os valores da coluna
min_salary e max_salary .

O que será verificado pelo avaliador

10 ( Bônus ) - Read Brazilian


File (Testes)

Implemente em:
tests/brazilian/test_brazilian_jobs.
py

ps: O funcionamento da função criada para


esse teste depende da implementação do
método read em jobs.py

A empresa cliente analisa relatórios em inglês,


porém agora ela quer expandir seus negócios
aqui para o Brasil e deseja analisar relatórios em
português também. No entanto, as chaves do
dict que usamos pra organizar os dados
devem continuar em inglês. Ou seja: para gerar
o relatório, deveremos ler as chaves em
português e traduzi-las para inglês para povoar
os nossos dados.

Nossa equipe já implementou essa função, a


read_brazilian_file , na qual adotamos a
estratégia de chamar o método original read ,
que implementamos no requisito 1 , e depois
traduzimos as chaves para o inglês. Agora
precisamos criar testes para ter certeza que
esta tudo certo!

O nome deste teste deve ser


test_brazilian_jobs , e ele deve garantir que
atenda as seguintes especificações:

Chamar a função read_brazilian_file e


ela deve receber um parâmetro:
path que é uma string com o
caminho do arquivo csv em português
( tests/mocks/brazilians_jobs.csv )
;
Retorna uma lista de dicionários com
as chaves em inglês

Exemplo

Como seu teste é avaliado

O que será verificado pelo avaliador

Releases

No releases published
Create a new release

Packages

No packages published
Publish your first package

Languages

Python 79.3% HTML 15.0% Shell 4.7%


Dockerfile 1.0%

Terms Privacy Security Status Docs Contact


Manage cookies Do not share my personal information

© 2024 GitHub, Inc.

Você também pode gostar