Analitik kuni: savoldan qarorgacha
Bitta savol, bitta kun
Dushanba, soat 9:30. "Bozor.uz" onlayn do'konining direktori xonaga kirib bitta gap aytadi:
"Iyun oyida savdo tushib ketdi. Nega?"
Shu bitta gap — data analitikning ishi. Kitobning qolgan 27 bobi shu savolga javob berish uchun kerak bo'ladigan hamma narsani o'rgatadi. Lekin avval javobning o'zini ko'ring. Quyida hamma narsa ishlaydigan kod, hozircha uni tushunish shart emas. Faqat qarang: analitik nima qiladi.
1-qadam: haqiqatan tushganmi? Direktorning his-tuyg'usi ma'lumot emas. Avval raqam.
orders = pd.read_csv(CSV / "orders.csv") delivered = orders[orders.status == "delivered"].copy() delivered["oy"] = delivered.order_date.str[:7] oylik = delivered.groupby("oy").total_amount.sum() / 1e6 print(oylik.round(0).to_string())
oy 2025-01 1324.0 2025-02 1385.0 2025-03 2051.0 2025-04 2103.0 2025-05 2072.0 2025-06 1618.0 2025-07 2119.0 2025-08 2637.0 2025-09 2939.0 2025-10 3539.0 2025-11 4841.0 2025-12 6848.0
ax = oylik.plot(kind="bar", figsize=(9, 3.6), color=["#c0392b" if m == "2025-06" else "#4C72B0" for m in oylik.index]) ax.set_ylabel("mln so'm"); ax.set_xlabel(""); ax.set_title("Oylik savdo, 2025 (yetkazilgan buyurtmalar)") fig("oylik_savdo.png", "Iyun haqiqatan tushgan: may 2 072 mln, iyun 1 618 mln. Lekin iyul yana 2 119 mln.")

