Giter Club home page Giter Club logo

lotofacil's Introduction

LOTOFÁCIL

Jogando na Lotofácil utilizando rede neural.

INFORMAÇÕES

Linguagem utilizada: Python 3 (v3.8.2)

PRINCIPAIS PACOTES UTILIZADOS

  • Pandas
  • Numpy
  • Keras
  • Scikit-learn

FUNCIONALIDADES

  • Análise de frequência das dezenas sorteadas por concurso
  • Geração de pesos para cada dezena
  • Criação de jogos
  • Análise de probabilidade das dezenas dos jogos serem sorteadas

PRINCIPAIS INFORMAÇÕES DO JOGO

Informações obtidas no site da Caixa Econômica Federal, acessado em: 08/07/2020.

Observação: Para maiores informações acessar o site da LOTOFÁCIL.

Como jogar

A Lotofácil é, como o próprio nome diz, fácil de apostar e principalmente de ganhar. Você marca entre 15 a 18 números, dentre os 25 disponíveis no volante, e fatura o prêmio se acertar 11, 12, 13, 14 ou 15 números. Pode ainda deixar que o sistema escolha os números para você por meio da Surpresinha, ou concorrer com a mesma aposta por 3, 6, 9 ou 12 concursos consecutivos através da Teimosinha.

Apostas

A aposta mínima, de 15 números, custa R$ 2,50.

Sorteios

Os sorteios são realizados às segundas, quartas e sextas-feiras, sempre às 20h.

Premiação

O prêmio bruto corresponde a 43,35% da arrecadação. Dessa porcentagem, será deduzido o pagamento dos prêmios com valores fixos:

  • R$ 5,00 para as apostas com 11 prognósticos certos entre os 15 sorteados;
  • R$ 10,00 para as apostas com 12 prognósticos certos entre os 15 sorteados;
  • R$ 25,00 para as apostas com 13 prognósticos certos entre os 15 sorteados.

Após a apuração dos ganhadores dos prêmios com valores fixos, o valor restante do total destinado à premiação será distribuído para as demais faixas de prêmios nos seguintes percentuais:

  • 65% entre os acertadores de 15 números;
  • 20% entre os acertadores de 14 números entre os 15 sorteados.
  • 15% ficam acumulados para a primeira faixa (15 acertos) do concurso especial realizado em setembro de cada ano.

Os prêmios prescrevem 90 dias após a data do sorteio. Após esse prazo, os valores são repassados ao Tesouro Nacional para aplicação no FIES - Fundo de Financiamento ao Estudante do Ensino Superior.

Recebimento de prêmios

Você pode receber seu prêmio em qualquer casa lotérica credenciada ou nas agências da Caixa. Caso o prêmio líquido seja superior a R$ 1.332,78 (bruto de R$ 1.903,98) o pagamento pode ser realizado somente nas agências da Caixa. Valores iguais ou acima de R$ 10.000,00 são pagos após 2 dias de sua apresentação na agência da Caixa.

Acumulação

Não havendo ganhador em qualquer faixa de premiação, o valor acumula para o concurso seguinte, na faixa de prêmio com 15 acertos. Não deixe de conferir o seu bilhete de aposta.

Tabela de preços

Quantidade de números Valor em R$
15 números 2,50
16 números 40,00
17 números 340,00
18 números 2.040,00

COMO UTILIZAR

Instalação do interpretador Python

O projeto utiliza o Python 3 na versão v3.8.2, e para melhor compatibilidade é recomendado que a versão seja mantida.

Download - Python 3 v3.8.2

Criação do ambiente virtual

Após a instalação do interpretador, versão do projeto, atualize o PIP (gerenciador de pacotes). Para tal, abrar o Prompt de comando ou o PowerShell, no caso do Windows, por exemplo, e execute o camando abaixo. Todos os comandos relacionados ao Python, a partir daqui, serão realizados utilizando o PowerShell do Windows.

python -m pip install --upgrade pip

Após atualizar o PIP, crie o diretório que irá conter o projeto, sendo que o local fica de sua preferência. Esse diretório será o ambiente virtual que irá possuir o interpretador e os pacotes específicos para o projeto. Como exemplo, será utilizado o diretório C:\ambientevirtual. No PowerSell, desloque até o diretório raíz C:\ aonde irá ser criado o ambiente e execute o comando:

