Novità

Python - Addestramento rete neurale

ciao a tutti qualcuno mi può aiutare come usare python siamo proprio alle basi

Ciao, se vai su youtube ci sono diversi corsi free che ti danno una buona infarinata....poi il resto e' tanta pratica....per quanto riguarda le reti neurali e' qualcosa di avanzato....si', certo l' IA da' una mano, ma solo se sai cosa significa il codice che vuoi scrivere, perche' il 90% delle volte non capisce cosa vogliamo realizzare.....
 
Buongiorno signori vi faccio i complimenti ,trovo molto interessante questo lavoro che state portando avanti , e vorrei divertirmi pure io ha fare qualche migliaio di prove strapazzando la rete neuro 😅 ho installato python con tutte le librerie necessarie pure io smadonnando un pò e con l'aiuto della IA. poi mi sono fatto un giro avanti e indietro nei vari post, ma non ho trovato indicazioni al riguardo , la domanda è questa , per far girare il codiè gentilmente offerto da LottoPython (che ringrazio) mi servirebbe sapere come deve essere strutturato l'archivio da dare in pasto al programma e con quale nome e in quale cartella deve essere messo per far si che il programma lo trovi .io ho fatto uno script
che mi crea nella stessa cartella le 11 ruote esempio "BA.txt" ed i dati al loro interno sono strutturati in questo modo
"2025/02/08 78 32 43 68 85"
"2025/02/11 28 43 24 13 31" senza intestazione iniziale.




Ringrazio anticipatamente per un'eventuale risposta. Buona serata a tutti (y)
 

Allegati

  • Lotto_IA.jpg
    Lotto_IA.jpg
    153,7 KB · Visite: 10
Ultima modifica:
Buongiorno signori vi faccio i complimenti ,trovo molto interessante questo lavoro che state portando avanti , e vorrei divertirmi pure io ha fare qualche migliaio di prove strapazzando la rete neuro 😅 ho installato python con tutte le librerie necessarie pure io smadonnando un pò e con l'aiuto della IA. poi mi sono fatto un giro avanti e indietro nei vari post, ma non ho trovato indicazioni al riguardo , la domanda è questa , per far girare il codiè gentilmente offerto da LottoPython (che ringrazio) mi servirebbe sapere come deve essere strutturato l'archivio da dare in pasto al programma e con quale nome e in quale cartella deve essere messo per far si che il programma lo trovi .io ho fatto uno script
che mi crea nella stessa cartella le 11 ruote esempio "BA.txt" ed i dati al loro interno sono strutturati in questo modo
"2025/02/08 78 32 43 68 85"
"2025/02/11 28 43 24 13 31" senza intestazione iniziale.




Ringrazio anticipatamente per un'eventuale risposta. Buona serata a tutti (y)
Ciao, è molto semplice, in questo piccolo script che ti allego :

1.genera file di testo vuoto es Bari.txt Cagliari.txt etc
2..una volta che inserisci le date ti aggiorna i file.

non dovresti ricevere piu l'errore

2025/02/01 NZ 19 89 28 18 33
2025/02/04 NZ 50 89 12 80 52
2025/02/06 NZ 81 37 26 1 7
2025/02/07 NZ 22 21 66 4 47
2025/02/08 NZ 87 5 13 6 69
2025/02/11 NZ 4 87 35 31 29

il codice dovrebbe anche risolvere il problema che riguardava la ruota NZ , che prima veniva richiamata RN

🏳️‍🌈ti allego il codice che con il formato txt.zip potrebbe risultare errata l'identazione.

⚠️copi il codice in un file di testo , modifichi il tuo percorso ,lo rinomini e lo inserisci nella cartella Python

⚠️NB :RICORDA DI AGGIUNGERE IL TUO PERCORSO


👉 percorso_estrazione = r'C:\TUOPERCORSO\Python\Python312'


Codice:
import tkinter as tk
from tkinter import messagebox
import os
import requests
import zipfile
import io

# Percorso di estrazione (e dove verranno creati i file .txt)
PERCORSO_ESTRAZIONE = r'C:\Users\PRODESC\AppData\Local\Programs\Python\Python312\Testcartelle'  # <---- MODIFICA QUI SE NECESSARIO

def scarica_e_estrai_zip(url, destinazione):
    try:
        response = requests.get(url)
        response.raise_for_status()  # Genera un'eccezione per codici di stato HTTP errati
        with zipfile.ZipFile(io.BytesIO(response.content)) as z:
            z.extractall(destinazione)
        return True
    except requests.exceptions.RequestException as e:
        messagebox.showerror("Errore", f"Errore durante il download: {e}")
        return False
    except zipfile.BadZipFile as e:
        messagebox.showerror("Errore", f"Errore nel file ZIP: {e}")
        return False
    except Exception as e:
        messagebox.showerror("Errore", f"Errore sconosciuto: {e}")
        return False

