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
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
・ 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'affichage disparaîtra à l'avenir, veuillez passer à la fonction dis, hist dès que possible.
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.
Présentation des idées intéressantes de seaborn
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.
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).
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.
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
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
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")
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)
g = sns.displot(df.flipper_length_mm)
g.set_axis_labels("Xaxis", "Yaxis")
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)
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
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')
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')
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')
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")
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()
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")
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)
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')
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")
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")
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)
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))
Ou mis du côté FacetGrid
sns.FacetGrid(df,col='species',xlim=[0,10],ylim=[0,10])
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
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
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")
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")
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")
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')
Facile à comprendre avec la ligne
fmri = sns.load_dataset("fmri")
sns.relplot(data=fmri,x="timepoint", y="signal", hue="event",kind='line')
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%
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')
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')
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')
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')
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
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")
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')
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
step
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)
sns.displot(data=penguin,x='bill_depth_mm',kind='hist',kde=True)
Bien sûr, si vous spécifiez kind = 'kde', hist disparaît.
sns.displot(data=penguin,x='bill_depth_mm',kind='kde')
sns.histplot(data=penguin,x='bill_depth_mm')
sns.kdeplot(data=penguin,x='bill_depth_mm')
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
Quand 100
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')
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")
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)
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)
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)
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")
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
layer
dodge
stack
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')
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
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
thresh=0.8, levels=10
thresh=0, levels=100
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)
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")
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')
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")
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)
complementary=True
Peut être utilisé pour l'analyse du temps de survie, etc.
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')
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')
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
boxen
count
barre (voir l'axe y du compte)
violin
swarm
point Peut être utilisé pour la comparaison de groupes, l'analyse de dispersion, etc.
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
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)
sns.catplot(data=penguin, kind="box",x="species", y="body_mass_g", hue="sex", dodge=True,height=6)
Idem pour l'essaim et le violon
Si vous définissez esquiver sur Faux dans la barre, ce sera un chiffre déroutant
Je ne roule pas vraiment, je me cache derrière
split peut être sélectionné pour violon
sns.catplot(data=penguin, kind="violin",x="species", y="body_mass_g", hue="sex", split=True)
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)
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
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")
【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)
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)
【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)
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")
Lorsque vous souhaitez écrire une limite, spécifiez-la avec des largeurs de ligne
sns.heatmap(flights, linewidths=.5)
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)
【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)
Cela a également un type et peut être spécifié par kind La valeur par défaut ci-dessus est scatter
kde
hist
hex
reg(regression)
tracé du modèle resid pour vérifier les résidus (décrit plus loin)
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)
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)
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)
【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)
Code couleur par teinte
Déterminer l'ordre de régression polypoly avec ordre
sns.lmplot(x='bill_length_mm', y='body_mass_g', data=penguin, order=5)
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
10e ordre résiduel
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)
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 )
mathod
single
complete
average
weighted
centroid
median
ward
single
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
Release news-v0.11.0 (septembre 2020)