5-bo‘lim

Ma'lumotni vizuallashtirish

Matplotlib va Seaborn bilan grafiklar chizish, taqsimotni ko'rish va ma'lumotdagi muammolarni topish.

🕑 11 daqiqa o‘qish 📄 782 so‘z 👁 5 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Nima uchun grafik kerak?
  2. Matplotlib asoslari
  3. Asosiy grafik turlari
  4. Nuqtali diagramma
  5. Gistogramma
  6. Ustunli diagramma
  7. Quti diagramma
  8. Bir nechta grafik
  9. Seaborn - tezroq va chiroyliroq
  10. Korrelyatsiya issiqlik xaritasi
  11. Juftliklar diagrammasi
  12. Bo'sh qiymatlarni vizuallashtirish
  13. Amaliy tahlil ketma-ketligi
  14. Grafik saqlash
  15. Grafik yozish qoidalari
  16. Xulosa

Raqamlar jadvalidan ko'rinmaydigan narsalar grafikda bir zumda ko'zga tashlanadi. Vizuallashtirish - ma'lumotni tushunishning eng tez yo'li.

Nima uchun grafik kerak? #

Anskomb kvarteti

1973-yilda statistik Frensis Anskomb to'rtta ma'lumotlar to'plamini tuzdi. Ularning barcha statistik ko'rsatkichlari bir xil:

Ko'rsatkichQiymat
x ning o'rtachasi9.0
y ning o'rtachasi7.5
Korrelyatsiya0.816
Regressiya chizig'iy = 3 + 0.5x

Lekin ular chizilganda butunlay boshqacha ko'rinadi.

I - oddiy II - egri III - bitta chetdagi IV - vertikal Barcha to'rttasida statistik ko'rsatkichlar bir xil Faqat grafik haqiqiy tuzilmani ko'rsatadi
Ma'lumotni chizmasdan turib unga ishonmang

Matplotlib asoslari #

Python
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()
ElementNima 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
Har doim o'q nomlarini yozing

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.

Python
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.

Python
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()
Gistogramma taqsimot shaklini ko'rsatadi Normal bo'y, IQ, o'lchov xatosi O'ngga siljigan daromad, narx, shahar aholisi Ikki cho'qqili ikki guruh aralashgan Taqsimot nima aytadi? • O'ngga siljigan: o'rtacha medianadan katta - modelga log almashtirish foydali bo'lishi mumkin • Ikki cho'qqili: ma'lumotda ikkita turli guruh bor - ularni ajratish kerak bo'lishi mumkin • Uzun dum: chetdagi qiymatlar bor - ularni alohida tekshiring
Taqsimot shakli keyingi qadamni belgilaydi

Ustunli diagramma #

Python
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()
Ko'p toifa bo'lsa gorizontal ishlating

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.

Python
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()
Quti diagramma qanday o'qiladi Chetdagi qiymat (outlier) Yuqori chegara 75-protsentil (Q3) Mediana (Q2) 25-protsentil (Q1) Quyi chegara Chetdagi qiymat Quti ma'lumotning 50 foizi
Chegaralar: Q1 - 1.5×IQR va Q3 + 1.5×IQR

Bir nechta grafik #

Python
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 unutmang

Usiz sarlavhalar va o'q nomlari bir-birining ustiga tushadi.

Seaborn - tezroq va chiroyliroq #

Python
import seaborn as sns

sns.set_theme(style="whitegrid", palette="deep")
Python
# 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.

Python
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()
Korrelyatsiya issiqlik xaritasi maydon xonalar yosh narx maydon xonalar yosh narx 1.00 0.96 -0.85 0.99 0.96 1.00 -0.78 0.95 -0.85 -0.78 1.00 -0.87 0.99 0.95 -0.87 1.00 +1.0 0.0 -1.0 Qizil - to'g'ri bog'liqlik · Ko'k - teskari bog'liqlik narx bilan eng kuchli bog'langan belgi: maydon (0.99)
Nishon bilan kuchli bog'langan belgilarni darhol ko'rasiz

Juftliklar diagrammasi #

Python
sns.pairplot(uylar, hue="toifa", diag_kind="kde", height=2.2)
plt.show()

Bu barcha belgi juftliklari uchun nuqtali diagramma chizadi.

Ko'p ustunda pairplot sekin

20 ta ustun = 400 ta grafik. Faqat eng muhim 5-6 tasini tanlang:

Python
sns.pairplot(uylar[["maydon", "xonalar", "yosh", "narx"]])

Bo'sh qiymatlarni vizuallashtirish #

Python
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 #

Yangi ma'lumotni tahlil qilish tartibi
Python
# 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 #

Python
plt.savefig("rasmlar/tahlil.png", dpi=150, bbox_inches="tight")
plt.savefig("rasmlar/tahlil.svg")     # vektor - hujjat uchun
savefig ni show dan oldin chaqiring

plt.show() dan keyin figura tozalanadi va saqlangan fayl bo'sh chiqadi.

Grafik yozish qoidalari #

Yaxshi grafik
QoidaSabab
Sarlavha va o'q nomlari bo'lsinO'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 ishlatmang5-6 rangdan ortig'i chalkashtiradi
3D diagramma ishlatmangUlar ma'lumotni buzib ko'rsatadi
Doiraviy diagrammadan qochingOdam burchaklarni yomon solishtiradi
Rangga qo'shimcha belgi qo'shingRang ko'rmaydiganlar uchun
Amaliy topshiriq
  1. Uylar jadvali uchun narx gistogrammasini chizing.
  2. O'rtacha va mediana chiziqlarini qo'shing - taqsimot qaysi tomonga siljigan?
  3. maydon va narx uchun nuqtali diagramma chizing, rangni xonalar bilan bog'lang.
  4. Tumanlar bo'yicha o'rtacha narx ustunli diagrammasini chizing.
  5. Quti diagramma bilan chetdagi qiymatlarni toping.
  6. Korrelyatsiya issiqlik xaritasini chizing.
  7. pairplot bilan barcha sonli belgilarni solishtiring.
  8. To'rtta grafikni bitta rasmda subplots bilan joylashtiring.
  9. Grafikni PNG va SVG formatida saqlang.
  10. 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.
  • pairplot barcha juftliklarni bir vaqtda ko'rsatadi, lekin sekin.
  • tight_layout() va savefig dan oldin show qilmang.
  • Har bir grafikda sarlavha, o'q nomlari va o'lchov birligi bo'lsin.

Keyingi bo'limda ma'lumotni model uchun tayyorlashni o'rganamiz.

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.