Por que os mesmos dados ocupam mais espaço em um arquivo de texto do que em um arquivo do Excel?

56

Tenho cerca de 100.000 linhas de dados. Se eu armazenar esses dados em um formato de arquivo de texto, será preciso mais espaço do que se eu os armazenar em um formato de arquivo do Excel. Por que isso?

    
por user734178 01.06.2017 / 08:54

3 respostas

117

O xlsx format usado pelo Excel moderno é, na verdade, um formato compactado. É um arquivo ZIP que contém arquivos de texto (XML) em uma determinada estrutura.

Se você compactar seu arquivo de texto simples com uma ferramenta de compactação ZIP semelhante, deverá obter tamanhos de arquivo semelhantes.

Além disso, como mencionado por Bradley Uffner e Morgen nos comentários, o Excel desduplicará as seqüências idênticas e armazenará apenas uma cópia delas. Não tenho certeza sobre os ganhos exatos de tal método, e isso dependerá do seu conjunto de dados, mas a compactação zip simples provavelmente levará você até o fim. 1

9.1.3 Physical Packages

Each Office Open XML document is implemented as a ZIP archive.

- ECMA-376-1: 2016

1 Meu palpite é que essa desduplicação é mais eficaz quando você tem várias planilhas, já que a compactação de zip se aplica independentemente a cada arquivo em um arquivo e apenas em seções limitadas dos dados por vez. Armazenando todas as strings juntas em um único arquivo, deve haver algum benefício para a compressão posterior. De maneira mais prática, se o formato de texto simples estiver em um único arquivo, provavelmente haverá pouca diferença.

    
por 01.06.2017 / 09:01
1

A resposta dada está correta, é devido ao Excel armazenar seus dados como xml. É também devido a isso, que classificar seus dados de forma eficiente também reduzirá o tamanho do arquivo. Teste você mesmo - digamos que você tenha dados como

A            B                              C
John         Smith-Johnson-Williamson       12345
Sally        Smith-Johnson-Williamson       67890
John         Williams                       34567

Se você classificar por C (uma coluna com todos ou quase todos os valores exclusivos), os valores idênticos de B não serão adjacentes. No xml do Excel, é assim:

<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>

Se você classificar por B (uma coluna com valores comuns), os valores idênticos serão adjacentes. No xml do Excel, é assim:

<Smith-Johnson-Williamson><John><12345>
  <Sally><67890>
<Williams><John><34567>

Como essa longa cadeia é idêntica e adjacente, o Excel sabe que pode compactá-las, semelhante a quando as pessoas escrevem listas, e para repetir parte da linha acima, elas digitam aspas em vez de reescrever a mesma coisa. Eu não encontrei nenhuma evidência de um dicionário de string compartilhada em minha investigação - apenas este recuo no lugar do valor do campo repetido.

Eu tinha listas de discussão de 250.000 clientes em apenas 11 estados e, em cada registro, havia um campo que consistia em uma das duas sequências que identificava a oferta recebida. Nossos funcionários estavam, por alguma razão, acostumados a procurar as pessoas pelo seu endereço de rua, então ele foi classificado na coluna do número da rua, depois o nome da rua, cidade, etc ... quando eu recorri pela oferta primeiro, depois declarei, código postal, cidade, nome da rua, número da rua e, finalmente, endereço-line-2, o tamanho do arquivo foi reduzido incrivelmente. Eu examinei o xml descompactado no arquivo classificado em cada direção para ver o que estava acontecendo, e o acima foi o que deduzi. Se houver vários campos com mais de 5 caracteres, mas os valores forem de um conjunto limitado (digamos, disposições de ticket como 'resolvido', 'rejeitado', 'aprovado' etc.), pense um pouco na classificação e veja se isso ajuda.

    
por 09.06.2017 / 13:07
-5

Se você tiver um número como 3.14159265359, precisará de 13 bytes para armazenar isso em um arquivo de texto; se você armazenar esse número como um float, você precisará de apenas 4 bytes.

    
por 01.06.2017 / 09:01