J'ai essayé de puzzle une réponse à cette question pour de nombreux mois, tandis que l'apprentissage des pandas. J'utilise SAS pour ma journée-à-jour de travail et il est idéal pour les out-of-core support. Cependant, la SAS est horrible comme un morceau de logiciel pour de nombreuses autres raisons.
Un jour, j'espère pour remplacer mon utilisation de SAS avec python et les pandas, mais je manque actuellement un out-of-core de flux de travail pour les grands ensembles de données. Je ne parle pas de "big data", qui nécessite un réseau distribué, mais plutôt des fichiers trop volumineux pour tenir dans la mémoire, mais assez petit pour tenir sur un disque dur.
Ma première pensée est d'utiliser HDFStore
pour tenir de grands ensembles de données sur le disque et ne retirer que les pièces dont j'ai besoin dans dataframes pour l'analyse. D'autres ont mentionné MongoDB comme un facile à utiliser l'alternative. Ma question est la suivante:
Quelles sont certaines des meilleures pratiques de flux de travail pour accomplir le suivant:
- Chargement de fichiers plats en permanence, sur disque structure de base de données
- L'interrogation de cette base de données pour récupérer des données pour alimenter une pandas structure de données
- La mise à jour de la base de données après la manipulation de pièces dans les pandas
Des exemples du monde réel serait beaucoup apprécié, surtout de quelqu'un qui utilise des pandas sur les "grandes données".
Edit -- un exemple de la façon dont je voudrais que cela fonctionne:
- De manière itérative à l'importation d'un grand plat de fichier et le stocker dans une permanente, sur disque structure de base de données. Ces fichiers sont généralement trop gros pour tenir dans la mémoire.
- Afin d'utiliser les Pandas, je voudrais lire des sous-ensembles de ces données (habituellement quelques colonnes à la fois) qui peut s'adapter à la mémoire.
- Je voudrais créer de nouvelles colonnes en effectuant diverses opérations sur les colonnes sélectionnées.
- Je voudrais ensuite ajouter ces nouvelles colonnes dans la base de données de la structure.
Je suis en train d'essayer de trouver un moyen pour effectuer ces étapes. Liens de lecture sur les pandas et pytables il semble que l'ajout d'une nouvelle colonne peut être un problème.
Edit -- de Répondre à Jeff de questions en particulier:
- Je suis bâtiment consommateur modèles de risque de crédit. Les types de données incluent le téléphone, la SSN et l'adresse de caractéristiques; les valeurs de propriété; dérogatoire de l'information comme le casier judiciaire, faillite, etc... Les jeux de données que j'utilise tous les jour près de 1 000 à 2 000 domaines en moyenne mixte de types de données: continu, nominale et ordinale variables à la fois numériques et des données de caractère. J'ai rarement ajouter des lignes, mais je ne effectuer de nombreuses opérations de créer de nouvelles colonnes.
- Les opérations typiques impliquent la combinaison de plusieurs colonnes à l'aide de la logique conditionnelle dans une nouvelle, composé de la colonne. 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 les données du disque de la structure. Je voudrais répéter l'étape 2, en explorant les données avec les tableaux croisés et les statistiques descriptives en essayant de trouver d'intéressant, intuitive relations de modèle.
- Typique d'un fichier de projet est habituellement d'environ 1 GO. Les fichiers sont organisés dans une telle manière où d'une ligne se compose d'un enregistrement de données sur les consommateurs. Chaque ligne a le même nombre de colonnes pour chaque enregistrement. Ce sera toujours le cas.
- C'est assez rare que je sous-ensemble par des lignes lors de la création d'une nouvelle colonne. Cependant, il est assez fréquent pour moi de sous-ensemble sur les lignes lors de la création de rapports ou de générer des statistiques descriptives. Par exemple, je pourrais avoir besoin de créer un simple de la fréquence pour une branche d'activité spécifique, dire au Détail de cartes de crédit. Pour ce faire, je voudrais sélectionner uniquement les enregistrements pour lesquels la branche de l'entreprise = détail en plus des colonnes je tiens à signaler sur. Lors de la création de nouvelles colonnes, cependant, je tiens à tirer toutes les lignes de données et uniquement les colonnes dont j'ai besoin pour les opérations.
- Le processus de modélisation nécessite que j'analyse chaque colonne, chercher des relations intéressantes avec certains variable de résultat, et de créer de nouveaux composés de colonnes que de décrire ces relations. Les colonnes que j'explore le sont généralement dans de petits ensembles. Par exemple, je vais me concentrer sur un ensemble de 20 colonnes de simplement traiter les valeurs de propriété et d'observer comment ils se rapportent à défaut de paiement sur un prêt. Une fois ceux-ci sont explorées et des nouvelles rubriques sont créées, je puis passer à un autre groupe de colonnes, de dire, de l'enseignement collégial, et répétez le processus. Ce que je suis en train de faire est de créer des candidat variables qui expliquent la relation entre mes données et certains résultats. À la fin de ce processus, j'applique certaines techniques d'apprentissage qui créent une équation de ceux composés de colonnes.
Il est rare que je n'aurais jamais ajouter des lignes pour le jeu de données. Je vais presque toujours créer de nouvelles colonnes (variables ou de fonctions dans les statistiques/apprentissage de la machine le langage).