Asosiy qismga o'tish

Categorical plot lar

17-bob 37 kod bloki 6782 so'z

Categorical plot — bu bir o'qida diskret guruh lar (hafta kunlari, passenger class, penguin species, smoker va non-smoker), ikkinchi o'qida esa son turadigan har qanday chart. 16-bob bitta numeric o'zgaruvchi ning distribution i haqida edi. Bu bob esa amalda ancha ko'p uchraydigan savolga bag'ishlangan: bu son guruh lar bo'yicha qanday farq qiladi?

Seaborn da bu oilaga tegishli to'qqizta function bor. Ularning hammasi bir xil asosiy argument larni oladi (data, x, y, hue, order) va faqat guruh distribution ining qanchalik qismini ko'rsatishi bilan farq qiladi. Butun bob aslida bitta murosaga qurilgan: har bir guruh uchun qancha tafsilot ko'rsatasiz va bu usul qancha row ga bardosh bera oladi?

ASOSIY G'OYAHar bir categorical plot guruh bo'yicha distribution ni umumlashtiradi. Function lar umumlashtirish darajasi bilan farq qiladi: barplot bitta son ko'rsatadi, boxplot beshta son, violinplot butun shaklni, swarmplot esa har bitta row ni.

Seaborn bularni uchta kichik oilaga ajratadi:

Oila Function lar Nimani ko'rsatadi
Categorical scatter stripplot, swarmplot Har bir kuzatuvni alohida nuqta sifatida
Categorical distribution boxplot, violinplot, boxenplot Har bir guruh ning shakli va tarqalishini
Categorical estimate barplot, pointplot, countplot Har bir guruh uchun bitta statistika va uning noaniqligini

To'qqizta function ning hammasi axes-level, faqat catplot bundan mustasno — u hammasining ustidagi figure-level o'ram. Bu farq muhim va quyidagi uz-catplot bo'limida yoritilgan.

Bu bobdagi har bir misol uchun ishlatiladigan tayyorgarlik:

python9 qator
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

sns.set_theme(style="whitegrid")

tips = sns.load_dataset("tips")
titanic = sns.load_dataset("titanic")
penguins = sns.load_dataset("penguins")
📌 Dataset lar

tips — 244 ta restoran hisobi, unda total_bill, tip, sex, smoker, day, time, size bor. titanic — 891 ta yo'lovchi, unda survived, pclass, sex, age, fare, class, embark_town, alive bor. penguins — 344 ta qush, unda species, island, bill_length_mm, flipper_length_mm, body_mass_g, sex bor. Ular kichik, toza va internetdagi deyarli har bir seaborn javobi shular asosida yozilgan, shuning uchun ularni yodda saqlashga arziydi.

17.1 countplot — row larni sanash

sns.countplot() aynan bitta savolga javob beradi: har bir category da nechta row bor? Bu — chastota lar ning bar chart i. U x yoki y ni oladi, hech qachon ikkalasini birdan emas, chunki ikkinchi o'q har doim seaborn o'zi hisoblaydigan count bo'ladi.

python3 qator
# har bir class da nechta yo'lovchi bor?
sns.countplot(data=titanic, x="class")
plt.show()

countplot row larni sanaydi. Boshqa hech narsa emas. U histogram ning categorical ekvivalenti.

Ichkarida bu titanic["class"].value_counts() ni bar shaklida chizishga teng. Hech narsa baholanmaydi, hech narsa o'rtachalanmaydi — bu sof sanash.

Uzun label lar uchun gorizontal bar lar

Agar category nomlari uzun bo'lsa, categorical o'zgaruvchini x emas, y ga bering. Bu shunchaki chiroyli ko'rinish uchun emas; burilgan x-label larni o'qish haqiqatan ham qiyin.

python2 qator
sns.countplot(data=titanic, y="embark_town")
plt.show()

Count larni ikkinchi o'zgaruvchi bo'yicha bo'lish

hue har bir category ni kichik qismlarga ajratadi. Standart holatda kichik bar lar yonma-yon joylashadi (dodge qilinadi).

python7 qator
# har bir passenger class ichidagi omon qolganlar soni
sns.countplot(data=titanic, x="class", hue="survived")
plt.show()

# yonma-yon emas, ustma-ust (seaborn 0.13+)
sns.histplot(data=titanic, x="class", hue="survived", multiple="stack", shrink=.8)
plt.show()
💡 Count lar va nisbat lar

Dodge qilingan countplot mutlaq son larni taqqoslaydi, guruh lar hajmi keskin farq qilganda esa bu chalg'itadi. Uchinchi class da birinchi class ga qaraganda ancha ko'p yo'lovchi bo'lgan, shuning uchun uning omon qolganlar bar i katta ko'rinishi mumkin, garchi omon qolish darajasi juda past bo'lsa ham. Daraja larni taqqoslash uchun yo stat="percent" ni multiple="fill" bilan ishlating, yo — bu yaxshiroq — 0/1 qiymatli survived column ining barplot ini chizing, chunki uning o'rtachasi aynan omon qolish darajasi hisoblanadi. Keyingi bo'limga qarang.

Bar larga son yozish

O'quvchi lar deyarli har doim son ni bar ustiga yozishni xohlaydi. Matplotlib 3.4+ da bu bitta qator, seaborn esa qaytargan Axes orqali bar container larini ochib beradi.

python4 qator
ax = sns.countplot(data=titanic, x="class")
for container in ax.containers:
    ax.bar_label(container)
plt.show()

17.2 barplot — va bar balandligi aslida nimani anglatadi

Bu — seaborn dagi eng ko'p noto'g'ri tushuniladigan function, shuning uchun bu bo'limni ikki marta o'qing.

MUHIMSeaborn dagi barplot bar i count EMAS. Uning balandligi — shu category ichidagi y ning o'rtachasi, ustidagi qora chiziq esa — o'sha o'rtacha uchun 95% confidence interval. Row larni sanaydigan function — bu countplot.
python3 qator
# bar balandligi = har bir kun uchun O'RTACHA total_bill, hisoblar soni emas
sns.barplot(data=tips, x="day", y="total_bill")
plt.show()

Seaborn dagi eng ko‘p uchraydigan tushunmovchilik. Chapda row lar sanaladi; o‘ngda esa total_bill ning o‘rtachasi confidence interval bilan ko‘rsatilgan. Kategoriyalar bir xil, miqdor esa butunlay boshqa.

Excel da va ko'pchilik biznes dashboard larida bar chart yig'indi yoki count ni ko'rsatadi. Seaborn bu odatni ataylab buzadi: u bar ni statistik baho deb qaraydi. Agar seaborn ga xom, aggregation qilinmagan row larni berib, yig'indi kutsangiz, chart ingizdagi har bir son noto'g'ri bo'ladi — va u mutlaqo ishonchli ko'rinadi, shuning uchun ham bu xato taqdimot larga qadar yetib boradi.

