Tarefa 6 - Monitorando o clima

Prazo de entrega recomendado:

Você deverá visualizar e analisar dados climáticos. Para isso, precisará exercitar algoritmos iterativos e ordenação.


Preocupados com o aquecimento global, um grupo de meteorologistas precisa analisar os dados climáticos de alguns países. Um dos objetivos é identificar padrões nas mudanças de temperatura além de dados discrepantes, normalmente chamados de outliers. Para isso, você precisará processar um arquivo com um histórico de temperaturas de cada país.

Os históricos de temperatura dos países estão armazenados em diversos arquivos CSV disponíveis em seu diretório. Por exemplo, os dados da Suíça estão em um arquivo chamado dados/Suica.csv. Este arquivo possui um registro de temperatura por linha, cada uma composta por duas colunas separadas por vírgula. A primeira coluna contém o mês em que foi realizado o registro e a segunda, a temperatura média naquele mês. Veja um trecho do arquivo:

01/2000,-1.81
02/2000,1.856
03/2000,4.121
04/2000,7.904
05/2000,13.393
...
11/2013,4.219
12/2013,-0.564

Nesse exemplo, os dados correspondem às temperaturas médias mensais durante 14 anos, compreendendo o período de 01/2000 até 12/2013. Observe que neste exemplo, as linhas já estão ordenadas por data, mas nem todos os arquivos estão tão bem organizados.

Visando facilitar a análise dos dados por parte dos meteorologistas, você precisará realizar diversas subtarefas a fim de cumprir a sua missão.

1. Descobrindo tendências

Num primeiro momento, os meteorologistas gostariam de entender a tendência de crescimento da temperatura média anual. O problema é que, devido a alguns fenômenos climáticos, como El Niño, alguns meses podem ter uma temperatura muito atípica. Isso pode influenciar na temperatura média anual e prejudicar a análise da tendência.

Para determinar se um mês tem temperatura discrepante, os meteorologistas precisam calcular o desvio padrão das medidas em cada ano. Eles decidiram que um mês tem uma medida regular se a temperatura desse mês, $\tau$, não diferir da média daquele ano, $\mu$, de mais do que uma vez e meia o desvio padrão do ano, $\sigma$, isso é, se $\mu - 1{,}5\sigma \le \tau \le \mu + 1{,}5\sigma$. Todas as outras medidas desse ano são discrepantes.

Lembre-se de que o desvio padrão de um conjunto de $n$ medidas é dado pela fórmula:

$$ \sigma = \sqrt{\frac{\sum_{i = 0}^n(\tau_i - \mu)^2}{n}}. $$

Sua tarefa é construir um programa tendencia.py que calcula as médias anuais de temperatura de um país.

Entrada

A entrada contém uma linha contendo o nome do arquivo CSV.

dados/Suica.csv

Saída

A saída deve conter a sequência dos meses discrepantes e as médias de temperaturas anuais, excluídos os meses discrepantes, conforme o exemplo. Os dados devem ser apresentados em ordem de data.

Outliers:
01/2000
12/2001
01/2002
08/2003
01/2006
07/2006
12/2007
01/2009
07/2010
01/2011
02/2012
07/2013

Tendência de média anual:
2000: 9.51
2001: 8.93
2002: 9.37
2003: 7.54
2004: 7.85
2005: 7.57
2006: 8.26
2007: 9.42
2008: 8.11
2009: 9.35
2010: 6.16
2011: 9.74
2012: 9.31
2013: 6.55

2. Identificando eventos

Mais do que identificar a tendência do crescimento da temperatura média anual, é importante identificar fenômenos isolados que provocaram variação pontual de temperatura. Assim, é importante listar quais meses têm maiores discrepâncias com relação a média histórica.

Isso é feito da seguinte forma: para cada mês do ano, calculamos a discrepância desse mês como o número de desvios-padrão da diferença absoluta de temperatura com a média histórica para esse mês. Mais precisamente, se $\tau$ é a temperatura do mês de um ano, $\mu$ e $\sigma$ são, respectivamente, a média e o desvio padrão da média daquele mês considerando o histórico de todos os anos, então a discrepância é $\alpha = \frac{|\tau - \mu|}{\sigma}$.

Entrada

A entrada contém uma linha contendo o nome do arquivo CSV.

Sua tarefa é construir um programa discrepancias.py que identifica os meses com maior discrepância de temperatura.

dados/Suica.csv

Saída

A saída deve conter os 10 maiores valores de discrepância, ordenados por data.

09/2001: 1.93
10/2001: 1.98
06/2003: 2.94
08/2003: 2.38
10/2003: 2.13
07/2006: 2.29
08/2006: 1.89
01/2007: 2.09
04/2007: 2.42
05/2013: 2.00

Dicas

Critérios

Correção

Esta tarefa será corrigida automaticamente sempre que você realizar um git push. Depois de submetida a versão final da 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 6 no canal fila-apresentar para entrar na fila.