def carica_dati_da_file(nome_file):
    try:
        with open(nome_file, 'r') as file:
            return [line.strip() for line in file.readlines()]
    except FileNotFoundError:
        return []  # Restituisce una lista vuota se il file non esiste
    except Exception as e:
        messagebox.showerror("Errore", f"Errore durante la lettura del file {nome_file}: {e}")
        return []

def salva_dati_su_file(dati_ruote):
    for ruota, dati in dati_ruote.items():
        if dati:
            nome_file = os.path.join(PERCORSO_ESTRAZIONE, mappa_ruote[ruota]) # Percorso completo
            try:
                with open(nome_file, 'a') as file:
                    for line in dati:
                        # Formatta la linea per la ruota Nazionale (aggiunge tabulazioni)
                        if ruota == "NZ":
                            parts = line.split()
                            if len(parts) >= 7:  # Assicurati di avere abbastanza elementi
                                line = f"{parts[0]}\t{parts[1]}\t{parts[2]}\t{parts[3]}\t{parts[4]}\t{parts[5]}\t{parts[6]}"
                        file.write(line + '\n')
            except Exception as e:
                messagebox.showerror("Errore", f"Errore durante la scrittura nel file {nome_file}: {e}")

def aggiorna_file(data_inizio, data_fine, percorso_estrazione): # aggiunto percorso_estrazione
    global mappa_ruote
    mappa_ruote = {
        "BA": "Bari.txt",
        "CA": "Cagliari.txt",
        "FI": "Firenze.txt",
        "GE": "Genova.txt",
        "MI": "Milano.txt",
        "NA": "Napoli.txt",
        "PA": "Palermo.txt",
        "RM": "Roma.txt",
        "NZ": "Nazionale.txt",
        "TO": "Torino.txt",
        "VE": "Venezia.txt"
    }

    tutti_dati_filtrati = {ruota: [] for ruota in mappa_ruote.keys()}

    # Usa il percorso completo per caricare il file storico.txt
    storico_file_path = os.path.join(percorso_estrazione, 'storico.txt')
    dati = carica_dati_da_file(storico_file_path) # Usa il percorso completo

    for line in dati:
        parts = line.split()
        if len(parts) < 2:
            continue
        date = parts[0]
        ruota = parts[1]

        if data_inizio <= date <= data_fine:
            # Gestione della ruota Nazionale (RN -> NZ)
            if ruota == "RN":
                ruota = "NZ"
                parts[1] = "NZ"  # Modifica la ruota nella linea
                line = ' '.join(parts)  # Ricostruisci la linea con "NZ"

            if ruota in tutti_dati_filtrati:
                tutti_dati_filtrati[ruota].append(line)

    tutti_dati_filtrati = {ruota: lines for ruota, lines in tutti_dati_filtrati.items() if lines}

    if not tutti_dati_filtrati:
        messagebox.showinfo("Info", "Nessun dato trovato per le ruote specificate e le date.")
        return

    salva_dati_su_file(tutti_dati_filtrati)
    messagebox.showinfo("Successo", "Dati aggiornati per tutte le ruote.")

def aggiorna_tutti_file():
    # Specifica il percorso di estrazione
    # percorso_estrazione = r'C:\TUO PERCORSO \Python\Python312' # NON SERVE PIU', USA LA COSTANTE GLOBALE

    if scarica_e_estrai_zip("https://www.igt.it/STORICO_ESTRAZIONI_LOTTO/storico.zip", PERCORSO_ESTRAZIONE):
        # Correggi RN in NZ nel file storico.txt appena scaricato
        storico_file_path = os.path.join(PERCORSO_ESTRAZIONE, 'storico.txt') # Percorso completo
        try:
            with open(storico_file_path, 'r') as file:
                lines = file.readlines()

            with open(storico_file_path, 'w') as file:
                for line in lines:
                    file.write(line.replace(' RN ', ' NZ '))
        except Exception as e:
            messagebox.showerror("Errore", f"Errore durante la correzione RN -> NZ: {e}")
            return # Importante uscire in caso di errore

        if os.path.exists(storico_file_path):
            data_inizio = data_inizio_entry.get()
            data_fine = data_fine_entry.get()

            if not data_inizio:
                messagebox.showerror("Errore", "Inserisci una data di inizio.")
                return

            aggiorna_file(data_inizio, data_fine, PERCORSO_ESTRAZIONE) # Passa il percorso alla funzione
        else:
            messagebox.showerror("Errore", "Il file storico.txt non è stato trovato dopo l'estrazione.")
    else:
        messagebox.showerror("Errore", "Il download del file storico.zip è fallito.")