Uchta harakatlanuvchi qism

Argument Standart qiymat Ma'nosi
estimator "mean" Har bir guruh ni bitta songa keltiradigan function. String qabul qiladi ("mean", "median", "sum", "count", "max") yoki np.median, len kabi istalgan callable ni.
errorbar ("ci", 95) Vertikal chiziq nimani bildirishi. Variant lar: ("ci", 95), "sd", ("se", 1), ("pi", 95), None yoki callable.
n_boot 1000 CI ni qurish uchun ishlatiladigan bootstrap qayta tanlash lar soni. Katta dataset larda tezlashtirish uchun kamaytiring.
python8 qator
# mean o'rniga median, CI o'rniga standart chetlanish
sns.barplot(data=tips, x="day", y="total_bill",
            estimator="median", errorbar="sd")
plt.show()

# error bar larni butunlay o'chirish
sns.barplot(data=tips, x="day", y="total_bill", errorbar=None)
plt.show()
⚠️ `ci=` endi ishlamaydi

v0.12 dan oldin siz ci=95, ci="sd" yoki ci=None deb yozardingiz. v0.12 dan boshlab bu parametr deprecated bo'ldi, hozirgi versiya larda esa umuman olib tashlangan. errorbar= ni ishlating. Qiymat shakllari ham farq qilishiga e'tibor bering: eski ci=95 — errorbar=("ci", 95), eski ci="sd" — errorbar="sd", eski ci=None — errorbar=None. 2022-yildan oldingi darslik lar sizga sezdirmasdan o'lik API ni o'rgatadi.

Confidence interval qayerdan keladi

Seaborn darslikdagi t-formula ni ishlatmaydi. U bootstrap qiladi: har bir guruh ning row larini qaytarish bilan n_boot marta qayta tanlaydi, har bir qayta tanlashda estimator ni hisoblaydi va o'sha 1000 ta baho ning 2.5- va 97.5-percentile larini oladi. Shuning uchun interval mukammal simmetrik emas, shuning uchun u har safar ishga tushirilganda biroz o'zgaradi va shuning uchun o'quv materiali takrorlanadigan bo'lishi uchun uni seed=0 bilan qotirib qo'yish mumkin.

python2 qator
sns.barplot(data=tips, x="day", y="total_bill", seed=0)
plt.show()
📌 CI — bu SD emas

95% CI o'rtacha haqidagi noaniqlikni tasvirlaydi va n o'sgani sari qisqaradi. Standart chetlanish esa ma'lumot ning tarqalishini tasvirlaydi va qisqarmaydi. 244 ta tips row i bilan CI bar lari kalta chiqadi va odamlar noto'g'ri xulosa qiladi: "ma'lumot zich to'plangan ekan". Aslida unday emas — faqat o'rtacha ning bahosi aniq, xolos. Agar o'quvchingiz uchun tarqalish muhim bo'lsa, errorbar="sd" ni ishlating yoki bar lardan voz kechib, boxplot ga o'ting.

0/1 hiylasi: aslida nisbat bo'lgan o'rtachalar

y 0/1 ko'rsatkichi bo'lganda uning o'rtachasi aynan nisbat bo'ladi. Bu — daraja larni chizish ning eng toza usuli.

python4 qator
# survived (0/1) ning o'rtachasi = har bir class uchun omon qolish DARAJASI
sns.barplot(data=titanic, x="class", y="survived", errorbar=("ci", 95))
plt.ylabel("survival rate")
plt.show()

Bar lar taxminan 0.63, 0.47 va 0.24 atrofida chiqadi — bu dodge qilingan countplot bera olmaydigan halol daraja taqqoslash.

Rang, hue va palette qoidasi

python8 qator
# to'g'ri: rang haqiqiy o'zgaruvchini kodlaydi
sns.barplot(data=tips, x="day", y="total_bill", hue="sex")
plt.show()

# bezak uchun rang: hue x ni takrorlashi va legend o'chirilishi kerak
sns.barplot(data=tips, x="day", y="total_bill",
            hue="day", palette="viridis", legend=False)
plt.show()
⚠️ `hue=` siz yolg'iz `palette=`

Seaborn 0.13+ da sns.barplot(data=tips, x="day", y="total_bill", palette="viridis") deb yozish FutureWarning chiqaradi: hue o'zgaruvchisisiz rang berish deprecated hisoblanadi. Yechim — yuqoridagi pattern: hue ni x bilan bir xil column ga tenglang va legend=False bering. Bu boxplot, violinplot, countplot va oilaning qolgan a'zolariga ham tegishli.

Oldindan aggregation qilingan ma'lumot

Agar DataFrame ingizda har bir category uchun bitta row bo'lsa, bitta qiymat ning o'rtachasi o'sha qiymat ning o'zi bo'ladi, shuning uchun barplot baribir ishlaydi — bootstrap qiladigan narsa yo'q, demak error bar ham chiqmaydi. Uning yo'qligi siz xom row larni emas, tayyor umumlashmalarni chizayotganingizni bildiruvchi foydali signal.

python3 qator
summary = tips.groupby("day", observed=True)["total_bill"].sum().reset_index()
sns.barplot(data=summary, x="day", y="total_bill")   # haqiqiy yig'indilar, CI yo'q
plt.show()

17.3 boxplot va besh sonli umumlashma

Boxplot distribution ni beshta son va outlier larga siqadi. 1970-yillarda John Tukey tomonidan o'ylab topilgan bu plot bir o'q ustida ko'plab guruh ning tarqalishi va qiyshiqligini taqqoslash ning hamon eng tez usuli.

python2 qator
sns.boxplot(data=tips, x="day", y="total_bill")
plt.show()

Boxplot ning har bir qismi belgilangan. Quti — data ning o‘rtadagi 50% i; whisker lar 1.5×IQR gacha yetadi; undan tashqaridagi hamma narsa alohida nuqta bo‘lib chiziladi.

Tuzilishi

o o <- outlier lar: whisker lardan tashqaridagi nuqtalar | | <- yuqori whisker: Q3 + 1.5IQR dan katta | bo'lmagan eng katta kuzatilgan qiymat | | | | <- Q3 (75-percentile), box ning yuqori qirrasi |=====| <- MEDIAN (Q2, 50-percentile) | | |_____| <- Q1 (25-percentile), box ning pastki qirrasi | | <- pastki whisker: Q1 - 1.5IQR dan kichik | bo'lmagan eng kichik kuzatilgan qiymat o <- outlier

box balandligi = IQR = Q3 - Q1 (ma'lumot ning o'rta 50% i) whisker uzunligi = har bir hinge dan ko'pi bilan 1.5 * IQR whisker to'xtaydi = shu oraliq ichidagi oxirgi HAQIQIY nuqtada, nazariy fence ning o'zida emas

