Le meilleur moyen de simplement stocker des données pour l'analyse statistique dans R [fermé]


12

J'utilise des fichiers texte pour stocker mes données pour R sans aucun problème depuis un certain temps maintenant. Mais pour un projet récent, la taille des fichiers devient trop importante pour être gérée par les fichiers texte bruts. Quelle est la meilleure alternative simple?


5
De quelle manière les fichiers texte deviennent-ils trop gros? Avez-vous peur de leur intégrité? Vous ne pouvez pas les ouvrir dans un autre logiciel? Sont-ils trop lents à charger? Trop gros pour votre disque dur (ordinateur portable?)?
Gala du

3
+1 La gestion des données à mesure que les projets se développent est un problème universel dans l'analyse des données (et n'est guère spécifique à R). La préoccupation fondamentale concerne l'intégrité des données plutôt que la taille du fichier: proposer une forme de compression ne fait que masquer cela plutôt que de le résoudre.
whuber

Au-dessus d'une certaine taille, txt ne semble tout simplement pas fonctionner. Je peux ajouter les données supplémentaires au fichier txt et les charger dans R, mais les données supplémentaires ne sont pas dans R. (Btw les données sont assez riches, donc si la compression peut aider un peu, cela ne me mènerait pas aussi loin et je suspect à mesure que mon projet grandit, je vais à nouveau rencontrer les mêmes problèmes.)
Toy Molto

Vous devez nous en dire plus sur vos données, il n'existe pas de "meilleur moyen d'accéder à toutes sortes de données".
zx8754

Voulez-vous dire cela read.tableou read.csvéchouez en silence? Êtes-vous absolument sûr de ne pas avoir plusieurs fichiers et une erreur de codage (mauvais chemin, mauvais nom de fichier, etc.)? Juste pour fixer des idées, vous pouvez également nous donner une idée du nombre de variables et du nombre d'enregistrements que vous traitez approximativement.
Gala du

Réponses:


10

L'approche R standard consiste à utiliser saveet load. Si vous exécutez savevotre bloc de données après l'avoir importé et annoté, vous pouvez le spécifier compress=TRUEet vous serez étonné de la compression et du loadtemps rapide . Cela fonctionne particulièrement bien si la taille de l'objet est inférieure à environ 400 Mo. Sinon, consultez certaines des suggestions ci-dessus, ou le puissant ffpackage de R.

Le Hmiscpaquet a de petits emballages Saveet Loadpour rendre ce qui précède encore plus indolore:

mydata <- csv.get(...)  # Hmisc package, has several options
Save(mydata)   # writes mydata.rda to current working directory
....
Load(mydata)   # reads mydata.rda and creates mydata data frame

9

Jetez un œil aux bases de données SQLite3. Chaque base de données est un fichier, il ne nécessite donc pas la configuration d'un serveur de base de données.

Pour créer une base de données:

$ sqlite3 my_db.db3
> CREATE TABLE my_table ( col1 TEXT );

Pour une utilisation avec R, https://gist.github.com/lynaghk/1062939


+1 L'utilisation d'une base de données réelle est un énorme pas dans la bonne direction.
whuber


Merci, je vais essayer cette route. J'ai aussi regardé MySQL, mais semble être plus que ce dont j'ai besoin.
Toy Molto

4

Il existe un certain nombre d'options génériques.

  • Vous pouvez compresser le texte.
  • Vous pourriez aller binaire sur le texte, pas écrire en ascii

Une bonne compression dépend des données.

Ma supposition (et vous ne l'avez pas spécifié, je dois donc deviner) est que vous cherchez à stocker des données de type tableur dans autre chose que csv (délimité par des virgules).

Un de mes formats préférés (j'adore MatLab) est le hdf.

Voici les informations relatives à HDF concernant R:

Il s'agit d'un format de stockage de données de calcul intensif à haute densité. Cela peut être très rapide et efficace. Il est également (sans surprise) plus dense que le texte zippé.


3

Les fonctions de lecture de fichiers standard dans R liront désormais facilement et facilement les fichiers compressés. Donc, exécutez simplement une compression gzip simple sur vos données et lisez comme toujours, comme s'il s'agissait de texte brut.

read.table('myfile.gz')

Soigné! Je ne le savais pas. Je vous remercie.
EngrStudent
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.