Mengapa data yang sama membutuhkan lebih banyak ruang dalam file teks daripada dalam file Excel?

59

Saya memiliki sekitar 100.000 baris data. Jika saya menyimpan data ini dalam format file teks, dibutuhkan lebih banyak ruang daripada jika saya menyimpannya dalam format file Excel. Mengapa demikian?

pengguna734178
sumber

Jawaban:

117

The xlsxFormat digunakan oleh Excel yang modern sebenarnya adalah format kompresi. Ini adalah arsip ZIP yang berisi file teks (XML) dalam struktur tertentu.

Jika Anda mengompres file teks biasa dengan alat kompresi ZIP yang serupa, Anda harus mencapai ukuran file yang serupa.

Selain itu, seperti yang disebutkan oleh Bradley Uffner dan Morgen dalam komentar, Excel akan mendupuplikasi string yang identik dan hanya menyimpan satu salinannya. Saya tidak yakin tentang keuntungan pasti dari metode seperti itu, dan itu akan tergantung pada set data Anda, tetapi kompresi zip sederhana mungkin akan membuat Anda mendapatkan sebagian besar perjalanan ke sana. 1


9.1.3 Paket Fisik

Setiap dokumen Office Open XML diimplementasikan sebagai arsip ZIP.

- ECMA-376-1: 2016


1 Dugaan saya adalah bahwa deduplikasi ini paling efektif ketika Anda memiliki beberapa lembar kerja, karena kompresi zip berlaku secara independen untuk setiap file dalam arsip dan hanya pada bagian data yang terbatas pada satu waktu - dengan menyimpan semua string bersama dalam satu file, ada harus bermanfaat untuk kompresi nanti. Lebih praktisnya, jika format teks biasa Anda dalam satu file saja maka mungkin akan ada sedikit perbedaan.

Bob
sumber
2
Ini bagus! Ini memberi wawasan yang sangat baik tentang bagaimana file Excel ditangani. Terima kasih!
Dominique
3
@Dominique Jika Anda ingin tahu lebih banyak, Anda dapat bermain-main dengan satu dengan membuka ritsletingnya (misalnya dengan 7zip, atau dengan mengubah nama sehingga berakhir .zip). Spesifikasi ini juga tersedia, tetapi membuat bacaan agak kering.
Bob
3
Saya pikir excel juga menggunakan kamus string, di mana bit teks yang identik antara sel dapat digunakan kembali sementara hanya disimpan sekali.
Bradley Uffner
1
Berdasarkan API yang diekspos oleh pustaka ooxml Apache, kamus string bersama setidaknya mungkin.
Morgen
2
Shared Strings adalah fitur dari Excel bahkan ketika ia menulis file XLS (no x), yang merupakan format berorientasi rekaman yang disebut BIFF dalam wadah OLE. Jika Anda membandingkan spesifikasi XLS lama dengan XLSX, Anda akan melihat XLSX hanyalah versi zip yang di-xified dari BIFF. Jadi pada dasarnya MS tidak menemukan fitur string bersama untuk XLSX, di mana itu tidak masuk akal karena kompresi; mereka hanya menempuh rute termudah untuk mengubah XLS menjadi XLSX.
Guntram Blohm mendukung Monica
2

Jawaban yang diberikan benar, itu karena Excel menyimpan data Anda sebagai xml. Ini juga karena ini, bahwa menyortir data Anda secara efisien juga akan mengurangi ukuran file. Uji sendiri - katakan Anda memiliki data seperti

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

Jika Anda mengurutkan berdasarkan C (kolom dengan semua atau hampir semua nilai unik) saja, maka nilai B yang identik tidak akan berdekatan. Dalam xml Excel tampilannya seperti ini:

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

Jika Anda mengurutkan berdasarkan B (kolom dengan nilai umum), maka nilai yang identik berdekatan. Dalam xml Excel tampilannya seperti ini:

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

Karena string panjang itu identik dan berdekatan, Excel tahu itu bisa mengemasnya bersama, mirip dengan ketika orang menulis daftar, dan untuk mengulangi bagian dari baris di atas, mereka mengetikkan kutipan daripada menulis ulang hal yang sama. Saya tidak menemukan bukti kamus bersama-string dalam penyelidikan saya - hanya lekukan ini sebagai pengganti nilai bidang yang diulang.

Saya memiliki milis dari 250.000 pelanggan di hanya 11 negara bagian, dan pada setiap catatan ada bidang yang merupakan salah satu dari dua string yang mengidentifikasi penawaran yang mereka dapatkan. Entah mengapa karyawan kami terbiasa mencari orang berdasarkan alamat jalan mereka seperti yang diucapkan, jadi itu diurutkan pada kolom nomor jalan, lalu nama jalan, kota, dll ... ketika saya menggunakan penawaran terlebih dahulu, kemudian menyatakan, kode pos, kota, nama jalan, nomor jalan, dan akhirnya address-line-2, ukuran file berkurang secara luar biasa. Saya memeriksa xml unpacked pada file yang disortir setiap cara untuk melihat apa yang sedang terjadi, dan di atas adalah apa yang saya simpulkan. Jika ada beberapa bidang dengan lebih dari katakan 5 karakter, tetapi nilainya adalah kumpulan terbatas (misalnya, disposisi tiket seperti 'diselesaikan', 'ditolak', 'disetujui', dll),

CompanionCube
sumber
Halo CompanionCube, Ini adalah pengetahuan yang sangat luar biasa. !!! Terima kasih banyak.
user734178
-5

Jika Anda memiliki angka seperti 3,14159265359, Anda perlu 13 byte untuk menyimpan ini dalam file teks; jika Anda menyimpan nomor ini sebagai pelampung, Anda hanya perlu 4 byte.

Mirko Ebert
sumber
19
Meskipun ini mungkin terjadi dengan xls(BIFF), saya tidak berpikir xlsxmelakukan ini. xlsxmenyimpan semua data dalam file XML, yang tidak melakukan pengkodean angka biner - data dikonversi dan disimpan sebagai string teks. Saya masih mencoba untuk memburu bagian yang relevan dari spesifikasi, tetapi pengujian empiris saya (yaitu mengekstraksi dokumen yang disimpan) menunjukkan bahwa 1.123secara harfiah disimpan sebagai string 5 karakter dalam XML.
Bob
14
ECMA-376-1: 2016 § 18.3.1.4 c(Sel) menunjukkan bahwa sel menyimpan data mereka dalam vtag, sebagaimana didefinisikan dalam ECMA-376-1: 2016 § 18.3.1.96 v(Nilai Sel) di mana mereka mengatakan Nilai yang mungkin untuk elemen ini didefinisikan oleh tipe sederhana ST_Xstring (§22.9.2.19). - mereka memberikan contoh seperti di <v>28086.3541666667</v>mana data disimpan dengan jelas sebagai string.
Bob
4
@gerrit Sayangnya Excel tidak menafsirkan angka sebagai mengapung dalam program, yang mengarah ke masalah menarik seperti nomor telepon menjatuhkan beberapa digit terakhir. Hanya saja tidak menyimpannya ke disk sebagai mengapung (lagi?).
Bob
2
@ Bob ini juga berlaku untuk xlsb, yang sangat dianjurkan untuk lembaran besar
phuclv
2
Saya tidak tahu mengapa jawaban ini mendapat banyak downvotes. OP tidak menentukan format Excel mana yang secara teknis ini juga merupakan jawaban yang valid
phuclv