Asosiy qismga o'tish

Dashboard: Power BI va Streamlit

30-bob 8 kod bloki 3083 so'z

Hisobot va dashboard farqi

Hisobot bitta savolga bir marta javob beradi ("iyunda nima bo'ldi"). Dashboard bir nechta doimiy savolga har kuni javob beradi ("hozir qanday ketyapti"). Dashboard o'zi hech narsa tushuntirmaydi: u ko'rsatadi, va odam savol berganda filtrlaydi. Shuning uchun dashboard hisobotdan oldin emas, keyin quriladi: avval qaysi savollar har hafta takrorlanishini bilish kerak.

Bozor.uz rahbari har dushanba so'raydigan savollar va ularning dashboarddagi o'rni:

Savol (har hafta) Metrika Vizual Filtr
Qancha sotdik? Savdo (yetkazilgan), buyurtmalar, AOV KPI karta Oy, hudud, kanal
Qayerga ketyapmiz? Oylik savdo Chiziqli Oy oralig'i
Qaysi hudud? Hudud bo'yicha savdo Gorizontal ustun, tartiblangan —
Nima sotilyapti? Kategoriya bo'yicha savdo Ustun Oy
Muammo bormi? Bekor foizi to'lov bo'yicha Ustun Oy

Beshta savol, beshta vizual, bitta sahifa. O'ninchi vizual "qiziq bo'lgani uchun" qo'shilmaydi.

python14 qator
import matplotlib.patches as patches
f, ax = plt.subplots(figsize=(10, 5.6)); ax.set_xlim(0, 100); ax.set_ylim(0, 60); ax.axis("off")
def box(x, y, w, h, t, c="#eef2f7"):
    ax.add_patch(patches.FancyBboxPatch((x, y), w, h, boxstyle="round,pad=0.4", facecolor=c, edgecolor="#9aa5b1"))
    ax.text(x + w / 2, y + h / 2, t, ha="center", va="center", fontsize=10)
box(1, 2, 16, 56, "FILTRLAR\n\nOy oralig'i\nHudud\nKanal", "#f7f7f7")
box(19, 52, 80, 6, "SARLAVHA: Bozor.uz savdo, 2025   |   yangilangan: sana", "#ffffff")
for i, t in enumerate(["Savdo\n33.5 mlrd", "Buyurtmalar\n18 661", "O'rtacha chek\n1.79 mln", "Bekor\n3.8%"]):
    box(19 + i * 20.5, 42, 18.5, 8, t, "#dbe7f5")
box(19, 22, 48, 18, "OYLIK SAVDO (chiziqli)\ntrend, mavsumiylik", "#eef2f7")
box(69, 22, 30, 18, "HUDUD BO'YICHA\n(gorizontal ustun, top 8)")
box(19, 2, 38, 18, "KATEGORIYA BO'YICHA (ustun)")
box(59, 2, 40, 18, "BEKOR FOIZI, TO'LOV USULI (ustun)")
fig("layout.png", "Bitta sahifa, yuqoridan pastga: filtrlar chapda, KPI kartalar tepada (eng muhim raqamlar), trend o'rtada, bo'linishlar pastda. Ko'z shu tartibda o'qiydi: avval 'qancha', keyin 'qayerga', keyin 'nima uchun'.")

Bitta sahifa, yuqoridan pastga: filtrlar chapda, KPI kartalar tepada (eng muhim raqamlar), trend o'rtada, bo'linishlar pastda. Ko'z shu tartibda o'qiydi: avval 'qancha', keyin 'qayerga', keyin 'nima uchun'.

Bitta sahifa, yuqoridan pastga: filtrlar chapda, KPI kartalar tepada (eng muhim raqamlar), trend o'rtada, bo'linishlar pastda. Ko'z shu tartibda o'qiydi: avval 'qancha', keyin 'qayerga', keyin 'nima uchun'.

Power BI ni o'rnatish

Power BI Desktop bepul va faqat Windows da ishlaydi. Uch xil o'rnatish yo'li bor; qaysi biri ishlashi kompyuteringizga bog'liq.

1. Buyruq bilan (eng tez). Windows Terminal yoki PowerShell ni oching va bitta qatorni yozing:

matn1 qator
winget install --id Microsoft.PowerBI