QismStatistikaQanday o'qiladi

Box ichidagi chiziqMedian (Q2)Tipik qiymat; mean dan farqli o'laroq outlier larga chidamli Box ning pastiQ1, 25-percentileQiymat larning 25% i shundan past Box ning tepasiQ3, 75-percentileQiymat larning 75% i shundan past Box balandligiIQR = Q3 − Q1Ma'lumot ning o'rta yarmi qanchalik tarqalgani Whisker larHinge dan 1.5×IQR ichidagi eng uzoq nuqta"Odatiy" qiymat larning amaliy diapazoni Alohida nuqtalarWhisker lardan tashqaridaOutlier ga nomzod lar — nomzod, hukm emas Median markazda emas—Qiyshiqlik. Median pastga yaqin bo'lsa = o'ngga qiyshiq

📌 Nega 1.5?

Tukey 1.5 ni kelishuv asosida tanlagan, matematik keltirib chiqarish orqali emas. Mukammal normal ma'lumot uchun fence lar taxminan ±2.7 standart chetlanishda joylashadi, ya'ni tasodifan nuqtalarning taxminan 0.7% i outlier deb belgilanadi. Daromad yoki fare kabi qiyshiq ma'lumot da esa ancha ko'pi belgilanadi — bu distribution ning qiyshiqligi, ma'lumot ning ifloshligi emas. Ko'paytuvchini whis= bilan o'zgartiring: whis=3.0 qattiqroq, whis=(0, 100) esa whisker larni to'liq min–max diapazonga cho'zadi va umuman outlier ko'rsatmaydi.

python7 qator
# to'liq diapazonli whisker lar: hech bir nuqta outlier deb belgilanmaydi
sns.boxplot(data=titanic, x="class", y="fare", whis=(0, 100))
plt.show()

# median chizig'i yonida mean ni marker sifatida ko'rsatish
sns.boxplot(data=tips, x="day", y="total_bill", showmeans=True)
plt.show()

Guruhlash va yo'nalish

python6 qator
sns.boxplot(data=tips, x="day", y="total_bill", hue="smoker")
plt.show()

# gorizontal: x da son, y da category lar
sns.boxplot(data=penguins, x="body_mass_g", y="species")
plt.show()

Boxplot + nuqtalar: standart professional birikma

Boxplot n ni ham, multimodallikni ham yashiradi. Xom nuqtalarni ustiga qo'yish ikkalasini ham hal qiladi va bu — intervyu oluvchilar ko'rishni yoqtiradigan qatlamli pattern.

python5 qator
ax = sns.boxplot(data=tips, x="day", y="total_bill",
                 showfliers=False, boxprops={"alpha": 0.5})
sns.stripplot(data=tips, x="day", y="total_bill",
              color="black", size=3, jitter=0.2, ax=ax)
plt.show()

Bu yerda showfliers=False muhim: usiz outlier lar ikki marta chiziladi — bir marta box tomonidan, bir marta strip tomonidan — va o'quvchi ularni alohida kuzatuv deb sanaydi.

17.4 violinplot va boxenplot

Violin plot lar

Violin — bu har bir category uchun bittadan chiziladigan, vertikal o'q atrofida ko'zgu qilingan KDE (kernel density estimate). Violin qayerda keng bo'lsa, o'sha qiymat atrofida ko'p kuzatuv joylashgan. U boxplot joylashuv haqida ko'rsatadigan hamma narsani ko'rsatadi, ustiga boxplot tashlab yuboradigan shakl ni ham qo'shadi.

python2 qator
sns.violinplot(data=tips, x="day", y="total_bill")
plt.show()

Nega boxplot yolg‘on gapirishi mumkin. Bu ikki guruhning median va kvartillari deyarli bir xil, shuning uchun boxplot lar mos tushadi — lekin biri ikkita alohida klaster, ikkinchisi esa bitta cho‘qqi. Buni faqat violin ko‘rsatadi.

Standart holatda seaborn har bir violin ichiga kichkina boxplot chizadi. Buni inner= boshqaradi:

inner= Nima chizadi Qachon ishlatiladi
"box" (standart) Mini boxplot: median nuqtasi, IQR chizig'i Umumiy maqsad uchun
"quart" Q1, median va Q3 da punktir chiziqlar Quartile lar o'qilsin, lekin ko'zga urilmasin desangiz
"point" / "stick" Har bir kuzatuv uchun bitta chiziqcha Kichik n; tanlama hajmini halol ko'rsatadi
None Faqat shakl Ko'p guruh bo'lganda; maksimal soddalik uchun

split=True — ikki tomonlama violin

Aynan ikkita hue darajasi bo'lganda split=True har bir guruhni bitta violin ning bir yarmiga joylaydi. Bu kerakli gorizontal joyni ikki barobar kamaytiradi va ikkala distribution ni umumiy asosga qo'yadi, natijada farqni baholash ancha oson bo'ladi.

python3 qator
sns.violinplot(data=tips, x="day", y="total_bill",
               hue="smoker", split=True, inner="quart")
plt.show()

cut parametri

⚠️ Violin lar mavjud bo'lmagan ma'lumotni o'ylab topadi

KDE silliq bo'lgani uchun u eng kichik va eng katta kuzatilgan qiymat lardan tashqariga chiqib ketadi. cut qanchalik uzoqqa chiqishini bandwidth birligida boshqaradi va standart qiymati 2. titanic["age"] da bu bemalol 0 yoshdan pastda ham density chizadi. Count, davomiylik yoki foiz uchun bu ma'nosiz. Density ni kuzatilgan ma'lumot diapazoni bilan cheklash uchun cut=0 qo'ying.

python2 qator
sns.violinplot(data=titanic, x="class", y="age", cut=0)
plt.show()

Bilishga arziydigan boshqa sozlamalar: bw_adjust (>1 silliqroq, <1 o'tkirroq — kdeplot dagi bilan bir xil ma'noda), density_norm="width"|"area"|"count" (v0.12 va undan oldingi versiya larda bu scale= edi) va common_norm.

python4 qator
# violin KENGLIGI ni guruh hajmiga proporsional qilish — violin lar odatda
# yashiradigan n ma'lumotini qaytaradi
sns.violinplot(data=tips, x="day", y="total_bill", density_norm="count")
plt.show()

boxenplot — letter-value plot

sns.boxenplot() (Hofmann, Wickham va Kafadar ning "letter-value plot" i) — katta n uchun mo'ljallangan boxplot. U quartile larda to'xtab qolmaydi, balki dumlarni bo'lishda davom etadi: avval median, keyin quartile lar, keyin sakkizdan bir lar, o'n oltidan bir lar va hokazo uchun box lar chizadi, har bir box oldingisidan torroq bo'ladi. Natijada dumlarni "outlier" bulutiga tashlab yubormasdan, ularni batafsil tasvirlaydigan zinapoya hosil bo'ladi.