def crea_file():
    global mappa_ruote
    mappa_ruote = {
        "BA": "Bari.txt",
        "CA": "Cagliari.txt",
        "FI": "Firenze.txt",
        "GE": "Genova.txt",
        "MI": "Milano.txt",
        "NA": "Napoli.txt",
        "PA": "Palermo.txt",
        "RM": "Roma.txt",
        "NZ": "Nazionale.txt",
        "TO": "Torino.txt",
        "VE": "Venezia.txt"
    }
    for ruota in mappa_ruote:
        nome_file = os.path.join(PERCORSO_ESTRAZIONE, mappa_ruote[ruota]) # Percorso completo
        try:
            if not os.path.exists(nome_file):
                open(nome_file, 'w').close()  # Crea un file vuoto
                print(f"File {nome_file} creato in {PERCORSO_ESTRAZIONE}.")
        except Exception as e:
            messagebox.showerror("Errore", f"Errore durante la creazione del file {nome_file}: {e}")
            return # Esci dalla funzione in caso di errore
    messagebox.showinfo("Successo", "Tutti i file mancanti sono stati creati.")


# Creazione della finestra principale
root = tk.Tk()
root.title("Aggiornamento Dati Lotto")

data_inizio_var = tk.StringVar()
data_fine_var = tk.StringVar()

tk.Label(root, text="Data di Inizio (AAAA/MM/GG):").grid(row=0, column=0, padx=10, pady=10)
data_inizio_entry = tk.Entry(root, textvariable=data_inizio_var)
data_inizio_entry.grid(row=0, column=1, padx=10, pady=10)

tk.Label(root, text="Data di Fine (AAAA/MM/GG):").grid(row=1, column=0, padx=10, pady=10)
data_fine_entry = tk.Entry(root, textvariable=data_fine_var)
data_fine_entry.grid(row=1, column=1, padx=10, pady=10)

tk.Button(root, text="Aggiorna Tutti i File", command=aggiorna_tutti_file).grid(row=2, column=0, columnspan=2, padx=10, pady=10)
tk.Button(root, text="Crea File Mancanti", command=crea_file).grid(row=3, column=0, columnspan=2, padx=10, pady=10)

root.mainloop()
 
Ultima modifica:
Ciao, è molto semplice, in questo piccolo script che ti allego :

1.genera file di testo vuoto es Bari.txt Cagliari.txt etc
2..una volta che inserisci le date ti aggiorna i file.

non dovresti ricevere piu l'errore

2025/02/01 NZ 19 89 28 18 33
2025/02/04 NZ 50 89 12 80 52
2025/02/06 NZ 81 37 26 1 7
2025/02/07 NZ 22 21 66 4 47
2025/02/08 NZ 87 5 13 6 69
2025/02/11 NZ 4 87 35 31 29

il codice dovrebbe anche risolvere il problema che riguardava la ruota NZ , che prima veniva richiamata RN

🏳️‍🌈ti allego il codice che con il formato txt.zip potrebbe risultare errata l'identazione.

⚠️copi il codice in un file di testo , modifichi il tuo percorso ,lo rinomini e lo inserisci nella cartella Python

⚠️NB :RICORDA DI AGGIUNGERE IL TUO PERCORSO


👉 percorso_estrazione = r'C:\TUOPERCORSO\Python\Python312'


Codice:
import tkinter as tk
from tkinter import messagebox
import os
import requests
import zipfile
import io

# Percorso di estrazione (e dove verranno creati i file .txt)
PERCORSO_ESTRAZIONE = r'C:\Users\PRODESC\AppData\Local\Programs\Python\Python312\Testcartelle'  # <---- MODIFICA QUI SE NECESSARIO

def scarica_e_estrai_zip(url, destinazione):
    try:
        response = requests.get(url)
        response.raise_for_status()  # Genera un'eccezione per codici di stato HTTP errati
        with zipfile.ZipFile(io.BytesIO(response.content)) as z:
            z.extractall(destinazione)
        return True
    except requests.exceptions.RequestException as e:
        messagebox.showerror("Errore", f"Errore durante il download: {e}")
        return False
    except zipfile.BadZipFile as e:
        messagebox.showerror("Errore", f"Errore nel file ZIP: {e}")
        return False
    except Exception as e:
        messagebox.showerror("Errore", f"Errore sconosciuto: {e}")
        return False

def carica_dati_da_file(nome_file):
    try:
        with open(nome_file, 'r') as file:
            return [line.strip() for line in file.readlines()]
    except FileNotFoundError:
        return []  # Restituisce una lista vuota se il file non esiste
    except Exception as e:
        messagebox.showerror("Errore", f"Errore durante la lettura del file {nome_file}: {e}")
        return []

