5-bo‘lim
Ma'lumotni vizuallashtirish
Matplotlib va Seaborn bilan grafiklar chizish, taqsimotni ko'rish va ma'lumotdagi muammolarni topish.
Ushbu bo‘lim mundarijasi
- Nima uchun grafik kerak?
- Matplotlib asoslari
- Asosiy grafik turlari
- Nuqtali diagramma
- Gistogramma
- Ustunli diagramma
- Quti diagramma
- Bir nechta grafik
- Seaborn - tezroq va chiroyliroq
- Korrelyatsiya issiqlik xaritasi
- Juftliklar diagrammasi
- Bo'sh qiymatlarni vizuallashtirish
- Amaliy tahlil ketma-ketligi
- Grafik saqlash
- Grafik yozish qoidalari
- Xulosa
Raqamlar jadvalidan ko'rinmaydigan narsalar grafikda bir zumda ko'zga tashlanadi. Vizuallashtirish - ma'lumotni tushunishning eng tez yo'li.
Nima uchun grafik kerak? #
1973-yilda statistik Frensis Anskomb to'rtta ma'lumotlar to'plamini tuzdi. Ularning barcha statistik ko'rsatkichlari bir xil:
| Ko'rsatkich | Qiymat |
|---|---|
| x ning o'rtachasi | 9.0 |
| y ning o'rtachasi | 7.5 |
| Korrelyatsiya | 0.816 |
| Regressiya chizig'i | y = 3 + 0.5x |
Lekin ular chizilganda butunlay boshqacha ko'rinadi.
Matplotlib asoslari #
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.figure(figsize=(9, 4))
plt.plot(x, y, color="steelblue", linewidth=2, label="sin(x)")
plt.plot(x, np.cos(x), color="tomato", linestyle="--", label="cos(x)")
plt.title("Trigonometrik funksiyalar")
plt.xlabel("x")
plt.ylabel("Qiymat")
plt.legend()
plt.grid(alpha=0.3)
plt.show()
| Element | Nima qiladi |
|---|---|
figure(figsize=(en, bo'y)) | Rasm o'lchami (dyuymda) |
plot() | Chiziqli grafik |
title(), xlabel(), ylabel() | Sarlavha va o'q nomlari |
legend() | Izoh oynasi |
grid() | To'r chiziqlari |
show() | Ko'rsatish |
savefig("rasm.png", dpi=150) | Faylga saqlash |
Nomsiz grafik - ma'nosiz grafik. O'lchov birligini ham ko'rsating:
"Narx (mln so'm)", "Vaqt (soniya)".
Asosiy grafik turlari #
Nuqtali diagramma #
Ikki o'zgaruvchi orasidagi bog'liqlikni ko'rish uchun.
plt.figure(figsize=(8, 5))
plt.scatter(uylar["maydon"], uylar["narx"],
c=uylar["xonalar"], cmap="viridis",
s=60, alpha=0.7, edgecolors="white")
plt.colorbar(label="Xonalar soni")
plt.xlabel("Maydon (m2)")
plt.ylabel("Narx (mln so'm)")
plt.title("Maydon va narx bog'liqligi")
plt.show()
Gistogramma #
Bitta o'zgaruvchining taqsimotini ko'rish uchun.
plt.figure(figsize=(8, 5))
plt.hist(uylar["narx"], bins=30, color="steelblue", edgecolor="white")
plt.axvline(uylar["narx"].mean(), color="red",
linestyle="--", label="O'rtacha")
plt.axvline(uylar["narx"].median(), color="orange",
linestyle="--", label="Mediana")
plt.xlabel("Narx (mln so'm)")
plt.ylabel("Uylar soni")
plt.legend()
plt.show()
Ustunli diagramma #
ortacha = uylar.groupby("tuman")["narx"].mean().sort_values()
plt.figure(figsize=(9, 5))
plt.barh(ortacha.index, ortacha.values, color="steelblue")
plt.xlabel("O'rtacha narx (mln so'm)")
plt.title("Tumanlar bo'yicha o'rtacha narx")
plt.tight_layout()
plt.show()
barh da nomlar gorizontal yoziladi va o'qish oson bo'ladi.
Vertikal bar da uzun nomlar bir-birining ustiga tushadi.
Quti diagramma #
Chetdagi qiymatlarni topish uchun eng yaxshi vosita.
plt.figure(figsize=(8, 5))
plt.boxplot([uylar[uylar["tuman"] == t]["narx"] for t in tumanlar],
labels=tumanlar)
plt.ylabel("Narx (mln so'm)")
plt.show()
Bir nechta grafik #
fig, oynalar = plt.subplots(2, 2, figsize=(12, 8))
oynalar[0, 0].hist(uylar["narx"], bins=20, color="steelblue")
oynalar[0, 0].set_title("Narx taqsimoti")
oynalar[0, 1].scatter(uylar["maydon"], uylar["narx"], alpha=0.6)
oynalar[0, 1].set_title("Maydon va narx")
oynalar[1, 0].boxplot(uylar["narx"])
oynalar[1, 0].set_title("Chetdagi qiymatlar")
oynalar[1, 1].bar(ortacha.index, ortacha.values)
oynalar[1, 1].set_title("Tumanlar bo'yicha")
oynalar[1, 1].tick_params(axis="x", rotation=45)
plt.tight_layout()
plt.show()
tight_layout() ni unutmangUsiz sarlavhalar va o'q nomlari bir-birining ustiga tushadi.
Seaborn - tezroq va chiroyliroq #
import seaborn as sns
sns.set_theme(style="whitegrid", palette="deep")
# Nuqtali + regressiya chizig'i
sns.lmplot(data=uylar, x="maydon", y="narx", hue="tuman", height=5)
# Taqsimot
sns.histplot(data=uylar, x="narx", kde=True, bins=30)
# Quti diagramma
sns.boxplot(data=uylar, x="tuman", y="narx")
# Skripka diagramma - taqsimot shaklini ham ko'rsatadi
sns.violinplot(data=uylar, x="xonalar", y="narx")
# Sanash
sns.countplot(data=uylar, x="tuman")
Korrelyatsiya issiqlik xaritasi #
Bu ML da eng ko'p ishlatiladigan grafik.
sonli = uylar.select_dtypes(include="number")
plt.figure(figsize=(8, 6))
sns.heatmap(
sonli.corr(),
annot=True, # raqamlarni yozish
fmt=".2f",
cmap="coolwarm",
center=0,
square=True,
linewidths=0.5,
)
plt.title("Belgilar orasidagi korrelyatsiya")
plt.tight_layout()
plt.show()
Juftliklar diagrammasi #
sns.pairplot(uylar, hue="toifa", diag_kind="kde", height=2.2)
plt.show()
Bu barcha belgi juftliklari uchun nuqtali diagramma chizadi.
pairplot sekin20 ta ustun = 400 ta grafik. Faqat eng muhim 5-6 tasini tanlang:
sns.pairplot(uylar[["maydon", "xonalar", "yosh", "narx"]])
Bo'sh qiymatlarni vizuallashtirish #
plt.figure(figsize=(10, 5))
sns.heatmap(uylar.isna(), cbar=False, cmap="viridis", yticklabels=False)
plt.title("Bo'sh qiymatlar xaritasi")
plt.show()
Bu grafikda bo'shliklarning naqshi ko'rinadi: agar ular bir joyda to'plangan bo'lsa - ma'lumot yig'ishda muammo bo'lgan.
Amaliy tahlil ketma-ketligi #
# 1. Umumiy ko'rinish
malumot.info()
malumot.describe()
# 2. Bo'sh qiymatlar
sns.heatmap(malumot.isna(), cbar=False)
# 3. Nishonning taqsimoti
sns.histplot(malumot["narx"], kde=True)
# 4. Korrelyatsiya
sns.heatmap(malumot.corr(numeric_only=True), annot=True, cmap="coolwarm")
# 5. Eng kuchli bog'liqliklarni chizish
sns.scatterplot(data=malumot, x="maydon", y="narx")
# 6. Chetdagi qiymatlar
sns.boxplot(data=malumot, y="narx")
# 7. Toifalar bo'yicha
sns.boxplot(data=malumot, x="tuman", y="narx")
Grafik saqlash #
plt.savefig("rasmlar/tahlil.png", dpi=150, bbox_inches="tight")
plt.savefig("rasmlar/tahlil.svg") # vektor - hujjat uchun
savefig ni show dan oldin chaqiringplt.show() dan keyin figura tozalanadi va saqlangan fayl bo'sh chiqadi.
Grafik yozish qoidalari #
| Qoida | Sabab |
|---|---|
| Sarlavha va o'q nomlari bo'lsin | O'quvchi kontekstsiz tushunmaydi |
| O'lchov birligini yozing | "Narx" emas, "Narx (mln so'm)" |
| Y o'qini noldan boshlang (ustunlar uchun) | Aks holda farq bo'rttiriladi |
| Ko'p rang ishlatmang | 5-6 rangdan ortig'i chalkashtiradi |
| 3D diagramma ishlatmang | Ular ma'lumotni buzib ko'rsatadi |
| Doiraviy diagrammadan qoching | Odam burchaklarni yomon solishtiradi |
| Rangga qo'shimcha belgi qo'shing | Rang ko'rmaydiganlar uchun |
- Uylar jadvali uchun
narxgistogrammasini chizing. - O'rtacha va mediana chiziqlarini qo'shing - taqsimot qaysi tomonga siljigan?
maydonvanarxuchun nuqtali diagramma chizing, rangnixonalarbilan bog'lang.- Tumanlar bo'yicha o'rtacha narx ustunli diagrammasini chizing.
- Quti diagramma bilan chetdagi qiymatlarni toping.
- Korrelyatsiya issiqlik xaritasini chizing.
pairplotbilan barcha sonli belgilarni solishtiring.- To'rtta grafikni bitta rasmda
subplotsbilan joylashtiring. - Grafikni PNG va SVG formatida saqlang.
- Anskomb kvartetini Python da yarating va chizing (ma'lumot
seaborn.load_dataset("anscombe")da bor).
Xulosa #
- Statistik ko'rsatkichlar bir xil bo'lgan ma'lumot butunlay boshqacha ko'rinishi mumkin - har doim chizing.
plt.plot,scatter,hist,bar,boxplot- asosiy grafik turlari.- Gistogramma taqsimot shaklini ko'rsatadi.
- Quti diagramma chetdagi qiymatlarni topishning eng tez yo'li.
- Seaborn kamroq kod bilan chiroyliroq natija beradi.
- Korrelyatsiya issiqlik xaritasi - ML da eng foydali grafik.
pairplotbarcha juftliklarni bir vaqtda ko'rsatadi, lekin sekin.tight_layout()vasavefigdan oldinshowqilmang.- Har bir grafikda sarlavha, o'q nomlari va o'lchov birligi bo'lsin.
Keyingi bo'limda ma'lumotni model uchun tayyorlashni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.