Python - Kompresi Data

Hello there, pelajar Python yang akan datang! Hari ini, kita akan memasuki dunia yang menarik tentang kompresi data. Sebagai guru komputer yang ramah di sekitar anda, saya sangat gembira untuk menjawab anda melalui perjalanan ini, bahkan jika anda belum pernah menulis satu baris kode sebelumnya. Jangan khawatir; kita akan memulai dari dasar-dasar dan bekerja ke atas. Jadi, rakitkan wands virtual anda (papan tombol), dan mari kita buat beberapa magik data terjadi!

Python - Data Compression

Pengenalan kepada Kompresi Data

Apa itu Kompresi Data?

Bayangkan anda mencoba untuk memasukkan semua pakaian anda ke dalam rak penyimpanan untuk sebuah liburan. Kompresi data adalah seperti menggulung pakaian itu sangat rapih sehingga anda dapat memasukkan lebih banyak ke ruang yang sama. Di dunia digital, itu tentang membuat fail menjadi lebih kecil tanpa kehilangan informasi penting.

Mengapa Kompresi Data Penting?

  1. Menghemat ruang penyimpanan
  2. Mengurangi masa pengiriman
  3. Mengurangi penggunaan lebar pita
  4. Meningkatkan performa sistem

Sekarang bahwa kita tahu mengapa itu penting, mari kita melebarkan lengan dan masuk ke beberapa kode Python sebenar!

Kompresi String Dasar

Mari kita mulai dengan contoh sederhana tentang mengompresi sebuah string. Kita akan menggunakan teknik yang dipanggil 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}")

Apabila anda menjalankan kode ini, anda akan lihat:

Original: aaabbbccccddeeee
Compressed: a3b3c4d2e4

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

Kompresi Fail dengan zlib

Sekarang, mari kita naik level dan kompresi fail sebenar menggunakan modul zlib. Jangan khawatir jika anda belum tahu apa itu modul lagi – pikirkan tentang itu sebagai rak peralatan 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 asal: {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 fail
compress_file('example.txt', 'example.txt.gz')

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

Dekompresi: Mengembalikan Data Anda

tentu saja, data terkompres tidak banyak digunakan jika kita tidak dapat mendekompresinya. Mari kita tulis fungsi untuk melakukan hal itu:

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 fail kita
decompress_file('example.txt.gz', 'example_decompressed.txt')

Fungsi ini melakukan tindakan yang berlawanan dengan fungsi kompresi kita. Ini membaca fail terkompres, mendekompresi data, dan menulisnya ke fail baru.

Membandingkan Metode Kompresi

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

Metode Kelebihan 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 yang sederhana Kompresi tujuan umum, protokol jaringan

Topik Lanjutan: Kompresi Gambar

Untuk anda yang menyukai petualangan, mari kita sekilas tentang 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 fail 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 menyinggahi kompresi string dasar, kompresi dan dekompresi fail, dan bahkan menyentuh tentang kompresi gambar. Ingat, kompresi adalah semua 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, teruskan coding, tetap curious, dan jangan lupa untuk memiliki kesenangan di sepanjang jalan.

Credits: Image by storyset