python -m venv ambientevirtual

Ao criar o ambiente virtual, você estará separando as parametrizações do projeto de outras alterações que possam ter no ambiente externo. Basicamente, você irá instalar neste ambiente somente as dependências que o projeto necessita para ser rodado.

Projeto

Estrutura do ambiente

Ao acessar o ambiente você irá visualizar a estrutura abaixo:

C:\ambientevirtual

    \Include
    \Lib
    \Scripts
    pyvenv.cfg

Os diretórios principais são Lib e Scripts onde o primeiro irá armazenar os pacotes/dependências que serão utilizados no projeto e o outro o arquivo do interpretador assim como os arquivos para inicializar o ambiente, basicamente.

Inserir o projeto no ambiente

Para os próximos passos foi utilizado o GIT (ferramenta de versionamento). Caso ainda não saiba como utilizá-lo, existem inúmeros tutoriais no Youtube que poderão te auxiliar.

  1. Faça um fork deste repositório clicando no botão Fork no canto superior da tela.

  2. Dentro do diretório do ambiente virtual abra o Bash do GIT e inicialize o repositório local.

    $ git init
    
  3. Faça um clone do repositório para a sua estação de trabalho:

    $ git clone https://github.com/<seu_usuario>/lotofacil
    

    Ob.: Será emitido um alerta de erro para o arquivo lotofacil/base/resultados.csv ao qual pode ser desconsiderado. O mesmo será criado posteriormente Criar resultados e combinações.

Inicializar o ambiente

Agora que o projeto foi baixado para a sua máquina, se faz necessário inicializar o ambiente.

  1. No PowerShell, direcione para o diretório C:\ambientevirtual\Scripts e execute o comando:

    .\Activate.ps1
    

    Este comando irá inicializar o ambiente virtual. Para se certificar que o ambiente foi inicializado, neste caso, vai aparecer o nome do diretório entre parenteses (ambientevirtual), geralmente na cor verde, antes do caminho do diretório atual.

  2. Para finalizar o ambiente, quando o mesmo não estiver em uso, é só executar o comando deactivate independente do diretório que estiver no PowerShell.

Baixar os pacotes e dependências

Para instalar os pacotes e dependências que o projeto irá utilizar, inicialize o ambiente e faça:

  1. Atualize o PIP Criação do ambiente virtual, independente que já o tenha feito antes durante a criação do ambiente. Assim terá a certeza de estar utilizando a versão mais atual do gerenciador.

  2. Execute o comando abaixo no diretório raíz do projeto aonde contém o arquivo requirements.txt. Esse comando irá instalar os pacotes conforme a relação contida no arquivo.

    pip install -r requirements.txt
    
  3. Agora é preciso instalar mais dois pacotes (TensorFlow e o XRLD):

    pip install tensorflow
    
    pip install xlrd==1.2.0
    

Criar resultados e combinações

No PowerShell, vá para o diretório raíz do projeto e execute os comandos.

  1. Para criar o arquivo de resultados:

    python .\dados\scrapping_resultados.py
    
  2. Para criar o arquivo de combinações: Remova o CSV, que está no diretório combinacoes

    python .\dados\gerar_combinacoes.py
    

Rodar o projeto

Se todos os passos foram realizados e o ambiente está ativo, agora o projeto está pronto para ser executado. Para isso, execute o comando abaixo no diretório raíz do projeto:

python .\jogar.py

Dúvidas, bugs e sugestões

Em casos de dúvida, bugs ou queria propror uma melhoria abra uma Issue. Vamos aprender juntos e desenvolver novas soluções.

Contribuição

Sinta-se livre para contrituir com o projeto. Para tal, faça:

  1. Crie um remote apontando para este repositório:

    $ git remote add upstream https://github.com/Mekylei-Belchior/lotofacil
    
  2. Uma vez feito o fork, crie um branch de trabalho (por exemplo, "feature-x")

    $ git checkout -b feature-x
    
  3. Trabalhe normalmente no branch feature-x. Quando estiver satisfeito com o resultado, faça o commit e em seguida o push:

    $ git push origin feature-x
    
  4. O branch usado no "git checkout" tem que casar com o branch usado no "git push".

  5. Por fim, entre no github e abra um Pull Request (PR).

