J'ai environ 100 000 lignes de données. Si je stocke ces données dans un format de fichier texte, cela prend plus d'espace que si je les stocke dans un format de fichier Excel. Pourquoi donc?
J'ai environ 100 000 lignes de données. Si je stocke ces données dans un format de fichier texte, cela prend plus d'espace que si je les stocke dans un format de fichier Excel. Pourquoi donc?
Réponses:
Le xlsx
format utilisé par Excel moderne est en fait un format compressé. C'est une archive ZIP qui contient des fichiers texte (XML) dans une certaine structure.
Si vous compressez votre fichier texte brut avec un outil de compression ZIP similaire, vous devez obtenir des tailles de fichier similaires.
En outre, comme mentionné par Bradley Uffner et Morgen dans les commentaires, Excel dédupliquera les chaînes identiques et n'en stockera qu'une copie. Je ne suis pas sûr des avantages exacts d'une telle méthode, et cela dépendra de votre ensemble de données, mais une simple compression zip vous y conduira probablement en majeure partie. 1
9.1.3 Paquets physiques
Chaque document Office Open XML est implémenté sous la forme d'une archive ZIP.
1 Mon hypothèse est que cette déduplication est plus efficace lorsque vous avez plusieurs feuilles de calcul, car la compression zip s'applique indépendamment à chaque fichier d'une archive et uniquement sur un nombre limité de données à la fois - en stockant toutes les chaînes ensemble dans un seul fichier, il devrait être un avantage pour la compression ultérieure. Plus concrètement, si votre format de texte brut est de toute façon dans un seul fichier, il y aura probablement peu de différence.
.zip
). La spécification est également disponible, mais elle rend la lecture plutôt sèche.
La réponse donnée est correcte, cela est dû au fait que Excel stocke vos données au format xml. C’est également pour cette raison que le tri efficace de vos données réduira également la taille du fichier. Testez-le vous-même - dites que vous avez des données telles que
A B C
John Smith-Johnson-Williamson 12345
Sally Smith-Johnson-Williamson 67890
John Williams 34567
Si vous triez uniquement par C (une colonne avec toutes ou presque toutes les valeurs uniques), les valeurs identiques de B ne seront pas adjacentes. Dans Excel XML, cela ressemble à ceci:
<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>
Si vous triez par B (une colonne avec des valeurs communes), les valeurs identiques sont adjacentes. Dans Excel XML, cela ressemble à ceci:
<Smith-Johnson-Williamson><John><12345>
<Sally><67890>
<Williams><John><34567>
Comme cette longue chaîne est identique et adjacente, Excel sait qu'il peut les regrouper, comme lorsque les gens écrivent des listes, et pour répéter une partie de la ligne ci-dessus, ils tapaient des guillemets au lieu de réécrire la même chose. Je n'ai trouvé aucune preuve d'un dictionnaire de chaînes partagées dans mon enquête - juste cette mise en retrait à la place de la valeur de champ répété.
J'avais des listes de diffusion de 250 000 clients dans seulement 11 États et, sur chaque enregistrement, il y avait un champ qui était l'une des deux chaînes identifiant l'offre reçue. Nos employés étaient pour une raison quelconque habitués à rechercher des personnes par leur adresse postale telle qu'elle était parlée. Elle a donc été triée dans la colonne numéro de rue, puis le nom de la rue, la ville, etc. code postal, ville, nom de rue, numéro de rue, et enfin adresse-ligne-2, la taille du fichier a été réduite de façon incroyable. J'ai examiné le fichier XML non décompressé dans le fichier, trié dans chaque sens pour voir ce qui se passait, et ce qui précède est ce que j'ai déduit. S'il existe plusieurs champs de plus de 5 caractères, mais que les valeurs correspondent à un ensemble limité (par exemple, les dispositions de ticket telles que "résolu", "rejeté", "approuvé", etc.),
Si vous avez un numéro comme 3.14159265359, vous avez besoin de 13 octets pour le stocker dans un fichier texte. si vous stockez ce nombre en tant que float, vous n'avez besoin que de 4 octets.
xls
(BIFF), je ne pense pas que xlsx
ce soit le cas. xlsx
stocke toutes les données dans des fichiers XML qui n'effectuent pas de codage binaire des chiffres. Elles sont converties et stockées sous forme de chaînes de texte. J'essaie toujours de traquer la section pertinente de la spécification, mais mes tests empiriques (c'est-à-dire l'extraction d'un document enregistré) montrent que celui-ci 1.123
est littéralement stocké sous la forme d'une chaîne de 5 caractères au format XML.
c
(cellule) indique que les cellules stockent leurs données dans des v
balises, comme défini dans la norme ECMA-376-1: 2016, § 18.3.1.96 v
(valeur de cellule) où elles indiquent les valeurs possibles pour cet élément. sont définis par le type simple ST_Xstring (§22.9.2.19). - ils fournissent des exemples, par exemple, <v>28086.3541666667</v>
où les données sont clairement stockées sous forme de chaîne.
xlsb
, ce qui est fortement recommandé pour les grandes feuilles