Ecriture, lecture et taille des fichiers, quelle est la fonction la plus efficace

Lors d’une réunion au sein du laboratoire, la question suivante a été posé : Quelle est la meilleure fonction pour écrire des jeux de données ?. Cette question induit en réalité deux sous-questions. On s’intéresse à la vitesse d’écriture et la taille du fichier.

Suite à cette première question, on a également voulu savoir : Quelle est la meilleure fonction pour importer des données en local ?. On s’intéresse évidement à la vitesse d’importation. En partant de l’idée que plus un fichier sera compressé au plus il sera lent à ouvrir.

Je m’imagine déjà réaliser une multitude de benchmark afin d’en déterminer là ou les meilleurs fonctions. Je crée un dépot pour consigner toutes mes recherches

Recherches bibliographiques

Mes réflexions ont été guidées par la lecture des sites suivants :

Suite à ces différentes lectures, je vous propose deux cas de figures.

Premier cas de figures

Si le jeu de données est de taille importante et qu’il doit être compressé. Il doit également être rapidement écrit et lu, j’utilise le format .fst du package fst. Ce format peut être lu avec R et avec Python. De plus l’utilisation de multi-threads rend ces fonctions très efficaces. Le système de compression est également très efficace.

library(fst)

Vous pouvez voir qu’il détecte automatiquement le nombr de threads qu’il va pouvoir employer.

write_fst(x = "", path = "", compress = "")

La fonction requiert : - x : le jeu de données que l’on souhaite exporter - path: le chemin d’accès où l’on souhaite exporter le jeu de données - compress: une valeur allant de 0 à 100, avec 0 pour une compression nulle et 100 pour une compression maximale.

df <- read_fst(path = "")

La fonction requiert : - path: le chemin d’accès du jeu de données

Second cas

Si le jeu de données est de petite taille et qu’il doit être facilement accessible par de nombreux programmes, j’utilise le format .csv. Le package readr et le package data.table seront très efficaces dans ce cas.

Attention, l’importation d’un csv avec data.table::fread() renvoit un data.table.

Conclusion

Malgré mon envie, de réaliser de nombreux Benchmark, je viens de m’épargner une grand nombre d’heure de boulot pour réaliser un travail que de nombreuses personnes ont déjà réalisés. Je vais tout de même garder le dépot que j’ai créé pour répondre à cette question. L’évolution des fonctions est tellement rapide que je suis sur que les package fstsera dépassé par un autre rapidement.

Avatar
Guyliann Engels
Assistant

Mes recherches d’intérêts comprennent l’étude du plancton, l’écophysiologie des coraux scléractiniaires et la science des données biologiques.

Sur le même sujet

comments powered by Disqus