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?
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?
Jawaban:
The xlsx
Format 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.
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.
.zip
). Spesifikasi ini juga tersedia, tetapi membuat bacaan agak kering.
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),
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.
xls
(BIFF), saya tidak berpikir xlsx
melakukan ini. xlsx
menyimpan 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.123
secara harfiah disimpan sebagai string 5 karakter dalam XML.
c
(Sel) menunjukkan bahwa sel menyimpan data mereka dalam v
tag, 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.
xlsb
, yang sangat dianjurkan untuk lembaran besar