<jupyter_start><jupyter_text>Projeto COVID-19<jupyter_code>import pandas as pd
import numpy as np
from datetime import datetime
import plotly.express as px
import plotly.graph_objects as go
url = 'https://raw.githubusercontent.com/neylsoncrepalde/projeto_eda_covid/master/covid_19_data.csv'
df = pd.read_csv(url,parse_dates=['ObservationDate','Last Update'])
df
#conferir os tipos de cada coluna
df.dtypes
#regex
import re

def corrige_colunas(col_name):
  return re.sub(r"[/ ]", "", col_name).lower()
#corrigir todas as colunas do df
df.columns = [corrige_colunas(col) for col in df.columns]
df<jupyter_output><empty_output><jupyter_text>Brasil<jupyter_code>df.loc[df.countryregion == 'Brazil']
brasil = df.loc[
  (df.countryregion == 'Brazil') &
  (df.confirmed > 0)
]
brasil<jupyter_output><empty_output><jupyter_text>Casos Confirmados<jupyter_code>#gráfico da evolução de casos confirmados
px.line(brasil, 'observationdate','confirmed',title='Casos confirmados no Brasil')<jupyter_output><empty_output><jupyter_text>Novos casos por dia<jupyter_code>#técnica de programação funcional
 brasil['novoscasos'] = list(map(
     lambda x: 0 if (x==0) else brasil['confirmed'].iloc[x] - brasil['confirmed'].iloc[x-1],
     np.arange(brasil.shape[0])
 ))
px.line(brasil, x='observationdate', y='novoscasos', title='Novos casos por dia')<jupyter_output><empty_output><jupyter_text>Mortes<jupyter_code>fig = go.Figure()

fig.add_trace(
    go.Scatter(x=brasil.observationdate,y=brasil.deaths,name='Mortes',
               mode='lines+markers', line={'color':'red'})
)

#Layout
fig.update_layout(title='Mortes por COVID-19 no Brasil')
fig.show()<jupyter_output><empty_output><jupyter_text>Taxa de Crescimento<jupyter_code>#taxa de crescimento

def taxa_crescimento(data, variable, data_inicio=None,data_fim=None):
  #Se data inicio = None, define como a primeira data disponivel
  if data_inicio == None:
    data_inicio = data.observationdate.loc[data[variable] > 0].min()
  else:
    data_inicio = pd.to_datetime(data_inicio)

  if data_fim == None:
    data_fim = data.observationdate.iloc[-1]
  else:
    data_fim = pd.to_datetime(data_fim)

  # Define os valores do presente e passado
  passado = data.loc[data.observationdate == data_inicio, variable].values[0]
  presente = data.loc[data.observationdate == data_fim, variable].values[0]

  #Define o numero de pontos no tempo q vamos avaliar
  n = (data_fim - data_inicio).days

  #calcular a taxa
  taxa = (presente/passado) ** (1/n) - 1

  return taxa*100
#Taa de crescimento médio do COVID no Brasil em todo periodo
taxa_crescimento(brasil, 'confirmed')
def taxa_crescimento_diaria(data, variable, data_inicio=None):
  # Se data inicio for none, define como a primeira data disponivel
  if data_inicio == None:
    data_inicio = data.observationdate.loc[data[variable] > 0].min()
  else:
    data_inicio = pd.to_datetime(data_inicio)

  data_fim = data.observationdate.max()
  #define o numero de pontos no tempo q vamos avaliar
  n = (data_fim - data_inicio).days

  #taxa calculada de um para o outro
  taxas = list(map(
      lambda x: (data[variable].iloc[x] - data[variable].iloc[x-1]) / data[variable].iloc[x-1],
      range(1,n+1)
  ))
  return np.array(taxas)*100
tx_dia = taxa_crescimento_diaria(brasil,'confirmed')
tx_dia
primeiro_dia = brasil.observationdate.loc[brasil.confirmed > 0].min()

px.line(x=pd.date_range(primeiro_dia,brasil.observationdate.max())[1:],
        y=tx_dia, title='Taxa de crescimento de casos confirmados no Brasil')<jupyter_output><empty_output><jupyter_text>Predições<jupyter_code>from statsmodels.tsa.seasonal import seasonal_decompose
import matplotlib.pyplot as plt
confirmados = brasil.confirmed
confirmados.index = brasil.observationdate
confirmados
res = seasonal_decompose(confirmados)
fig, (ax1, ax2, ax3, ax4) = plt.subplots(4,1, figsize=(10,8))


ax1.plot(res.observed)
ax2.plot(res.trend)
ax3.plot(res.seasonal)
ax4.plot(confirmados.index, res.resid)
ax4.axhline(0, linestyle='dashed', c='black')<jupyter_output><empty_output><jupyter_text>ARIMA<jupyter_code>!pip install pmdarima
from pmdarima.arima import auto_arima
modelo = auto_arima(confirmados)
pd.date_range('2020-05-01', '2020-05-19')
fig = go.Figure(go.Scatter(
    x=confirmados.index, y=confirmados, name='Observed'
))

fig.add_trace(go.Scatter(x=confirmados.index, y = modelo.predict_in_sample(), name='Predicted'))

fig.add_trace(go.Scatter(x=pd.date_range('2020-05-20', '2020-06-05'), y=modelo.predict(15), name='Forecast'))

fig.update_layout(title='Previsão de casos confirmados para os próximos 15 dias',
                 yaxis_title='Casos confirmados', xaxis_title='Data')
fig.show()
!pip install fbprophet
from fbprophet import Prophet

# preparando os dados
train = confirmados.reset_index()[:-5]
test = confirmados.reset_index()[-5:]

# renomeia colunas
train.rename(columns={"observationdate":"ds","confirmed":"y"},inplace=True)
test.rename(columns={"observationdate":"ds","confirmed":"y"},inplace=True)
test = test.set_index("ds")
test = test['y']

profeta = Prophet(growth="logistic", changepoints=['2020-03-21', '2020-03-30', '2020-04-25', '2020-05-03', '2020-05-10'])

#pop = 1000000
pop = 211463256
train['cap'] = pop

# Treina o modelo
profeta.fit(train)

# Construindo previsões para o futuro
future_dates = profeta.make_future_dataframe(periods=200)
future_dates['cap'] = pop
forecast =  profeta.predict(future_dates)
fig = go.Figure()

fig.add_trace(go.Scatter(x=forecast.ds, y=forecast.yhat, name='Predição'))
fig.add_trace(go.Scatter(x=test.index, y=test, name='Observados - Teste'))
fig.add_trace(go.Scatter(x=train.ds, y=train.y, name='Observados - Treino'))
fig.update_layout(title='Predições de casos confirmados no Brasil')
fig.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13918331885317115, 'fraction_numerical': 0.02467419635099913, 'mean_word_length': 6.11495673671199, 'pattern_counts': {'":': 4, '<': 33, '<?xml version=': 0, '>': 37, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '317282', 'license': 'MIT', 'n_tokens_mistral': 2286, 'n_tokens_neox': 2164, 'n_words': 402, 'path': 'analise_covid19.ipynb', 'repo_name': 'guiilherm/Estudos', 'size': '5755'}