#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 12 20:09:50 2021

@author: ojacques
"""
import numpy as np

#----------------------------------------------------------
# Esta tabela poderia ser armazenada em uma planilha eletronica
# e depois ser aberta via Pandas
#----------------------------------------------------------
# Tabela de treinamento
#     dia   aparencia     temp      umid    vento    jogar 
tabTrn=[[1, 'ensolarado', 'quente', 'alta', 'fraco', 'nao'],
       [2, 'ensolarado', 'quente', 'alta', 'forte', 'nao'],
       [3, 'nublado', 'quente', 'alta', 'fraco', 'sim'],
       [4, 'chuva', 'moderada', 'alta', 'fraco', 'sim'],
       [5, 'chuva', 'fria', 'normal', 'fraco', 'sim'],
       [6, 'chuva', 'fria', 'normal', 'forte', 'nao'],
       [7, 'nublado', 'fria', 'normal', 'forte', 'sim'],
       [8, 'ensolarado', 'moderada', 'alta', 'fraco', 'nao'],
       [9, 'ensolarado', 'fria', 'normal', 'fraco', 'sim'],
       [10, 'chuva', 'moderada', 'normal', 'fraco', 'sim'],
       [11, 'ensolarado', 'moderada', 'normal', 'forte', 'sim'],
       [12, 'nublado', 'moderada', 'alta', 'forte', 'sim'],
       [13, 'nublado', 'quente', 'normal', 'fraco', 'sim'],
       [14, 'chuva', 'moderada', 'alta', 'forte', 'nao']]

#---------------------------------------------------
# Dados de consulta
#             aparencia     temp        umid   vento
#---------------------------------------------------
consulta = ['ensolarado', 'moderada', 'alta','forte']
tamTrn = len(tabTrn)

#---------------------------------------------------
# Transforma em array para calculos mais rapidos
# O np.array 'compreende' melhor os slices.
# Eh dificil acessar slices de lista de listas.
#ignora a coluna dia
#---------------------------------------------------
Trn=np.array(tabTrn)[:,1:] 
      
qtdeSim=np.sum(Trn[:,-1]=='sim')
qtdeNao = tamTrn - qtdeSim
nCol=len(tabTrn[0])-2 # retira a coluna dia e jogar
prbClasseSim = qtdeSim/tamTrn
prbClasseNao = qtdeNao/tamTrn # ou 1-prbSim      

#P(A|B)=P(A,B)/P(B)=Qtde(A,B)/Qtde(B)

#---------------------------------------------------
#busca a caracteristica correspondente com a classe
#---------------------------------------------------
#prbCarac =np.array([[np.sum((Trn[:,c]==consulta[c]) & (Trn[:,-1]=='sim'))/qtdeSim, np.sum((Trn[:,c]==consulta[c]) & (Trn[:,-1]=='nao'))/qtdeNao] for c in range(nCol)])

prbSim=[np.sum((Trn[:,c]==consulta[c]) & (Trn[:,-1]=='sim')) for c in range(nCol)]/qtdeSim
prbNao=[np.sum((Trn[:,c]==consulta[c]) & (Trn[:,-1]=='nao')) for c in range(nCol)]/qtdeNao

#---------------------------------------------------
# Multiplica a probabilidade da classe j com o produtorio das 
# probabilidades de cada caracteristica na classe j
# np.prod() : produtório
#---------------------------------------------------
prdSim=prbClasseSim*np.prod(prbSim) #ou prdSim=prbClasseSim*np.prod(prdCarac[:,0])
prdNao=prbClasseNao*np.prod(prbNao) #ou prdSim=prbClasseNao*np.prod(prdCarac[:,1])

jogar=['SIM', 'NÃO']  
prd=np.array([prdSim,prdNao])

#Só para usar o argmax  
arg=np.argmax(prd)
prb=prd[arg]/np.sum(prd)

print(f'Jogar Tenis: {jogar[arg]}')    
print(f'Probabilidade: {prb:.2f}')
   

#df=pd.read_csv('/home/ojacques/Documentos/BancaRubens/balance+scale/balance-scale.data',
#               names=['Classe','Peso Esquerdo','Distância Esquerda', 'Peso Direito','Distância Direita'])
#qtdeClasse=df["Classe"].value_counts()
#qtdeClassePesoEsq=df.groupby('Classe')[['Peso Esquerdo']].value_counts()
#
#qtdeClasseDistEsq=df.groupby('Classe')[['Distância Esquerda']].value_counts()
#qtdeClassePesoDir=df.groupby('Classe')[['Peso Direito']].value_counts()
#qtdeClasseDistDir=df.groupby('Classe')[['Distância Direita']].value_counts()