Iyun haqiqatan tushgan: may 2 072 mln, iyun 1 618 mln. Lekin iyul yana 2 119 mln.
Ha, tushgan: may bilan solishtirganda 22% ga. Va iyulda qaytib kelgan. Demak bu "biznes yomonlashdi" emas, bir oylik hodisa.
2-qadam: qayerda tushgan? "Savdo" bitta raqam emas. U kategoriyalar, hududlar, kanallar yig'indisi. Tushish hammasidami, yoki bittasidami?
items = pd.read_csv(CSV / "order_items.csv").merge(pd.read_csv(CSV / "products.csv"), on="product_id") items = items[items.item_status == "delivered"].merge(delivered[["order_id", "oy"]], on="order_id") items["revenue"] = items.quantity * items.unit_price kat = items[items.oy.isin(["2025-05", "2025-06", "2025-07"])].pivot_table(index="category", columns="oy", values="revenue", aggfunc="sum") / 1e6 kat["iyun_vs_may"] = (kat["2025-06"] / kat["2025-05"] - 1) show(kat.round(2).sort_values("iyun_vs_may"))
| category | 2025-05 | 2025-06 | 2025-07 | iyun_vs_may |
|---|---|---|---|---|
| Elektronika | 1 086.84 | 596.41 | 1 228.17 | -0.45 |
| Uy-ro'zg'or | 65.9 | 50.41 | 63.39 | -0.24 |
| Go'zallik | 44.52 | 42.81 | 39.87 | -0.04 |
| Maishiy texnika | 516.23 | 521.88 | 404.52 | 0.01 |
| Oziq-ovqat | 98.36 | 108.68 | 91.28 | 0.1 |
| Kitoblar | 11.63 | 13.25 | 11.54 | 0.14 |
| Kiyim | 151.61 | 172.25 | 156.02 | 0.14 |
| Sport | 85.93 | 99.5 | 119.76 | 0.16 |
Mana javob. Elektronika iyunda mayga nisbatan qariyb ikki baravar tushgan, qolgan kategoriyalar oddiy yozgi pasayishda. Bitta kategoriya butun do'konni pastga tortgan.
3-qadam: nega? Bu yerda ma'lumot tugaydi va savol boshlanadi. Analitik direktorga shunday deydi: "Tushish faqat Elektronikada, iyunda, iyulda tiklangan. Yetkazib beruvchi bilan iyunda nima bo'lganini tekshirish kerak." Ma'lumot qayerda va qachon ni aytdi. Nega ni odamlar biladi.
4-qadam: qaror. Direktor endi "savdo tushdi" deb emas, "iyunda elektronika ta'minoti uzildi, buni takrorlamaslik kerak" deb gapiradi. Bu qaror. Analitik ishi shu yerda tugaydi.
To'rt qadam, o'n daqiqa. Kursning oxirida siz shuni Excel da, SQL da, Python da qila olasiz va natijani dashboard bilan ko'rsata olasiz.
Analitik aslida nima qiladi
Ko'pchilik "analitik grafik chizadi" deb o'ylaydi. Grafik ishning oxirgi 10 foizi. Haqiqiy ish:
| Qadam | Ishning ulushi | Bu kitobda |
|---|---|---|
| Savolni to'g'ri qo'yish ("savdo tushdi" → "qaysi kategoriya, qaysi oy, qanchaga") | 15% | 1, 25-boblar |
| Ma'lumotni topish va olish (baza, Excel, eksport) | 15% | 4–18-boblar (SQL) |
| Tozalash (bo'sh qiymat, dublikat, noto'g'ri format) | 30% | 18-bob |
| Hisoblash va taqqoslash | 20% | 14–18, 25–31-boblar |
| Vizualizatsiya | 10% | 22–27-boblar |
| Tushuntirish va qaror | 10% | 30–31-boblar |
Tozalashga 30% — bu hazil emas. Real ma'lumot har doim iflos: "Toshkent" va "toshkent " ikki xil hudud bo'lib chiqadi, sana uch xil formatda keladi, narx matn sifatida saqlangan. 18-bob shunga bag'ishlangan.
Uch kasb, uch ish
| Data Analyst | Data Scientist | Data Engineer | |
|---|---|---|---|
| Savol | Nima bo'ldi? Nega? | Nima bo'ladi? | Ma'lumot qayerdan keladi? |
| Asosiy vosita | SQL, Excel, Python (pandas), BI | Python, statistika, ML | SQL, Python, Airflow, bulut |
| Natija | Hisobot, dashboard, tavsiya | Model, bashorat | Pipeline, baza, ma'lumot ombori |
| Kim bilan gaplashadi | Direktor, marketing, moliya | Mahsulot jamoasi | Dasturchilar |
Bu kitob birinchi ustun haqida. Lekin 27–32-boblarda ikkinchi ustunning chegarasiga boramiz: statistik test va oddiy bashorat. Analitik "bu farq tasodifmi?" degan savolga javob bera olishi kerak.
O'zbekistonda 2026 yildagi ish e'lonlari analitikdan nimani so'raydi (hh.uz va olx.uz ni ochib sanang, ro'yxat quyidagicha chiqadi): birinchi navbatda Excel va SQL, keyin Power BI yoki boshqa BI, keyin Python. Shuning uchun kitob Excel dan boshlanadi, Python dan emas.
Kursning dataseti: Bozor.uz
Butun kitob bitta do'kon ma'lumoti ustida. Uni Excel da ochasiz (4-bob), SQL bilan so'raysiz (4–12), pandas bilan tozalaysiz (13–18), chizasiz (19–21), metrikalarini hisoblaysiz (22–26) va dashboard qilasiz (27). Bir xil mijozlar, bir xil mahsulotlar, hamma joyda. 2025 yil, 3 000 mijoz, 20 000 buyurtma, 14 hudud, 82 mahsulot, 8 kategoriya.
import matplotlib.patches as mpatches fig_, ax = plt.subplots(figsize=(10, 5.2)); ax.axis("off") tables = { "customers": (0.5, 3.6, ["customer_id (PK)", "full_name", "gender", "birth_year", "region_id (FK)", "signup_date", "channel"]), "regions": (0.5, 0.4, ["region_id (PK)", "region", "population_k"]), "orders": (4.0, 3.2, ["order_id (PK)", "customer_id (FK)", "order_date", "order_time", "status", "payment_method", "delivery_days", "total_amount"]), "order_items": (7.4, 3.2, ["item_id (PK)", "order_id (FK)", "product_id (FK)", "quantity", "unit_price", "discount_pct", "item_status"]), "products": (7.4, 0.2, ["product_id (PK)", "product_name", "category", "price", "cost", "stock"]), } for name, (x, y, cols) in tables.items(): h = 0.32 * (len(cols) + 1) ax.add_patch(mpatches.FancyBboxPatch((x, y), 2.6, h, boxstyle="round,pad=0.05", fc="#eef3fb", ec="#4C72B0", lw=1.5)) ax.text(x + 1.3, y + h - 0.2, name, ha="center", va="center", fontsize=11, weight="bold", color="#2c3e50") for i, c in enumerate(cols): ax.text(x + 0.15, y + h - 0.55 - 0.32 * i, c, fontsize=8.5, va="center", family="monospace") for (x1, y1, x2, y2, label) in [(3.1, 4.6, 4.0, 4.6, "1 → ko'p"), (6.6, 4.6, 7.4, 4.6, "1 → ko'p"), (8.7, 3.2, 8.7, 2.3, "ko'p → 1"), (1.8, 3.6, 1.8, 1.7, "ko'p → 1")]: ax.annotate("", xy=(x2, y2), xytext=(x1, y1), arrowprops=dict(arrowstyle="-|>", color="#c0392b", lw=1.5)) ax.text((x1 + x2) / 2, (y1 + y2) / 2 + 0.15, label, fontsize=8, color="#c0392b", ha="center") ax.set_xlim(0, 10.5); ax.set_ylim(0, 6.5) fig("sxema.png", "Bozor.uz bazasi: 5 jadval. PK = birlamchi kalit, FK = tashqi kalit (boshqa jadvalga havola). Bir mijozda ko'p buyurtma, bir buyurtmada ko'p mahsulot.")