def salva_dati_su_file(dati_ruote):
    for ruota, dati in dati_ruote.items():
        if dati:
            nome_file = os.path.join(PERCORSO_ESTRAZIONE, mappa_ruote[ruota]) # Percorso completo
            try:
                with open(nome_file, 'a') as file:
                    for line in dati:
                        # Formatta la linea per la ruota Nazionale (aggiunge tabulazioni)
                        if ruota == "NZ":
                            parts = line.split()
                            if len(parts) >= 7:  # Assicurati di avere abbastanza elementi
                                line = f"{parts[0]}\t{parts[1]}\t{parts[2]}\t{parts[3]}\t{parts[4]}\t{parts[5]}\t{parts[6]}"
                        file.write(line + '\n')
            except Exception as e:
                messagebox.showerror("Errore", f"Errore durante la scrittura nel file {nome_file}: {e}")

def aggiorna_file(data_inizio, data_fine, percorso_estrazione): # aggiunto percorso_estrazione
    global mappa_ruote
    mappa_ruote = {
        "BA": "Bari.txt",
        "CA": "Cagliari.txt",
        "FI": "Firenze.txt",
        "GE": "Genova.txt",
        "MI": "Milano.txt",
        "NA": "Napoli.txt",
        "PA": "Palermo.txt",
        "RM": "Roma.txt",
        "NZ": "Nazionale.txt",
        "TO": "Torino.txt",
        "VE": "Venezia.txt"
    }

    tutti_dati_filtrati = {ruota: [] for ruota in mappa_ruote.keys()}

    # Usa il percorso completo per caricare il file storico.txt
    storico_file_path = os.path.join(percorso_estrazione, 'storico.txt')
    dati = carica_dati_da_file(storico_file_path) # Usa il percorso completo

    for line in dati:
        parts = line.split()
        if len(parts) < 2:
            continue
        date = parts[0]
        ruota = parts[1]

        if data_inizio <= date <= data_fine:
            # Gestione della ruota Nazionale (RN -> NZ)
            if ruota == "RN":
                ruota = "NZ"
                parts[1] = "NZ"  # Modifica la ruota nella linea
                line = ' '.join(parts)  # Ricostruisci la linea con "NZ"

            if ruota in tutti_dati_filtrati:
                tutti_dati_filtrati[ruota].append(line)

    tutti_dati_filtrati = {ruota: lines for ruota, lines in tutti_dati_filtrati.items() if lines}

    if not tutti_dati_filtrati:
        messagebox.showinfo("Info", "Nessun dato trovato per le ruote specificate e le date.")
        return

    salva_dati_su_file(tutti_dati_filtrati)
    messagebox.showinfo("Successo", "Dati aggiornati per tutte le ruote.")

def aggiorna_tutti_file():
    # Specifica il percorso di estrazione
    # percorso_estrazione = r'C:\TUO PERCORSO \Python\Python312' # NON SERVE PIU', USA LA COSTANTE GLOBALE

    if scarica_e_estrai_zip("https://www.igt.it/STORICO_ESTRAZIONI_LOTTO/storico.zip", PERCORSO_ESTRAZIONE):
        # Correggi RN in NZ nel file storico.txt appena scaricato
        storico_file_path = os.path.join(PERCORSO_ESTRAZIONE, 'storico.txt') # Percorso completo
        try:
            with open(storico_file_path, 'r') as file:
                lines = file.readlines()

            with open(storico_file_path, 'w') as file:
                for line in lines:
                    file.write(line.replace(' RN ', ' NZ '))
        except Exception as e:
            messagebox.showerror("Errore", f"Errore durante la correzione RN -> NZ: {e}")
            return # Importante uscire in caso di errore

        if os.path.exists(storico_file_path):
            data_inizio = data_inizio_entry.get()
            data_fine = data_fine_entry.get()

            if not data_inizio:
                messagebox.showerror("Errore", "Inserisci una data di inizio.")
                return

            aggiorna_file(data_inizio, data_fine, PERCORSO_ESTRAZIONE) # Passa il percorso alla funzione
        else:
            messagebox.showerror("Errore", "Il file storico.txt non è stato trovato dopo l'estrazione.")
    else:
        messagebox.showerror("Errore", "Il download del file storico.zip è fallito.")

def crea_file():
    global mappa_ruote
    mappa_ruote = {
        "BA": "Bari.txt",
        "CA": "Cagliari.txt",
        "FI": "Firenze.txt",
        "GE": "Genova.txt",
        "MI": "Milano.txt",
        "NA": "Napoli.txt",
        "PA": "Palermo.txt",
        "RM": "Roma.txt",
        "NZ": "Nazionale.txt",
        "TO": "Torino.txt",
        "VE": "Venezia.txt"
    }
    for ruota in mappa_ruote:
        nome_file = os.path.join(PERCORSO_ESTRAZIONE, mappa_ruote[ruota]) # Percorso completo
        try:
            if not os.path.exists(nome_file):
                open(nome_file, 'w').close()  # Crea un file vuoto
                print(f"File {nome_file} creato in {PERCORSO_ESTRAZIONE}.")
        except Exception as e:
            messagebox.showerror("Errore", f"Errore durante la creazione del file {nome_file}: {e}")
            return # Esci dalla funzione in caso di errore
    messagebox.showinfo("Successo", "Tutti i file mancanti sono stati creati.")