Bu kitob tayyorlanayotganda shu buyruq PBIDesktopSetup-2026-08_x64.exe ni yuklab oldi (661 MB) va 2.157.1354.0 versiyasini o'rnatdi. Diskda 2.7 GB egallaydi. O'rnatish administrator huquqini so'raydi: ekranda UAC oynasi chiqadi, "Ha" bosiladi. Tugagach dastur C:\Program Files\Microsoft Power BI Desktop\bin\PBIDesktop.exe da bo'ladi.

2. Microsoft Store. Store ni ochib "Power BI Desktop" ni qidiring → Get. Administrator huquqi shart emas va yangilanishlar avtomatik keladi. Korporativ kompyuterda Store yopiq bo'lishi mumkin.

3. Saytdan. powerbi.microsoft.com/desktop → "Download free" → PBIDesktopSetup_x64.exe. Bu yo'l internet cheklangan tarmoqlarda qulay: faylni bir marta yuklab, boshqa kompyuterlarga ko'chirish mumkin.

Tekshirish (PowerShell):

matn1 qator
(Get-Item 'C:\Program Files\Microsoft Power BI Desktop\bin\PBIDesktop.exe').VersionInfo.ProductVersion
Talab Qiymat
Operatsion tizim Windows 10 yoki 11, 64-bit (Windows Server 2019+ ham)
Xotira Kamida 4 GB; 20 000 qatorli bizning dataset uchun yetarli, million qatorlarda 16 GB
Disk Dastur 2.7 GB + ma'lumot va kesh uchun bir necha GB
Ekran 1440 × 900 dan katta
Hisob O'rnatish va mahalliy ishlash uchun shart emas
Narx Desktop bepul; faqat internetda ulashish (Service) pullik bo'lishi mumkin

Ro'yxatdan o'tish kerakmi? Yo'q. Excel, CSV, SQLite yoki SQL Server dan ma'lumot olib, model qurib, dashboard yasash uchun kirish shart emas: "Sign in" tugmasini bosmasangiz ham hamma narsa ishlaydi. Kirish faqat Publish (Power BI Service ga chiqarish) uchun kerak, va u yerda shaxsiy gmail/outlook qabul qilinmaydi: ish yoki o'quv muassasasi elektron pochtasi (@kompaniya.uz, @universitet.uz) talab qilinadi. Kursda buni bilib qo'yish yetarli; dashboard ni .pbix fayl sifatida yuborish ham mumkin.

Windows bo'lmasa. Power BI Desktop macOS va Linux uchun yo'q. Uch variant: (1) Windows virtual mashinasi (Parallels, VMware, VirtualBox), (2) brauzerdagi Power BI Service (ish hisobi kerak, mahalliy fayldan model qurish cheklangan), (3) shu bobning ikkinchi yarmi: Streamlit, u har uch tizimda ishlaydi. Kurs uchun uchinchi variant to'liq yetarli.

Til. File → Options and settings → Options → Regional settings → Application language. O'zbek tili yo'q; ingliz tilida qoldiring, chunki hamma darslik, forum javobi va ish e'loni ingliz atamalarida yozilgan (bu kitob ham).

Yangilanish. Power BI Desktop har oy yangilanadi (2026-08 = 2.157). Store yoki winget varianti o'zi yangilaydi, saytdan o'rnatilgani esa yangi versiyani qo'lda so'raydi. Kurs davomida versiya farqi muhim emas: menyular joyi yiliga bir-ikki marta o'zgaradi, mantiq o'zgarmaydi.

Power BI: bosqichma-bosqich

Quyidagi qadamlar dokon_savdo.xlsx bilan 60–90 daqiqa oladi. Rasmlar shu kitob uchun Power BI Desktop 2.157 (2026-08) da olingan; menyular yiliga bir-ikki marta joyini o'zgartiradi, mantiq o'zgarmaydi.

1. Ma'lumot olish. Home → Get Data → Excel workbook → dokon_savdo.xlsx → Navigator da beshta varaqni belgilang (orders, customers, products, order_items, regions) → Transform Data (Load emas: avval tozalash).

2. Power Query: turlar. Har jadvalda ustun sarlavhasidagi belgi turni ko'rsatadi. orders: order_date → Date, total_amount → Whole Number, delivery_days → Whole Number (null lar qoladi). order_items: unit_price → Whole Number. Query Settings → Applied Steps da har o'zgarish yozilib boradi: bu 18-bobdagi tozalash logi, avtomatik. Close & Apply.

