[PYTHON] Essayez toutes les dernières API Seaborn pour améliorer vos compétences en visualisation de données [Visualization Uncle, 2020/9 / 9-ver 0.11.0]

Une nouvelle version de seaborn est sortie le 9 septembre 2020. Cette fois, je reviendrai sur la visualisation en utilisant une telle ver0.11.0.

Je souhaite utiliser toutes les API en référence à la galerie et aux fonctions officielles de Seaborn.

Si vous n'êtes intéressé que par la visualisation, volez vers le milieu

Comme il est long, veuillez rechercher avec ctrl + F

Environnement de vérification

conda create -n eda python==3.8 conda activate eda

notebook==6.1.4 ipykernel==5.3.4

seaborn==0.11.0 pandas==1.1.2 matplotlib==3.3.2 statsmodels==0.12.0 scipy==1.5.2 scikit-learn==0.23.2 numpy==1.19.2

Différence par rapport à la version précédente

・ Examen du code de visualisation de la distribution ・ Réglage de la carte des couleurs ・ Ajout de fonctions et fonctions dis, hist, ecdf -Revue des fonctions kde et rug (suppression des pièces calculées par les modèles de statistiques, le lissage peut être ajusté par bw_adj, la conversion log_scale peut être sélectionnée comme traitement) -Vous pouvez maintenant sélectionner hist avec jointplot ・ Prend en charge les données verticales et horizontales ・ Ci-dessus + changements mineurs

J'ai utilisé 0.10.1 avant la nouvelle version, mais set_theme a été ajouté avant que je ne le sache, et le réglage est devenu beaucoup plus facile.

Éléments déconseillés par la mise à jour

・ L'affichage disparaîtra à l'avenir, veuillez passer à la fonction dis, hist dès que possible.

Qu'est-ce que Seaborn

Un bref aperçu de Seaborn

seaborn est un wrapper pour matplotlib, un package qui dessine le code facilement et magnifiquement. Matplot fonctionne derrière, mais la manière d'écrire le code devient beaucoup plus simple et vous pouvez exprimer des chiffres compliqués sur une seule ligne. Certaines fonctions effectuent également des filtres et des calculs de type prétraitement, donc j'estime qu'elles conviennent également à l'EDA.

pensée Seaborn

Présentation des idées intéressantes de seaborn

image.png

seaborn conçoit des méthodes de dessin à partir des deux perspectives d'axes et de figures. Le regroupement des fonctions à dessiner est comme indiqué sur la figure, et le dessin détaillé (par la fonction côté axes) peut être contrôlé collectivement par rel, dis, cat (fonction côté figure). Bien sûr, vous pouvez également l'utiliser en appelant des fonctions individuelles.

Le script n'est-il pas plus facile à comprendre si vous dessinez avec une petite fonction?

Dans la fonction côté figure qui gère collectivement, vous pouvez générer automatiquement le nombre de toiles que vous souhaitez dessiner, effectuer un traitement de regroupement et diviser l'unité de dessin (facette).

image.png

Aussi, dans les fonctions côté axes (sauf indication contraire) ・ Il est difficile de changer le nom de l'axe ・ La légende est représentée sur la figure.

Il y a des problèmes tels que. S'il s'agit d'une fonction côté figure, traitez l'axe et le précédent comme des choses différentes, Vous pouvez facilement contrôler les étiquettes et les précédents sur une seule ligne en utilisant set_axis_labels et ainsi de suite.

C'est plus visible que ça !!

Le contenu de l'introduction est grossièrement divisé en deux

· Premières options (couleur, axe, légende, etc.) ・ Présente principalement rel, dis, chat du côté de la figure majeure ・ Présentation du dessin avancé

Je voudrais le diviser en

[Opt-0] Histoire facultative

En apprenant à connaître l'histoire facultative à l'avance avec juste un aperçu Augmenter la facilité d'entrée des parcelles suivantes

Vérifions si la dernière version est incluse en premier lieu


import pandas as pd
from matplotlib.pyplot as plt
%matplotlib inline

import seaborn as sns
print(sns.__version__)

0.11.0

[Opt-1] Données d'appel