python2 qator
sns.boxenplot(data=titanic, x="class", y="fare")
plt.show()
🧩 Uchtasi uchun fikriy model

Shahar binolarini tasvirlashni tasavvur qiling. Boxplot sizga o'rtadagi bino ning balandligini va osmon chizig'ining o'rta yarmini aytadi. Violin butun osmon chizig'ining siluetini ko'rsatadi. Boxen plot esa eng baland bir nechta binoni "g'ayrioddiy" deb chetga surib qo'yish o'rniga ularga qayta-qayta yaqinlashib boradigan boxplot — bu esa faqat tasvirlanadigan bino lar mingtalab bo'lgandagina o'zini oqlaydi.

⚠️ Boxplot ikkinchi cho'qqini butunlay yashira oladi

Qiymat lari 20 va 80 atrofida to'plangan, orasida esa hech narsa yo'q guruhni oling. Uning median i 50, quartile lari odatiy ko'rinadi va boxplot da hech qanday g'alati narsa sezilmaydi — vaholanki haqiqat shuki, hech bir kuzatuv median ga yaqin ham emas. Bu — klassik "bir nechta butunlay boshqacha distribution, bitta bir xil boxplot" namoyishi: uniform, bimodal, normal va qiyshiq tanlama larni bir xil besh sonli umumlashmaga ega bo'ladigan qilib tuzish mumkin. Violin, strip qatlami yoki histogram farqni bir zumda ochib beradi. Notanish o'zgaruvchi ning boxplot ini uning distribution iga boshqa usulda qaramasdan turib hech qachon taqdim qilmang.

17.5 stripplot va swarmplot

Bu ikkitasi har bitta kuzatuvni chizadi. Hech qanday umumlashma, hech qanday baholash yo'q. Ular eng halol categorical plot lar va ayni paytda eng kam masshtablanadiganlari.

stripplot

Bu — categorical o'qga ega scatterplot. Guruh dagi har bir nuqta bitta x-koordinatani baham ko'rgani uchun nuqtalar aynan ustma-ust tushib qolardi, shuning uchun seaborn tasodifiy gorizontal jitter qo'shadi (standart True, category kengligining taxminan 0.1 qismi).

python6 qator
sns.stripplot(data=tips, x="day", y="total_bill", jitter=0.25, alpha=0.6)
plt.show()

# jitter=False: aniq tekislanish, kuchli ustma-ust tushish
sns.stripplot(data=tips, x="day", y="total_bill", jitter=False)
plt.show()

Ikkalasi ham har bir kuzatuvni ko‘rsatadi. swarmplot nuqtalarni ustma-ust tushmaydigan qilib joylashtiradi — kichik data da ajoyib, lekin data kattalashganda ogohlantirish berib nuqtalarni tashlab ketadi.

Jitter faqat gorizontal o'qdagi bezak — vertikal joylashuv esa har doim haqiqiy qiymat. O'quvchi nuqta ning chapga yoki o'ngga siljishidan ma'no izlashiga hech qachon yo'l qo'ymang.

swarmplot

sns.swarmplot() ("beeswarm") xuddi shu ustma-ust tushish muammosini determinlashgan tarzda hal qiladi: u nuqtalarni bir-birining ustiga tushmaydigan darajada yon tomonga suradigan layout algoritmini ishlatadi. Hosil bo'lgan kontur ning o'zi density baholovchi bo'lib xizmat qiladi va bunda hech qanday tasodifiylik yo'q, shuning uchun plot takrorlanadigan bo'ladi.

python2 qator
sns.swarmplot(data=penguins, x="species", y="body_mass_g", hue="sex")
plt.show()
⚠️ "Nuqtalarning X% ini joylashtirib bo'lmadi"

Swarm algoritmiga gorizontal joy kerak. Har bir category da taxminan 500–1000 nuqtadan oshganda — yoki figure tor bo'lganda — joy tugaydi va u UserWarning: X% of the points cannot be placed; you may want to decrease the size of the markers or use stripplot. ogohlantirishini chiqaradi. O'sha nuqtalar sezdirmasdan siljitiladi yoki yashiriladi, demak chart endi ma'lumot ni aks ettirmaydi. Yechim lar, afzallik tartibida: alpha bilan stripplot ni ishlating, violinplot ga o'ting, tasodifiy tanlama chizing, figure ni kengaytiring yoki size= ni kichraytiring. Bu ogohlantirishni chiqargan chart ni hech qachon ishlatmang.

Qatlamlash pattern lari

python6 qator
# violin + swarm: shakl va har bir kuzatuv birga
ax = sns.violinplot(data=penguins, x="species", y="body_mass_g",
                    inner=None, cut=0, color="lightgray")
sns.swarmplot(data=penguins, x="species", y="body_mass_g",
              size=3, ax=ax)
plt.show()

Qaror jadvali: qaysi categorical plot va qanday n da?

Javob izlayotgan savolingizPlotHar bir guruhda nechta row ga chidaydiIzoh

Har bir guruhda nechta row bor?countplotIstalganchaOiladagi yagona sanovchi Har bir guruhda o'rtacha qancha? Farq ishonchlimi?barplotIstalgancha (CI uchun >1 kerak)Bar = mean, count emas. Asos 0 dan boshlanishi shart Har bir qiymat, hech narsa yashirilmaganswarmplot< ~500Determinlashgan; undan oshsa ogohlantiradi va nuqtalarni tashlab yuboradi Har bir qiymat, ancha katta ma'lumotstripplot + alpha~50 – 5,000Jitter tasodifiy; ustma-ust tushish baribir bo'lishi mumkin Ko'p guruh bo'yicha tarqalish va qiyshiqlikni taqqoslashboxplot~20 – 100,000+Quartile lar ma'noli bo'lishi uchun har bir guruhda ~20+ kerak Distribution bimodalmi yoki g'alati shakldami?violinplot~50 – 100,000+cut=0 qo'ying; kichik guruh larda chalg'itadi Katta dataset ning dumlarini tasvirlashboxenplot> ~10,000Kichik tanlama larda behuda Tartiblangan omil bo'yicha o'rtachalar trendini taqqoslashpointplotIstalganchaFaqat x-o'qi da haqiqiy tartib bo'lganda Yuqoridagilarning istalganini panel larga bo'lishcatplot(kind=...)IstalganchaFigure-level; FacetGrid qaytaradi

💡 Tanlama hajmi bo'yicha amaliy qoida

Har bir guruhda ~10 tadan kam kuzatuv bo'lsa, umuman umumlashtirmang — nuqtalarni chizing. 6 ta sondan hisoblangan quartile lar — statistika libosidagi shovqin, 6 ta songa moslangan violin esa yo'qdan yasalgan silliq egri chiziq.

