Asosiy qismga o'tish

Analitik kuni: savoldan qarorgacha

1-bob 4 kod bloki 1743 so'z

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.

python5 qator
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())
Chiqish
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
python3 qator
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.

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?

python6 qator
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"))
category2025-052025-062025-07iyun_vs_may
Elektronika1 086.84596.411 228.17-0.45
Uy-ro'zg'or65.950.4163.39-0.24
Go'zallik44.5242.8139.87-0.04
Maishiy texnika516.23521.88404.520.01
Oziq-ovqat98.36108.6891.280.1
Kitoblar11.6313.2511.540.14
Kiyim151.61172.25156.020.14
Sport85.9399.5119.760.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.

python20 qator
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.

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

  1. datasets/dokon_savdo.xlsx ni Excel da oching. Beshta varaqni ko'ring. Har biri nima haqida, bir gap bilan yozing.
  2. orders varaqida status ustunini filtrlang: nechta buyurtma cancelled? (Kod kerak emas, Excel filtri yetadi. 4-bobda o'rganasiz, hozir sinab ko'ring.)
  3. 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.

Telegramda yozish Narxlar