lotofacil's People

Contributors

edersonsc avatar mekylei-belchior avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lotofacil's Issues

scrapping_resultados não executa

Ocorre o seguinte erro:

OSError: Cannot save file into a non-existent directory: 'base'

quando scrapping_resultados.py é executado.
Sou iniciante, mas iniciante mesmo no python e não faço ideia de como resolver isso.

Atualizaçao Automatica com o Arquivo de Resultado da Caixa

Boa Noite amigo, muito legal sua iniciativa, gostaria de contribuir com o projeto se achar interessando pode colocar esse codigo para que possa automatizar a captura dos resultados dos concursos de forma automatica com os dados sendo atualizado pela caixa.

Ai teria que adaptar para poder criar as colunas que utiliza para o controle dos ciclos.

`import json
import requests
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno
import zipfile
import math as math
from pylab import rcParams
from bs4 import BeautifulSoup
from random import randint
import lxml

url = 'http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_lotfac.zip'
target_path = 'D_lotfac.zip'
response = requests.get(url, stream=True)

handle = open(target_path, "wb")
for chunk in response.iter_content(chunk_size=512):
if chunk: # filter out keep-alive new chunks
handle.write(chunk)
handle.close()
with zipfile.ZipFile(target_path) as zf:
zf.extractall()

fileHtml = 'd_lotfac.htm'

f = open(fileHtml, 'r', encoding='latin-1')
table=f.read()

soup = BeautifulSoup(table, 'html.parser')
table = soup.find(name='table')

table_str = str(table)
df = pd.read_html(table_str)[0]

df.shape
df.dtypes

df['data_sorteio_conv'] = df.iloc[:,1]
df.data_sorteio_conv = pd.to_datetime(df.data_sorteio_conv)

df['day'] = df.data_sorteio_conv.dt.day
df['month'] = df.data_sorteio_conv.dt.month
df['year'] = df.data_sorteio_conv.dt.year

df_ganhadores = df[:]

df_ganhadores.head()

Visão geral do dataframe

msno.matrix(df=df.iloc[:,0:df.shape[1]], figsize=(20, 5), color=(0.42, 0.1, 0.05))

Removendo valores nulos

df = df.dropna(subset=['Concurso'])
msno.matrix(df=df.iloc[:,0:df.shape[1]], figsize=(20, 5), color=(0.42, 0.1, 0.05))

Removendo colunas Cidade e UF

df = df.drop(['Cidade', 'UF'], axis=1)
msno.matrix(df=df.iloc[:,0:df.shape[1]], figsize=(20, 5), color=(0.42, 0.1, 0.05))

Ganhadores X Volume do Prêmio por Estado

ax = df_ganhadores.groupby(['UF'])['Ganhadores_13_Números'].agg('sum').sort_values(ascending=False).plot(kind='bar', title='Ganhadores por Estado', figsize=(15,5), fontsize=12, legend=True, position=1, color='gray')

df_ganhadores.groupby(['UF'])['Rateio_Sena'].agg('sum').sort_values(ascending=False).plot(kind='bar', ax=ax, secondary_y=True, legend=True, position=0, color='blue')

Ganhadores X Mes

Ganhadores X Volume do Prêmio por Estado

df_ganhadores.groupby(['month'])['Ganhadores_15_Números'].agg('sum').plot(kind='bar', title='Ganhadores X Mês', fontsize=12, figsize=(15,5), legend=True, color='gray')

Verificando se alguma vez as dezenas se repetiram na mesma ordem

df.groupby(['Bola1','Bola2', 'Bola3', 'Bola4', 'Bola5', 'Bola6','Bola7', 'Bola8', 'Bola9', 'Bola10', 'Bola11','Bola12', 'Bola13', 'Bola14', 'Bola15']).size().sort_values(ascending=False)

As dezenas mais sorteadas em todos os jogos

dezenas = pd.DataFrame(df['Bola1'].tolist() + df['Bola2'].tolist() + df['Bola3'].tolist() + df['Bola4'].tolist() + df['Bola5'].tolist() + df['Bola6'].tolist() +df['Bola7'].tolist() + df['Bola8'].tolist() + df['Bola9'].tolist() + df['Bola10'].tolist() + df['Bola11'].tolist() + df['Bola12'].tolist() +
df['Bola13'].tolist() + df['Bola14'].tolist() + df['Bola15'].tolist(), columns=['numeros'])

dezenas['numeros'].value_counts().sort_values(ascending=True).plot(kind='barh', title='As quinze dezenas mais sorteadas em todos os jogos', figsize=(10,5), fontsize=12, legend=True, color='gray')

Criando dataframe que vamos usar nos modelos

df_clean = df
index = 0
anterior = ''
for concurso in df['Concurso']:
if(concurso == anterior):
df_clean = df_clean.drop(index)
index += 1
anterior = concurso

df_clean.shape

df_nn = df_clean[['Bola1','Bola2', 'Bola3', 'Bola4', 'Bola5', 'Bola6','Bola7', 'Bola8', 'Bola9', 'Bola10', 'Bola11','Bola12', 'Bola13', 'Bola14', 'Bola15', 'Ganhadores_15_Números']]

Deixando os nomes das coluna em minusculo

df_nn.columns = map(str.lower, df_nn.columns)

df_nn.head(15)

Pode existir mais de um ganhador por jogo

df_nn[df_nn['ganhadores_15_números'] > 1].groupby('ganhadores_15_números')['ganhadores_15_números'].agg('count').plot(kind='bar',figsize=(10,5), color='gray', fontsize=12)

Então tudo jogo que tiver um ou mais ganhadores deixamos como o numeoro 1

df_nn.loc[df_nn['ganhadores_15_números'] > 0, 'ganhadores_15_números'] = 1

df_nn['ganhadores_15_números'].value_counts().plot(kind='bar', figsize=(10,5), color='gray', fontsize=12)

montando vetor concurso anterior para uso futuro - repetidas do anterior

concurso = []
counts = []
anterior = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
for index, row in df_nn.iterrows():
concurso = []
concurso.append(row['bola1'])
concurso.append(row['bola2'])
concurso.append(row['bola3'])
concurso.append(row['bola4'])
concurso.append(row['bola5'])
concurso.append(row['bola6'])
concurso.append(row['bola7'])
concurso.append(row['bola8'])
concurso.append(row['bola9'])
concurso.append(row['bola10'])
concurso.append(row['bola11'])
concurso.append(row['bola12'])
concurso.append(row['bola13'])
concurso.append(row['bola14'])
concurso.append(row['bola15'])
count = 0
for x in range(15):
if(np.count_nonzero(concurso==anterior[x]) > 0):
count += 1
anterior = concurso

ultimo_sorteio = sorted(anterior)

print("\n")
print("Resultado do Ultimo Concurso: {0} -> Dezenas: {1}".format(df_nn.shape[0], ultimo_sorteio))
print("\n")`

