dasturlash

Bu rasm emas, balki ulkan jadval: O‘zbekistonlik dasturchidan Parquet'dan ham ixcham «pngtable» loyihasi

14-oktabr, 2026, 17:124 ko'rish4 daqiqa o'qish
Bu rasm emas, balki ulkan jadval: O‘zbekistonlik dasturchidan Parquet'dan ham ixcham «pngtable» loyihasi

Telefoningiz yoki kompyuteringiz galereyasida ochiladigan oddiy, qora-oq shovqinli tasvirni ko‘z oldingizga keltiring. Bir qarashda u zamonaviy san’at asari yoki nosoz rasmga o‘xshaydi. Ammo uni Python dasturida ochsangiz — uning piksellari ortida 500 000 dan ortiq qatorga ega ob-havo jadvallari, butun boshli server loglari yoki hatto Lev Tolstoyning «Urush va tinchlik» romani yashiringan bo‘lib chiqadi!

O‘zbekistonlik dasturchi Otabek (GitHub’da @otabek-dev365) jadvalli ma’lumotlar va matnlarni haqiqiy PNG rasmlari ichida siqib saqlashga mo‘ljallangan yangi ochiq kodli (open-source) Python kutubxonasi — pngtable loyihasini taqdim etdi.

Piksel — universal konteyner: G‘oya qanday paydo bo‘ldi?

Katta hajmdagi ma’lumotlar (Big Data) bilan ishlovchi muhandislar va ma’lumotlar tahlilchilari (Data Scientists) jadvallarni saqlashda odatda CSV, JSON yoki sanoat standarti hisoblangan Apache Parquet formatidan foydalanishadi. Biroq pngtable muallifi butunlay boshqacha yondashuvni qo‘llab ko‘rdi: piksel — bu universal konteyner.

Har qanday zamonaviy operatsion tizim (iOS, Android, Windows, macOS, Linux), brauzer va fayl menejeri PNG formatini hech qanday qo‘shimcha plagin yoki drayverlarsiz osongina ochib ko‘rsata oladi.

Kutubxona yaratadigan .pt.png fayli — bu mutlaqo qonuniy, standartlarga to‘liq mos keladigan PNG tasvirdir. Jadval sxemasi (schema), ustunlar turlari va lug‘atlar faylning ichki zTXt blokida saqlanadi. Ya’ni, har bir fayl to‘liq mustaqil va avtonom bo‘lib, qo‘shimcha konfiguratsiya fayllarini talab qilmaydi.

Kapot ostida: Har bir ustun uchun alohida kodek

pngtablening eng asosiy ustunligi — uning gibrid siqish arxitekturasida. U barcha ma’lumotni bitta umumiy qolipga majburlab tiqmaydi, balki har bir ustunning ma’lumot turiga qarab eng samarali algoritmni tanlaydi:

  • Bog‘liq sonlar va vaqt (Floats & Integers): PNG formatining o‘ziga xos 2D bashorat filtrlari (prediction filters) orqali siqiladi.
  • Kategoriyalar (Categories): Maxsus lug‘at kodlash (dictionary encoding) usuli bilan minimal baytlarga keltiriladi.
  • Erkin matnlar (Free text): Yo‘qotishsiz xz oqimi yordamida arxivlanadi.
  • Katta kitoblar va uzun matnlar: So‘z-tokenlari (word-token coding) usulida zichlashtiriladi.

Natijalar: Parquet va CSV'dan qanday o‘zib ketdi?

Muallif tomonidan o‘tkazilgan unumdorlik sinovlari (benchmarklar) diqqatga sazovor natijalarni qayd etdi:

Sinov ma’lumotlar to‘plamiBoshlang‘ich CSV hajmiCSV + xzParquet (zstd-19)pngtable natijasi
Ob-havo jadvallari (525 600 qator)11.9 MB12.5%42.4%8.0% (atigi 946 KB)
Server loglari (200 000 qator, erkin matn)10.1 MB15.4%17.8%12.2%
«Urush va tinchlik» romani (3.3 MB matn)100%28.1% (xz)—26.7%
8 million qator yozish tezligi———8 yadroda 6.4 soniya

Eslatma: Ob-havo jadvalidagi suzuvchi vergulli (float) sonlar 16-bitga kvantlangan. Server loglari va kitob matni esa 100% yo‘qotishsiz (lossless) holatda siqilgan.

AES-256 shifrlash va Big Data uchun oqimli rejim

Loyiha nafaqat qiziqarli tajriba, balki amaliy xavfsizlik va yirik ma’lumotlar uchun ham xususiyatlarga ega:

  • AES-256-GCM shifrlash: Parol asosida scrypt orqali maxfiy kalit hosil qilinadi va rasm ichidagi jadval to‘liq shifrlanadi. Shifrlangan tasvir ham tashqaridan oddiy rasmdek ochiladi, biroq parolsiz uning ichidagi ma’lumotlarni o‘qib bo‘lmaydi.
  • Oqimli (Streaming) rejim: Operativ xotiraga (RAM) sig‘maydigan gigabaytlab ma’lumotlarni bloklarga bo‘lib, parallel rejimda oqim sifatida yozish va o‘qish mumkin.

O‘rnatish va foydalanish

Kutubxona mustaqil bitta pngtable.py faylidan iborat. Ishlatish uchun faqat numpy, pillow va cryptography talab qilinadi:

pip install numpy pillow cryptography

Python’da oddiy jadvalni rasmga yozish va o‘qish:

import numpy as np
import pngtable

# 1. Jadval hosil qilamiz
table = {
    "vaqt": np.arange(1000),
    "narx": np.random.rand(1000),
    "tur": np.array(["a", "b"] * 500),
}

# 2. Jadvalni rasm ichiga yozamiz
pngtable.write("malumotlar.pt.png", table)

# 3. Rasmdan jadvalni aynan qayta o'qiymiz
qayta_tiklandi = pngtable.read("malumotlar.pt.png")
print(qayta_tiklandi["narx"])

Butun boshli matn yoki kitobni saqlash:

# Matnni yo'qotishsiz rasmga aylantirish
pngtable.write_text("kitob.pt.png", katta_matn)

# Rasmdan matnni qaytarib olish
matn = pngtable.read_text("kitob.pt.png")

⚠️ Muhim qoida: Telegram va messinjerlarda qanday yuborish kerak?

Agar siz .pt.png faylini hamkasbingizga Telegram, WhatsApp yoki boshqa ijtimoiy tarmoqlar orqali jo‘natmoqchi bo‘lsangiz, uni faqat va faqat «Fayl» (Document / Fayl sifatida) qilib yuborishingiz shart.

Agar tasvirni oddiy «Rasm» (Photo) sifatida jo‘natsangiz, messinjer serverlari uning hajmini kamaytirish uchun siqish algoritmlarini (JPEG/WebP) ishga tushiradi. Oqibatda piksellar qiymati o‘zgarib, ichki ma’lumot butunlay yo‘qotiladi.

Xulosa

O‘zbekistonlik yosh dasturchilarning xalqaro IT hamjamiyatida e’tibor qozonadigan, innovatsion va amaliy ochiq kodli vositalar yaratayotgani quvonarli tendensiya. Loyihani o‘rganish, yulduzcha (star) bosish yoki o‘z hissangizni qo‘shish uchun GitHub havolasi:

🔗 GitHub: github.com/otabek-dev365/pngtable

#python #opensource #pngtable #data-science #dasturlash
Telegram da muhokama qilish