# Creazione della finestra principale
root = tk.Tk()
root.title("Aggiornamento Dati Lotto")

data_inizio_var = tk.StringVar()
data_fine_var = tk.StringVar()

tk.Label(root, text="Data di Inizio (AAAA/MM/GG):").grid(row=0, column=0, padx=10, pady=10)
data_inizio_entry = tk.Entry(root, textvariable=data_inizio_var)
data_inizio_entry.grid(row=0, column=1, padx=10, pady=10)

tk.Label(root, text="Data di Fine (AAAA/MM/GG):").grid(row=1, column=0, padx=10, pady=10)
data_fine_entry = tk.Entry(root, textvariable=data_fine_var)
data_fine_entry.grid(row=1, column=1, padx=10, pady=10)

tk.Button(root, text="Aggiorna Tutti i File", command=aggiorna_tutti_file).grid(row=2, column=0, columnspan=2, padx=10, pady=10)
tk.Button(root, text="Crea File Mancanti", command=crea_file).grid(row=3, column=0, columnspan=2, padx=10, pady=10)

root.mainloop()
Grazie per la gentilezza e la risposta tempestiva , Scarico e mi applico :-) , nel frattempo avevo intuito e ho creato un file VB6 che crea le estrazione utilizzando l'archivio di spaziometria ed ero riuscito ha fare uno scan con tanto di grafico finale lo script devo affinarlo per sistemare alcune piccole cose . quando sarà ok lo rendo disponibile . per quanto riguarda la directory io ho messo le estraz delle ruote insieme allo script prova1.py e la cosa ha funzionato. Buona giornata a tutti ;.)
 
sperando di aver fatto cosa gradita ecco l'eseguibile .EXE che crea l'archivio delle 11 ruote compatibile con lo script Python, va levato il suffisso ".TXT" finale. All'inizio dell'esecuzione viene chiesto il percorso della directory da digitare o incollare senza l'ultimo slash "\" lo aggiunge in automatico.
si basa sull'archivio di spaziometria quindi deve ovviamente essere installato nei vostri PC.

x LottoPYTHON Adesso do un'occhiata al codice che mi hai gentilmente passato .
Poi comincerò a rompervi i cojoness con i parametri per ottimizzare la rete :ROFLMAO::ROFLMAO::ROFLMAO::ROFLMAO:
 

Allegati

sperando di aver fatto cosa gradita ecco l'eseguibile .EXE che crea l'archivio delle 11 ruote compatibile con lo script Python, va levato il suffisso ".TXT" finale. All'inizio dell'esecuzione viene chiesto il percorso della directory da digitare o incollare senza l'ultimo slash "\" lo aggiunge in automatico.
si basa sull'archivio di spaziometria quindi deve ovviamente essere installato nei vostri PC.

x LottoPYTHON Adesso do un'occhiata al codice che mi hai gentilmente passato .
Poi comincerò a rompervi i cojoness con i parametri per ottimizzare la rete :ROFLMAO::ROFLMAO::ROFLMAO::ROFLMAO:
ti ringrazio batty per quanto proposto appena possibile gli do un occhiata.
buona serata
 
giuste convergenze e intuizioni possono portare all'ambo in terzina in pochi colpi

i file txt li ho caricati online il codice preleva i dati da github

un piccolo programmino che mi ha dato qualche soddisfazione

N.B
non sono codici in vendita in alcun modo da nessuna parte ,sono liberi da poter essere modificati a proprio piacimento in base alla voglia e alle vostre capacità .

Screenshot-16.png

Codice:
import tkinter as tk
from tkinter import messagebox, filedialog
import pandas as pd
from scipy.stats import binom
import requests
from io import StringIO
import threading
import time

def carica_dati(url, start_date=None, end_date=None):
    try:
        response = requests.get(url)
        response.raise_for_status()  # Verifica se la richiesta ha avuto successo
        data = StringIO(response.text)
        df = pd.read_csv(data, sep='\t', header=None, names=['Data', 'Ruota', 'Numero1', 'Numero2', 'Numero3', 'Numero4', 'Numero5'])
        df['Data'] = pd.to_datetime(df['Data'], errors='coerce')
        df = df.dropna(subset=['Data'])
        if start_date and end_date:
            df = df[(df['Data'] >= start_date) & (df['Data'] <= end_date)]
        for colonna in ['Numero1', 'Numero2', 'Numero3', 'Numero4', 'Numero5']:
            df[colonna] = df[colonna].apply(lambda x: str(int(x)).zfill(2) if pd.notna(x) and str(x).isdigit() else None)
        return df
    except requests.exceptions.RequestException as e:
        messagebox.showerror("Errore di Rete", f"Errore durante il recupero dei dati dall'URL: {e}")
        return None
    except ValueError as e:
        messagebox.showerror("Errore di Formattazione", f"Errore nel file scaricato: {e}")
        return None