Para quem não está conseguindo fazer o scrapping dos resultados

O procedimento que vou relatar abaixo é basicamente fazer na mão (sem precisar saber de programação!!) oq o script faz para obter os dados da CEF, tratar esses dados (vamos usar o Excel e o bloco de notas Notepad++) e gerar o arquivo CSV. Uma vez gerado o arquivo CSV é só alimentar esse arquivo com os números sorteados futuramente, sem precisar fazer isso tudo novamente. :-)

LEIA TUDO ANTES E DEPOIS FAÇA PASSO A PASSO

O script scrapping_resultados.py indica que os dados são obtidos da CEF e salvos no arquivo CSV ./base/resultados.csv
Para obter os dados vá para o site da CEF "https: // loterias . caixa . gov . br / Paginas / Lotofacil.aspx" e você verá o resultado do último concurso.
Role a página até o final e encontre "Download de Resultados", clique no link "Resultados da Lotofácil por ordem crescente."
Uma nova aba será aberta com todos os resultados do primeiro concurso até o último, faça um scrapping dessa tabela ou manualmente selecione todos os dados e cole dentro do Excel. Quando for colar no Excel clique com o botão direito na célula de destino e clique sobre o ícone de uma PRANCHETA abaixo de OPÇÕES DE COLAGEM. Isso removerá a formatação do site e colará os dados puros.
Como houve vários ganhadores por concursos, há algumas linhas em branco e preenchidas apenas com siglas dos estados. Selecione a primeira linha da coluna, onde estão os cabeçalhos, e ative o FILTRO do Excel (CTRL + SHIFT + L).
No filtro da primeira coluna com o nome CONCURSO, desmarque SELECIONAR TODOS e selecione apenas o (Vazio) que é a última opção.
Selecione todas as linhas vazias (clicando com o mouse sobre o número 3 da primeira linha vazia após o filtro aplicado) e arraste o mouse até a última linha da tabela. Depois clique sobre o número de alguma linha selecionada e vá em REMOVER LINHAS.
Agora você limpou as linhas em branco :-) Remova o filtro da primeira coluna e desative o filtro do Excel.
De todas odas as linhas e colunas que foram coladas, as únicas colunas que você precisará manter são:
Concurso, Data_Sorteio, Bola1 até a coluna Bola15 (coluna C até coluna Q) e Ganhadores_15_Números
Remova todas as outras colunas. Você deve ficar com 18 colunas preenchidas no Excel (de A até R)
Renomeie as colunas dessa forma, como manda o script scrapping_resultados.py:

