[PYTHON] Une histoire sur la difficulté à traiter en boucle 3 millions de données d'identification

■ Objectif

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.

■ Politique

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

■ Environnement

■ Défis

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

■ Solution

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()

■ Conclusion

Il est encore tard. Avec cela, il faudrait deux mois pour terminer le traitement de toutes les données. ..

■ Plans futurs

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

Une histoire sur la difficulté à traiter en boucle 3 millions de données d'identification
Une histoire qui avait du mal à traiter en boucle 3 millions de données d'identification
Histoire de l'analyse de données par apprentissage automatique
Une histoire sur la façon de spécifier un chemin relatif en python.
Une histoire sur la façon de traiter le problème CORS
Une histoire de regroupement de données de séries chronologiques d'échange
Une histoire sur la tentative d'implémentation de variables privées en Python.
Une histoire rafraîchissante sur Slice en Python
Une histoire d'essayer d'automatiser un chot lorsque vous cuisinez vous-même
Une histoire sur l'ajout d'une API REST à un démon créé avec Python
Une histoire de mauvaise humeur sur Slice en Python
Une histoire accro aux pipelines Azure
L'histoire de l'utilisation de la réduction de Python
Une histoire sur tout, de la collecte de données au développement d'IA et à la publication d'applications Web en Python (3. développement d'IA)
Une histoire sur le fait de vouloir penser à des personnages déformés dans GAE / P
Une histoire d'essayer d'exécuter JavaScripthon sur Windows et d'abandonner.
L'histoire de l'abandon d'essayer de se connecter à MySQL en utilisant Heroku
Une histoire sur un débutant essayant de configurer CentOS 8 (mémo de procédure)
Une histoire sur un remodelage magique qui met Lubuntu dans un Chromebook
Une histoire sur l'apprentissage automatique avec Kyasuket
Une histoire sur Python pop and append
[Note] Une histoire sur l'impossibilité de percer le proxy avec pip
Changer le bloc de données des données d'achat de pandas (produit ID X) en dictionnaire
Comment partager un environnement virtuel [About requirements.txt]
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Créer un ensemble de données en échantillonnant au hasard les données MNIST
Une histoire sur l'exploitation d'une instance GCP à partir de Discord
Une histoire accro aux variables globales et à la portée de Go
Une histoire sur la gestion des données binaires en Python
Addictif quand Kintone est un magasin de données
L'histoire de vouloir afficher des annonces liées à des articles sur Jubatus
Analyse de données en Python: une note sur line_profiler
Une histoire sur l'implémentation d'un écran de connexion avec django
Une histoire sur l'exécution de Python sur PHP sur Heroku
Une histoire sur la modification de Python et l'ajout de fonctions
Un graphique sympa pour l'analyse des données de Wiire!
Une histoire sur l'amélioration du programme pour le remplissage partiel des données d'image binarisées 3D
Une histoire sur la façon dont les utilisateurs de Windows 10 ont créé un environnement pour utiliser OpenCV3 avec Python 3.5
Une histoire sur un débutant Python essayant d'obtenir des résultats de recherche Google à l'aide de l'API
Une histoire sur la tentative d'introduire Linter au milieu d'un projet Python (Flask)