J'ai essayé de trouver une réponse à cette question pendant de nombreux mois tout en apprenant les pandas. J'utilise SAS pour mon travail quotidien et c'est génial pour son support hors cœur. Cependant, SAS est horrible en tant que logiciel pour de nombreuses autres raisons.
Un jour, j'espère remplacer mon utilisation de SAS par python et pandas, mais il me manque actuellement un flux de travail hors cœur pour les grands ensembles de données. Je ne parle pas de "big data" qui nécessite un réseau distribué, mais plutôt de fichiers trop volumineux pour tenir en mémoire mais assez petits pour tenir sur un disque dur.
Ma première pensée est d'utiliser HDFStore
pour conserver de grands ensembles de données sur le disque et extraire uniquement les éléments dont j'ai besoin dans les trames de données pour l'analyse. D'autres ont mentionné MongoDB comme une alternative plus facile à utiliser. Ma question est la suivante:
Quels sont les workflows de bonnes pratiques pour accomplir les tâches suivantes:
- Chargement de fichiers plats dans une structure de base de données permanente sur disque
- Interroger cette base de données pour récupérer des données à alimenter dans une structure de données pandas
- Mise à jour de la base de données après manipulation de pièces dans des pandas
Des exemples concrets seraient très appréciés, en particulier de la part de ceux qui utilisent des pandas sur des "grandes données".
Modifier - un exemple de la façon dont j'aimerais que cela fonctionne:
- Importez de manière itérative un grand fichier plat et stockez-le dans une structure de base de données permanente sur disque. Ces fichiers sont généralement trop volumineux pour tenir en mémoire.
- Afin d'utiliser Pandas, je voudrais lire des sous-ensembles de ces données (généralement seulement quelques colonnes à la fois) qui peuvent tenir en mémoire.
- Je créerais de nouvelles colonnes en effectuant diverses opérations sur les colonnes sélectionnées.
- Je devrais ensuite ajouter ces nouvelles colonnes dans la structure de la base de données.
J'essaie de trouver un moyen pratique d'exécuter ces étapes. En lisant des liens sur les pandas et les pytables, il semble que l'ajout d'une nouvelle colonne pourrait être un problème.
Modifier - Répondre spécifiquement aux questions de Jeff:
- Je construis des modèles de risque de crédit à la consommation. Les types de données comprennent les caractéristiques du téléphone, du SSN et de l'adresse; valeurs des propriétés; des informations désobligeantes comme les casiers judiciaires, les faillites, etc ... Les ensembles de données que j'utilise quotidiennement comportent près de 1 000 à 2 000 champs en moyenne de types de données mixtes: variables continues, nominales et ordinales de données numériques et de caractères. J'ajoute rarement des lignes, mais j'effectue de nombreuses opérations qui créent de nouvelles colonnes.
- Les opérations typiques impliquent la combinaison de plusieurs colonnes utilisant une logique conditionnelle dans une nouvelle colonne composée. Par exemple
if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'
,. Le résultat de ces opérations est une nouvelle colonne pour chaque enregistrement de mon jeu de données. - Enfin, je voudrais ajouter ces nouvelles colonnes dans la structure de données sur disque. Je répéterais l'étape 2, en explorant les données avec des tableaux croisés et des statistiques descriptives en essayant de trouver des relations intéressantes et intuitives à modéliser.
- Un fichier de projet typique fait généralement environ 1 Go. Les fichiers sont organisés de manière à ce qu'une ligne se compose d'un enregistrement de données de consommation. Chaque ligne a le même nombre de colonnes pour chaque enregistrement. Ce sera toujours le cas.
- Il est assez rare que je sous-ensemble de lignes lors de la création d'une nouvelle colonne. Cependant, il est assez courant pour moi de sous-définir des lignes lors de la création de rapports ou de la génération de statistiques descriptives. Par exemple, je souhaiterais peut-être créer une fréquence simple pour un secteur d'activité spécifique, par exemple les cartes de crédit Retail. Pour ce faire, je ne sélectionnerais que les enregistrements pour lesquels le secteur d'activité = vente au détail, en plus des colonnes sur lesquelles je souhaite faire rapport. Cependant, lors de la création de nouvelles colonnes, je tirais toutes les lignes de données et uniquement les colonnes dont j'avais besoin pour les opérations.
- Le processus de modélisation nécessite d'analyser chaque colonne, de rechercher des relations intéressantes avec une variable de résultat et de créer de nouvelles colonnes composées qui décrivent ces relations. Les colonnes que j'explore se font généralement en petits ensembles. Par exemple, je vais me concentrer sur un ensemble de disons 20 colonnes traitant uniquement des valeurs des propriétés et observer comment elles sont liées au défaut de paiement d'un prêt. Une fois que ceux-ci sont explorés et que de nouvelles colonnes sont créées, je passe ensuite à un autre groupe de colonnes, disons l'enseignement collégial, et je répète le processus. Ce que je fais, c'est créer des variables candidates qui expliquent la relation entre mes données et certains résultats. À la toute fin de ce processus, j'applique certaines techniques d'apprentissage qui créent une équation à partir de ces colonnes composées.
Il est rare que j'ajoute des lignes à l'ensemble de données. Je créerai presque toujours de nouvelles colonnes (variables ou fonctionnalités dans le langage statistique / d'apprentissage automatique).