Attualmente sto lavorando a un progetto con un partner in cui analizziamo grandi serie di dati di eventi sportivi del passato. Ci sono circa 30.000 eventi all'anno e abbiamo dati storici per cinque anni. Pertanto, stiamo analizzando 150.000 eventi.
Ho scritto la nostra prima versione in Python con una strong dipendenza da Pandas (ottimo strumento, tra l'altro). Tuttavia, ogni volta che aggiungo un "fattore" o un calcolo al processo, rallenta un bel po '. In poche parole, può leggere tutti i vari file di dati e le query di dati di cui abbiamo bisogno a una velocità di 25 eventi al secondo.
Il problema è che una volta che comincio a lavorare con i dati, cade velocemente. Se aggiungo un semplice calcolo, scende a 24 ... e ogni calcolo dopo di ciò scende di nuovo.
Con solo 10-12 "fattori" calcolati dai dati (non stiamo parlando di loop complessi o di qualcosa di pazzesco), è ora fino a 6 eventi al secondo. ... e stiamo a malapena a grattare la superficie. A questo ritmo, ci vorranno giorni in questo modo per superare tutti gli eventi da 150k!
Ho ottimizzato le nostre query di dati, letture di file flat ecc. In realtà non sono questo il problema. Posso vivere con 15-20 eventi al secondo. Tuttavia, non posso vivere con tali drastici rallentamenti ogni volta che viene aggiunto un nuovo calcolo fattoriale.
Ho letto molto in cui Python come linguaggio interpretato è lento ecc., ma la mia domanda agli esperti là fuori - quale linguaggio dovrebbe essere fatto in questo progetto?
ESEMPIO ...
Uno dei principali "DataFrames" che sto utilizzando tramite Pandas è abbastanza grande. 350 righe x 70 colonne, ad esempio. Anche quando cerchi di moltiplicare semplicemente il valore di una colonna per un'altra ...
data['value'] = data['col1'] * data['col2']
... Vedo ciò che potrei considerare un calo significativo delle prestazioni. È molto sconcertante e molto frustrante. Capisco che questo sia un grande insieme di dati, ma non posso credere che questo sia qualcosa di così folle che Python potrebbe rallentare la scansione.
Se leggo solo i file di dati e non li faccio affatto, legge 67 eventi in 2.807 secondi. Se aggiungo un semplice calcolo dove eseguo il codice come nell'esempio precedente, rallenta a 2.877 secondi. Sulla base delle nostre ricerche, è necessario aggiungere oltre 100 calcoli sui dati .... quindi 7 secondi di rallentamento? Sembra troppo difficile da credere.