def calcola_statistiche_numeri_successivi(df, numero):
    df_numeri = df[['Numero1', 'Numero2', 'Numero3', 'Numero4', 'Numero5']]
    filtro_successivi = df_numeri.shift(1).apply(lambda x: x == numero).any(axis=1)
    numeri_successivi = df[filtro_successivi].iloc[:, 2:].values.flatten()
    numeri_successivi = pd.Series(numeri_successivi).dropna()
   
    filtro_precedenti = df_numeri.shift(-1).apply(lambda x: x == numero).any(axis=1)
    numeri_precedenti = df[filtro_precedenti].iloc[:, 2:].values.flatten()
    numeri_precedenti = pd.Series(numeri_precedenti).dropna()

    if numeri_successivi.empty and numeri_precedenti.empty:
        return None, f"Il numero {numero} non ha seguito né preceduto immediato sulla ruota."
   
    statistiche = {}
   
    if not numeri_successivi.empty:
        conteggio_numeri_successivi = numeri_successivi.value_counts()
        numeri_top_successivi = conteggio_numeri_successivi.head(4)
        percentuali_successivi = (numeri_top_successivi / len(numeri_successivi)) * 100
        media_successivi = numeri_successivi.astype(int).mean()
        deviazione_standard_successivi = numeri_successivi.astype(int).std()
        statistiche['successivi'] = {
            'numeri_top': numeri_top_successivi,
            'percentuali': percentuali_successivi,
            'media': media_successivi,
            'deviazione_standard': deviazione_standard_successivi,
            'dati': numeri_successivi
        }

    if not numeri_precedenti.empty:
        conteggio_numeri_precedenti = numeri_precedenti.value_counts()
        numeri_top_precedenti = conteggio_numeri_precedenti.head(4)
        percentuali_precedenti = (numeri_top_precedenti / len(numeri_precedenti)) * 100
        media_precedenti = numeri_precedenti.astype(int).mean()
        deviazione_standard_precedenti = numeri_precedenti.astype(int).std()
        statistiche['precedenti'] = {
            'numeri_top': numeri_top_precedenti,
            'percentuali': percentuali_precedenti,
            'media': media_precedenti,
            'deviazione_standard': deviazione_standard_precedenti,
            'dati': numeri_precedenti
        }
   
    freq_uscita_numero = (df.iloc[:, 2:] == numero).sum().sum() / (len(df) * 5)

    def calcola_estrazioni_necessarie(probabilita, freq):
        estrazioni = 1
        while True:
            probabilita_attuale = 1 - binom.cdf(0, estrazioni, freq)
            if probabilita_attuale >= probabilita:
                return estrazioni
            estrazioni += 1

    estrazioni_50_percento = calcola_estrazioni_necessarie(0.50, freq_uscita_numero)
    estrazioni_90_percento = calcola_estrazioni_necessarie(0.90, freq_uscita_numero)

    return (statistiche, freq_uscita_numero, estrazioni_50_percento, estrazioni_90_percento), None

def scegli_miglior_ruota(risultati):
    miglior_ruota = None
    miglior_valutazione = -float('inf')
   
    for ruota, risultato in risultati:
        statistiche, freq_uscita_numero, estrazioni_50_percento, estrazioni_90_percento = risultato
        valutazione = 0
        if 'successivi' in statistiche:
            valutazione += statistiche['successivi']['media'] - statistiche['successivi']['deviazione_standard']
        if 'precedenti' in statistiche:
            valutazione += statistiche['precedenti']['media'] - statistiche['precedenti']['deviazione_standard']
       
        if valutazione > miglior_valutazione:
            miglior_valutazione = valutazione
            miglior_ruota = (ruota, risultato)
   
    return miglior_ruota

