Python - Kompresi Data

Halo semua, para penyihir Python masa depan! Hari ini, kita akan memasuki dunia yang menarik tentang kompresi data. Sebagai guru komputer ramah lingkungan Anda, saya sangat senang untuk membimbing Anda melalui perjalanan ini, bahkan jika Anda belum pernah menulis satu baris kode sebelumnya. Jangan khawatir; kita akan memulai dari dasar-dasar dan maju ke atas. Jadi, ambil peralatan virtual Anda (papan tombol), dan mari kita buat beberapa keajaiban data!

Python - Data Compression

Pengenalan Kompresi Data

Apa itu Kompresi Data?

Bayangkan Anda mencoba untuk memasukkan semua pakaian Anda ke dalam sebuah rak penyimpanan untuk liburan. Kompresi data seperti melipat pakaian tersebut dengan rapih sehingga Anda dapat memasukkan lebih banyak ke dalam ruang yang sama. Di dunia digital, itu tentang membuat file menjadi lebih kecil tanpa kehilangan informasi penting.

Mengapa Kompresi Data Penting?

  1. Menghemat ruang penyimpanan
  2. Mengurangi waktu transmisi
  3. Mengurangi penggunaan lebar pita
  4. Meningkatkan performa sistem

Sekarang bahwa kita tahu mengapa itu penting, mari kita untuk memperpanjang lengan dan masuk ke beberapa kode Python sebenarnya!

Kompresi String Dasar

Mari kita mulai dengan contoh sederhana tentang mengompresi sebuah string. Kita akan menggunakan teknik yang disebut run-length encoding.

def compress_string(s):
compressed = ""
count = 1
for i in range(1, len(s)):
if s[i] == s[i-1]:
count += 1
else:
compressed += s[i-1] + str(count)
count = 1
compressed += s[-1] + str(count)
return compressed

# Mari kita coba
original = "aaabbbccccddeeee"
compressed = compress_string(original)
print(f"Original: {original}")
print(f"Compressed: {compressed}")

Ketika Anda menjalankan kode ini, Anda akan melihat:

Original: aaabbbccccddeeee
Compressed: a3b3c4d2e4

Apa yang terjadi di sini? Kita sedang menghitung karakter berurutan dan menggantikannya dengan karakter diikuti oleh jumlahnya. Keren, bukan?

Kompresi File dengan zlib

Sekarang, mari kita naik level dan kompresi file sebenarnya menggunakan modul zlib. Jangan khawatir jika Anda belum tahu apa itu modul – pikirkan tentang itu sebagai rak alat kode yang sudah ditulis yang kita dapat gunakan.

import zlib

def compress_file(input_file, output_file):
with open(input_file, 'rb') as file_in:
data = file_in.read()

compressed_data = zlib.compress(data, level=9)

with open(output_file, 'wb') as file_out:
file_out.write(compressed_data)

print(f"Ukuran asli: {len(data)} bytes")
print(f"Ukuran terkompres: {len(compressed_data)} bytes")
print(f"Rasio kompresi: {len(compressed_data) / len(data):.2%}")

# Mari kita kompresi sebuah file
compress_file('example.txt', 'example.txt.gz')

Skrip ini membaca sebuah file, mengompresi konten itu, dan menyimpan data terkompres ke file baru. Tingkat kompresi (9) adalah tertinggi, yang berarti kompresi maksimal.

Dekompresi: Mengembalikan Data Anda

Tentu saja, data terkompres tidak banyak berguna jika kita tidak dapat mendekompresinya. Mari kita tulis fungsi untuk melakukan hal tersebut:

def decompress_file(input_file, output_file):
with open(input_file, 'rb') as file_in:
compressed_data = file_in.read()

decompressed_data = zlib.decompress(compressed_data)

with open(output_file, 'wb') as file_out:
file_out.write(decompressed_data)

print(f"Ukuran terdekompres: {len(decompressed_data)} bytes")

# Mari kita dekompresi file kita
decompress_file('example.txt.gz', 'example_decompressed.txt')

Fungsi ini melakukan hal yang lawan dari fungsi kompresi kita. itu membaca file terkompres, mendekompresi data, dan menulisnya ke file baru.

Membandingkan Metode Kompresi

Sekarang bahwa kita telah melihat beberapa teknik kompresi, mari kita bandingkan mereka. Kita akan menggunakan tabel untuk membuat itu mudah dilihat perbedaan:

Metode Keuntungan Kekurangan Terbaik Digunakan Untuk
Run-length encoding Mudah untuk mengimplementasikan Hanya efektif untuk karakter berurutan Gambar bitmap, pola sederhana
zlib Rasio kompresi tinggi, didukung secara luas Lebih lambat daripada metode sederhana Kompresi tujuan umum, protokol jaringan

Topik Lanjutan: Kompresi Gambar

Untuk Anda yang mengadventure, mari kita sekilas lihat kompresi gambar menggunakan pustaka Pillow. Jangan khawatir jika ini tampak kompleks – itu hanya untuk memberikan Anda kesan tentang apa yang mungkin saja!

from PIL import Image

def compress_image(input_file, output_file, quality):
with Image.open(input_file) as img:
img.save(output_file, optimize=True, quality=quality)

# Mari kita kompresi sebuah gambar
compress_image('example.jpg', 'compressed_example.jpg', 50)

Skrip ini membuka sebuah gambar, mengompresinya dengan mengurangi kualitasnya, dan menyimpannya sebagai file baru. Parameter quality berkisar dari 1 (terburuk) ke 95 (terbaik).

Kesimpulan

Selamat! Anda baru saja mengambil langkah pertama Anda ke dalam dunia kompresi data dengan Python. Kita telah membahas kompresi string dasar, kompresi dan dekompresi file, dan bahkan menyentuh kompresi gambar. Ingat, kompresi adalah tentang menemukan pola dan mewakili mereka lebih efisien.

Sebagai Anda melanjutkan perjalanan Python Anda, Anda akan menemukan teknik kompresi yang lebih kuat. Siapa tahu? Mungkin Anda akan menciptakan tebakan berikutnya dalam kompresi data! Sampai saat itu, terus kode, tetap curious, dan jangan lupa untuk memiliki kesenangan di sepanjang jalan.

Credits: Image by storyset