3. Model: bog'lanishlar. Model view (chapda uchinchi belgi). Power BI ko'pincha kalitlarni o'zi topadi; tekshiring, to'rtta bog'lanish bo'lishi kerak, hammasi "bir → ko'p" (1 → *):

Bir (dimension) Ko'p (fact) Kalit
customers orders customer_id
regions customers region_id
products order_items product_id
orders order_items order_id

Power BI Model view: regions, customers, products, orders, order_items va Sana jadvallari, ular orasidagi besh bog'lanish 1 va * belgilari bilan

Power BI Model view: regions, customers, products, orders, order_items va Sana jadvallari, ular orasidagi besh bog'lanish 1 va * belgilari bilan

Yuqoridagi rasm shu kursning tayyor loyihasidan olingan: har chiziqda bir uchida 1, ikkinchisida * turadi. Chiziqning yo'nalishi (strelka) filtr qaysi tomonga oqishini bildiradi.

Bu yulduz sxema: markazda fakt jadvali (orders, order_items), atrofida ta'rif jadvallari. 3-bobdagi PK/FK ning o'zi. Bog'lanish yo'nalishi (filter direction) "Single" qoladi: filtr "bir" tomondan "ko'p" tomonga oqadi (hudud tanlansa, mijozlar, keyin buyurtmalar filtrlanadi).

4. Sana jadvali. Modeling → New table:

python1 qator
Sana = CALENDAR(DATE(2025,1,1), DATE(2025,12,31))

Keyin Sana[Date] → orders[order_date] bog'lanish, va Modeling → Mark as date table. Bu vaqt funksiyalari (oy, chorak, o'tgan davr) uchun shart. Ustunlar: Oy = FORMAT(Sana[Date], "yyyy-MM"), Hafta kuni = FORMAT(Sana[Date], "ddd").

5. O'lchovlar (DAX measures). Modeling → New measure. Har metrika bitta o'lchov, 25-bobdagi metrika kartasining Power BI dagi ko'rinishi:

python7 qator
Savdo = CALCULATE(SUM(orders[total_amount]), orders[status] = "delivered")
Buyurtmalar = CALCULATE(COUNTROWS(orders), orders[status] = "delivered")
AOV = DIVIDE([Savdo], [Buyurtmalar])
Bekor foizi = DIVIDE(CALCULATE(COUNTROWS(orders), orders[status] = "cancelled"), COUNTROWS(orders))
Savdo oldingi oy = CALCULATE([Savdo], DATEADD(Sana[Date], -1, MONTH))
Oyma-oy % = DIVIDE([Savdo] - [Savdo oldingi oy], [Savdo oldingi oy])
Mijozlar = CALCULATE(DISTINCTCOUNT(orders[customer_id]), orders[status] = "delivered")