17.6 pointplot

sns.pointplot() barplot bilan bir xil bahoni hisoblaydi — standart holatda mean va bootstrap qilingan 95% CI — lekin bar o'rniga error bar li nuqta chizadi va har bir hue darajasi ning nuqtalarini chiziq bilan bog'laydi.

python3 qator
sns.pointplot(data=tips, x="day", y="total_bill", hue="sex",
              errorbar=("ci", 95), dodge=True)
plt.show()

Uni alohida function sifatida saqlashga arziydigan ikkita sabab bor:

  • Bog'lanadigan bar maydoni yo'q. Bar chart nol dan boshlanishi kerak, aks holda vizual uzunlik yolg'on gapiradi. Pointplot faqat joylashuvni kodlaydi, shuning uchun y-o'q ni farq lar joylashgan sohaga yaqinlashtirishingiz mumkin. Kichik, ammo haqiqiy effekt lar aynan shunday halol ko'rsatiladi.
  • Bog'lovchi chiziq interaction ni ko'rinadigan qiladi. Parallel chiziqlar hue ning effekti x ning har bir darajasida bir xilligini bildiradi. Kesishuvchi yoki yaqinlashuvchi chiziqlar esa interaction borligini bildiradi — psixologiya va biologiya maqolalarida faktorli dizayn lar uchun pointplot ishlatilishining klassik sababi shu.
python4 qator
# klassik interaction plot: kun effekti kunning vaqtiga qarab farq qiladimi?
sns.pointplot(data=tips, x="day", y="tip", hue="time",
              dodge=0.3, markers=["o", "s"], linestyles=["-", "--"])
plt.show()

dodge=True (yoki float siljish) muhim: usiz hue darajalari bir xil x pozitsiyasida turadi va ularning error bar lari o'qib bo'lmaydigan bo'lib chalkashadi.

⚠️ Chiziq mavjud bo'lmagan trendni tasavvur qildiradi

"Thur" va "Fri" orasidagi chiziq uzluksizlikni — ular orasida ma'noli biror narsa borligini — anglatadi. island, embark_town yoki species kabi tartiblanmagan category lar uchun bu noto'g'ri, lekin o'quvchi baribir trend ko'radi. Pointplot ni faqat x haqiqiy tartibga ega bo'lganda ishlating (kun, class, doza, oy, yosh guruhi), yoki faqat interval li yalang'och nuqtalarni olish uchun linestyle="none" bering.

python3 qator
# nuqtalar va CI lar, chalg'ituvchi bog'lovchi chiziqsiz
sns.pointplot(data=penguins, x="species", y="body_mass_g", linestyle="none")
plt.show()
📌 Nom larning o'zgarishi

Seaborn 0.13 da pointplot ning join=False parametri linestyle="none" bilan, scale= esa markersize= / linewidth= bilan almashtirildi. Stack Overflow dagi eski javob lar olib tashlangan nom larni ishlatadi.

17.7 catplot — figure-level interfeys

Shu paytgacha ko'rilgan har bir function axes-level: u bitta matplotlib Axes ga chizadi va o'sha Axes ni qaytaradi. sns.catplot() esa figure-level: u butun bir figure ni yaratadi va egallaydi, ma'lumot ni panel lar to'riga bo'la oladi hamda FacetGrid obyektini qaytaradi.

python3 qator
# kind= to'qqizta chizuvchi function dan qaysi biri ishlatilishini tanlaydi
sns.catplot(data=tips, x="day", y="total_bill", kind="box")
plt.show()

catplot(kind=...) — barcha categorical plot larga figure-level eshik. kind ni "violin", "bar" yoki "swarm" ga o‘zgartiring, qolgan hamma narsa o‘sha-o‘sha qoladi.

kind=Nimani chaqiradi

"strip" (standart)stripplot "swarm"``swarmplot "box"``boxplot "violin"``violinplot "boxen"``boxenplot "point"``pointplot "bar"``barplot "count"``countplot (faqat x yoki faqat y bering)

Asosdagi function qabul qiladigan istalgan keyword ni to'g'ridan-to'g'ri catplot orqali uzatish mumkin.

Uning mavjudlik sababi: faceting

python9 qator
# har bir lunch/dinner uchun bitta panel (column), har bir sex uchun bitta (row)
g = sns.catplot(
    data=tips, x="day", y="total_bill",
    kind="box", col="time", row="sex",
    height=3.5, aspect=1.2, sharey=True,
)
g.figure.suptitle("Bill by day, split by meal and customer sex", y=1.02)
g.set_axis_labels("Day of week", "Total bill (USD)")
plt.show()
⚠️ `catplot` da `plt.title()` noto'g'ri ish qiladi

plt.title() joriy axes ni nishonga oladi, facet qilingan to'r da esa bu — oxirgi chizilgan panel, shuning uchun sarlavhangiz pastki o'ng paneldagi bo'lib qoladi. Figure sarlavhasi uchun g.figure.suptitle("...") ni, har bir panel sarlavhasini boshqarish uchun esa g.set_titles("{col_name}") ni ishlating. Xuddi shu narsa plt.xlabel() ga ham tegishli: g.set_axis_labels(x, y) ni ishlating. Shuni ham unutmang, catplot ax= ni e'tiborsiz qoldiradi — agar mavjud subplot ichida plot kerak bo'lsa, axes-level function ni chaqiring.

Jihat Axes-level (boxplot) Figure-level (catplot)
Nima qaytaradi matplotlib.axes.Axes seaborn.FacetGrid
ax= ni qabul qiladimi Ha Yo'q
col/row orqali faceting Yo'q Ha
Figure o'lchami plt.figure(figsize=...) Har bir panel uchun height= va aspect=
Legend Axes ichida To'r tashqarisida, to'r tomonidan boshqariladi
Boshqa plot lar bilan birlashtirish Oson — bir xil ax ni bering Noqulay; g.map_dataframe() ni ishlating
💡 Ular orasidan tanlash

O'zingiz boshqaradigan boshqa panel lar yonida turishi kerak bo'lgan bitta panel: axes-level. Guruhlovchi o'zgaruvchi bo'yicha takrorlanishi kerak bo'lgan mustaqil figure: figure-level. Erta qaror qilish qayta yozishdan qutqaradi, chunki ikkalasini oxirgi daqiqada bir-biriga almashtirib bo'lmaydi.

17.8 Category tartibini boshqarish

Standart holatda seaborn category larni object dtype li column lar uchun birinchi uchrash tartibida joylashtiradi — siz saralab qo'ysangiz amalda alifbo tartibida bo'ladi, agar column pandas Categorical bo'lsa esa uning category tartibini ishlatadi. Qaysi holatda ham standart tartib o'quvchingizga kerak bo'lgan tartib bo'lishi kamdan-kam uchraydi. "Fri, Sat, Sun, Thur" — hafta kunlari uchun alifboviy bema'nilik.

