Asosiy grafiklar: savol grafikni tanlaydi
Sahna: "qaysi grafikni chizay?"
Bu savol noto'g'ri qo'yilgan. To'g'ri savol — "nimani bilmoqchiman?". Vaqt bo'yicha o'zgarishmi, solishtirishmi, taqsimotmi, aloqami — har biriga o'z grafigi bor. Noto'g'ri tanlangan grafik ma'lumot ko'rsatmaydi, yashiradi.

Savol grafikni tanlaydi: line, bar, hist, scatter, boxplot, heatmap
Bu bobda beshta asosiy grafikni do'kon va avtomobil ma'lumotidagi real savollar bilan chizamiz.
import numpy as np import pandas as pd savdo = pd.read_csv(DATA / "dokon_savdo.csv", parse_dates=["sana"], date_format="%d.%m.%Y") savdo["tushum"] = savdo["miqdor"] * savdo["narx"] def narxni_son(ustun): matn = ustun.str.lower().str.replace("so'm", "").str.replace(" ", "") son = pd.to_numeric(matn.str.replace("mln", "")) return son.where(~matn.str.endswith("mln"), son * 1_000_000) avto = (pd.read_csv(DATA / "avto_savdo.csv").drop_duplicates() .assign(model=lambda d: d["model"].str.strip().str.title(), narx=lambda d: narxni_son(d["narx"]) / 1e6, yoshi=lambda d: 2025 - d["yil"])) print(savdo.shape, avto.shape)
(11352, 9) (600, 10)
Avtomobil jadvali — 12–13-boblardagi tozalashning qisqa varianti (takrorlar, model nomi, narx).
line — vaqt bo'yicha o'zgarish
Savol: haftalik tushum yil davomida qanday o'zgardi?
haftalik = savdo.set_index("sana")["tushum"].resample("W").sum() / 1e6 fig, ax = plt.subplots(figsize=(10, 3.2)) ax.plot(haftalik.index, haftalik.values, color="#1a73e8", linewidth=1.8) ax.set(title="Haftalik tushum", ylabel="mln so'm") plt.show()

Chiziq qo'shni nuqtalarni bog'laydi — shuning uchun x o'qi tartibli bo'lishi kerak (vaqt, yosh, harorat). Kategoriyalar (filiallar, modellar) orasini chiziq bilan bog'lash — xato: "Chilonzor va Sergeli orasida" degan joy yo'q.
bar — kategoriyalarni solishtirish
Savol: qaysi to'lov turi ko'proq pul keltiradi?
tolov = savdo.groupby("tolov")["tushum"].sum().sort_values() / 1e6 fig, ax = plt.subplots(figsize=(7, 2.8)) ustunlar = ax.barh(tolov.index, tolov.values, color="#b06000") ax.bar_label(ustunlar, fmt="%.0f", padding=3) ax.set(title="To'lov turi bo'yicha tushum, mln so'm", xlim=(0, tolov.max() * 1.15)) plt.show()

Uchta qaror:
barh(gorizontal) — nomlar uzun bo'lsa yoki ko'p bo'lsa, ular o'qilishi oson.- Saralash (
sort_values) — ko'z eng kattasini darhol topadi. Saralanmagan bar — alifbo tartibidagi tasodif. bar_label— har ustunga uning qiymatini yozadi: o'quvchi o'qdan qiymat taxmin qilib o'tirmaydi.
Bar grafikda o'q noldan boshlanishi shart — 21-bobda nega ekanini ko'ramiz.
hist — bitta sonning taqsimoti
Savol: cheklar qanday summada bo'ladi?
chek = savdo.groupby("chek_id")["tushum"].sum() / 1000 fig, axs = plt.subplots(1, 3, figsize=(12, 3)) for ax, bins in zip(axs, [5, 30, 300]): ax.hist(chek, bins=bins, color="#137333") ax.set_title(f"bins={bins}") ax.set_xlabel("chek, ming so'm") plt.show() print(f"cheklar: {len(chek)}, median {chek.median():.0f} ming, eng katta {chek.max():.0f} ming")
cheklar: 5687, median 80 ming, eng katta 424 ming

