# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # Quem fez o ENEM 2016 apenas para treino

# ___

# Importando as bibliotecas necessárias
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

# +
# Carregando os datasets
treino = pd.read_csv('train.csv')
teste = pd.read_csv('test.csv')

# Selecionando algumas colunas para retirar
retira_colunas = ['NU_INSCRICAO',
#                  'IN_TREINEIRO',
#                  'CO_PROVA_CH',
#                  'CO_PROVA_LC',
#                  'CO_PROVA_MT'
                 ]
inscricao_treino = treino[['NU_INSCRICAO']]
inscricao_teste = teste[['NU_INSCRICAO']]
treineiro = treino[['IN_TREINEIRO']]
treino.drop(retira_colunas, axis=1, inplace=True)
teste.drop(retira_colunas, axis=1, inplace=True)

treino.drop('IN_TREINEIRO', axis=1, inplace=True)
# Mostrando o datasets depois da retirada das colunas
treino

# +
# Selecionando as variáveis numéricas do dataset de teste
numeric_features = teste.select_dtypes(include="number").columns.to_list()

# Selecioando as variáveis categóricas do dataset de teste
categoric_feature = [coluna for coluna in teste.columns if coluna not in numeric_features]

# +
# Juntando todas as variáveis escolhidas
all_features = numeric_features + categoric_feature

# Aplicando as colunas escolhidas no dataset de treino
treino = treino[all_features]
treino
# -

# Vendo a quantidade de NaN's nos dados de treino
treino.isna().sum()#.sum()

# Vendo a quantidade de NaN's nos dados de teste
teste.isna().sum()#.sum()

teste['NU_NOTA_LC'].isna().sum()

# +
# Fazendo as trocas dos dados faltantes
for categorica in categoric_feature:
    
    treino[categorica].fillna(method='ffill', inplace=True)
    teste[categorica].fillna(method='ffill', inplace=True)
    
for categorica in categoric_feature:
    
    treino[categorica].fillna(method='bfill', inplace=True)
    teste[categorica].fillna(method='bfill', inplace=True)

for numerica in numeric_features:
        
    #ratings_petz_apple[f'{num_stars}-star_diff'].mask(cond=ratings_petz_apple[f'{num_stars}-star_diff'] < 0, other=0)
    media_treino = treino[numerica].mean()
    treino[numerica].fillna(0, inplace=True)
    
    media_teste = teste[numerica].mean()
    teste[numerica].fillna(0, inplace=True)
# -

# Conferindo se deu tudo certo com os dados de treino
treino.isna().sum().sum()

# Conferindo se deu tudo certo com os dados de teste
teste.isna().sum().sum()

# Instanciando um objeto da classe para o StandardScalar
std_scaler = StandardScaler()

# Aplicando o StandardScalar nas variáveis numéricas
treino[numeric_features] = std_scaler.fit_transform(treino[numeric_features])
teste[numeric_features] = std_scaler.fit_transform(teste[numeric_features])

# Conferindo os dados de treino
treino

# +
# Aplicando o get_dummies() nas variáveis categóricas
encoded_columns = pd.get_dummies(treino[categoric_feature])
treino = treino.join(encoded_columns).drop(categoric_feature, axis=1)

encoded_columns = pd.get_dummies(teste[categoric_feature])
teste = teste.join(encoded_columns).drop(categoric_feature, axis=1)


#ohe.fit(treino[categoric_feature])
#ohe.fit(teste[categoric_feature])
# -

# Instanciando um objeto da classe LogisticRegression()
model = LogisticRegression()
treino = treino.join(treineiro)

# Separando X e y de treino
X_train = treino.drop('IN_TREINEIRO', axis=1)
y_train = treino['IN_TREINEIRO']

# + tags=[]
# Treinando o modelo
model.fit(X_train, y_train)

# Testando o modelo
y_test = model.predict(teste)
# -

# Preparando a saída
y_test = pd.DataFrame(y_test)
y_test.rename(columns={0: 'IN_TREINEIRO'}, inplace=True)
y_test

# Juntando o número de inscrição aos dados preditos pelo modelo
my_answer = inscricao_teste.join(y_test)
my_answer

my_answer.to_csv('answer.csv', index=False)

StarcoderdataJupyterScriptsDedupFiltered