1. Aniq order= va hue_order=

python6 qator
sns.boxplot(
    data=tips, x="day", y="total_bill",
    order=["Thur", "Fri", "Sat", "Sun"],
    hue="smoker", hue_order=["No", "Yes"],
)
plt.show()

order= ayni paytda filtrlaydi ham: siz kiritmagan har qanday category chizilmaydi. Bu — faqat o'zingizga kerakli daraja larni chizish ning qulay usuli.

python3 qator
# faqat dam olish kunlari
sns.boxplot(data=tips, x="day", y="total_bill", order=["Sat", "Sun"])
plt.show()
  1. Hisoblangan qiymat bo'yicha saralash

Reyting bo'yicha tartiblangan bar larni o'qish tartiblanmaganlariga qaraganda ancha oson. Tartibni ma'lumot dan hisoblab, uni plot ga bering.

python7 qator
order = (tips.groupby("day", observed=True)["total_bill"]
             .mean()
             .sort_values(ascending=False)
             .index)

sns.barplot(data=tips, x="day", y="total_bill", order=order, errorbar=None)
plt.show()

Xuddi shu g'oya, countplot uchun chastota bo'yicha saralangan holda:

python3 qator
order = titanic["embark_town"].value_counts().index
sns.countplot(data=titanic, y="embark_town", order=order)
plt.show()
📌 `observed=True`

Guruhlovchi column pandas Categorical bo'lganda groupby tarixan e'lon qilingan har bir category uchun row qaytarardi, shu jumladan bo'sh lari uchun ham — natijada NaN o'rtachalar paydo bo'lib, saralashni buzardi. Faqat haqiqatan uchraydigan category larni qoldirish uchun observed=True bering. Pandas 2.x da bu standart qiymatga aylanib bormoqda, lekin buni aniq yozish hech narsa yo'qotmaydi.

3. Tartibni pd.Categorical bilan DataFrame ga singdirish

Eng bardoshli yechim. Tartibni column ga bir marta e'lon qiling va shundan keyingi har bir plot, groupby va pivot unga rioya qiladi — o'nta joyda order= ni takrorlash shart emas.

python6 qator
day_order = ["Thur", "Fri", "Sat", "Sun"]
tips["day"] = pd.Categorical(tips["day"], categories=day_order, ordered=True)

sns.boxplot(data=tips, x="day", y="total_bill")      # allaqachon to'g'ri
sns.countplot(data=tips, x="day")                    # bu ham to'g'ri
plt.show()

ordered=True bilan siz qo'shimcha ravishda ishlaydigan taqqoslashlarga (tips["day"] > "Fri") va to'g'ri saralashga ega bo'lasiz. Ordinal so'rovnoma shkalalari uchun bu, plot chizish dan qat'i nazar, to'g'ri tasvirlash usuli.

python3 qator
size_order = ["small", "medium", "large"]
df["size"] = pd.Categorical(df["size"], categories=size_order, ordered=True)
df.sort_values("size")   # small, medium, large — alifbo tartibida emas
  1. Mavjud categorical ning tartibini o'zgartirish

tips["day"] = tips["day"].cat.reorder_categories( ["Sun", "Sat", "Fri", "Thur"], ordered=True )

  1. catplot dagi tartib

order, hue_order, col_order va row_order ning hammasi figure darajasida ishlaydi.

python7 qator
g = sns.catplot(
    data=tips, x="day", y="total_bill", kind="bar",
    order=["Thur", "Fri", "Sat", "Sun"],
    col="time", col_order=["Lunch", "Dinner"],
    errorbar="se", height=4,
)
plt.show()

17.9 Tuzoq lar

  1. barplot balandliklari count deb o'qiladi Buni allaqachon aytdik, lekin takrorlashga arziydi, chunki bu — birinchi raqamli xato: bar bu mean. sns.barplot(data=df, x="region", y="sales") bilan qurilgan va "Sales by region" deb nomlangan chart umumiy sotuvni emas, har bir tranzaksiyadagi o'rtacha sotuvni ko'rsatadi — bu ikki reyting esa bir-biriga teskari bo'lishi mumkin. Yig'indi kerak bo'lsa estimator="sum" ni, count kerak bo'lsa countplot ni ishlating. Y-o'qini har doim statistika nomi bilan belgilang: plt.ylabel("mean total bill").

2. Error bar lar — 95% CI, standart chetlanish emas

Standart qiymat errorbar=("ci", 95). Kalta bar lar o'rtacha yaxshi baholanganini bildiradi, ma'lumot zich ekanini emas. Qaysi birini ishlatganingizni izohda yozing; belgilanmagan error bar li chart ilmiy kontekstda o'qib bo'lmaydigan hisoblanadi.

3. Boxplot lar multimodallikni yashiradi

Shakli butunlay boshqacha to'rtta tanlama bir xil besh sonli umumlashmaga ega bo'lishi mumkin. Notanish o'zgaruvchi ning boxplot iga ishonishdan oldin violin, strip qatlami yoki histogram bilan tekshirib ko'ring.

4. Katta ma'lumot da swarmplot nuqtalarni tashlab yuboradi

UserWarning: ...% of the points cannot be placed ogohlantirishiga e'tibor bering. stripplot(jitter=True, alpha=0.4) yoki violinplot ga o'ting.

5. cut violin larni ma'lumot dan tashqariga cho'zadi

Standart cut=2 density ni chekka qiymat lardan ikkita bandwidth uzoqqacha chizadi — manfiy yosh, 5 dan yuqori reyting, noldan kichik davomiylik. Chegaralangan o'zgaruvchilar uchun cut=0 ni ishlating.

6. Tartiblangan category lar uchun alifbo tartibi

"Fri, Sat, Sun, Thur", "eight, five, four, nine, one" va "High, Low, Medium" — bularning hammasi ma'noni yo'q qiladigan standart tartib lar. order= yoki pd.Categorical bilan to'g'rilang.

7. pointplot chiziqlari tartiblanmagan category lar orasida trend borday ko'rsatadi

X da tabiiy ketma-ketlik bo'lmasa, linestyle="none" ni ishlating yoki bar larga o'ting.

8. catplot da plt.title() bitta panelga tushadi

g.figure.suptitle() ni ishlating. Va catplot ax= ni umuman qabul qilmaydi.

9. NaN lar sezdirmasdan tashlab yuboriladi

penguins da sex va body_mass_g ning ba'zilari yetishmaydi; titanic["age"] 177 ta yo'lovchi uchun mavjud emas. Seaborn bunday row larni indamay tashlab yuboradi, shuning uchun guruh ning boxplot i siz o'ylagandan ancha kam row asosida hisoblangan bo'lishi mumkin. Chizishdan oldin df.isna().sum() ni tekshiring va har bir guruhga uning haqiqiy n ini yozib qo'yishni o'ylab ko'ring.

