#-----------------------------------------------------------------------
#                                            Prof. Dr. Walmes M. Zeviani
#                                leg.ufpr.br/~walmes · github.com/walmes
#                                        walmes@ufpr.br · @walmeszeviani
#                      Laboratory of Statistics and Geoinformation (LEG)
#                Department of Statistics · Federal University of Paraná
#                                       2019-mai-18 · Curitiba/PR/Brazil
#-----------------------------------------------------------------------

#-----------------------------------------------------------------------
# Pacotes.

import see
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns

#-----------------------------------------------------------------------
# Funções.

# Passa informações da prova e página para construir a URL.
def build_url(evento_yescom_id, tipo_do_evento_id, pagina):
    url = "https://www.yescom.com.br/codigo_comum/classificacao" +\
          "/codigo/p_classificacao03_v1.asp?" +\
          "evento_yescom_id={}&tipo=4&tipo_do_evento_id={}&" +\
          "PaginaAtual={}&faixa=&sexo=M&campo=&" +\
          "pesquisa=-0Z#O"
    url = url.format(evento_yescom_id,
                     tipo_do_evento_id,
                     pagina)
    return(url)

# Com a URL, importa e retorna a tabela.
def read_page(url):
    page = pd.read_html(url, header = 0)
    tb = page[9]
    return(tb)

# Converte strings do tipo XX:YY:ZZ para minutos.
def convert_to_minutes(x):
    import datetime as dt
    x = pd.to_datetime(x)
    x = pd.to_timedelta(x.dt.strftime('%H:%M:%S'))
    x = x.dt.total_seconds().astype(int)/60
    return(x)

#-----------------------------------------------------------------------
# Importação das tabelas.

# IMPORTANT: os resultados são limitados a 10 páginas, ou seja, são
# apenas as 100 primeiras colocadas. Portanto todas as questões e
# interpretações são sobre o conjunto das 100 primeiras colocadas.

# Importação do feminino de 2015.
# https://www.yescom.com.br/codigo_comum/classificacao/codigo/p_classificacao03_v1.asp?tipo_do_evento_id=4732&tipo=4&evento_yescom_id=1662
tb_2015 = [read_page(build_url(1662, 4732, pg))
           for pg in np.arange(1, 11, 1)]
tb_2015 = pd.concat(tb_2015)
tb_2015.reset_index(inplace = True)
tb_2015['TEMPO'] = convert_to_minutes(tb_2015['TEMPO LÍQUIDO'])
tb_2015.info()

# Importação do feminino de 2016.
# https://www.yescom.com.br/codigo_comum/classificacao/codigo/p_classificacao03_v1.asp?tipo_do_evento_id=5131&tipo=4&evento_yescom_id=1689
tb_2016 = [read_page(build_url(1689, 5131, pg))
           for pg in np.arange(1, 11, 1)]
tb_2016 = pd.concat(tb_2016)
tb_2016.reset_index(inplace = True)
tb_2016['TEMPO'] = convert_to_minutes(tb_2016['TEMPO LÍQUIDO'])
tb_2016.info()

# Importação do feminino de 2017.
# https://www.yescom.com.br/codigo_comum/classificacao/codigo/p_classificacao03_v1.asp?tipo_do_evento_id=5670&tipo=4&evento_yescom_id=1803
tb_2017 = [read_page(build_url(1803, 5670, pg))
           for pg in np.arange(1, 11, 1)]
tb_2017 = pd.concat(tb_2017)
tb_2017.reset_index(inplace = True)
tb_2017['TEMPO'] = convert_to_minutes(tb_2017['TEMPO LÍQUIDO'])
tb_2017.info()

# Importação do feminino de 2018.
# https://www.yescom.com.br/codigo_comum/classificacao/codigo/p_classificacao03_v1.asp?tipo_do_evento_id=6212&tipo=4&evento_yescom_id=1965
tb_2018 = [read_page(build_url(1965, 6212, pg))
           for pg in np.arange(1, 11, 1)]
tb_2018 = pd.concat(tb_2018)
tb_2018.reset_index(inplace = True)
tb_2018['TEMPO'] = convert_to_minutes(tb_2018['TEMPO LÍQUIDO'])
tb_2018.info()

# Cria a variável ANO em cada tabela.
tb_2015['ANO'] = 2015
tb_2016['ANO'] = 2016
tb_2017['ANO'] = 2017
tb_2018['ANO'] = 2018

# Variáveis que serão usadas. Usar para selecionar.
v = ['ATLETA', 'IDADE', 'TEMPO', 'ANO']
pd.concat([tb_2015[v],
           tb_2016[v],
           tb_2017[v],
           tb_2018[v]],
          axis = 0)

pd.merge(left = tb_2017[v[:-1]],
         right = tb_2018[v[:-1]],
         # how = 'outer',
         on = 'ATLETA',
         suffixes = ('_2017', '_2018'))

#-----------------------------------------------------------------------
# Perguntas.

# 1. Qual a idade média das atletas em cada um dos 4 anos?
# 2. Qual o tempo médio das atletas em cada um dos 4 anos?
# 3. Qual a correlação entre tempo de prova e idade em cada um dos 3
#    anos?
# 4. Quantas atletas ao todo participaram em 2018 ou 2017?
# 5. Quantas atletas participaram em 2018 e 2017?
# 6. Quantas atletas participaram somente em 2017 mas não em 2018?
# 7. Quantas atletas participaram somente em 2018 mas não em 2017?
# 8. A maioria das atletas que correram 2017 e 2018 melhoraram seu tempo
#    de prova?

#-----------------------------------------------------------------------
# Escreve em disco.

u = pd.concat([tb_2015,
               tb_2016,
               tb_2017,
               tb_2018],
              axis = 0)
u['ATLETA'] = u.ATLETA.str.upper()
u.info()

u.to_csv(path_or_buf = "sao_silvestre_2015-2018.dat",
         sep = '\t',
         index = False)

#-----------------------------------------------------------------------
# Importação do arquivo.

url = "http://leg.ufpr.br/~walmes/data/sao_silvestre_2015-2018.txt"
tb = pd.read_csv(filepath_or_buffer = url,
                 delimiter = "\t")

tb.info()
tb.head()
tb.tail()

#-----------------------------------------------------------------------
