визуализация
January 8, 2023

Отображаем зависимость численной колонки от категориальной с 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% выживаемость женщин первого класса, о чем при группировке только по классам нельзя было сказать.