CALCULATE(hisob, filtr) DAX ning asosiy funksiyasi: SQL dagi WHERE ni o'lchov ichiga qo'yadi. DIVIDE nolga bo'lishda xato o'rniga bo'sh qaytaradi. O'lchov ustun emas: u har vizualda, har filtrda qayta hisoblanadi (pandas groupby ni Power BI o'zi bajaradi).

6. Vizuallar (Report view, Visualizations paneli). Layout rasmidagi tartibda:

Vizual Turi Maydonlar
4 KPI Card (yoki yangi Card) [Savdo], [Buyurtmalar], [AOV], [Bekor foizi]
Oylik savdo Line chart X: Sana[Oy], Y: [Savdo]
Hudud Clustered bar chart Y: regions[region], X: [Savdo]; Sort by Savdo descending
Kategoriya Clustered column chart X: products[category], Y: Tovar savdosi (order_items uchun alohida o'lchov: SUMX(order_items, order_items[quantity] * order_items[unit_price]), item_status = "delivered" filtri bilan)
Bekor Clustered column chart X: orders[payment_method], Y: [Bekor foizi]
Filtrlar Slicer ×3 Sana[Oy] (Between), regions[region], customers[channel]

Format (bo'yoq mo'yqalami belgisi): sarlavha xulosa bilan ("Oylik savdo: dekabr rekord"), o'q birligi (Display units: Millions), ranglar 22-bobdagi qoida (bitta rang, urg'u uchun ikkinchisi), Data labels faqat KPI va ustunlarda.

7. Tekshiruv. Dashboard raqamlari kitob raqamlari bilan mos kelishi shart: Savdo 33.48 mlrd, buyurtmalar 18 661, AOV 1.79 mln, bekor 3.8%. Mos kelmasa, sabab 99% holda filtr (status) yoki bog'lanish yo'nalishi. Bu "birinchi kun" tekshiruvi har dashboardda: ma'lum javobli savol bilan solishtirish.

Power BI hisoboti: 4 KPI karta (33bn, 19K, 2M, 3.8%), oylik savdo chizig'i, hudud bo'yicha gorizontal ustun, kategoriya va bekor foizi ustunlari, chapda uchta slicer

Power BI hisoboti: 4 KPI karta (33bn, 19K, 2M, 3.8%), oylik savdo chizig'i, hudud bo'yicha gorizontal ustun, kategoriya va bekor foizi ustunlari, chapda uchta slicer

Tayyor sahifa shunday ko'rinadi. Kartalardagi raqamlar kitobning boshqa boblari bilan bir xil: 33 mlrd savdo, 18.7 ming buyurtma, 1.79 mln o'rtacha chek (kartada 2M deb qisqartirilgan), 3.8% bekor. Chiziqda iyun chuqurligi va dekabr cho'qqisi, ustunlarda Elektronika ustunligi va naqd to'lovning yuqori bekor foizi ko'rinadi: birinchi bobdagi olti sirning to'rttasi bitta sahifada.

8. Ulashish. File → Publish → Power BI Service (bepul akkaunt, ish emaili kerak) yoki .pbix faylni yuborish (Power BI Desktop bilan ochiladi). Yangilanish: Service da Scheduled refresh, fayl OneDrive/SharePoint da bo'lsa avtomatik.

Tayyor loyiha: powerbi/BozorUz.pbip

Kurs papkasida shu dashboardning tayyor varianti bor. Ikki fayl turini ajratib oling:

Format Nima Qachon
.pbix Bitta ikkilik (binary) fayl: model, ma'lumot va hisobot birga Odatiy ish; pochta orqali yuboriladi
.pbip Papka: BozorUz.SemanticModel/model.bim (model, DAX, M so'rovlar) va BozorUz.Report/report.json (vizuallar) — hammasi matn Git bilan versiyalash, farqni ko'rish, kod bilan yaratish

.pbip matn bo'lgani uchun uni dastur yozishi mumkin. Shu kursning loyihasi powerbi/make_pbip.py bilan yaratilgan: 6 jadval, 8 DAX o'lchov, 5 bog'lanish va 11 vizual Python kodidan chiqadi. Loyihani qayta yaratish:

bash1 qator
python powerbi/make_pbip.py

Ochish: powerbi/BozorUz.pbip faylini Power BI Desktop bilan oching. Birinchi ochilishda ma'lumot yo'q (matn faylda faqat ta'riflar bor), shuning uchun tepadagi sariq chiziqda Refresh now ni bosing: Power BI datasets/dokon_savdo.xlsx dan 60 mingdan ortiq qatorni o'qiydi va kartalar 33bn, 19K, 2M, 3.8% ni ko'rsatadi.

Fayl yo'li FaylYoli parametrida saqlanadi (Home → Transform data → Manage parameters). Papkani boshqa kompyuterga ko'chirsangiz, shu parametrni o'zgartiring, hamma so'rovlar yangi yo'ldan o'qiydi. Bu 21-bobdagi qoidaning Power BI dagi ko'rinishi: yo'l bitta joyda, kodda emas.

Streamlit: Python bilan dashboard

Power BI bo'lmasa yoki brauzerda ochiladigan, kod bilan boshqariladigan dashboard kerak bo'lsa: Streamlit. dashboard/app.py shu kitobdagi barcha vositalar bilan yozilgan (SQL, pandas, grafik) va 90 qator:

python60 qator
from pathlib import Path
import sqlite3
import pandas as pd
import plotly.express as px
import streamlit as st

DB = Path(__file__).resolve().parent.parent / "datasets" / "dokon_savdo.sqlite"
st.set_page_config(page_title="Bozor.uz savdo", layout="wide")

@st.cache_data
def load():
    con = sqlite3.connect(DB)
    q = """SELECT o.order_id, o.order_date, o.status, o.payment_method, o.total_amount, c.channel, r.region
           FROM orders o JOIN customers c ON c.customer_id = o.customer_id
                         JOIN regions r ON r.region_id = c.region_id"""
    df = pd.read_sql_query(q, con, parse_dates=["order_date"])
    items = pd.read_sql_query("""SELECT oi.order_id, oi.quantity * oi.unit_price AS summa, p.category, oi.item_status
                                 FROM order_items oi JOIN products p ON p.product_id = oi.product_id""", con)
    con.close()
    df["oy"] = df.order_date.dt.strftime("%Y-%m")
    return df, items

df, items = load()
st.title("Bozor.uz: savdo dashboardi, 2025")

with st.sidebar:                                                  # filtrlar
    st.header("Filtrlar")
    hududlar = st.multiselect("Hudud", sorted(df.region.unique()), default=[])
    kanallar = st.multiselect("Kanal", sorted(df.channel.unique()), default=[])
    oylar = st.select_slider("Oylar", options=sorted(df.oy.unique()), value=(df.oy.min(), df.oy.max()))

f = df[(df.oy >= oylar[0]) & (df.oy <= oylar[1])]
if hududlar: f = f[f.region.isin(hududlar)]
if kanallar: f = f[f.channel.isin(kanallar)]
yetk = f[f.status == "delivered"]

c1, c2, c3, c4 = st.columns(4)                                    # KPI kartalar
c1.metric("Savdo (yetkazilgan)", f"{yetk.total_amount.sum() / 1e9:.2f} mlrd so'm")
c2.metric("Buyurtmalar", f"{len(yetk):,}")
c3.metric("O'rtacha chek", f"{yetk.total_amount.mean() / 1e6:.2f} mln")
c4.metric("Bekor foizi", f"{100 * (f.status == 'cancelled').mean():.1f}%")

left, right = st.columns([3, 2])                                  # trend va hudud
with left:
    oylik = yetk.groupby("oy").total_amount.sum().reset_index(); oylik["mln"] = oylik.total_amount / 1e6
    st.plotly_chart(px.line(oylik, x="oy", y="mln", markers=True, title="Oylik savdo, mln so'm"), use_container_width=True)
with right:
    hudud = yetk.groupby("region").total_amount.sum().sort_values().reset_index(); hudud["mln"] = hudud.total_amount / 1e6
    st.plotly_chart(px.bar(hudud.tail(8), x="mln", y="region", orientation="h", title="Hudud bo'yicha savdo (top 8)"), use_container_width=True)

left, right = st.columns(2)                                       # kategoriya va bekor
with left:
    it = items[items.order_id.isin(yetk.order_id) & (items.item_status == "delivered")]
    kat = it.groupby("category").summa.sum().sort_values(ascending=False).reset_index(); kat["mln"] = kat.summa / 1e6
    st.plotly_chart(px.bar(kat, x="category", y="mln", title="Kategoriya bo'yicha savdo"), use_container_width=True)
with right:
    bekor = f.assign(bekor=f.status == "cancelled").groupby("payment_method").bekor.mean().reset_index(); bekor["foiz"] = 100 * bekor.bekor
    st.plotly_chart(px.bar(bekor.sort_values("foiz"), x="payment_method", y="foiz", title="Bekor foizi, to'lov usuli bo'yicha"), use_container_width=True)

st.caption(f"Manba: dokon_savdo.sqlite | {len(f):,} buyurtma filtrda | Savdo = status 'delivered' bo'yicha total_amount")

Ishga tushirish:

bash2 qator
pip install streamlit plotly
streamlit run dashboard/app.py

Brauzerda http://localhost:8501 ochiladi. Natija (bu rasm shu kodni ishga tushirib, brauzerdan olingan):

Streamlit dashboard: KPI kartalar, oylik savdo, hudud, kategoriya, bekor foizi

Streamlit dashboard: KPI kartalar, oylik savdo, hudud, kategoriya, bekor foizi

Kodning tuzilishi Power BI qadamlari bilan bir xil: (1) ma'lumot SQL bilan olinadi (load, va @st.cache_data uni bir marta o'qib xotirada saqlaydi), (2) filtrlar yon panelda (st.sidebar, Power BI slicer), (3) KPI (st.metric, Card), (4) grafiklar (plotly.express, interaktiv: hover da raqam, zoom), (5) izoh (st.caption): manba va ta'rif. Har filtr o'zgarganda butun skript qayta ishlaydi: Streamlit ning modeli shu, va kichik ma'lumotda bu yetarli.

Ulashish: kodni GitHub ga qo'yib, share.streamlit.io (Streamlit Community Cloud, bepul) da repo ni ko'rsatish; 5 daqiqada ochiq havola. Ma'lumot fayli ham repo da bo'lishi kerak (yoki baza havolasi st.secrets da).

Power BI yoki Streamlit

Mezon Power BI Streamlit
Kim quradi Kod bilmaydigan analitik ham Python biladigan analitik
Interaktivlik Har vizual bir-birini filtrlaydi (cross-filter) bepul Faqat siz yozgan filtrlar
Katta ma'lumot Millionlab qator, siqilgan model Xotirada; ~1 mln qatorgacha qulay
Ulashish Power BI Service (litsenziya kompaniyada bo'lsa) Har qanday server, bepul cloud
Nazorat Ko'rinish chegaralangan, "standart" Har piksel siz aytganday; statistika, model, matn
Ish bozori O'zbekistonda "BI analyst" e'lonlarida Power BI eng ko'p Startap, data science guruhlari

Qoida: kompaniyada Power BI bo'lsa Power BI (odamlar o'rganib bo'lgan). Bo'lmasa yoki tahlil murakkab bo'lsa (A/B test natijasi, bashorat oralig'i, matnli izoh) Streamlit. Ikkalasini bilish intervyuda ustunlik.

Dashboard xatolari

Xato Nima bo'ladi Himoya
15 ta vizual Hech kim qaramaydi 5–6 vizual, qolgani ikkinchi sahifada
Ta'rif yo'q "Savdo" bu yerda 33, moliya hisobotida 36 Izohda ta'rif: "Savdo = delivered total_amount"
Filtr holati ko'rinmaydi Rahbar "Buxoro" filtrini unutib, "savdo tushdi" deydi Sarlavhada faol filtrlar; "hammasi" tugmasi
Yangilanish sanasi yo'q Ikki hafta eski raqamga qarab qaror "Yangilangan: ..." har sahifada
Pie va 3D 22-bob Ustun, chiziq
Raqam formatlanmagan 33476904000 33.5 mlrd; Display units
Ma'lum javob bilan tekshirilmagan Bog'lanish noto'g'ri, summa 3 marta katta (3-bob JOIN tuzog'i) Birinchi kun: 5 ta ma'lum raqam bilan solishtirish
Dashboard hisobot o'rnida "Nega tushdi?" ga dashboard javob bermaydi Dashboard + oylik 1 sahifali hisobot (31-bob)

Xulosa

Tushuncha Asosiy fikr
Dashboard nima Takrorlanadigan savollarga doimiy javob; hisobotdan keyin quriladi
Loyiha Savol → metrika → vizual → filtr jadvali; bitta sahifa, 5–6 vizual
O'rnatish winget install --id Microsoft.PowerBI, Store yoki sayt; Windows kerak, hisob shart emas
Power BI Get Data → Power Query (turlar) → Model (yulduz, 1→*) → Sana jadvali → DAX o'lchovlar → vizuallar → tekshiruv
.pbix va .pbip Ikkilik bitta fayl / matnli papka; .pbip ni kod yaratadi va git ko'radi
DAX CALCULATE, DIVIDE, DATEADD, DISTINCTCOUNT, SUMX; o'lchov ustun emas
Streamlit SQL + pandas + plotly + st.*; 90 qator; streamlit run
Tanlov Kompaniyada nima bor: Power BI; murakkab tahlil, bepul ulashish: Streamlit
Tekshiruv Ma'lum javobli 5 raqam bilan solishtirish; ta'rif va yangilanish sanasi sahifada

Talaba ishi

  1. Power BI Desktop ni o'rnating (uch yo'ldan biri) va yuqoridagi 8 qadamni bajaring. Tekshiruv raqamlari mos keldimi? Mos kelmagan bo'lsa, qaysi qadamda xato edi? Keyin powerbi/BozorUz.pbip ni ochib o'zingiznikiga solishtiring: qaysi o'lchov boshqacha yozilgan?
  2. Streamlit ilovasiga oltinchi vizual qo'shing: kanal bo'yicha mijozlar soni va buyurtma per mijoz (hikoya 4). Qaysi qatorda qo'shildi, nega o'sha joyda?
  3. st.metric ga delta= qo'shing: joriy oy vs oldingi oy savdo o'zgarishi. Filtr bitta oyni tanlaganda ishlashi kerak.
  4. Ikki dashboardni bir odamga ko'rsating (Power BI va Streamlit) va 3 daqiqa kuzating: u qayerga birinchi qaradi, qaysi filtrni bosdi, nimani tushunmadi. Shu kuzatuvdan bitta o'zgarish kiriting.

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar