To analyze the provided lottery extraction data instead of loading it from a CSV file, we will modify the code to incorporate the given data directly into our analysis. Below, I will outline the necessary steps and provide the modified code.
Step-by-Step Analysis
- Data Structure: We will create a DataFrame directly from the provided data instead of reading it from a CSV file.
- Functions: The functions to calculate frequencies, find delayed numbers, frequent pairs, and “spy numbers” will remain the same.
- Execution: We will call our functions using the newly defined DataFrame.
Modified Code
import pandas as pd
import collections
import itertools
# Definire i dati storici delle estrazioni del lotto come una stringa multilinea
data = """
DATE,Bari,Cagliari,Firenze,Genova,Milano,Napoli,Palermo,Roma,Torino,Venezia,Nazionale
2024-09-26,17,07,30,59,65,88,37,68,17,13,72,75,01,39,71,90,70,77,56,76,50,63,90,10,72,23,28,87,75,59,55,14,74,58,10,25,38,69,53,48,64,36,79,60,14,34,66,42,39,23,61,27,59,36,35
2024-09-24,13,62,81,30,20,34,64,90,02,55,45,53,71,48,38,37,44,63,24,51,58,51,17,13,78,09,15,78,24,84,64,31,86,22,47,75,10,02,28,05,25,84,44,16,33,07,65,28,25,19,80,56,62,41,38
...
2024-01-02,70,49,50,47,79,50,38,42,29,18,86,84,52,15,44,06,16,43,89,21,64,09,06,49,70,03,37,45,69,63,44,01,87,32,73,85,74,51,90,36,75,74,39,86,87,57,29,10,05,81,84,57,70,16,75
"""
# Carica i dati in un DataFrame
from io import StringIO
# Utilizzare StringIO per simulare un file
df = pd.read_csv(StringIO(data))
# Supponiamo che ci siano 5 numeri estratti per riga (numero1, numero2, numero3, numero4, numero5)
numeri_estratti = df.iloc[:, 1:].values # Escludiamo la colonna DATE
# Funzione per calcolare la frequenza dei numeri
def calcola_frequenze(numeri_estratti):
tutti_numeri = numeri_estratti.flatten()
frequenze = collections.Counter(tutti_numeri)
return dict(frequenze)
# Funzione per trovare i numeri ritardatari
def trova_numeri_ritardatari(numeri_estratti, ultimi_n_estrazioni=100):
tutti_numeri = numeri_estratti.flatten()
numeri_set = set(range(1, 91)) # supponiamo numeri da 1 a 90
numeri_estratti_recenti = set(tutti_numeri[-ultimi_n_estrazioni:])
numeri_ritardatari = numeri_set - numeri_estratti_recenti
return list(numeri_ritardatari)
# Funzione per trovare le coppie di numeri che appaiono frequentemente insieme
def trova_coppie_frequenti(numeri_estratti, min_occorrenze=5):
coppie = []
for estrazione in numeri_estratti:
coppie += list(itertools.combinations(estrazione, 2))
contatore_coppie = collections.Counter(coppie)
coppie_frequenti = {coppia: count for coppia, count in contatore_coppie.items() if count >= min_occorrenze}
return coppie_frequenti
# Funzione per analizzare i numeri spia
def analizza_numeri_spia(numeri_estratti):
numeri_spia = {}
# Cicla su ogni estrazione, confrontando numeri attuali con quelli successivi
for i in range(len(numeri_estratti) - 1):
numeri_estratti_corrente = numeri_estratti[i]
numeri_estratti_successivi = numeri_estratti[i + 1]
for numero_corrente in numeri_estratti_corrente:
if numero_corrente not in numeri_spia:
numeri_spia[numero_corrente] = collections.Counter()
# Incrementa il contatore per i numeri che appaiono nell'estrazione successiva
numeri_spia[numero_corrente].update(numeri_estratti_successivi)
# Ordina le previsioni per ogni numero spia
for numero_corrente in numeri_spia:
numeri_spia[numero_corrente] = numeri_spia[numero_corrente].most_common(5) # Prendi i top 5 numeri
return numeri_spia
# Esegui l'analisi
frequenze = calcola_frequenze(numeri_estratti)
numeri_ritardatari = trova_numeri_ritardatari(numeri_estratti)
coppie_frequenti = trova_coppie_frequenti(numeri_estratti)
numeri_spia = analizza_numeri_spia(numeri_estratti)
# Stampa i risultati
print("Frequenze dei numeri estratti:")
for numero, freq in sorted(frequenze.items(), key=lambda x: x[1], reverse=True):
print(f"Numero {numero}: {freq} volte")
print("\nNumeri ritardatari:")
print(numeri_ritardatari)
print("\nCoppie frequenti:")
for coppia, occorrenze in coppie_frequenti.items():
print(f"Coppia {coppia}: {occorrenze} volte")
print("\nNumeri Spia:")
for numero, previsioni in numeri_spia.items():
print(f"Numero spia {numero}: prevede i numeri {previsioni}")
Explanation of the Code
- Data Loading: The data is loaded from a string that mimics a CSV file using
StringIO
, allowing us to create a DataFrame directly from it.
- Functions: The four functions remain unchanged and are utilized to process the data.
- Results: The analysis results are printed to the console, showing the frequencies of each number, the delayed numbers, frequent pairs, and the “spy numbers” with their predictions.
Conclusion
By running the modified code, you will be able to analyze the lottery data directly from the provided extraction list without needing to read from a CSV file.