Histogramma sonlarni oraliqlarga (bin) bo'lib, har oraliqda nechta borligini sanaydi. Bin soni hikoyani o'zgartiradi:
bins=5— juda qo'pol: shakl yo'qoladi, faqat "ko'pchilik kichik" ko'rinadi.bins=30— shakl ko'rinadi: ko'p cheklar kichik, o'ngga uzun "dum" (qimmat cheklar kam).bins=300— har oraliqda bir necha chek: tasodifiy "taroq", shakl shovqinga ko'milgan.
Qoida: bitta bin soniga ishonmang — ikki-uchtasida chizib, hammasida saqlanadigan shaklni qabul qiling.
scatter — ikki son orasidagi aloqa
Savol: mashina eskirgan sari narxi qanday tushadi?
fig, ax = plt.subplots(figsize=(8, 3.8)) for model, rang in [("Spark", "#1a73e8"), ("Cobalt", "#137333"), ("Captiva", "#c5221f")]: qism = avto[avto["model"] == model] ax.scatter(qism["yoshi"], qism["narx"], s=22, alpha=0.6, color=rang, label=model) ax.set(title="Yosh va narx", xlabel="yoshi, yil", ylabel="narx, mln so'm") ax.legend() plt.show() for model in ["Spark", "Cobalt", "Captiva"]: q = avto[avto["model"] == model] print(f"{model:<8} korrelyatsiya (yosh, narx): {q['yoshi'].corr(q['narx']):.2f}")
Spark korrelyatsiya (yosh, narx): -0.97 Cobalt korrelyatsiya (yosh, narx): -0.97 Captiva korrelyatsiya (yosh, narx): -0.97

Har nuqta — bitta mashina. Uch model ham bir xil naqshni ko'rsatadi: yosh oshgan sari narx tushadi, va korrelyatsiya buni son bilan tasdiqlaydi (−1 ga yaqin — kuchli teskari aloqa). Lekin qiyalik har xil: Captiva qimmatroq boshlanadi va har yili ko'proq so'm yo'qotadi.
alpha=0.6 — nuqtalar yarim shaffof: ustma-ust tushganda zich joy to'qroq ko'rinadi. Yuzlab nuqtali scatter da shaffoflik — majburiy.
boxplot — guruhlar taqsimotini solishtirish
Savol: to'lov turlarida chek summasi farq qiladimi?
cheklar = savdo.groupby(["chek_id", "tolov"], as_index=False)["tushum"].sum() tartib = ["naqd", "karta", "Click", "Payme"] fig, ax = plt.subplots(figsize=(8, 3.4)) ax.boxplot([cheklar.loc[cheklar["tolov"] == t, "tushum"] / 1000 for t in tartib], labels=tartib) ax.set(title="To'lov turi bo'yicha chek summasi", ylabel="ming so'm") plt.show() cheklar.groupby("tolov")["tushum"].median().div(1000).round(1)
| tolov | tushum |
|---|---|
| Click | 78 |
| Payme | 76 |
| karta | 82 |
| naqd | 79 |

Boxplot taqsimotni beshta son bilan chizadi: quti — o'rtadagi yarmi (25%–75%), ichidagi chiziq — median, "mo'ylovlar" — odatiy oraliq, nuqtalar — chetki qiymatlar. To'rt quti deyarli bir xil: to'lov turi chek summasiga ta'sir qilmaydi. Bar grafik (yuqorida) esa to'lov turlari orasida katta farq ko'rsatgan edi. Ikkalasi ham to'g'ri: farq cheklar sonida, chek hajmida emas. Bitta grafik bitta savolga javob beradi.
Qisqa tanlov jadvali
| Savol | Grafik | Matplotlib |
|---|---|---|
| vaqt bo'yicha qanday o'zgardi? | line | ax.plot |
| qaysi kategoriya katta? | bar / barh | ax.bar, ax.barh |
| bitta son qanday taqsimlangan? | histogram | ax.hist |
| ikki son bog'liqmi? | scatter | ax.scatter |
| guruhlar taqsimoti farq qiladimi? | boxplot | ax.boxplot |
| ikki kategoriya bo'yicha son? | heatmap | ax.imshow |
Pie (doira) grafik jadvalda yo'q: odam ko'zi burchaklarni ustunlar uzunligidan ancha yomon solishtiradi. 4–5 dan ortiq bo'lak bo'lsa, doira deyarli o'qilmaydi. Ulush kerak bo'lsa — saralangan barh.
Xulosa
- Grafikni savol tanlaydi: vaqt — line, solishtirish — bar, taqsimot — hist, aloqa — scatter, guruhlar taqsimoti — boxplot.
- Line — faqat tartibli x uchun; bar — saralangan, noldan,
bar_labelbilan. - Histogrammani bir nechta bin soni bilan tekshiring.
- Ko'p nuqtali scatter —
alphabilan. - Bir grafik — bir savol: bar va boxplot bir ma'lumotdan har xil narsa aytishi mumkin.
Mashqlar
- Har kategoriya bo'yicha sotilgan dona sonini saralangan
barhbilan chizing (mahsulotlar.csvbilan merge kerak, 15-bob). - Avtomobil narxlari histogrammasini 10, 40 va 150 bin bilan chizing. Qaysi shakl barqaror?
- Probeg va narx orasidagi scatter ni chizing. Korrelyatsiya yoshdagi bilan solishtirganda qanday?
Javoblar
savdo.merge(katalog, on="mahsulot_id").groupby("kategoriya")["miqdor"].sum().sort_values().plot(kind="barh").- Har uchtasida o'ngga cho'zilgan shakl: arzon mashinalar ko'p, qimmatlari kam.
- Probeg yoshga bog'liq, shuning uchun u ham narx bilan teskari bog'langan.
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.