Bozor.uz bazasi: 5 jadval. PK = birlamchi kalit, FK = tashqi kalit (boshqa jadvalga havola). Bir mijozda ko'p buyurtma, bir buyurtmada ko'p mahsulot.
Har jadval nima ekanini 3-bobda batafsil ko'ramiz. Hozircha bitta narsani eslab qoling: buyurtma summasi orders da, lekin qaysi mahsulot sotilgani order_items da. "Iyunda elektronika tushdi" deyish uchun ikkala jadval kerak edi. Real bazalar har doim shunday: javob bitta jadvalda bo'lmaydi.
Ma'lumot ichidagi oltita sir
Bu dataset sun'iy, lekin ichiga oltita haqiqiy hodisa yashirilgan. Kurs davomida hammasini topasiz, har biri alohida bobda o'z vositasi bilan:
| # | Savol | Qaysi bobda topasiz | Vosita |
|---|---|---|---|
| 1 | Do'kon o'sib boryaptimi, yoki bu mavsumiylikmi? Ikkalasini qanday ajratamiz? | 20, 29 | vaqt qatorlari |
| 2 | Iyunda nima bo'ldi? (yuqorida ko'rdingiz, lekin SQL bilan qayta topasiz) | 10 | JOIN + GROUP BY |
| 3 | Qaysi hududda o'rtacha chek eng katta? Toshkent emas. | 9, 19 | GROUP BY, pivot |
| 4 | Qaysi kanal ko'p mijoz beradi, qaysi kanal qoladigan mijoz beradi? Bular har xil. | 26 | cohort, retention |
| 5 | Qaysi to'lov usulida buyurtmalar ko'proq bekor qilinadi? | 8, 9 | filtr, foiz |
| 6 | Qaysi kategoriyada qaytarish eng ko'p va nega? | 10, 25 | JOIN, return rate |
Sirlarning javobi datasets/answers/kalit.json da bor: o'qituvchi uchun. Talabaga tavsiya: ochmang. Topganingizda tekshiring.
Kitob qanday o'qiladi
Har bobda kod bloklari ikki xil. Faqat ko'rsatiladigan va ishga tushirilgan. Ishga tushirilganining ostida "Chiqish" bor: bu kitob yig'ilganda kod haqiqatan ishlab bergan natija, qo'lda yozilgan emas. Rasmlar ham shunday: hammasi shu ma'lumotdan shu kod bilan chizilgan, Excel rasmlari esa Excel ning o'zi tomonidan. Agar sizda boshqa raqam chiqsa, ikkitadan bittasi xato: yo siz, yo kitob. Ikkalasini ham tekshiring.
Har bob oxirida uchta narsa: Xulosa jadvali (bobning 5–7 ta asosiy fikri), Talaba ishi (darsda 40 daqiqa, o'zingiz qilasiz) va Uy vazifasi (avtomatik tekshiriladi, homework/ papkasi).
Xulosa
| Tushuncha | Asosiy fikr |
|---|---|
| Analitik ishi | Savol → ma'lumot → tozalash → hisob → vizual → qaror. Grafik oxirgi 10% |
| "Savdo tushdi" | Bitta raqam emas: qaysi kategoriya, qaysi oy, qanchaga, qaytdimi. Har doim bo'laklarga ajrating |
| Ma'lumot va sabab | Ma'lumot qayerda va qachon ni aytadi. Nega ni odamlar biladi. Analitik ikkalasini bog'laydi |
| Bozor.uz | 5 jadval, 20 000 buyurtma, 2025 yil. Butun kitob shu ma'lumotda |
| Ish bozori | Excel va SQL birinchi, BI ikkinchi, Python uchinchi. Kurs tartibi shunday |
| Kitobdagi kod | Har chiqish haqiqiy: kitob yig'ilganda ishga tushirilgan |
Talaba ishi
datasets/dokon_savdo.xlsxni Excel da oching. Beshta varaqni ko'ring. Har biri nima haqida, bir gap bilan yozing.ordersvaraqidastatusustunini filtrlang: nechta buyurtmacancelled? (Kod kerak emas, Excel filtri yetadi. 4-bobda o'rganasiz, hozir sinab ko'ring.)- Yuqoridagi "Iyunda nima bo'ldi" tahlilini o'qing va bitta savol yozing: analitik yana nimani tekshirishi kerak edi? (Maslahat: iyunda Elektronika buyurtmalari soni tushganmi, yoki o'rtacha chek?)
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.