10. Songa o'xshash category lar

tips["size"] va titanic["pclass"] — butun sonlar. Seaborn ning categorical function lari x o'zgaruvchisini category larga majburan aylantiradi, shuning uchun ular teng oraliqli 1, 2, 3 label lari sifatida qaraladi. Bu yerda odatda sizga aynan shu kerak — lekin oraliq lar sonli masofani aks ettiradi deb kutmang. Noaniqlikni yo'qotish uchun .astype(str) bilan aylantiring yoki oraliq muhim bo'lsa numeric plot ishlating.

11. Bo'sh hue birikmalari tekislanishni buzadi

Agar biror category da hue darajasi umuman uchramasa, dodge qilingan element lar g'alati joylashishi mumkin. dodge=True va aniq hue_order= layout ni determinlashgan qiladi.

12. sns.load_dataset() ga internet kerak

U CSV larni mwaskom/seaborn-data GitHub repositoriysidan yuklab oladi va ularni ~/seaborn-data da keshlaydi. Offline holatda (imtihon zali, cheklangan laboratoriya, proxy yo'q) u URL xatosini chiqaradi. Chora lar:

python12 qator
# 1) Internetli mashinada bir marta oldindan yuklab oling; kesh
#    ~/seaborn-data da turadi (Windows da C:\Users\<name>\seaborn-data).
#    O'sha papkani offline mashinaga ko'chiring va load_dataset ishlaydi.

# 2) Ma'lumot repo sining lokal nusxasiga yo'naltiring
tips = sns.load_dataset("tips", data_home="D:/data/seaborn-data")

# 3) Seaborn ni umuman chetlab o'tib, CSV ni pandas bilan o'qing
tips = pd.read_csv("D:/data/seaborn-data/tips.csv")

# 4) Onlayn mavjud bo'lganlar ro'yxatini ko'ring (bunga ham internet kerak)
print(sns.get_dataset_names())
Chiqish
['anagrams', 'anscombe', 'attention', 'brain_networks', 'car_crashes', 'diamonds', 'dots', 'dowjones', 'exercise', 'flights', 'fmri', 'geyser', 'glue', 'healthexp', 'iris', 'mpg', 'penguins', 'planets', 'seaice', 'taxis', 'tips', 'titanic']

17.10 Mashqlar to'plami

python41 qator
# Avval yuklang:
# tips = sns.load_dataset("tips")
# titanic = sns.load_dataset("titanic")
# penguins = sns.load_dataset("penguins")

# 1. Titanic "class" ning "sex" bo'yicha bo'lingan countplot ini chizing,
#    so'ng ax.bar_label() yordamida har bir bar ga uning count ini yozing.
#    Bu count lar yolg'iz o'zi "kim ko'proq omon qolgan" savoliga nega
#    javob bera olmasligini bitta gapda tushuntiring.

# 2. Tips uchun yonma-yon ikkita chart chizing: "day" ning countplot i va
#    "day" ga qarshi "total_bill" ning barplot i. Har bir y-o'qini aynan
#    nimani ko'rsatishi bilan belgilang. Qaysi kunda eng ko'p hisob bor?
#    Qaysi kunda o'rtacha hisob eng katta? Ular bir xil kunmi?

# 3. 0/1 qiymatli "survived" column ida barplot ishlatib, passenger class
#    bo'yicha omon qolish DARAJASI ni chizing. So'ng uni uch marta qayta
#    chizing: errorbar=("ci", 95), errorbar="sd" va errorbar=None bilan,
#    va har bir variant nimani da'vo qilishini yozib qo'ying.

# 4. Penguins body_mass_g ni species bo'yicha boxplot qiling. Gentoo uchun
#    chart dan median, Q1, Q3 va IQR ni o'qing, so'ng ularni
#    penguins.groupby("species")["body_mass_g"].describe() bilan tekshiring.

# 5. Titanic "age" ni "class" bo'yicha boxplot va violinplot da yonma-yon
#    chizing. Violin da cut=0 ni ishlating. Yosh distribution ining violin
#    ko'rsatadigan, boxplot esa yashiradigan bitta xususiyatini ayting.

# 6. Penguins flipper_length_mm ni species bo'yicha violinplot (inner=None)
#    ustiga swarmplot qatlamlang. So'ng xuddi shu swarm ni to'liq titanic
#    "fare" va "class" da sinab ko'ring hamda olgan ogohlantirishingizni va
#    uni qanday tuzatishingizni yozib qo'ying.

# 7. Tips "tip" ni "day" bo'yicha hue="time" va dodge=True bilan pointplot
#    qiling. Chiziqlar parallelmi? Bu yerda parallel va kesishuvchi
#    chiziqlar nimani anglatishini ayting.

# 8. Bitta catplot quring: kind="bar", x="class", y="fare", hue="sex",
#    col="embark_town", col_order aniq berilgan va class ga hafta kunlari
#    uslubidagi tartib qo'llangan holda. Figure ga g.figure.suptitle() bilan
#    sarlavha bering va g.set_axis_labels() bilan o'q label larini qo'ying.

17.11 Intervyu savollari

S: sns.barplot() dagi bar ning balandligi nimani anglatadi?

Shu category ichidagi y o'zgaruvchisi ning o'rtachasini — count ham emas, yig'indi ham emas. Standart estimator — "mean", ustidagi vertikal chiziq esa o'sha o'rtacha uchun bootstrap qilingan 95% confidence interval. Row larni sanaydigan function — countplot; yig'indi ni esa barplot(estimator="sum") beradi.

S: countplot va barplot orasidagi farq nima?

countplot bitta categorical o'zgaruvchini oladi va chastota larni o'zi hisoblaydi, shuning uchun siz faqat x yoki faqat y berasiz. barplot esa categorical va numeric o'zgaruvchini oladi va numeric ni aggregation qiladi. Mohiyatan sns.countplot(x="day") aynan sns.barplot(x="day", y=<nimadir>, estimator="count") ga teng.

S: Boxplot ning har bir elementini tushuntiring.

Box ichidagi chiziq — median (Q2). Box Q1 dan Q3 gacha cho'ziladi, demak uning balandligi interquartile range, ya'ni ma'lumot ning o'rta 50% i. Whisker lar yaqin hinge dan 1.5×IQR ichida qolgan eng uzoq kuzatilgan nuqtagacha cho'ziladi — ular haqiqiy ma'lumot da to'xtaydi, fence ning o'zida emas. Undan tashqaridagi hamma narsa outlier ga nomzod sifatida alohida chiziladi. Median box ning pastida turgan bo'lsa, bu o'ngga qiyshiqlikni bildiradi. Plot tanlama hajmi va multimodallik haqida hech narsa aytmaydi.

S: Qachon boxplot o'rniga violin plot ni tanlaysiz?

Distribution ning shakli muhim bo'lganda — xususan bimodallik yoki kuchli assimetriyani aniqlash uchun, buni esa besh sonli umumlashma ifodalay olmaydi. Bir-biridan tubdan farq qiluvchi bir nechta distribution bir xil boxplot ga ega bo'lishi mumkin. Buning narxi shundaki, violin ning KDE si bandwidth ga bog'liq silliqlangan baho, cut>0 density ni kuzatilgan diapazondan tashqariga chizadi va kichik guruh larda u ishonchsiz bo'ladi.

S: stripplot mi yoki swarmplot mi — qanday qaror qilasiz?

Ikkalasi ham har bir kuzatuvni chizadi. stripplot nuqtalarni tasodifiy jitter bilan siljitadi: arzon, istalgan hajmda ishlaydi, lekin nuqtalar baribir ustma-ust tushishi mumkin. swarmplot ustma-ust tushmaydigan layout ni hisoblaydi: o'qish osonroq va determinlashgan, ammo unga gorizontal joy kerak va guruh lar bir necha yuz row dan oshgach nuqtalarning ma'lum foizini "joylashtirib bo'lmadi" deb ogohlantiradi — o'sha paytdan boshlab u ma'lumot ni ko'rsatmay qo'yadi. Kichik tanlama lar uchun swarm, kattaroqlari uchun alpha li strip, undan ham kattasi uchun violin yoki box.

S: Axes-level va figure-level function orasidagi farq nima va catplot qaysi biri? catplot — figure-level. boxplot kabi axes-level function lar bitta Axes ga chizadi, ax= ni qabul qiladi va o'sha Axes ni qaytaradi, shuning uchun ular plt.subplots() layout ichida bemalol birlashadi. catplot esa o'z figure ini yaratadi, col=/row= faceting ni qo'llab-quvvatlaydi, panel larni height/aspect bilan o'lchamlaydi, legend ni tashqariga joylaydi va FacetGrid qaytaradi. Natijada plt.title() faqat oxirgi panelga sarlavha qo'yadi — g.figure.suptitle() ni ishlating — va ax= umuman qabul qilinmaydi.

S: X-o'qingizdagi kunlar Fri, Sat, Sun, Thur bo'lib chiqdi. Nega va buni qanday tuzatasiz?

Column oddiy string lardan iborat, shuning uchun seaborn da kalendar tartibi haqida hech qanday tushuncha yo'q. Uchta yechim: plot chaqiruviga order=["Thur", "Fri", "Sat", "Sun"] bering; column ni bir marta pd.Categorical(tips["day"], categories=day_order, ordered=True) bilan aylantiring, shunda keyingi har bir amal shu tartibni meros qilib oladi; yoki qiymat bo'yicha reyting li chart kerak bo'lsa, tartibni ma'lumot dan hisoblang, masalan df.groupby("day")["total_bill"].mean().sort_values().index.

S: Standart holatda barplot va pointplot dagi error bar lar nimani ko'rsatadi va ularni qanday o'zgartirasiz?

Estimator uchun 95% confidence interval ni, u har bir guruh ni 1000 marta bootstrap qayta tanlash orqali hosil qilinadi — standart chetlanish emas. Uni errorbar="sd", errorbar=("se", 1), xom ma'lumot ning percentile interval i uchun errorbar=("pi", 95) yoki errorbar=None bilan o'zgartiring. Eski ci= parametri v0.12 da deprecated bo'lgan va keyinroq olib tashlangan. Takrorlanadigan interval lar uchun seed= ni ishlating.

S: Nega bar chart nol dan boshlanishi kerak, pointplot esa shart emas?

Bar lar qiymatni maydon/uzunlik orqali kodlaydi, shuning uchun o'q ni kesib qo'yish o'quvchi bar lar orasida his qiladigan nisbatni buzadi. Pointplot esa qiymatni faqat joylashuv orqali kodlaydi; o'q ni yaqinlashtirish aniqlikni o'zgartiradi, nazarda tutilgan nisbatlarni emas. Shuning uchun farq lar mutlaq darajaga nisbatan kichik bo'lganda pointplot — halol tanlov.

17.12 Xulosa

  • countplot row larni sanaydi; barplot esa har bir category uchun y ning o'rtachasini bootstrap qilingan 95% CI bilan ko'rsatadi. Ikkalasini chalkashtirish sezdirmasdan noto'g'ri chart lar hosil qiladi.
  • estimator= standart holatda "mean" va "median", "sum", "count" yoki istalgan callable ni qabul qiladi; errorbar= olib tashlangan ci= ning o'rnini egalladi va standart qiymati "sd" emas, ("ci", 95).
  • Boxplot — bu median, Q1, Q3, 1.5×IQR ichidagi oxirgi nuqtadagi whisker lar va undan tashqaridagi alohida nuqtalar — tanlama hajmi va multimodallik haqida hech narsa aytmaydigan beshta son.
  • Violin lar KDE orqali distribution ning shaklini qo'shadi; density kuzatilgan diapazonda to'xtashi uchun cut=0 qo'ying va ikkita hue darajasi uchun split=True ni ishlating. boxenplot — dumlarni batafsil ko'rsatadigan katta n li boxplot.
  • swarmplot determinlashgan va o'qish oson, lekin har bir guruhda bir necha yuzdan oshsa ogohlantiradi va nuqtalarni tashlab yuboradi; jitter va alpha li stripplot esa kattaroq hajmga chidaydi.
  • pointplot barplot bilan bir xil bahoni nol asossiz ko'rsatadi va uning bog'lovchi chiziqlari interaction larni ochib beradi — lekin ularni faqat x-o'qi haqiqiy tartibga ega bo'lgandagina ishlating.
  • catplot(kind=...) — sakkiztasining ustidagi figure-level o'ram; u col/row bilan facet qiladi, FacetGrid qaytaradi, ax= ni e'tiborsiz qoldiradi va plt.title() o'rniga g.figure.suptitle() ni talab qiladi.
  • Tartibni order=/hue_order= bilan, saralangan groupby index i bilan yoki butunlay pd.Categorical(..., ordered=True) bilan boshqaring; order= ayni paytda category larni filtrlab ham tashlaydi.
  • Plot ni tanlama hajmiga moslang: juda kichik guruh lar uchun nuqtalar, o'rtacha lari uchun box yoki violin, katta lari uchun boxen — va notanish o'zgaruvchi ning distribution ini boshqa usulda tekshirmasdan turib uning umumlashtiruvchi plot ini hech qachon taqdim qilmang.

Keyingisi: 18-bob heatmap lar va correlation matritsalari haqida.

Bu bobni bepul o'qidingiz.

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

Telegramda yozish Narxlar