Mam około 100 000 wierszy danych. Jeśli przechowuję te dane w formacie pliku tekstowego, zajmuje to więcej miejsca, niż jeśli przechowuję je w formacie pliku Excel. Dlaczego?
Mam około 100 000 wierszy danych. Jeśli przechowuję te dane w formacie pliku tekstowego, zajmuje to więcej miejsca, niż jeśli przechowuję je w formacie pliku Excel. Dlaczego?
Odpowiedzi:
xlsx
Format używany przez nowoczesną Excel jest faktycznie w formacie skompresowanym. Jest to archiwum ZIP, które zawiera pliki tekstowe (XML) w określonej strukturze.
Jeśli kompresujesz plik zwykłego tekstu za pomocą podobnego narzędzia do kompresji ZIP, powinieneś osiągnąć podobne rozmiary plików.
Ponadto, jak wspomniano w komentarzach Bradley Uffner i Morgen , Excel deduplikuje identyczne ciągi i przechowuje tylko jedną ich kopię. Nie jestem pewien dokładnych korzyści z takiej metody i będzie to zależeć od twojego zestawu danych, ale zwykła kompresja zip prawdopodobnie zapewni ci większość możliwości. 1
9.1.3 Paczki fizyczne
Każdy dokument Office Open XML jest implementowany jako archiwum ZIP.
1 Domyślam się, że ta deduplikacja jest najskuteczniejsza, gdy masz wiele arkuszy, ponieważ kompresja zip stosuje się niezależnie do każdego pliku w archiwum i tylko w ograniczonych sekcjach danych na raz - przechowując wszystkie ciągi razem w jednym pliku, tam powinno być korzystne dla późniejszej kompresji. Praktycznie, jeśli twój zwykły format tekstowy jest w jednym pliku, prawdopodobnie nie będzie różnicy.
.zip
). Specyfikacja jest również dostępna, ale umożliwia raczej suche czytanie.
Podana odpowiedź jest prawidłowa, ponieważ program Excel przechowuje dane w formacie xml. Jest to również spowodowane tym, że wydajne sortowanie danych zmniejszy również rozmiar pliku. Sprawdź to sam - powiedz, że masz takie dane
A B C
John Smith-Johnson-Williamson 12345
Sally Smith-Johnson-Williamson 67890
John Williams 34567
Jeśli sortujesz według C (kolumna zawierająca wszystkie lub prawie wszystkie unikalne wartości), wówczas identyczne wartości B nie będą sąsiadować. W xml Excela wygląda to tak:
<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>
Jeśli sortujesz według B (kolumna ze wspólnymi wartościami), wówczas identyczne wartości sąsiadują. W xml Excela wygląda to tak:
<Smith-Johnson-Williamson><John><12345>
<Sally><67890>
<Williams><John><34567>
Ponieważ ten długi ciąg znaków jest identyczny i sąsiaduje z nim, Excel wie, że może je spakować razem, podobnie jak w przypadku, gdy ludzie piszą listy i aby powtórzyć część powyższej linii, zamiast cudzysłowu wpisują cudzysłowy. W trakcie mojego dochodzenia nie znalazłem żadnych dowodów na słownik ze wspólnym ciągiem - po prostu to wcięcie zamiast powtarzanej wartości pola.
Miałem listy mailingowe 250 000 klientów tylko w 11 stanach, a przy każdym rekordzie znajdowało się pole, które było jednym z dwóch ciągów identyfikujących otrzymaną ofertę. Nasi pracownicy byli z jakiegoś powodu przyzwyczajeni do szukania ludzi według ich adresu, tak jak mówiono, więc został on posortowany według kolumny z numerem ulicy, potem nazwy ulicy, miasta itp., Kiedy najpierw skorzystałem z oferty, a następnie podałem, kod pocztowy, miasto, nazwa ulicy, numer ulicy i wreszcie adres-linia-2, rozmiar pliku został niesamowicie zmniejszony. Sprawdziłem rozpakowany plik xml w pliku posortowanym w każdy sposób, aby zobaczyć, co się dzieje, i powyższe wywnioskowałem. Jeśli istnieje wiele pól zawierających więcej niż powiedzmy 5 znaków, ale wartości mają ograniczony zestaw (powiedzmy, dyspozycje biletów, takie jak „rozwiązany”, „odrzucony”, „zatwierdzony” itp.),
Jeśli masz liczbę taką jak 3.14159265359, potrzebujesz 13 bajtów, aby zapisać to w pliku tekstowym; jeśli przechowujesz ten numer jako liczbę zmiennoprzecinkową, potrzebujesz tylko 4 bajtów.
xls
(BIFF), nie sądzę, aby xlsx
tak było. xlsx
przechowuje wszystkie dane w plikach XML, które nie wykonują binarnego kodowania cyfr - są one konwertowane i zapisywane jako ciągi tekstowe. Wciąż próbuję znaleźć odpowiednią sekcję specyfikacji, ale moje testy empiryczne (tj. Wyodrębnienie zapisanego dokumentu) pokazują, że 1.123
dosłownie jest przechowywany jako ciąg 5 znaków w XML.
c
(Komórka) pokazuje, że komórki przechowują swoje dane w v
tagach, zgodnie z definicją w ECMA-376-1: 2016 § 18.3.1.96 v
(Komórka), gdzie mówią Możliwe wartości tego elementu są zdefiniowane przez prosty typ ST_Xstring (§22.9.2.19). - podają przykłady takich <v>28086.3541666667</v>
przypadków, w których dane są wyraźnie przechowywane jako ciąg.
xlsb
, który jest wysoce zalecany do dużych arkuszy