[PYTHON] À propos de Boxplot et Violinplot qui visualisent la variation des données indépendantes

introduction

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.

table des matières

  1. Génération de données
  2. Boxplot
  3. Violinplot
  4. Enfin
  5. Référence

1. Génération de données

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.

  1. Boxplot Il convient à la visualisation de la variation des données numériques comprenant deux types de données de catégorie. Utilisez le [boxplot] de seaborn (http://seaborn.pydata.org/examples/grouped_boxplot.html).

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)

download (2).png

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.

download (1).png

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.

  1. violinplot Semblable à boxplot, il visualise la différence entre les données numériques, y compris deux types de données de catégorie. Ici, chaque donnée numérique est exprimée sous forme de distribution.

Préparation des données

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.

Créer une intrigue de violon

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)

download (3).png

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.

download (4).png

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.

finalement

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éférence

Résumé des sources de données scicit-learn pouvant être utilisées lors de la rédaction d'articles d'analyse boxplot violinplot

Recommended Posts

À propos de Boxplot et Violinplot qui visualisent la variation des données indépendantes
Ceci et celui de la notation d'inclusion.
Visualisez les données d'exportation du journal Piyo
À propos du comportement de copy, deepcopy et numpy.copy
Parlez des fonctionnalités dont les pandas et moi étions en charge dans le projet
À propos du prétraitement des données des systèmes utilisant l'apprentissage automatique
Visualisez la gamme d'insertions internes et externes avec python
Visualisez les données et saisissez la corrélation en même temps
Pensez à la nouvelle génération de Rack et WSGI
À propos de l'inefficacité du transfert de données dans luigi on-memory
Notes personnelles sur l'intégration de vscode et anaconda
Il est temps de réfléchir sérieusement à la définition et aux compétences des data scientists
Faisons l'analyse des données de naufrage du Titanic comme ça
Traitement des données qui élimine les effets des facteurs d'intrication (théorie)
Ceci et cela à propos de pd.DataFrame
Visualisez la trajectoire de Hayabusa 2
À propos des composants de Luigi
À propos des fonctionnalités de Python
À propos de la gestion des données d'Anvil-App-Server
Début de l'analyse de l'encyclopédie Nico Nico ~ Appuyez sur les données fournies par JSON
Trouvez l'emplacement d'installation du capteur qui maximise la quantité de données acquises
[Python] À propos de la création d'un outil pour créer un nouveau courrier Outlook basé sur les données du fichier JSON et de la partie qui a été interceptée
À propos du bogue qu'Anaconda ne parvient pas à importer numpy et scipy
Vérification de la théorie selon laquelle "Python et Swift sont assez similaires"
L'histoire de Python et l'histoire de NaN
À propos de la valeur de retour de pthread_mutex_init ()
À propos de la valeur de retour de l'histogramme.
À propos du type de base de Go
Ceci et cela des propriétés python
À propos de la limite supérieure de threads-max
À propos des données de séries chronologiques et du surentraînement
À propos du comportement de yield_per de SqlAlchemy
À propos de la taille des points dans matplotlib
Visualisez l'état de la réponse du recensement national 2020
À propos de la liste de base des bases de Python
J'ai essayé de visualiser la tranche d'âge et la distribution des taux d'Atcoder
[Python] Visualisez la chaleur de Tokyo et de la préfecture ○○ (mémo d'utilisation de DataFrame)
À propos de "spleeter" qui peut séparer les voix et les instruments de musique des données musicales
Rechercher le nom et les données d'une variable libre dans un objet fonction
Résumé des distributions de probabilité qui apparaissent souvent dans les statistiques et l'analyse des données
Une note sur les fonctions de la bibliothèque Linux standard qui gère le temps
Nettoyage des données des données ouvertes de la situation d'occurrence du ministère de la Santé, du Travail et des Affaires sociales
A propos des principales tâches de traitement d'image (vision par ordinateur) et de l'architecture utilisée