J'ai sur environ 100 fichiers CSV chacun de 100 000 x 40 Je me demandais quelles problèmes devrais-je m'attendre avec de tels fichiers? J'ai déjà vérifié pour des données erronées. Quelles sont vos recommandations sur l'analyse statistique? Serait-ce mieux si je viens de diviser les fichiers et de faire tout ce qui est dans Excel? p>
5 Réponses :
J'ai trouvé que Python + CSV est probablement le moyen le plus rapide et le plus simple de faire quelques types de traitement statistique.
Nous faisons une juste quantité de reformatage et de correction des erreurs de données impairs, donc Python nous aide. P>
La disponibilité des caractéristiques de programmation fonctionnelle de Python rend cela particulièrement simple. Vous pouvez faire un échantillonnage avec des outils tels que celui-ci. P>
def someStatFunction( source ):
for row in source:
...some processing...
def someFilterFunction( source ):
for row in source:
if someFunction( row ):
yield row
# All rows
with open( "someFile", "rb" ) as source:
rdr = csv.reader( source )
someStatFunction( rdr )
# Filtered by someFilterFunction applied to each row
with open( "someFile", "rb" ) as source:
rdr = csv.reader( source )
someStatFunction( someFilterFunction( rdr ) )
Lorsque les données doivent être massées et filtrées, comme @ S.Lott dit, c'est un plaisir de pouvoir le faire en python. Si vous pouvez alimenter les données directement sur une fonction R, les forfaits incroyables aideront. Mais si vous devez le violer en premier, Python est da bombe.
Vous pouvez également utiliser loadtxt et convertir automatiquement vers des tableaux de flotteurs numpus.
Python est très agréable pour un tel traitement de données, en particulier si vos échantillons sont des "lignes" et que vous pouvez traiter chacune une telle ligne de manière indépendante: en fait, votre programme peut avoir très petit Empreinte mémoire, grâce aux générateurs et aux expressions génératrices, sur lesquelles vous pouvez lire ici: http: //www.dabeaz. com / générateurs / (ce n'est pas des éléments de base, mais quelques applications de torsion d'esprit des générateurs). P> Concernant la réponse de S.Lott, vous voulez probablement éviter le filtre () étant appliqué à la séquence de lignes - Il peut exploser votre ordinateur si vous passez à la séquence informatique suffisamment longue (essayez: ou plus court: p> Ceci peut être davantage optimisé en extrayant la condition avant la boucle, mais il s'agit d'une extraction pour le lecteur: -) p> p> filtre (aucun, itheroTools.Count ()) code> - Après avoir enregistré toutes vos données :-)). Il vaut mieux remplacer le filtre code> avec quelque chose comme ceci: p>
... ou utilisez simplement itoTools.Iffilter :)
Boom, et je sors! Prétendons que j'ai expliqué comment ifilter travaille ;-)
J'ai beaucoup de succès en utilisant la lecture et la génération de fichiers de Python et de CSV. À l'aide d'un ordinateur portable Core 2 Duo modeste, j'ai pu stocker près de la même quantité de données que vous et le traiter en mémoire en quelques minutes. Mes conseils principaux pour que cela puisse diviser vos emplois afin de pouvoir faire des choses dans des étapes séparées depuis que tous vos emplois peuvent être une douleur lorsque vous ne souhaitez qu'une seule fonctionnalité à exécuter. Proposez un bon rythme de bataille qui vous permet de profiter autant que possible de vos ressources. P>
Excel est agréable pour des lots de données plus petits, mais consultez MATPLOTLIB pour faire des graphiques et des graphiques normalement réservés pour Excel. P>
En général, ne vous inquiétez pas trop de la taille. Si vos fichiers deviennent plus gros d'un facteur de 2-3, vous pourrait em> commencer à manquer de mémoire sur un système 32 bits. Je pense que si chaque champ em> de la table est de 100 octets, c'est-à-dire que chaque ligne est de 4 000 octets, vous utiliserez environ 400 Mo de RAM pour stocker les données en mémoire et si vous en ajoutez Beaucoup de traitement, vous n'utiliserez toujours que 800 ou plus MB. Ces calculs sont très en arrière de l'enveloppe et extrêmement généreux (vous n'utiliserez que cette mémoire que si vous avez beaucoup de longues chaînes ou entiers humusus dans vos données, car le maximum que vous utiliserez pour des types de données standard est de 8 octets pour un flotter ou une longue). p>
Si vous DO EM> Commencez à court de mémoire, 64 bits pourrait être le moyen d'aller. Mais autre que cela, Python gérera de grandes quantités de données avec Aplomb, en particulier lorsqu'il est combiné avec NUMPY / SICPY. L'utilisation des tableaux numpus sera presque toujours plus rapide que d'utiliser des listes indigènes. Matplotlib prendra soin de la plupart des besoins de traçage et peuvent certainement gérer les parcelles simples que vous avez décrites. p>
Enfin, si vous trouvez quelque chose que Python ne peut pas faire, mais vous avez déjà une base de code de code, jetez un coup d'œil à
Pour des jeux de données massifs, vous pourriez être intéressé par root . Il peut être utilisé pour analyser et stocker très efficacement les pétaoctes de données. Il vient également avec une base de base et plus Advanced Statistics Outils. P>
S'il est écrit pour être utilisé avec C ++, il existe également des fixations python assez complètes. Ils ne font pas très facile d'obtenir un accès direct aux données brutes (par exemple pour les utiliser dans R ou NUMPY) - mais c'est certainement possible (je le fais tout le temps). P>
Ce ne sont pas des fichiers terriblement volumineux. Pourquoi demandes-tu? Avez-vous réellement essayé de faire de simples lectures pour voir à quel point Python sera rapide?
Sauf si vous êtes chargé de Python, vous risquez peut-être d'utiliser une langue de statistiques dédiées comme R - voir r-project.org .
Habituellement, les lignes et les lignes sont des synonymes lorsque vous parlez de tables. Je suppose que tu veux dire 40 colonnes?
Je ne lis tout simplement pas le fichier entier dans une chaîne ou un autre type de données à la fois et que vous devriez aller bien. Appliquez des filtres et des lecteurs à la place. S.Lott et Tomasz semblent tous les deux le faire correctement.