Skip to content

Latest commit

 

History

History
136 lines (90 loc) · 3.42 KB

File metadata and controls

136 lines (90 loc) · 3.42 KB
import pandas as pd
import numpy as np
import datetime
import matplotlib.pyplot as plt

Questão 1

  • Considere a url dada abaixo usada em problemas anteriores, como no final do notebook sobre gráficos.
  • Use a função read_csv para ler a tabela em um DataFrame chamado dados.
# https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv
url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv'
#Solução
# https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv
url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv'

dados = pd.read_csv(url)

Questão 2

  • Considere uma string com o nome do país e uma datetime.datetime inicial:
pais = 'Brazil'
data_inicial = datetime.datetime(2020, 4, 1) # ano/mes/dia
  • Usas os métodos de DataFrame para extrair os dados do país, somando todas as regiões. Construa a série total_casos cujos índices são as datas.
#Solução

pais = 'Brazil'
data_inicial = datetime.datetime(2020, 4, 1) # ano/mes/dia

# Extrai dados do país escolhido e soma regiões.
total_casos = dados.loc[ dados['Country/Region']==pais ].iloc[:, 4:].sum()

Questão 3

  • Converta os índices para DateTime.
  • Filtre a série, guardando apenas a partir de data_inicial.
#Solução

# Converte datas de string para datetime
total_casos.index = [datetime.datetime.strptime(str_data, '%m/%d/%y') for str_data in total_casos.index]

# Filtra
total_casos = total_casos[ total_casos.index>=data_inicial ]
datetime.datetime.strptime('01/04/20', '%d/%m/%y')

datetime.datetime(2020, 4, 1, 0, 0)

Questão 4

  1. Use a função polyfit do numpy para ajustar um polinômio de grau 1 ao logaritmo natural (np.log) do número de casos.
coeff = np.polyfit(x, y, 1, w=y)
  • O parâmetro w é o peso que deve ser dado a cada ponto. Com isso queremos corrigir o efeito do logaritmo.
  • x é um array de números.
  1. Use a função polyval do numpy para estimar os valores usando o polinômio ajustado.
yest = np.exp(np.polyval(coeff, x))
  1. Experimente mudar o grau do polinômio.
#Solução


# Calcula o logaritmo
y = np.log(total_casos)

# Cria um array de números para o ajuste
x = range(len(total_casos))

# Calcula os coeficientes
coeff = np.polyfit(x, y, deg=30, w=y) # deg = grau

# Avalia o polinômio

yest = np.exp(np.polyval(coeff, x))

RankWarning: Polyfit may be poorly conditioned exec(code_obj, self.user_global_ns, self.user_ns)

Questão 5

  • Trace o gráfico, mostrando os dados observados em bolinhas azuis e a curva ajustada em linha vermelha.
#Solução

fig, ax = plt.subplots()

ax.plot(total_casos.index, total_casos, '.')
ax.plot(total_casos.index, yest, 'red')

ax.legend(['Casos confirmados', 'Tendência'])

ax.set_yscale('log')

# Adiciona rótulo aos eixos
plt.xlabel("Dia de notificação", fontsize=14)
plt.ylabel("Número de casos", fontsize=14)

fig.set_facecolor('white')
plt.xticks(rotation=45)
ax.grid(True)
fig.suptitle(f'Evolução {pais}')
plt.show()

Gráfico 13-01