1. Введение в Seaborn
Seaborn — это библиотека для построения статистических графиков, основанная на matplotlib, а структура данных унифицирована с Pandas.
Библиотека Seaborn предназначена для сбора и понимания данных, основанных на визуализации данных.
Функции построения диаграмм, ориентированные на набор данных, предоставляемые Seaborn, в основном представляют собой операции с индексами и массивами строк и столбцов, включая внутреннее семантическое сопоставление и статистическую интеграцию всего набора данных.
Не будет преувеличением сказать, что Сиборн может нарисовать любую карту, которую вы можете себе представить!
2. Пример данных
Все визуальные диаграммы в этой статье построены на основе советов по набору данных о потреблении посетителей ресторана, которые поставляются с Seaborn. Первые два данных набора данных подсказок следующие:
No | total_bill | tip | sex | smoker | day | time | size |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 2 |
(total_bill: общая сумма потребления, чаевые: сумма чаевых, пол: пол, курильщик: курит или нет, день: дата потребления, время: период потребления, размер: количество людей на званом ужине)
3. Обзор Seaborn
диаграмма отношений
Диаграммы отношений обычно представляют собой графики, используемые для выражения двумерных отношений.
функция | эффект |
---|---|
relplot(kind='line')/lineplot( ) | Нарисовать линейный график, параметры: данные, x, y, оттенок |
relplot(kind='scatter')/scatterplot( ) | Нарисовать точечную диаграмму, параметры: данные, x, y, оттенок |
параметр | значение |
---|---|
data | Объект pandas.DataFrame |
x | переменная оси x для графика |
y | переменная оси Y для графика |
hue | Различать измерения, как правило, категориальные переменные |
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='darkgrid')
tips = sns.load_dataset('tips')
sns.relplot(x='total_bill',y='tip',data=tips)
sns.relplot(x="total_bill", y="tip", hue="smoker", data=tips);
fmri = sns.load_dataset("fmri")
sns.relplot(x="timepoint", y="signal", kind="line", data=fmri);
Карта классификации
Визуализировать категориальные данные; категориальные графики могут быть представлены в виде диаграмм рассеяния, диаграмм распределения, оценочных диаграмм и т. д.
функция | эффект |
---|---|
catplot(kind='strop')/stripplot( ) | Категориальный график рассеяния |
catplot(kind='swarm')/swarmplot( ) | Категориальный график рассеяния |
catplot(kind='box')/boxplot( ) | Карта распространения классификации |
catplot(kind='violin')/violinplot( ) | Карта распространения классификации |
catplot(kind='boxen')/boxenplot( ) | Карта распространения классификации |
catplot(kind='point')/pointplot( ) | График оценки классификации |
catplot(kind='bar')/barplot( ) | График оценки классификации |
catplot(kind='count')/countplot( ) | График оценки классификации |
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style='ticks',color_codes=True)
tips = sns.load_dataset('tips')
sns.catplot(x='day',y='total_bill',data=tips)
sns.catplot(x='day',y='total_bill',kind='swarm',data=tips)
sns.catplot(x='day',y='total_bill',kind='box',data=tips)
diamonds = sns.load_dataset('diamonds')
sns.catplot(x='color',y='price',kind='boxen',data=diamonds.sort_values('color'))
sns.catplot(x="total_bill", y="day", hue="time",kind="violin", data=tips)
titanic = sns.load_dataset("titanic")
sns.catplot(x="sex", y="survived", hue="class", kind="point", data=titanic)
sns.catplot(x="sex", y="survived", hue="class", kind="bar", data=titanic)
sns.catplot(x="deck", kind="count", palette="ch:.25", data=titanic)
график регрессии
Регрессируйте данные и постройте регрессию как функцию.
функция | эффект |
---|---|
lmplot( ) | сюжетная регрессия |
regplot( ) | сюжетная регрессия |
residplot( ) | сюжетная регрессия |
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(color_codes=True)
tips = sns.load_dataset("tips")
sns.lmplot(x="total_bill", y="tip", data=tips)
sns.residplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),scatter_kws={"s": 80})
f, ax = plt.subplots(figsize=(5, 6))
sns.regplot(x="total_bill", y="tip", data=tips, ax=ax)
Распределение
Диаграммы для изучения одномерных или двумерных распределений.
функция | эффект |
---|---|
distplot( ) | Одномерное распределение |
kdeplot( ) | Оценка плотности ядра |
pairplot( ) | попарное бинарное распределение |
joinplot( )/joinplot(kind='hex')/joinplot(kind='reg') | бинарный дистрибутив |
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats
sns.set(color_codes=True)
x = np.random.normal(size=100)
sns.distplot(x)
sns.kdeplot(x, shade=True)
mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
sns.jointplot(x="x", y="y", data=df)
iris = sns.load_dataset("iris")
sns.pairplot(iris)
матричная диаграмма
Представляет визуализированный набор данных в виде матрицы.
функция | эффект |
---|---|
heatmap( ) | Тепловая карта |
clustermap( ) | График кластерной матрицы |
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
sns.set_theme()
# Load the example flights dataset and convert to long-form
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")
# Draw a heatmap with the numeric values in each cell
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(flights, annot=True, fmt="d", linewidths=.5, ax=ax)
sns.set_theme()
# Load the brain networks example dataset
df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)
# Select a subset of the networks
used_networks = [1, 5, 6, 7, 8, 12, 13, 17]
used_columns = (df.columns.get_level_values("network")
.astype(int)
.isin(used_networks))
df = df.loc[:, used_columns]
# Create a categorical palette to identify the networks
network_pal = sns.husl_palette(8, s=.45)
network_lut = dict(zip(map(str, used_networks), network_pal))
# Convert the palette to vectors that will be drawn on the side of the matrix
networks = df.columns.get_level_values("network")
network_colors = pd.Series(networks, index=df.columns).map(network_lut)
# Draw the full plot
g = sns.clustermap(df.corr(), center=0, cmap="vlag",
row_colors=network_colors, col_colors=network_colors,
dendrogram_ratio=(.1, .2),
cbar_pos=(.02, .32, .03, .2),
linewidths=.75, figsize=(12, 13))
g.ax_row_dendrogram.remove()
Структурированные несколько чертежей
Постройте отношение между парными переменными как подграфик.
функция | эффект |
---|---|
FacetGrid | Структурированные несколько чертежей |
PairGrid | Структурированные несколько чертежей |