Bola1 para B1, Bola2 para B2, Bola3 para B3, Bola4 para B4, Bola5 para B5, Bola6 para B6, Bola7 para B7, Bola8 para B8, Bola9 para B9, Bola10 para B10, Bola11 para B11, Bola12 para B12, Bola13 para B13, Bola14 para B14, Bola15 para B15, Ganhadores_15_Números para Ganhou

Com isso feito precisamos gerar o arquivo CSV. A coluna da data dos concursos precisa ser trabalhada para ser mantida no formato DD/MM/AAAA no CSV, para isso usaremos o aplicativo Notepad++
Selecione todas as linhas com as datas e cole dentro do Notepad++
Com as datas coladas, pressione CTRL + H para abrir o menu SUBSTITUIR (ou REPLACE) do Notepad++
No menu SUBSTITUIR (ou REPLACE) procure por MODO DE BUSCA (ou SEARCH MODE) e o altere para EXPRESSÃO REGULAR (ou REGULAR EXPRESSION)
No meio dessa caixa de busca, tem duas opções. A primeira é o que queremos encontrar e a segunda e pelo que queremos substituir o que for encontrado. Na primeira opção coloque o sinal de circunflexo ^ (fica ao lado do Ç no teclado ABNT2, é só apertar ele uma vez e apertar ESPAÇO pra ele aparecer). Na segunda opção coloque uma aspa simples ' (fica ao lado do 1 no teclado ABNT2). Agora clique em SUBSTITUIR TODOS (ou REPLACE ALL) no botão à direita dentro da caixa de substituir. Com isso você adicionou uma aspa simples no inicio de cada linha com data. :-)
Selecione todas as datas e substitua as datas da coluna DATA_SORTEIO dentro do Excel.
A última coluna é a coluna R chamada GANHOU, na coluna S e célula S1 cole essa fórmula do Excel:

=CONCATENAR(A1;";";B1;";";C1;";";D1;";";E1;";";F1;";";G1;";";H1;";";I1;";";J1;";";K1;";";L1;";";M1;";";N1;";";O1;";";P1;";";Q1;";";R1)

Depois arraste essa fórmula até a última linha da tabela. Isso irá gerar a base do arquivo CSV. :-)

Copie tudo que está nessa coluna e cole dentro do Bloco de Notas do Windows (é mais prático agora que o Notepad ++).
Pressione CTRL + H para abrir o menu SUBSTITUIR. Na primeira opção coloque uma aspa simples e na segunda não coloque nada, deixe em branco. Clique em SUBSTITUIR TUDO
Salve seu arquivo como resultados.csv dentro da pasta do projeto na pasta com nome base

Agora toda vez que for adicionar novos resultados é só acessar o site da CEF e adicionar ao CSV o número do concurso, a data, as bolas e o número de ganhadores separando tudo por ; e sem espaços em novas linhas :-)

Enquanto ninguém corrigir o script é só usar esse procedimento.

Solução "module 'numpy' has no attribute 'bool'"

Caso haja um erro "module 'numpy' has no attribute 'bool'" ao executar o programa, basta fazer o downgrade da versão do Numpy para a versão 1.23.1 e para isso execute os dois comandos abaixo:

python -m pip uninstall numpy
python -m pip install numpy==1.23.1

Ajuda

Posso ajudar em algo? Vc tem resultados de ganhos com esse projeto ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.