Tarefa 5 - Trabalhando com dados

Prazo de entrega recomendado:

Nesta tarefa vamos exercitar a criação de funções e como utilizá-las para resolver problemas mais complexos.


Cientista de dados é o profissional que investiga dados, tentando explicar eventos, identificar tendências, prever indicadores, correlacionar acontecimentos etc. Entre as suas principais ferramentas de trabalho estão as medidas estatísticas, como média, mediana, moda, etc. Como as aplicações modernas acumulam milhares e até milhões de pontos de dados, é indispensável utilizar um computador para preparar, filtrar, manipular e processar os dados. Nesta tarefa, você implementará algumas ferramentas para ajudar um cientista de dados a visualizar e explorar conjuntos de dados.

Ciência de Dados

1. Implementando as funções básicas

Embora os dados que queremos analisar possam ter as mais diversas aplicações, muitas vezes queremos fazer um mesmo tipo de pergunta. Por exemplo, podemos estar interessados na média de idades dos clientes de uma loja, ou na média de salários dos funcionários de uma companhia. Por esse motivo, ao invés de implementar o mesmo algoritmo diversas vezes, utilizamos um módulos com funções genéricas. Você deve construir um módulo em Python com diversas funções para análise e processamento de dados.

Seu repositório tem um arquivo chamado modulo_analise.py com vários stubs das funções que devem ser implementadas. A finalidade de cada função está descrita em uma string de documentação correspondente. Complete a implementação dessas funções.

Atenção: Não utilize funções prontas do Python para implementar os algoritmos pedidos (você pode usar apenas funções e métodos prontos listados na seção de dicas). Como agora só estamos exercitando o uso de funções, não é necessário implementar os algoritmos mais rápidos e eficientes.

Testando seu módulo

Como um módulo é apenas um conjunto de funções, você pode se perguntar: como podemos testar esse módulo antes de utilizá-lo em um programa? A resposta é escrevendo uma ou mais funções de teste para cada função dos módulos, que passa alguns parâmetros de entrada de exemplo e compara o resultado obtido com o resultado esperado. Cada uma dessas funçõezinhas é chamada de teste de unidade. Nesta tarefa, um conjunto de testes de unidades já está pronto no arquivo teste_modulo_analise.py. Você não deve modificá-lo, mas deve ler e entender o que ele faz. No futuro, você precisará criar seus próprios testes de unidade.

2) Explorando filmes

Um cientista de dados — e cinéfilo amador — encontrou o arquivo testes/filmes.dat com uma lista de 4000 filmes. Cada linha do arquivo é formada pelo identificador de um filme, o país de origem, o ano de lançamento, a classificação indicativa e a duração em minutos. Como o arquivo é muito grande, ele gostaria de criar um programa para resumir e descobrir diversas curiosidades sobre esses filmes.

Filmes

Você deve criar um programa explorando-filmes.py que realiza uma série de tarefas listadas abaixo. Seu programa deverá estar organizado em funções, cada uma com uma responsabilidade bem definida e documentada. Evite repetição de código, reutilizando funções sempre que fizer sentido, particularmente as funções do módulo modulo_analise.py.

Para determinar qual ação seu programa irá realizar em cada execução, ele irá receber um parâmetro com um identificador da tarefa. Em Python, os parâmetros são passados pela lista sys.argv. Veja um programa de exemplo que recebe parâmetros passados pela de linha de comando e executa diferentes ações dependendo desses parâmetros.

import sys

def somar(a, b):
    return a + b

def subtrair(a, b):
    return a - b

def main():
    if len(sys.argv) < 4:
        print("Uso inválido")
        return
    acao = sys.argv[1]
    a, b = int(sys.argv[2]), int(sys.argv[3])
    if acao == 'somar':
        resultado = somar(a, b)
    else:
        resultado = subtrair(a, b)
    print(resultado)

main()
user@host:~/ra123456/tarefa05/$ python3 calcular.py somar 40 2
42

a) Produtividade

Para a ação produtividade, dados inteiros inicio e fim, informe a quantidade de filmes lançados em cada ano, desde inicio até fim.

Entrada

1990 1994

Saída

1990: 11
1991: 12
1992: 14
1993: 12
1994: 6

b) Anos presentes

Para a ação anos_presentes, dados inteiros inicio e fim, informe, em ordem crescente, os anos em que foram lançados filmes, desde inicio até fim.

Entrada

1990 1994

Saída

1990
1991
1992
1993
1994

c) Filmes por classificação

Para a ação filmes_por_classificacao, dada uma string classificacao, informe, em ordem crescente, os identificadores dos filmes com a classificação indicativa classificacao.

Entrada

TV-Y7-FV

Saída

476
954
1098
8679

d) Histograma dos anos

Para a ação histograma_dos_anos, dada uma lista intervalos, informe o histograma dos anos de lançamento dos filmes, considerando os intervalos formados por números seguidos [intervalos[i], intervalos[i+1]), onde o primeiro intervalo é fechado e o segundo aberto.

Entrada

2000 2005 2008 2010

Saída

[2000, 2005): 146
[2005, 2008): 147
[2008, 2010): 146

e) Filmes por país e classificação

Para a ação filmes_por_pais_e_classificacao, dadas strings pais e classificacao, informe, em ordem crescente, os identificadores dos filmes lançados no país pais e que possuem classificação indicativa classificacao.

Entrada

Brazil R

Saída

7932

Dicas

Correção

Depois de submetida e terminada a tarefa, você deverá apresentá-la a um monitor PED. Para isso, você deve procurar atendimento em algum horário com monitor PED e digitar apresentar 5 no canal fila-apresentar para entrar na fila.

Esta tarefa contém diversos exercícios e atividades. É recomendável realizar todas elas. Para passar na tarefa, você deve resolver corretamente pelo menos sete testes de unidade do módulo modulo_analise.py e passar em pelo menos um teste de unidade do programa explorando-filmes.py.

A pasta da tarefa no seu repositório vem inicialmente com um arquivo nao_corrigir.txt que serve para indicar que você ainda está trabalhando nesta tarefa. Você pode realizar quantos pushes quanto forem necessários. O monitor só irá corrigir sua tarefa quando esse arquivo for removido do repositório.