Lorsque vous souhaitez utiliser facilement des données célèbres Comme les données prises en charge par seaborn sont stockées sur github](https://github.com/mwaskom/seaborn-data), Vous pouvez sélectionner les données que vous souhaitez utiliser et les appeler avec load_dataset Les données appelées peuvent être manipulées au format pandas dataframe

penguins = sns.load_dataset("penguins")

[Opt-2] Définir le thème du dessin

Sélectionnez le thème que vous souhaitez utiliser tout en vérifiant le thème actuel

sns.set_theme

<function seaborn.rcmod.set_theme(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1, color_codes=True, rc=None)>

le style contrôle la teinte de l'arrière-plan du graphique

white, dark, whitegrid, darkgrid

palette ajuste le modèle de couleur des figures graphiques

'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 
'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 'OrRd_r', 
'Oranges', 'Oranges_r', 'PRGn', 'PRGn_r', 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r', 'Pastel2', 'Pastel2_r',
 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r', 'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples', 
'Purples_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 'RdYlGn_r', 
'Reds', 'Reds_r', 'Set1', 'Set1_r', 'Set2', 'Set2_r', 'Set3', 'Set3_r', 'Spectral', 'Spectral_r', 'Wistia', 
'Wistia_r', 'YlGn', 'YlGnBu', 'YlGnBu_r', 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 'afmhot', 
'afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 'brg', 'brg_r', 'bwr', 'bwr_r', 
'cividis', 'cividis_r', 'cool', 'cool_r', 'coolwarm', 'coolwarm_r', 'copper', 'copper_r', 'crest', 'crest_r', 
'cubehelix', 'cubehelix_r', 'flag', 'flag_r', 'flare', 'flare_r', 'gist_earth', 'gist_earth_r', 'gist_gray', 
'gist_gray_r', 'gist_heat', 'gist_heat_r', 'gist_ncar', 'gist_ncar_r', 'gist_rainbow', 'gist_rainbow_r', 
'gist_stern', 'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gnuplot', 'gnuplot2', 'gnuplot2_r', 'gnuplot_r', 
'gray', 'gray_r', 'hot', 'hot_r', 'hsv', 'hsv_r', 'icefire', 'icefire_r', 'inferno', 'inferno_r', 'jet',
 'jet_r', 'magma', 'magma_r', 'mako', 'mako_r', 'nipy_spectral', 'nipy_spectral_r', 'ocean', 'ocean_r',
 'pink', 'pink_r', 'plasma', 'plasma_r', 'prism', 'prism_r', 'rainbow', 'rainbow_r', 'rocket', 'rocket_r',
 'seismic', 'seismic_r', 'spring', 'spring_r', 'summer', 'summer_r', 'tab10', 'tab10_r', 'tab20', 'tab20_r',
 'tab20b', 'tab20b_r', 'tab20c', 'tab20c_r', 'terrain', 'terrain_r', 'turbo', 'turbo_r', 'twilight',
 'twilight_r', 'twilight_shifted', 'twilight_shifted_r', 'viridis', 'viridis_r', 'vlag', 'vlag_r',
 'winter', 'winter_r'
sns.set_theme(style="dark",palette='Accent')
df = sns.load_dataset("penguins")
sns.displot(df.flipper_length_mm)

image.png

[Opt-3] Changement d'axe d'étiquette d'axe

g = sns.displot(df.flipper_length_mm)
g.set_axis_labels("Xaxis", "Yaxis")

image.png

Vous pouvez écraser la forme de l'extérieur

L'étiquette d'axe peut également être tournée

g = sns.displot(df.flipper_length_mm)
g.set_axis_labels("Xaxis", "Yaxis")
g.set_xticklabels(rotation=-45)

image.png

Si vous souhaitez modifier l'espacement des étiquettes par incréments de 20

g.set_xticklabels(step=20)

Autres méthodes pouvant être utilisées

[Opt-4] Dessin de légende et codage couleur

Le codage couleur est spécifié par la teinte dans la fonction

Dans la fonction axes

df = sns.load_dataset("iris")
sns.scatterplot(data=df,x='sepal_length',y='sepal_width',hue='species')

image.png

La légende entre automatiquement à l'intérieur, Si vous utilisez la fonction côté figure, elle s'éteindra automatiquement

df = sns.load_dataset("iris")
sns.relplot(data=df,x='sepal_length',y='sepal_width',hue='species',kind='scatter')

image.png

[Opt-5] Dessin et légende multiples

Je veux dessiner un nuage de points, mais parfois je veux dessiner un nuage de points pour chaque groupe Plusieurs dessins pour les données peuvent être réalisés avec FacetGrid L'axe par lequel effectuer le regroupement est spécifié par col (col est une colonne au lieu de la couleur) Le nombre de zones de dessin est automatiquement déterminé à partir de la valeur de la variable qualitative de l'axe à regrouper.

df = sns.load_dataset("penguins")
sns.FacetGrid(df,col='species')

image.png

Mapper sur la zone de dessin créée

df = sns.load_dataset("penguins")

g=sns.FacetGrid(df,col='species')
g.map_dataframe(sns.scatterplot,x='flipper_length_mm',y='bill_depth_mm',hue="sex")

image.png

Si vous voulez une légende, ajoutez-la plus tard avec add_legend

df = sns.load_dataset("penguins")

g=sns.FacetGrid(df,col='species')
g.map_dataframe(sns.scatterplot,x='flipper_length_mm',y='bill_depth_mm',hue="sex")
g.set_axis_labels('flipper_length_mm','bill_depth_mm')
g.add_legend()

image.png

Si vous souhaitez ajouter un autre axe de dessin, vous pouvez le diviser davantage en le spécifiant dans la ligne de FacetGrid.

tips = sns.load_dataset("tips")

g = sns.FacetGrid(tips, col="time",  row="sex")
g.map(sns.scatterplot, "total_bill", "tip")

image.png

[Opt-6] Je veux un titre pour l'ensemble

Lorsque vous donnez un titre à l'ensemble au lieu de chaque grille, affichez-le avec le sous-titre Puisque matplotlib est en retard, vous pouvez également utiliser suptitle

df = sns.load_dataset("penguins")

g=sns.FacetGrid(df,col='species')
g.map_dataframe(sns.scatterplot,x='flipper_length_mm',y='bill_depth_mm',hue="sex")
g.set_axis_labels('flipper_length_mm','bill_depth_mm')
g.add_legend()

g.fig.suptitle('suptitle',y=1.1,x=0,size=18)

image.png

[Opt-7] Je veux que vous consigniez les variables comme prétraitement

Dans l'état actuel des choses, la plage de valeurs est trop large pour être comprise

planets = sns.load_dataset("planets")
sns.relplot(data=planets,x="distance", y="orbital_period",hue="year",palette='nipy_spectral')

image.png

Pré-traitement de la valeur en spécifiant l'échelle

planets = sns.load_dataset("planets")
g=sns.relplot(data=planets,x="distance", y="orbital_period",hue="year",palette='nipy_spectral')
g.set(xscale="log", yscale="log")

image.png

[Opt-8] Je veux que vous effaciez la tige de l'arbre

La grille d'arrière-plan disparaît dans le thème, mais les barres des axes X et Y ne disparaissent pas

sns.set_theme(style="white")
planets = sns.load_dataset("planets")
g=sns.relplot(data=planets,x="distance", y="orbital_period",hue="year",palette='nipy_spectral')
g.set(xscale="log", yscale="log")

image.png

Effacer avec despine

sns.set_theme(style="white")
planets = sns.load_dataset("planets")
g=sns.relplot(data=planets,x="distance", y="orbital_period",hue="year",palette='nipy_spectral')
g.set(xscale="log", yscale="log")
g.despine(left=True, bottom=True)

image.png

[Opt-9] Spécifiez xlim et ylim

sns.set_theme(style="dark",palette='Accent')
df = sns.load_dataset("penguins")
g=sns.displot(df.flipper_length_mm)
g.set(xlim=(0, 300), ylim=(0, 100))

image.png

Ou mis du côté FacetGrid

sns.FacetGrid(df,col='species',xlim=[0,10],ylim=[0,10])

image.png

[Main-0] Introduction de l'intrigue principale

[Main-1] scatter et ligne par relplot

[Main-1.1] Rel par défaut

sns.set_theme(style="whitegrid")
planets = sns.load_dataset("planets")
g=sns.relplot(data=planets,x="distance", y="orbital_period",palette='Dark2_r')
g.set(xscale="log", yscale="log")

S'il est exécuté par défaut, ce sera scatter

image.png

sns.set_theme(style="whitegrid")
planets = sns.load_dataset("planets")
g=sns.relplot(data=planets,x="distance", y="orbital_period",palette='Dark2_r',kind='scatter')
g.set(xscale="log", yscale="log")

Idem même si scatter est spécifié par kind

image.png

[Main-1.2] spécification de type rel

Si vous spécifiez la ligne avec le genre, cela connectera les points et le rendra linéaire

sns.set_theme(style="whitegrid")
planets = sns.load_dataset("planets")
g=sns.relplot(data=planets,x="distance", y="orbital_period",palette='Dark2_r',kind='line')
g.set(xscale="log", yscale="log")

image.png

[Main-1.3] Changer la taille de la dispersion en fonction de la valeur (bulle)

Je veux changer la valeur du diagramme de dispersion en fonction de la valeur comme le diagramme à bulles Dans ce cas, spécifiez la chaîne de données contenant la valeur dans l'argument taille. Passer les limites supérieure et inférieure des tailles par liste ou tuple

planets = sns.load_dataset("planets")
cmap = sns.cubehelix_palette(rot=-.2, as_cmap=True)
g = sns.relplot(data=planets,x="distance", y="orbital_period",hue="year", size="mass",palette='nipy_spectral', sizes=(10, 300))
g.set(xscale="log", yscale="log")

image.png

[Main-1.4] Changer la taille de sortie de la figure

Utilisez la taille de la figure de sortie à partir de la hauteur

planets = sns.load_dataset("planets")
cmap = sns.cubehelix_palette(rot=-.2, as_cmap=True)
g = sns.relplot(data=planets,x="distance", y="orbital_period",hue="year", size="mass",palette='nipy_spectral', sizes=(10, 300),height=10)
g.set(xscale="log", yscale="log")

image.png

[Main-1.5] Section fiable en ligne

Certaines données difficiles à comprendre dans le diagramme de dispersion

fmri = sns.load_dataset("fmri")
sns.relplot(data=fmri,x="timepoint", y="signal", hue="event",kind='scatter')

image.png

Facile à comprendre avec la ligne

fmri = sns.load_dataset("fmri")
sns.relplot(data=fmri,x="timepoint", y="signal", hue="event",kind='line')

image.png

L'intervalle de confiance est spécifié par ci. Vous pouvez passer sd ou un nombre réel, et s'il s'agit d'un nombre réel, cela représente un intervalle de confiance de 〇%. sd utilise le sd calculé à partir du site d'observation tel quel

fmri = sns.load_dataset("fmri")
sns.relplot(data=fmri,x="timepoint", y="signal", hue="event",kind='line',ci=20)

Spécifié comme un intervalle de confiance de 20%

image.png

[Main-1.6] Désignation du marqueur

Vous pouvez également ajouter des marqueurs pour chaque point d'événement et faire de la section de confiance un bâton au lieu d'une zone.

sns.relplot(data=fmri, x="timepoint", y="signal", hue="event", err_style="bars", ci=95,markers=True,kind='line')

image.png

[Main-1.7] Augmenter le nombre de lignes sur l'axe d'analyse spécifié

Comme la taille au moment de la dispersion introduite précédemment, l'axe d'analyse peut être divisé par style.

fmri = sns.load_dataset("fmri")
sns.relplot(data=fmri,x="timepoint", y="signal", hue="region", style="event",kind='line')

image.png

Bien sûr, vous pouvez également spécifier la taille

fmri = sns.load_dataset("fmri")
sns.relplot(data=fmri,x="timepoint", y="signal", hue="region", size="event", kind='line')

image.png

[Main-1.8] Divise l'écran par l'axe d'analyse spécifié

Si vous souhaitez diviser l'écran de dessin lui-même, spécifiez l'axe que vous souhaitez diviser en col

fmri = sns.load_dataset("fmri")
sns.relplot(data=fmri,x="timepoint", y="signal", hue="region", col="event", kind='line')

image.png

Lors d'un dessin avec plusieurs axes, facet_kws peut spécifier s'il faut partager les échelles de l'axe x et de l'axe y dans chaque figure.

fmri = sns.load_dataset("fmri")
sns.relplot(data=fmri,x="timepoint", y="signal", hue="region", col="event", kind='line',facet_kws=dict(sharey=False,sharex=False))

Veillez à ne pas effacer l'étiquette et à obtenir un graphique surprise

image.png

Si vous voulez vraiment le diviser d'une autre manière, vous pouvez utiliser FacetGrid en spécifiant la fonction du côté des axes au lieu de la fonction du côté de la figure.

fmri = sns.load_dataset("fmri")
g=sns.FacetGrid(fmri,col='event')
g.map_dataframe(sns.lineplot,data=fmri,x='timepoint',y='signal',hue="region")

image.png

[Main-2] hist, ked, ecdf et tapis par déplot

[Main-2.1] affiche l'historique par défaut

La valeur par défaut est kind = 'hist'

penguin = sns.load_dataset("penguins")
sns.displot(data=penguin,x='bill_depth_mm')
#sns.displot(data=penguin,x='bill_depth_mm',kind='hist')

image.png

Vous pouvez changer la méthode d'expression avec l'élément argument La valeur par défaut est bar

sns.displot(data=penguin,x='bill_depth_mm',kind='hist',element='poly')
sns.displot(data=penguin,x='bill_depth_mm',kind='hist',element='step')

poly

image.png

step

image.png

Vous pouvez également modifier la finesse de la division par bacs

sns.displot(data=penguin,x='bill_depth_mm',kind='hist',element='poly',bins=100)

image.png

[Main-2.2] Ajouter kde (estimation de la densité du noyau) à l'histgramme

sns.displot(data=penguin,x='bill_depth_mm',kind='hist',kde=True)

image.png

Bien sûr, si vous spécifiez kind = 'kde', hist disparaît.

sns.displot(data=penguin,x='bill_depth_mm',kind='kde')

image.png

[Main-2.2] Essayez de tracer avec les fonctions originales de hist et kde

sns.histplot(data=penguin,x='bill_depth_mm')

image.png

sns.kdeplot(data=penguin,x='bill_depth_mm')

image.png

[Main-2.3] Vérifiez le mouvement de kde

Bw_adjust pour décider de la largeur de données à examiner lors du lissage

sns.displot(data=penguin,x='bill_depth_mm',kind='kde',bw_adjust=.2)

Quand 0,2

image.png

Quand 100

image.png

[Main-2.4] Changer la couleur sur un autre axe

Comme d'habitude Code couleur par teinte Division de l'écran par col

sns.displot(data=penguin,x='bill_depth_mm',kind='kde',hue='sex',col='island')

image.png

[Main-2.5] Créer un graphique empilé

Spécifiez la pile si vous souhaitez empiler les fonctions de densité Veillez à ne pas vous méprendre sur le fait qu'il y a plus de monde sur le côté car vous ne faites que monter

Peut être utilisé avec hist ou kde

sns.displot(data=penguin,x='bill_depth_mm',kind='kde',hue='sex',col='island',multiple="stack")

image.png

Spécifiez linewidth = 0 lorsque vous souhaitez effacer la surface frontière lors de l'empilement

sns.displot(data=penguin,x='bill_depth_mm',kind='kde',hue='sex',col='island',multiple="stack",linewidth=0)

image.png

De plus, si vous spécifiez la couleur du bord = "0,1", vous pouvez renforcer la ligne de démarcation.

Définissez le remplissage sur False lorsque vous souhaitez supprimer la couleur à l'intérieur du graphique empilé Cela devient enfin un graphique qui semble incompris

sns.displot(data=penguin,x='bill_depth_mm',kind='kde',hue='sex',multiple="stack",fill=False)

image.png

[Main-2.6] À propos de l'alpha, ne pas empiler, ajouter un filigrane

Vous pouvez ajuster la couleur pure en ajustant alpha

sns.displot(data=penguin,x='bill_depth_mm',kind='kde',hue='sex',fill=True,alpha=0.5)

image.png

[Main-2.7] À propos des multiples, exprimer comme rapport de surface, couvrir, mettre de côté

En spécifiant fill au lieu de stack, il sera possible de tracer quel rapport est le plus grand dans la zone où l'ensemble est 1.

sns.displot(data=penguin,x='bill_depth_mm',kind='kde',hue='sex',multiple="fill")

image.png

Voir les changements avec hist

sns.displot(data=penguin,x='bill_depth_mm',kind='hist',hue='sex',fill=True,multiple="fill")
sns.displot(data=penguin,x='bill_depth_mm',kind='hist',hue='sex',fill=True,multiple="layer")
sns.displot(data=penguin,x='bill_depth_mm',kind='hist',hue='sex',fill=True,multiple="dodge")
sns.displot(data=penguin,x='bill_depth_mm',kind='hist',hue='sex',fill=True,multiple="stack")

fill

image.png

layer

image.png

dodge

image.png

stack

image.png

[Main-2.8] tracé en 2 dimensions

Les deux hist et kde peuvent être transformés en un tracé bidimensionnel en spécifiant x et y. En tant qu'image, les courbes de niveau de la carte

sns.displot(data=penguin, x="flipper_length_mm", y="bill_length_mm",kind='hist')
sns.displot(data=penguin, x="flipper_length_mm", y="bill_length_mm",kind='kde')

image.png

image.png

Le code couleur est la teinte Remplir c'est remplir La division de l'écran est col Il n'y a pas de changement dans la règle

image.png

[Main-2.9] Gradation de couleur bidimensionnelle

Si vous souhaitez ajouter une gradation de couleur, spécifiez le motif dans cmap

Remplit les zones non valorisées (faible probabilité) seuil = 0 (valeur positive inférieure à 1) Ajustez la finesse de la gradation avec les niveaux spécifiés

sns.displot(data=penguin, x="flipper_length_mm", y="bill_length_mm", kind="kde",fill=True, thresh=0, levels=10, cmap='cubehelix')

thresh=0, levels=10

image.png

thresh=0.8, levels=10

image.png

thresh=0, levels=100

image.png

[Main-2.10] Qu'est-ce que la parcelle de tapis?

Un tapis est comme de fines moustaches sur le côté de la tige. Vous pouvez vérifier la densité du tapis en regardant la densité avec kde

sns.displot(data=penguin, x="flipper_length_mm", y="bill_length_mm", kind="kde", rug=True)

image.png

Peut être combiné avec un diagramme de dispersion

sns.scatterplot(data=penguin, x="flipper_length_mm", y="bill_length_mm")
sns.rugplot(data=penguin, x="flipper_length_mm", y="bill_length_mm")

image.png

[Main-2.11] Tracer sur le côté

L'histgramme est une image d'un graphique empilé avec des valeurs sur l'axe des x, En spécifiant une valeur pour y, il dessine automatiquement horizontalement

sns.displot(data=penguin,y='bill_depth_mm',kind='kde',hue='sex',col='island')

image.png

[Main-2.12] Spécification d'un petit titre pour l'intrigue

J'ai parlé de tout le titre au moment de l'option Pour changer chaque petit titre, il est également possible de mettre les informations du graphique dans g une fois et de les récupérer depuis col_name (Voir set_titles pour plus de détails)

g=sns.displot(data=penguin,y='bill_depth_mm',kind='kde',hue='sex',col='island')
g.set_titles("{col_name} penguins")

image.png

[Main-2.13] Graphique cumulatif ecdf

Peut être produit sous forme de probabilité cumulative

sns.displot(data=penguin, x="flipper_length_mm", kind="ecdf")
sns.displot(data=penguin, x="flipper_length_mm", kind="ecdf",complementary=True)

image.png

complementary=True

image.png

Peut être utilisé pour l'analyse du temps de survie, etc.

[Main-2.14] col_wrap qui divise l'écran de dessin en plusieurs parties et log_scale qui effectue un traitement logarithmique

déplot a également une fonction qui vous permet de spécifier s'il faut effectuer le traitement des journaux en interne. Il est également possible d'effectuer un traitement logarithmique sur un seul axe

Le dessin se fait généralement avec col et il est divisé naturellement, 〇 Il est également possible de spécifier que vous souhaitez afficher en colonnes

diamonds = sns.load_dataset("diamonds")
sns.displot(data=diamonds, x="depth", y="price", log_scale=(True, False), col="clarity",col_wrap=5,kind='kde')

image.png

[Main-3] strip, swarm, box.box, violon, point, bar, boxen, count by catplot

[Main-3.1] par défaut du catplot

Habituellement spécifié pour la bande

Puisqu'il s'agit d'un outil de visualisation adapté aux catégories, il correspond à des variables qualitatives

sns.catplot(data=penguin,x='species',y='bill_depth_mm',height=6,kind='strip')

image.png

Regardons les types de genre

sns.catplot(data=penguin,x='species',y='bill_depth_mm',height=6,kind='box')

sns.catplot(data=penguin,x='species',y='bill_depth_mm',height=6,kind='boxen')

sns.catplot(data=penguin,x='species',height=6,kind='count')

sns.catplot(data=penguin,x='species',y='bill_depth_mm',height=6,kind='bar')

sns.catplot(data=penguin,x='species',y='bill_depth_mm',height=6,kind='violin')

sns.catplot(data=penguin,x='species',y='bill_depth_mm',height=6,kind='swarm')

sns.catplot(data=penguin,x='species',y='bill_depth_mm',height=6,kind='point')

box

image.png

boxen

image.png

count

image.png

barre (voir l'axe y du compte)

image.png

violin

image.png

swarm

image.png

point Peut être utilisé pour la comparaison de groupes, l'analyse de dispersion, etc.

image.png

Je pense que vous pouvez voir ce qui précède et comprendre qu'il existe une section de confiance Peut être réglé avec ci

[Main-3.2] Expression de la boîte et du violon

S'il faut dessiner dans la même colonne ou esquiver séparément

sns.catplot(data=penguin, kind="box",x="species", y="body_mass_g", hue="sex", dodge=False,height=6)

image.png

sns.catplot(data=penguin, kind="box",x="species", y="body_mass_g", hue="sex", dodge=True,height=6)

image.png

Idem pour l'essaim et le violon

image.png

image.png

Si vous définissez esquiver sur Faux dans la barre, ce sera un chiffre déroutant

image.png

Je ne roule pas vraiment, je me cache derrière

image.png

split peut être sélectionné pour violon

sns.catplot(data=penguin, kind="violin",x="species", y="body_mass_g", hue="sex", split=True)

image.png

Vous pouvez permuter y et x pour le tourner sur le côté

sns.catplot(data=penguin, kind="violin",y="species", x="body_mass_g", hue="sex", split=True)

image.png

[Main-3.3] essaim et boîte et violon

l'essaim a tendance à avoir de nombreux points Lorsqu'il ne peut pas être dessiné, il avertit que le point à dessiner n'est pas créé. Facile

image.png

Il existe également une fonction qui le superpose en l'ajoutant après la boîte ou le violon.

sns.catplot(data=penguin, kind="box",x="species", y="body_mass_g",height=6)
sns.swarmplot(data=penguin,x="species", y="body_mass_g",hue='sex',palette="Set1")

image.png

[Adv] Utilisation avancée

【adv-1】pair plot

Essayez d'utiliser une paire pratique pour obtenir une vue d'ensemble de l'ensemble du bloc de données

Si vous appelez la fonction pairplot, ce sera une figure familière.

penguin = sns.load_dataset("penguins")
sns.pairplot(penguin)

sns.pairplot(penguin, hue="species)

image.png

image.png

En utilisant PairGrid, vous pouvez spécifier à nouveau les formats de tracé supérieur et inférieur.

penguin = sns.load_dataset("penguins")

g = sns.PairGrid(penguin, diag_sharey=False)
g.map_upper(sns.scatterplot, s=15)
g.map_lower(sns.kdeplot)
g.map_diag(sns.kdeplot, lw=2)

image.png

【adv-2】heat map

Renvoie la carte thermique pour les données au format matrice

flights = sns.load_dataset("flights")
flights = flights.pivot("month","year", "passengers")
sns.heatmap(flights)

image.png

Si vous souhaitez associer le nombre, définissez annot sur True et utilisez fmt pour que le nombre ne devienne pas sauvage.

sns.heatmap(flights, annot=True, fmt="d")

image.png

Lorsque vous souhaitez écrire une limite, spécifiez-la avec des largeurs de ligne

sns.heatmap(flights, linewidths=.5)

image.png

En utilisant triu_indices_from, qui crée une matrice triangulaire numpy, En mettant une matrice comme celle créée par T, F 1,0 dans le masque, Peut être façonné et sorti

corr = np.corrcoef(np.random.randn(10, 200))
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True

with sns.axes_style("white"):
    f, ax = plt.subplots(figsize=(7, 5))
    ax = sns.heatmap(corr, mask=mask, vmax=.3, square=True)

image.png

【adv-3】joint plot

Vérifiez la distribution de chaque variable tout en regardant la relation entre les deux variables comme densité.

sns.jointplot(x='bill_length_mm', y='bill_depth_mm', data=penguin)

image.png

Cela a également un type et peut être spécifié par kind La valeur par défaut ci-dessus est scatter

kde

image.png

hist

image.png

hex

image.png

reg(regression)

image.png

tracé du modèle resid pour vérifier les résidus (décrit plus loin)

image.png

Vous pouvez également tracer tout en réfléchissant à des combinaisons en utilisant jointgrid

Spécifier arbitrairement les vues principale et latérale

g=sns.JointGrid(x='bill_length_mm', y='bill_depth_mm', data=penguin)
g.plot(sns.regplot, sns.kdeplot)

image.png

Ajoutez un tapis, ajoutez kde au diagramme de dispersion, etc. Ajouter en utilisant plot_joint et marginals

g = sns.jointplot(data=penguin, x="bill_length_mm", y="bill_depth_mm")
g.plot_joint(sns.kdeplot, color="r", zorder=0, levels=6)
g.plot_marginals(sns.rugplot, color="r", height=-.15, clip_on=False)

image.png

Créez n'importe quelle combinaison en spécifiant principal, en haut, à droite

g = sns.JointGrid()
x, y = penguin["bill_length_mm"], penguin["bill_depth_mm"]
sns.scatterplot(x=x, y=y, ec="b", fc="none", s=100, linewidth=1.5, ax=g.ax_joint)
sns.histplot(x=x, fill=False, linewidth=2, ax=g.ax_marg_x)
sns.kdeplot(y=y, linewidth=2, ax=g.ax_marg_y)

image.png

【adv-4】linear model plot

Apparemment, la combinaison de Facet et regplot ressemble à lmplot, donc en gros je vais expliquer avec lmplot. Il semble être regplot que cela fonctionne avec pairplot et jointplot

Visualisez la régression linéaire

sns.lmplot(x='bill_length_mm', y='body_mass_g', data=penguin)

image.png

Code couleur par teinte

image.png

Déterminer l'ordre de régression polypoly avec ordre

sns.lmplot(x='bill_length_mm', y='body_mass_g', data=penguin, order=5)

image.png

Il existe également une option pour la logistique

penguin['male'] = pd.get_dummies(penguin.sex)['Male']
sns.lmplot(x='bill_length_mm', y='male',data=penguin, logistic=True)

Après avoir fait un modèle, je veux comparer les résidus Une vérification résiduelle est effectuée pour voir dans quelle mesure le modèle lm dessiné (linéaire ou polypoly) peut expliquer les données. En tant que jugement du modèle linéaire, si le résidu semble suivre la distribution normale, le modèle peut être considéré comme un bon modèle dans une certaine mesure.

Probablement à cause de la relation entre reg et lm La fonction d'arrière-plan s'exécute-t-elle sur "resid" du residplot jointplot?

sns.jointplot(x='bill_length_mm', y='body_mass_g', data=penguin,order=1,kind='resid')
sns.jointplot(x='bill_length_mm', y='body_mass_g', data=penguin,order=10,kind='resid')

Résidu de premier ordre

image.png

10e ordre résiduel

image.png

Comparer avec le modèle de sklearn
import sklearn
from sklearn import datasets,linear_model

penguin=penguin.dropna(how='any')
model = linear_model.LinearRegression()

X = np.array(penguin["bill_length_mm"]).reshape(-1, 1)
Y = np.array(penguin["body_mass_g"]).reshape(-1, 1)
model.fit(X, Y)
pred_y = model.predict(X)

plt.scatter(x=X, y=Y-pred_y)

image.png

Il semble qu'il calculera le résidu.

【adv-5】clustermap

iris = sns.load_dataset("iris")
species = iris.pop("species")
g = sns.clustermap(iris)

Visualise le clustering hiérarchique Spécifiez par méthode les critères de distance à grouper

Ce domaine est difficile à expliquer, il est donc plus rapide si vous apprenez le clustering hiérarchique. méthode est obtenue à partir du calcul scipy [scipy.cluster.hierarchy.linkage](https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.linkage.html#scipy.cluster.hierarchy .lien )

image.png

mathod

single
complete
average
weighted
centroid
median
ward

single

image.png

finalement

Nous prévoyons d'introduire plus de méthodes de visualisation Même si le code est sale, je veux faire attention à ne pas utiliser le mauvais chiffre autant que possible

référence

Release news-v0.11.0 (septembre 2020)

API reference

Announcing the release of seaborn 0.11

Overview of seaborn plotting functions

Recommended Posts

Essayez toutes les dernières API Seaborn pour améliorer vos compétences en visualisation de données [Visualization Uncle, 2020/9 / 9-ver 0.11.0]
Essayez d'améliorer votre propre quiz d'introduction avec Python
Essayez de déchiffrer les données de connexion stockées dans Firefox