Un mois de données est préparé pour chacun des 3 millions d'identifiants Le contenu des données est une variable explicative et une variable objective. En d'autres termes, il y a trois colonnes dans le tableau: ID, variable explicative x et variable objective y. Le nombre d'enregistrements est de 3 millions x 30 jours ≒ 90 millions
À ce moment, pour chacun des 3 millions d'ID, une simple régression des variables explicatives et des variables objectives pendant 30 jours a été effectuée. Je souhaite stocker le coefficient de corrélation, la pente et la valeur p pour chaque ID en sortie.
Régresse dans une boucle for pour 3 millions d'ID et stocke les résultats sous forme de liste Enfin, les listes sont combinées dans une trame de données. Voir ici pour la vitesse de cette technique
Il faut du temps pour interroger simplement les enregistrements correspondant à chaque identifiant de la trame de données (environ 13 secondes par identifiant).
code1.py
for id in id_list:
tmp_x = df[df.id == id].x
tmp_y = df[df.id == id].y
code2.py
df.index = df.id
for id in id_list:
tmp_x = df.loc[id].x
tmp_y = df.loc[id].y
code3.py
import dask.dataframe as dd
import multiprocessing
df.index = df.id
#Dans l'environnement actuel cpu_count = 32
ddf = dd.from_pandas(df, npartitions=multiprocessing.cpu_count())
for id in id_list:
tmp_x = ddf.loc[id].x.compute()
tmp_y = ddf.loc[id].y.compute()
Il est encore tard. Avec cela, il faudrait deux mois pour terminer le traitement de toutes les données. ..
Actuellement, 30 enregistrements sont stockés pour chaque ID, mais en stockant 30 jours de données dans une cellule sous forme de liste, un enregistrement est créé pour chaque ID. Ce faisant, étant donné que le traitement d'inclusion peut être utilisé pour le traitement en boucle, il existe une possibilité que la vitesse de traitement puisse être améliorée. (Cependant, combien de temps faut-il pour convertir de 30 enregistrements en 1 enregistrement en premier lieu ... je veux que vous le disiez avec pivot_table)
Recommended Posts