def cerca_numeri():
    ruote_selezionate = listbox_ruote.curselection()
    if not ruote_selezionate:
        messagebox.showinfo("Nessuna Ruota Selezionata", "Seleziona almeno una ruota.")
        return

    numeri_spia = [entry.get().zfill(2) for entry in entry_numeri if entry.get().isdigit() and 1 <= int(entry.get()) <= 90]
    if not numeri_spia:
        messagebox.showinfo("Numeri Spia Invalidi", "Inserisci numeri spia validi (1-90).")
        return
   
    try:
        start_date = pd.to_datetime(start_date_entry.get(), format='%Y-%m-%d')
        end_date = pd.to_datetime(end_date_entry.get(), format='%Y-%m-%d')
    except ValueError:
        messagebox.showinfo("Date Invalidi", "Inserisci date valide nel formato YYYY-MM-DD.")
        return

    risultati = []
    messaggi_errore = []
    for ruota_index in ruote_selezionate:
        ruota = listbox_ruote.get(ruota_index)
        file_ruota = file_ruote.get(ruota)
        if file_ruota:
            df = carica_dati(file_ruota, start_date, end_date)
            if df is not None:
                for numero in numeri_spia:
                    risultato, errore = calcola_statistiche_numeri_successivi(df, numero)
                    if errore:
                        messaggi_errore.append(errore)
                    if risultato is not None:
                        risultati.append((ruota, risultato))

    if risultati:
        miglior_ruota = scegli_miglior_ruota(risultati)
        if miglior_ruota:
            ruota, risultato = miglior_ruota
            statistiche, freq_uscita_numero, estrazioni_50_percento, estrazioni_90_percento = risultato

            messaggio = f"Per la ruota di {ruota}, le statistiche dei numeri spia sono:\n"
           
            if 'successivi' in statistiche:
                messaggio += "Numeri successivi:\n"
                for num, freq in statistiche['successivi']['numeri_top'].items():
                    percentuale = statistiche['successivi']['percentuali'][num]
                    messaggio += f"- Numero: {num}, Frequenza: {freq}, Percentuale: {percentuale:.2f}%\n"
                messaggio += f"Media dei numeri successivi: {statistiche['successivi']['media']:.2f}\n"
                messaggio += f"Deviazione standard dei numeri successivi: {statistiche['successivi']['deviazione_standard']:.2f}\n"
           
            if 'precedenti' in statistiche:
                messaggio += "Numeri precedenti:\n"
                for num, freq in statistiche['precedenti']['numeri_top'].items():
                    percentuale = statistiche['precedenti']['percentuali'][num]
                    messaggio += f"- Numero: {num}, Frequenza: {freq}, Percentuale: {percentuale:.2f}%\n"
                messaggio += f"Media dei numeri precedenti: {statistiche['precedenti']['media']:.2f}\n"
                messaggio += f"Deviazione standard dei numeri precedenti: {statistiche['precedenti']['deviazione_standard']:.2f}\n"
           
            messaggio += f"Frequenza di uscita del numero spia: {freq_uscita_numero:.2f}\n"
            messaggio += f"Numero stimato di estrazioni necessarie per avere il numero spia con probabilità del 50%: {estrazioni_50_percento}\n"
            messaggio += f"Numero stimato di estrazioni necessarie per avere il numero spia con probabilità del 90%: {estrazioni_90_percento}\n"
            messaggio += "\n"
       
            risultato_text.delete(1.0, tk.END)
            risultato_text.insert(tk.END, messaggio)
    else:
        risultato_text.delete(1.0, tk.END)
        if messaggi_errore:
            risultato_text.insert(tk.END, "\n".join(messaggi_errore))
        else:
            risultato_text.insert(tk.END, "Nessun risultato trovato.")

def salva_risultati():
    results = risultato_text.get(1.0, tk.END)
    if not results.strip():
        messagebox.showinfo("Nessun Risultato", "Non ci sono risultati da salvare.")
        return
    file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt")])
    if file_path:
        with open(file_path, "w") as file:
            file.write(results)
        messagebox.showinfo("Salvataggio", "I risultati sono stati salvati correttamente.")

def ottieni_data_ultima_estrazione(url):
    try:
        response = requests.get(url)
        response.raise_for_status()
        data = StringIO(response.text)
        df = pd.read_csv(data, sep='\t', header=None, names=['Data', 'Ruota', 'Numero1', 'Numero2', 'Numero3', 'Numero4', 'Numero5'])
        df['Data'] = pd.to_datetime(df['Data'], errors='coerce')
        df = df.dropna(subset=['Data'])
        if not df.empty:
            ultima_estrazione = df.iloc[-1]['Data']
            return ultima_estrazione.strftime('%Y/%m/%d')
        else:
            return "Data non disponibile"
    except requests.exceptions.RequestException as e:
        return f"Errore di rete: {e}"
    except ValueError as e:
        return f"Errore di formato: {e}"

def aggiorna_data_estrazione():
    global ultima_estrazione_label
    # URL del file da cui prelevare la data (es. BARI)
    url_bari = 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d99d8a5925b875da1b/BARI.txt'
    data_ultima_estrazione = ottieni_data_ultima_estrazione(url_bari)
    ultima_estrazione_label.config(text=f"Aggiornato alla data del: {data_ultima_estrazione}")
    root.after(60000, aggiorna_data_estrazione)  # Aggiorna ogni 60 secondi

