Cet article utilise Python 2.7, numpy 1.11, scipy 0.17, scikit-learn 0.18, matplotlib 1.5, seaborn 0.7, pandas 0.17. Il a été confirmé qu'il fonctionne sur le notebook jupyter. (Veuillez modifier correctement% matplotlib inline) Utilisez le boxplot et le violinplot de Seaborn.
Si vous avez vos propres données, veuillez les ignorer.
Utilisez make_classification of here pour créer 1000 échantillons de données de classe 2D 2. De plus, soit A et B, les deux données numériques, et soit le sexe, les données d'étiquette. De plus, numpy.random.binomial () génère de manière aléatoire 0, 1 et 2. Concaténez-les pour créer des types.
make_classification.py
import numpy as np
from sklearn.datasets import make_classification
import pandas as pd
x, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_informative=2,n_clusters_per_class=2, n_classes=2)
data = np.c_[np.c_[x, y], np.random.binomial(2, .5, len(x))]
data = pd.DataFrame(data).rename(columns={0:'A', 1:'B', 2:'sex', 3:'types'})
Le contenu des données ressemble à ceci
A B sex types
0 2.131411 -1.754907 0 1
1 -0.046614 -1.009540 0 2
2 0.136387 -0.236662 1 1
3 -3.515190 2.117925 1 1
4 -2.099287 1.647548 1 1
5 -0.536360 -0.920529 0 0
6 0.281726 -0.572448 1 2
7 2.202351 -3.214435 0 1
8 -0.825666 0.847394 1 0
9 -1.602873 1.338847 1 2
Nous avons maintenant généré deux données numériques comprenant deux types de données de catégorie.
boxplot.py
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
sns.boxplot(x='types', y="A", hue='sex', data=data, palette="PRGn")
sns.despine(offset=10, trim=True)
J'ai pu dessiner une boîte de moustaches pour chaque sexe et type. Comme vous pouvez le voir dans wikipedia, la ligne médiane est La valeur médiane et le haut et le bas de la boîte sont les 1er et 3e quadrants, respectivement, et le haut et le bas des moustaches sont les valeurs maximale et minimale, respectivement. Les points supérieur et inférieur signifient les «valeurs aberrantes» si on les juge à partir des 1er et 3e quadrants. Visualisons également d'autres valeurs numériques B.
La valeur numérique B semble représenter la différence entre les sexes de manière significative. (Les données sont différentes à chaque fois qu'elles sont générées) En ce qui concerne les types, il peut être difficile de classer simplement en regardant ces données. De cette façon, boxplot peut être utilisé pour exprimer facilement la variation entre les deux types de données de catégorie.
Utilisez la fonction melt de pandas pour transformer le DataFrame.
melt.py
data_batch = pd.melt(data, id_vars = ['types', 'sex'], value_vars = data.columns[:-2].tolist())
print data_batch[:10]
En procédant ainsi, vous pouvez "Décomposer" le DataFrame. Voici le résultat de l'exécution.
types sex variable value
0 1 0 A 2.131411
1 2 0 A -0.046614
2 1 1 A 0.136387
3 1 1 A -3.515190
4 1 1 A -2.099287
5 0 0 A -0.536360
6 2 1 A 0.281726
7 1 0 A 2.202351
8 0 1 A -0.825666
9 2 1 A -1.602873
Le nom de la colonne des données numériques est variable et la valeur numérique est value.
Visualisez les données préparées "Unpivot" en utilisant violinplot.
violinplot.py
data_batch_A = data_batch[data_batch.variable=='A']
sns.violinplot(x = 'types', y = 'value', hue = 'sex', data = data_batch_A, split=True)
sns.despine(offset=10, trim=True)
Le tracé semble que les objets gauche et droit sont mis en valeur. Dans le boxplot, j'ai regardé la médiane et les quadrants, donc j'ai senti que l'ensemble était une distribution normale. D'autre part, le violin plot visualise la valeur cumulée elle-même, il est donc possible d'observer plusieurs pics (multimodaux) dans chaque type de données. De même, visualisez les données numériques de B.
Comme avec boxplot, vous pouvez voir que la distribution de la valeur numérique B est clairement divisée pour chaque sexe. Concernant le type, n'est-il pas impossible de classer en regardant la forme de la distribution? Je sens ça.
Introduction du box plot et du violon plot. Boxplot peut être utile si vous souhaitez vous concentrer sur les quadrants et les valeurs médianes, et violinplot si vous souhaitez voir la forme et la multimodalité de la distribution. Dans tous les cas, il est pratique de visualiser les données lorsqu'elles sont considérées comme une variable indépendante sans tenir compte de la corrélation entre les données.
Résumé des sources de données scicit-learn pouvant être utilisées lors de la rédaction d'articles d'analyse boxplot violinplot