Отображаем зависимость численной колонки от категориальной с catplot
Рассмотрим, как визуализировать зависимость численной переменной (много значений) от категориальной. При выводе точек с соответствующими координатами по x и y картинка может быть не информативной, например, значений выживаемости по классам пассажиров Титаника:
!wget https://s3.amazonaws.com/h2o-public-test-data/smalldata/gbm_test/titanic.csv
import pandas as pd import seaborn as sns sns.set(rc={'figure.figsize':(10,6)}) df = pd.read_csv("titanic.csv") sns.scatterplot(data=df, x='pclass', y='survived')
Простым решением является подсчет агрегированного значения по численной колонке:
df.groupby('pclass')['survived'].mean().plot(kind='bar')
Однако библиотека Seaborn предлагает функцию catplot, упрощающую визуализацию категорий. Так тот же график можно нарисовать с catplot, передав ей в качестве x и y те же значения, что и scatterplot, но дополнительно указав тип графика в параметре kind ('point', 'bar', 'violin'):
sns.catplot(data=df, x='pclass', y='survived', kind='bar')
kind='point' выдает похожую информацию чуть в другом виде и с началом не с 0 по оси y:
sns.catplot(data=df, x='pclass', y='survived', kind='point')
Для вышеуказанных типов можно задавать параметр estimator, который по умолчанию показывает среднее (mean):
sns.catplot(data=df, x='pclass', y='survived', kind='bar', estimator=np.sum)
kind='violin' строит распределения значений по каждой категории:
sns.catplot(data=df, x='pclass', y='survived', kind='violin')
По значениям категории можно строить отдельные графики (параметр col или row). Это добавляет еще одно измерение для визуализации. Выведем долю выживших в зависимости от класса и пола:
sns.catplot(data=df, y='survived', x='sex', col='pclass', kind='bar')
Можно заметить, почти 100% выживаемость женщин первого класса, о чем при группировке только по классам нельзя было сказать.