forked from Mekylei-Belchior/lotofacil
-
Notifications
You must be signed in to change notification settings - Fork 1
/
jogar.py
99 lines (73 loc) · 3.46 KB
/
jogar.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from processamento.reajustar_dados import remover_resultado_concursos
from processamento.possibilidades import obter_possibilidades
from processamento.resultados import resultados_ordenados
from calculos.pesos import calcular_numero_pesos
from sorteios.sortear import sortear_numeros
from modelo.modelo import criar_modelo
from dados.dados import carregar_dados
from pandas import DataFrame
# Carrega a base de dados
dados = carregar_dados()
# Inicialização das variáveis
probabilidade = 0.00
predicao_alvo = 0.00
sorteados = list()
procurando = 0
# probabilidade desejada
prob_alvo = 100.0
# Obtém os pesos de cada dezena e um dicionários com as dezenas e seus pesos
peso, numero_pesos = calcular_numero_pesos(dados)
# Obtém o modelo e sua acuracidade
modelo, pontuacao = criar_modelo(dados)
# Carrega e reajusta os demais dados
print()
print(f'\033[1;33m[Carregando e reajustando os demais dados...]\033[m')
print()
possibilidades = obter_possibilidades()
resultado_concursos = resultados_ordenados(dados)
possibilidades_atualizada = remover_resultado_concursos(
possibilidades,
resultado_concursos
)
# Variável de verificação se o jogo gerado é aceitável
jogo_aceito = False
# Replica até que a probabilidade seja igual à probabilidade desejada
# e o jogo seja aceitável
while probabilidade < prob_alvo and not jogo_aceito:
# Atribui a sequência dos números sorteados
sorteados = sortear_numeros(peso, numero_pesos)
# Ordena a lista dos números sorteados
jogo = sorted([numeros[0] for numeros in sorteados])
# Cria o dataframe com os números sorteados para realizar a predição
y_alvo = DataFrame(sorteados)
y_alvo = y_alvo.iloc[:, 0].values
y_alvo = y_alvo.reshape(1, 15)
# Faz a predição da Classe/Alvo
predicao_alvo = modelo.predict(y_alvo)
# Achando a probabilidade
predict_proba = modelo.predict(y_alvo)
probabilidade = round((predict_proba[0][0] * 100), 1)
# Verifica se o jogo é possível e se ainda não foi sorteado em algum concurso
if probabilidade >= prob_alvo:
jogo_aceito = [True if jogo in possibilidades_atualizada else False]
else:
jogo_aceito = False
# Conta quantas vezes procurou a sequência até atingir a probabilidade desejada
procurando += 1
# Formata a sequência de números sorteados para ser imprimida na tela
sequencia = [str(numero[0]).zfill(2) for numero in sorteados]
# Imprime as informações obtidas no ciclo atual de execução enquanto a probabilidade desejada não foi encontrada
print(f'Alvo = ({prob_alvo}%) - ACURAC.: {round((pontuacao * 100), 1)}% - Rep.: {str(procurando).zfill(7)}'
f' - Prob. Enc.: ({str(probabilidade).zfill(2)}%) Sequência: [ ', end='')
print(*sequencia, ']')
# Se o jogo não é aceitável, zera a probabilidade para gerar novo jogo
if not jogo_aceito:
probabilidade = 0.0
# Resultados
print(f'\nAcuracidade do Modelo: {round((pontuacao * 100), 1)}%')
print('\n0 = Não tem chance de ganhar | 1 = Tem chance de ganhar')
print(f'Resultado: (Previsão Modelo) = {predicao_alvo[0][0]}')
print(f'\nProbabilidade das dezenas sairem: {probabilidade}%')
# Números sorteados (em ordem de sorteio e em ordem crescente)
print(f'\nNúmeros sorteados: {[numeros[0] for numeros in sorteados]}')
print(f'\nNúmeros ordenados: {jogo}')