# Definizione della finestra principale
root = tk.Tk()
root.title("Analisi dei Numeri Spia")
root.geometry("1200x700")

# Definisci gli URL dei file delle ruote
file_ruote = {
    'BA': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d99d8a5925b875da1b/BARI.txt',
    'CA': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d99d8a5925b875da1b/CAGLIARI.txt',
    'FI': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d99d8a5925b875da1b/FIRENZE.txt',
    'GE': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d99d8a5925b875da1b/GENOVA.txt',
    'MI': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d99d8a5925b875da1b/MILANO.txt',
    'NA': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d8a5925b875da1b/NAPOLI.txt',
    'PA': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d8a5925b875da1b/PALERMO.txt',
    'RM': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d8a5925b875da1b/ROMA.txt',
    'TO': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d8a5925b875da1b/TORINO.txt',
    'VE': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d8a5925b875da1b/VENEZIA.txt',
    'NZ': 'https://raw.githubusercontent.com/Lottopython/estrazioni/56f992301c37511d75bd79d8a5925b875da1b/NAZIONALE.txt'
}

frame = tk.Frame(root, padx=10, pady=10)
frame.pack(expand=True, fill=tk.BOTH)

# Etichetta per l'ultima estrazione (box aggiunto)
ultima_estrazione_label = tk.Label(frame, text="Caricamento data...", font=("Helvetica", 14))
ultima_estrazione_label.place(relx=0.05, rely=0.01, relwidth=0.9, relheight=0.1)

label_ruote = tk.Label(frame, text="Seleziona Ruota:", font=("Helvetica", 14))
label_ruote.place(relx=0.05, rely=0.15, relwidth=0.15, relheight=0.05)

listbox_ruote = tk.Listbox(frame, font=("Helvetica", 12), selectmode=tk.MULTIPLE)
for ruota in file_ruote.keys():
    listbox_ruote.insert(tk.END, ruota)
listbox_ruote.place(relx=0.05, rely=0.2, relwidth=0.15, relheight=0.35)

label_numeri_spia = tk.Label(frame, text="Numeri Spia:", font=("Helvetica", 14))
label_numeri_spia.place(relx=0.25, rely=0.15, relwidth=0.2, relheight=0.05)

entry_numeri = []
for i in range(5):
    entry_numero = tk.Entry(frame, font=("Helvetica", 12))
    entry_numero.place(relx=0.25, rely=0.2 + i * 0.07, relwidth=0.2, relheight=0.05)
    entry_numeri.append(entry_numero)

start_date_label = tk.Label(frame, text="Data Inizio:", font=("Helvetica", 14))
start_date_label.place(relx=0.55, rely=0.15, relwidth=0.15, relheight=0.05)

start_date_entry = tk.Entry(frame, font=("Helvetica", 12))
start_date_entry.place(relx=0.55, rely=0.2, relwidth=0.2, relheight=0.05)

end_date_label = tk.Label(frame, text="Data Fine:", font=("Helvetica", 14))
end_date_label.place(relx=0.55, rely=0.3, relwidth=0.15, relheight=0.05)

end_date_entry = tk.Entry(frame, font=("Helvetica", 12))
end_date_entry.place(relx=0.55, rely=0.35, relwidth=0.2, relheight=0.05)

button_cerca = tk.Button(frame, text="Cerca", font=("Helvetica", 14), command=cerca_numeri)
button_cerca.place(relx=0.8, rely=0.2, relwidth=0.15, relheight=0.1)

button_salva = tk.Button(frame, text="Salva Risultati", font=("Helvetica", 14), command=salva_risultati)
button_salva.place(relx=0.8, rely=0.35, relwidth=0.15, relheight=0.1)

risultato_text = tk.Text(frame, font=("Helvetica", 12))
risultato_text.place(relx=0.05, rely=0.6, relwidth=0.9, relheight=0.35)

# Avvia l'aggiornamento iniziale delle estrazioni e il loop
aggiorna_data_estrazione()

root.mainloop()
 

Ultima estrazione Lotto

  • Estrazione del lotto
    martedì 11 febbraio 2025
    Bari
    45
    41
    04
    55
    42
    Cagliari
    51
    90
    39
    50
    60
    Firenze
    04
    57
    11
    79
    12
    Genova
    83
    57
    63
    64
    06
    Milano
    75
    24
    26
    82
    08
    Napoli
    37
    01
    17
    25
    32
    Palermo
    80
    53
    47
    03
    63
    Roma
    57
    68
    73
    86
    33
    Torino
    28
    43
    24
    13
    31
    Venezia
    78
    83
    90
    51
    01
    Nazionale
    04
    87
    35
    31
    29
    Estrazione Simbolotto
    Cagliari
    14
    08
    04
    16
    27
Indietro
Alto