Danilo S. Carvalho, Ph.D. Research Associate - Artificial Intelligence / NLP

3ª Lista de Exercícios - Computação II (DCC - UFRJ) - PLE

Atenção: Escrever Javadoc para todos os programas.

1 . A partir de dados à respeito da pandemia de COVID-19 no Brasil, que podem ser obtidos no endereço https://data.brasil.io/dataset/covid19/caso.csv.gz, implemente um programa Java que:

  • Dado o nome de um estado ou cidade, produza uma página web com um gráfico da evolução do número de casos e do número de mortes naquele estado ou cidade.
  • Se nenhum nome for dado, produza os totais de casos e mortes (do Brasil, para cada data).

Além disso, indepentende da cidade ou estado selecionado, o programa deve produzir, considerando o total de casos até a data mais recente no arquivo:

  • Um arquivo com o ranking das 10 cidades com maior número de casos / 100K habitantes e os respectivos valores para essa estatística.
  • Idem, para o menor número de casos / 100K habitantes.
  • Idem, para o maior número de mortos / casos.
  • Idem, para o menor número de mortos / casos.
  • Idem, para a maior taxa de crescimento no número de casos no último mês (início do mês anterior até o início do mês atual).

A página web deve ser gerada segundo um template disponível no repositório da turma, em aux/template_grafico.html. Um exemplo do formato está no mesmo diretório, em exemplo_grafico.html, cujo resultado pode ser visto aqui

Outros requisitos:

  • O programa deve ter pelo menos quatro classes: a principal (que começa o programa), uma para representar e manipular os dados / calcular estatísticas, uma para escrever os arquivos de ranking, e uma para escrever a página web.
  • A entrada do programa deve ser dada na forma “<cidade>//<estado>”. Não havendo o separador “//”, a entrada se refere a um estado.
  • Os arquivos de ranking devem ser formatados com as colunas: “cidade”, “data_ultima_medicao” e “valor”, separadas por tabulações, onde a coluna “valor” contém o valor da estatística calculada (ex: mortos / 100k habitantes).
  • Os arquivos de ranking devem ter os seguintes nomes: maior_casos_100k, menor_casos_100k, maior_mortalidade, menor_mortalidade, maior_taxa_crescimento. Todos com extensão .tsv.
  • Desconsidere cidades ou datas com valores ausentes de número de casos ou mortos dos cálculos.
  • Se o usuário pedir o gráfico de uma cidade que não existe ou cujos dados estejam ausentes do arquivo de dados, isso deve ser informado na saída padrão e o gráfico não deve ser gerado.

Dicas:

  • O template da página web possui campos que devem ser substituidos pelos valores no padrão apropriado, mostrado no arquivo de exemplo. Esses campos são cercados por “:” (ex: :items:).
  • Usem a classe GZIPInputStream (java.util.zip) para ler o arquivo de dados de forma eficiente.
  • Usem a classe StringBuilder (java.lang) para concatenar strings de maneira eficiente ao montar a entrada de pontos para o gráfico.
  • Observem as oportunidades de usar os conceitos que vocês aprenderam recentemente, como generics, coleções e iteradores. Eles podem facilitar bastante o trabalho.