Jupyter Notebookda GAT tahlili
Kirish
Jupyter Notebook — kod, uning natijasi va izoh matni bitta hujjatda ketma-ket joylashadigan interaktiv ish muhitidir. Kod kichik bo'laklarga — kataklarga bo'linadi; har katak alohida ishga tushiriladi va natijasi, jadval yoki xarita darhol uning tagida chiqadi.
GAT tahlilida bu qulay: ma'lumotni yuklab, CRS va atributlarni ko'rib, xaritada tekshirib, keyingi qadamni shu natijaga qarab tanlash mumkin. Shu bilan birga notebookning o'ziga xos xavflari bor va ularni bilmaslik takrorlanmaydigan natijaga olib keladi.
Notebook tuzilishi
Notebook fayli .ipynb kengaytmali bo'lib, ichida ikki asosiy katak turi bor. Kod katagi Python kodini saqlaydi va natijasini ko'rsatadi. Markdown katagi sarlavha, izoh, formula va havolalarni saqlaydi — tahlil nima uchun shunday qilingani shu yerda yoziladi.
Kodni yadro (kernel) bajaradi — fonda ishlab turgan Python jarayoni. Yadro barcha o'zgaruvchilarni xotirada saqlaydi, shuning uchun bir katakda yuklangan qatlam keyingi kataklarda ham mavjud. Bugungi kunda notebooklar odatda ko'p oynali JupyterLab muhitida yoki VS Code kabi muharrirda ochiladi.

Tahlilni katakma-katak qurish
Oddiy misol: tuman chegaralari va maktablar qatlamini yuklab, har tumandagi maktablar sonini hisoblash. Birinchi katakda ma'lumot o'qiladi va tekshiriladi:
import geopandas as gpd
tumanlar = gpd.read_file("toshkent.gpkg", layer="tumanlar")
maktablar = gpd.read_file("toshkent.gpkg", layer="maktablar")
print(tumanlar.crs, maktablar.crs, len(maktablar))
Ikki qatlamning CRS'i bir xilligi, obyektlar soni kutilganga mosligi shu yerda ko'rinadi. Keyingi katakda fazoviy birlashtirish bajariladi:
juft = gpd.sjoin(maktablar, tumanlar, predicate="within")
soni = juft.groupby("tuman_nomi").size()
tumanlar = tumanlar.merge(soni.rename("maktab_soni"),
left_on="tuman_nomi", right_index=True, how="left")
Har qadamdan keyin natija darhol ko'rib chiqiladi. Xato bo'lsa, faqat o'sha katak tuzatiladi va qayta ishga tushiriladi.
Kod kataklari orasiga qisqa Markdown izohlari qo'yiladi: ma'lumot manbasi va sanasi, nima uchun within sharti tanlangani, chegara ustidagi maktablar qanday hisobga olingani. Bir necha oydan keyin notebookni ochgan mutaxassis yoki hamkasb tahlil mantiqini kodni qayta o'qimasdan tushunadi.
Interaktiv xarita
GeoPandas'dagi explore() metodi qatlamni notebook ichida siljitiladigan va kattalashtiriladigan veb xarita sifatida chizadi. U Leaflet asosidagi folium kutubxonasiga tayanadi:
tumanlar.explore(column="maktab_soni", cmap="Blues", legend=True)
Obyekt ustiga bosilganda uning atributlari chiqadi. Bu geometriya xatosini, noto'g'ri CRS sabab siljigan qatlamni yoki kutilmagan bo'sh qiymatni tez topishga yordam beradi. Statik rasm kerak bo'lsa, plot() metodi ishlatiladi.
Interaktiv xarita barcha geometriyani brauzerga yuboradi. O'n minglab murakkab poligonli qatlam notebookni sekinlashtiradi va fayl hajmini keskin oshiradi. Bunday holatda avval kerakli hudud ajratiladi yoki geometriya soddalashtiriladi, butun qatlam esa statik rasm bilan ko'rsatiladi.
Bajarilish tartibi xavfi
Notebookning asosiy xavfi — yashirin holat (hidden state). Kataklar istalgan tartibda ishga tushirilishi mumkin, yadro esa barcha natijalarni eslab qoladi. Masalan, filtr katagi ikki marta bajarilsa yoki o'chirilgan katakdagi o'zgaruvchi xotirada qolsa, ekrandagi natija yuqoridan pastga o'qilgan kodga mos kelmaydi.
Har katak yonidagi [3] kabi raqam uning bajarilish tartibini ko'rsatadi. Raqamlar ketma-ket bo'lmasa, natijaga ishonib bo'lmaydi. Tahlil tugagach, yadro qayta ishga tushirilib, barcha kataklar yuqoridan pastga bajariladi (Restart and Run All). Natija o'zgarmasa, notebook takrorlanadigan holatda.

Notebookdan skriptga
Notebook izlanish, tushuntirish va o'qitish uchun qulay. Lekin bir xil tahlil har oy yangi ma'lumot bilan takrorlansa yoki boshqa dastur uni chaqirsa, kod .py skript yoki modulga ko'chiriladi. Odatiy yo'l: notebookda sinab ko'rilgan qadamlar funksiyaga aylantiriladi, fayl yo'llari parametr qilinadi, notebook esa shu funksiyalarni chaqiradigan qisqa hujjatga aylanadi.
Versiyalarni boshqarishda ham ehtiyot kerak. .ipynb fayli natijalar va rasmlarni JSON ichida saqlaydi, shuning uchun Git'dagi o'zgarishlar o'qilishi qiyin bo'ladi. Commit qilishdan oldin natijalarni tozalash yoki notebookni oddiy matn ko'rinishida saqlaydigan vositalardan foydalanish farqlarni ko'rishni osonlashtiradi.

Xulosa
Jupyter Notebook GAT tahlilini kichik, tekshiriladigan qadamlarga bo'lish va har natijani jadval yoki interaktiv xaritada darhol ko'rish imkonini beradi. Markdown kataklari esa tahlil mantiqini kod yonida hujjatlashtiradi.
Ishonchli natija uchun notebook yuqoridan pastga qayta bajarilganda bir xil natija berishi shart. Takroriy ishlatiladigan kod esa vaqtida skriptga ko'chiriladi.