Алоқаи байни бузургиҳо
Чаро алоқаи байни бузургиҳоро меҷӯем
Андозагирӣ бо гузашти вақт чӣ гуна тағйир меёбад? Оё натиҷа бо зиёд шудани кӯшиш меафзояд? Вақте ҳар ду бузургӣ ададӣ ҳастанд, танҳо муқоисаи миёнаҳои категорияҳо кофӣ нест. Диаграммаи парокандагӣ ҷуфтҳои алоҳидаи ададҳоро нишон медиҳад, графики хаттӣ бошад тағйири нишондиҳандаро дар меҳвари тартибдор ошкор мекунад.
Чунин графикҳоро барои таҷрибаҳо, мушоҳидаҳои сенсорҳо ва муқоисаи реҷаҳои кор истифода мебаранд.
1. scatterplot: як сатр — як нуқта
Дар ҷадвали дароз сутунҳои time ва value координатаҳои як мушоҳидаро доранд. x меҳвари уфуқӣ ва y меҳвари амудиро муайян мекунад. scatterplot қиматҳои такрории x-ро миёна намекунад: ҳар сатр нуқтаи алоҳида мемонад.
Мисолҳоро пайдарпай дар як ҷаласа иҷро кунед. Ҳар plt.subplots() расми алоҳида месозад; барои нишон додан дар скрипти одӣ plt.show()-ро даъват кунед. Дар ин ҷо координатаҳоро тавассути объектҳои matplotlib месанҷем.
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
trials = pd.DataFrame({"time": [3, 1, 2, 1], "value": [9, 4, 7, 6],
"mode": ["slow", "fast", "slow", "fast"]})
fig, ax = plt.subplots()
sns.scatterplot(data=trials, x="time", y="value", ax=ax)
print(ax.collections[0].get_offsets().tolist())
Барориш:
[[3.0, 9.0], [1.0, 4.0], [2.0, 7.0], [1.0, 6.0]]
ax.collections[0] маҷмӯаи нуқтаҳо ва get_offsets() координатаҳои онҳоро медиҳад. Навиштаҳои меҳварҳо аз номи сутунҳо гирифта мешаванд.
2. Аломатҳои иловагӣ: hue, style, size
Рамзгузории визуалӣ нишон додани аломат бо ранг, шакл ё андоза аст. hue ранг, style шакли маркер ва size андозаи онро идора мекунад. Ҳамин тавр гурӯҳҳоро дар меҳварҳои ададии умумӣ муқоиса кардан мумкин аст.
fig, ax = plt.subplots()
sns.scatterplot(data=trials, x="time", y="value", hue="mode",
style="mode", size="time", hue_order=["fast", "slow"], ax=ax)
print(ax.collections[0].get_offsets().shape)
print(ax.get_legend() is not None)
Барориш:
(4, 2)
True
Чор нуқта бо ду координата барои ҳар кадом боқӣ монд: (4, 2). Роҳнамои аломатҳо худкор пайдо шуд. Якҷоя истифода шудани hue="mode" ва style="mode" фарқи гурӯҳҳоро такрор мекунад, то онҳоро бе ранг ҳам шинохтан мумкин бошад.
Барои категорияҳои сатрӣ hue_order тартиби гурӯҳҳоро муайян мекунад.
3. lineplot: мураттабсозӣ ва қимати миёна
Хат мушоҳидаҳоро дар меҳвари дорои тартиби маънодор мепайвандад: вақт, масофа ё рақами қадам. lineplot ба таври пешфарз x-ро бо тартиби афзоянда мураттаб мекунад. Агар ба як x чанд y мувофиқ ояд, аввал қимати миёнаи онҳоро ҳисоб мекунад.
fig, ax = plt.subplots()
sns.lineplot(data=trials, x="time", y="value", errorbar=None, ax=ax)
print(ax.lines[0].get_xdata().tolist())
print(ax.lines[0].get_ydata().tolist())
Барориш:
[1.0, 2.0, 3.0]
[5.0, 7.0, 9.0]
Ҳангоми time=1 миёна (4 + 6) / 2 = 5 аст, баъд нуқтаҳои 2 ва 3 меоянд.
Ба таври пешфарз одатан гирди хат тасмаи фосилаи эътимоди 95%-и қимати миёна кашида мешавад. Он номуайянии арзёбиро нишон медиҳад ва метавонад ба интихобкунии такрории тасодуфӣ вобаста бошад. errorbar=None онро хомӯш мекунад. Дар lineplot фосила одатан бо пуркунии ранг дар ax.collections нишон дода мешавад, бинобар ин танҳо шуморидани ax.lines набудани тасмаро намесанҷад.
4. Агрегатсияи дигар ва пайдарпайии аслӣ
estimator функсияи агрегатсияро интихоб мекунад. Агар қимати калонтарин барои ҳар x лозим бошад, "max"-ро истифода баред. Барои пайвастани мушоҳидаҳои аслӣ агрегатсияро бо estimator=None ва мураттабсозиро бо sort=False хомӯш кунед. Ин параметрҳо амалҳои гуногунро идора мекунанд.
fig, ax = plt.subplots()
sns.lineplot(data=trials, x="time", y="value",
estimator="max", errorbar=None, ax=ax)
print(ax.lines[0].get_ydata().tolist())
fig, ax = plt.subplots()
sns.lineplot(data=trials, x="time", y="value", estimator=None,
sort=False, errorbar=None, ax=ax)
print(ax.lines[0].get_xdata().tolist())
Барориш:
[6.0, 7.0, 9.0]
[3.0, 1.0, 2.0, 1.0]
Дар қисми якум ҳангоми time=1 қимати калонтарини 6 интихоб шудааст. Дар қисми дуюм пайдарпайии x ҳамон 3, 1, 2, 1 монд: такрорҳо дигар муттаҳид намешаванд.
5. Хатҳои алоҳида ва панелҳои алоҳида
Бо hue seaborn барои ҳар гурӯҳ хати алоҳида месозад. Агрегатсия дар дохили ҷуфти «гурӯҳ ва қимати x» иҷро мешавад. Роҳнамои аломатҳо нишонаҳоро шарҳ медиҳад; он ҷадвали аслиро мураттаб намекунад.
Агар хатҳо рӯйи ҳам оянд, relplot онҳоро ба панелҳо ҷудо мекунад. Параметри col аз рӯи категорияҳо сутунҳои панелҳо месозад, kind="line" хатҳоро интихоб мекунад. Бар хилофи lineplot, relplot объекти тамоми шабака — FacetGrid-ро бармегардонад ва расмро худаш месозад.
fig, ax = plt.subplots()
sns.lineplot(data=trials, x="time", y="value", hue="mode",
hue_order=["fast", "slow"], errorbar=None, ax=ax)
print([t.get_text() for t in ax.get_legend().get_texts()])
print([line.get_ydata().tolist() for line in ax.lines if len(line.get_xdata())])
grid = sns.relplot(data=trials, x="time", y="value",
col="mode", kind="line", errorbar=None)
print(grid.axes.shape)
Барориш:
['fast', 'slow']
[[5.0], [7.0, 9.0]]
(1, 2)
Гурӯҳи fast як нуқтаи ҷамъбастӣ бо қимати 5 ва slow қиматҳои 7 ва 9 дорад. Дар ax.lines хатҳои холӣ барои роҳнамо ҳам буда метавонанд, бинобар ин рӯйхати санҷишӣ онҳоро аз рӯи мавҷудияти координатаҳо ҷудо мекунад. Сатри охирини (1, 2) як қатор аз ду панелро ифода мекунад.
Дар дохил чӣ рӯй медиҳад
Барои scatterplot seaborn координатаҳои сатрҳоро мехонад ва сутунҳои иловагиро ба ранг, шакл ва андоза табдил медиҳад. Баъд matplotlib маҷмӯаи маркерҳоро месозад. Координатаҳои якхела метавонанд рӯйи ҳам оянд; alpha ҷойҳои зичро намоёнтар мекунад.
Барои lineplot аввал гурӯҳҳои ороиш ва баъд қиматҳои x дар дохили гурӯҳ ҷудо мешаванд. Пас аз ҳисоб кардани estimator ва фосилаҳо координатаҳо мураттаб шуда, бо хат пайваст мешаванд.
Хатоҳои маъмул ва ислоҳи онҳо
1. Меҳварҳои уфуқӣ ва амудӣ иваз шудаанд
Агар вақт дар меҳвари уфуқӣ лозим бошад, даъвати зерин нодуруст аст:
fig, ax = plt.subplots()
sns.scatterplot(data=trials, x="value", y="time", ax=ax)
print(ax.collections[0].get_offsets()[0].tolist())
Барориш:
[9.0, 3.0]
Нуқтаи якум ба ҷойи [3, 9] ба [9, 3] табдил ёфт. Ислоҳ: x="time", y="value" диҳед. Тартиби сутунҳои DataFrame вазифаи меҳварҳоро муайян намекунад.
2. sort=False-ро хомӯш кардани ҳисобкунии миёна мешуморанд
Барои нигоҳ доштани ҳамаи чор сатри аслӣ ин кофӣ нест:
fig, ax = plt.subplots()
sns.lineplot(data=trials, x="time", y="value", sort=False, errorbar=None, ax=ax)
print(ax.lines[0].get_xdata().tolist())
print(ax.lines[0].get_ydata().tolist())
Барориш:
[3.0, 1.0, 2.0]
[9.0, 5.0, 7.0]
Се қимати x монд ва ду андозагирии назди 1 ба 5 табдил ёфтанд. Ислоҳ: estimator=None илова кунед; sort=False танҳо тартиби пайвасткуниро идора мекунад.
3. Тартиби алифбоии гурӯҳҳоро интизор мешаванд
Барои тартиби собити роҳнамо рамзи зерин нопурра аст:
fig, ax = plt.subplots()
sns.lineplot(data=trials, x="time", y="value", hue="mode", errorbar=None, ax=ax)
print([t.get_text() for t in ax.get_legend().get_texts()])
Барориш:
['slow', 'fast']
slow пеш аз fast омад, зеро аввал пайдо шудааст. Ислоҳ: hue_order=["fast", "slow"] муайян кунед. Ин тартиби намоиши гурӯҳҳоро дода, худи мушоҳидаҳоро нигоҳ медорад.
Ёддошт
| Вазифа | Восита |
|---|---|
| Нишон додани ҳар мушоҳида | sns.scatterplot(data=df, x=..., y=...) |
| Ранг / шакл / андоза | hue / style / size |
| Тартиби гурӯҳҳои ранга | hue_order=[...] |
| Миёна барои x-ҳои такрорӣ | sns.lineplot(...) |
| Тағйири нишондиҳандаи ҷамъбастӣ | estimator="median", "max" ё "sum" |
| Хомӯш кардани тасмаи фосила | errorbar=None |
| Нигоҳ доштани пайдарпайии аслӣ | estimator=None, sort=False |
| Ҷудо кардани гурӯҳҳо ба панелҳо | sns.relplot(..., col=..., kind="line") |