[PYTHON] Comment diviser et traiter une trame de données à l'aide de la fonction groupby

À propos de cet article

Dans l'analyse des données à l'aide des pandas de Python, la fonction groupby est une fonction pratique qui calcule pour chaque groupe. J'utilise souvent df.groupby (df ['col1']) ['col2'] **. Mean () ** et **. Describe () ** C'est une fonction orthodoxe telle que Parfois, je souhaite traiter chaque trame de données divisée, J'ai trouvé que la combinaison de l'instruction ** for ** et ** get_group ** peut être traitée facilement, je vais donc la présenter.

Préparation des données

groupby_get_group.py


import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np

iris_dataset = load_iris()
df_iris=pd.DataFrame(iris_dataset.data,columns=iris_dataset.feature_names)
#Ajouter une colonne cible
df_iris.loc[:,'target']=iris_dataset.target
#Créer un dictionnaire de noms de produits
iris_map=dict(zip([0,1,2],iris_dataset.target_names))
#Connectez DataFrame et le dictionnaire à la cible de la fonction de carte_Ajouter une colonne pour les noms
df_iris.loc[:,'target_names']=df_iris['target'].map(iris_map)

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target target_names
5.1 3.5 1.4 0.2 0 setosa
4.9 3.0 1.4 0.2 0 setosa
- - - - - -
5.7 2.8 4.1 1.3 1 versicolor
- - - - - -
6.3 3.3 6.0 2.5 2 virginica

Essayez d'appliquer la fonction groupby à target_names

Divisez la base de données (** df_iris ) par race ( 'target_names' **). Celui divisé est ** gp **.

groupby_get_group.py


gp = df_iris.groupby('target_names')

Examiner les attributs de l'objet fractionné

In[0]:type(gp)
Out[0]:pandas.core.groupby.generic.DataFrameGroupBy

In[1]:print(gp)
Out[1]:<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000028788A33708>

Les ensembles de données fractionnés à l'aide de groupby ne peuvent pas être utilisés tels quels. Par conséquent, examinons les attributs, etc. en utilisant l'instruction for.

Utiliser pour la déclaration

In[2]:for d_gp in gp:
          print(d_gp)
Out[2]:
 147                6.5               3.0  ...       2     virginica
 148                6.2               3.4  ...       2     virginica
 149                5.9               3.0  ...       2     virginica
 
 [50 rows x 6 columns])

In[3]:type(d_gp)
out[3]:tuple

Il semble que la trame de données divisée soit stockée sous forme de variable de type tapple (** d_gp **). Ici, afin de vérifier le contenu de la taple, si vous tapez ce qui suit,

In[4]:d_gp[0]
Out[4]:'virginica'
 
In[5]:d_gp[1]
Out[5]:
     sepal length (cm)  sepal width (cm)  ...  target  target_names
100                6.3               3.3  ...       2     virginica
101                5.8               2.7  ...       2     virginica
102                7.1               3.0  ...       2     virginica
103                6.3               2.9  ...       2     virginica

147                6.5               3.0  ...       2     virginica
148                6.2               3.4  ...       2     virginica
149                5.9               3.0  ...       2     virginica

[50 rows x 6 columns]

L'état après l'exécution de l'instruction for est que la trame de données du troisième niveau ** 'virginica' ** de ** "target_names" ** est affectée à ** d_gp **. Tu peux vérifier.

Par conséquent, il est acceptable d'itérer uniquement ** d_gp [1] **, mais ici nous tirons parti de ** d_gp [0] ** et récupérons un ensemble de données spécifique avec la fonction ** get_group **. Je vais le traiter.

Obtenez les données stockées dans le taple par get_group.

L'instruction ** for ** peut récupérer des tapples, Le premier taple contient le niveau de la ligne (variétés: setosa, versicolor, virginica) multiplié par ** groupe par **. Le second contient chaque trame de données.

En utilisant le niveau stocké dans le premier de ce taple comme variable, ** get_group ** extrait la trame de données stockée dans le second du tapple et la traite pour chaque niveau.

Ce qui suit est une base de données divisée pour chaque variété setosa, versicolor, virginica. Spécifiez le type et extrayez le bloc de données Un graphique de "longueur sépale" et "largeur sépale".

groupby_get_group.py


for d_gp in gp:
    df_g=gp.get_group(d_gp[0])
    ##Écrivez ce que vous voulez traiter en utilisant le bloc de données divisé ci-dessous ici
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    X=df_g[df_g.columns[0]].values
    y=df_g[df_g.columns[1]].values
    ax.set_title(str.capitalize(d_gp[0])+"  "+\
                 str.capitalize(df_g.columns[0])+\
                 ' vs '+str.capitalize(df_g.columns[1]))
    ax.scatter(X,y,marker='o',color='darkblue',edgecolor="")
    cor=np.corrcoef(X, y)[0,1]
    ax.set_xlabel(str.capitalize(df_g.columns[0]))
    ax.set_ylabel(str.capitalize(df_g.columns[1]))
    ax.text(0.99, 0.01,"correlation:{0:.2}".format(cor),
                    horizontalalignment='right', verticalalignment='bottom',
                    fontsize=12,color="blue",transform=ax.transAxes)
    plt.show()

Figure setosa.png Figure Versicolor.png Figure Virginica.png

c'est tout.

en conclusion

Je posterai sur Qiita pour la première fois. Qiita voulait m'aider, alors j'espère que cela aide quelqu'un.

Les références

Codage de base pour l'analyse de données Python / apprentissage automatique! Introduction à l'utilisation de la bibliothèque pandas (impression top gear) (japonais) Livre (couverture souple) ISBN-10: 4295005657 ISBN-13: 978-4295005650

Recommended Posts

Comment diviser et traiter une trame de données à l'aide de la fonction groupby
[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
[Python] Smasher a essayé de faire du processus de chargement de la vidéo une fonction à l'aide d'un générateur
Comment écrire une interface graphique à l'aide de la commande maya
Comment appeler une fonction
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
Comment savoir quel processus utilise le port localhost et l'arrêter
Comment ajouter de nouvelles données (lignes droites et tracés) à l'aide de matplotlib
Comment générer une requête à l'aide de l'opérateur IN dans Django
Créer un environnement Python et transférer des données vers le serveur
[Introduction à Python] Comment obtenir des données avec la fonction listdir
[Linux] [C / C ++] Comment obtenir la valeur d'adresse de retour d'une fonction et le nom de fonction de l'appelant
[C / C ++] Passez la valeur calculée en C / C ++ à une fonction python pour exécuter le processus et utilisez cette valeur en C / C ++.
Comment utiliser la fonction zip
Comment créer une fonction récursive
Comment obtenir uniquement les données nécessaires du groupe de données structurées à l'aide d'une méthode polyvalente
Comment insérer un processus spécifique au début et à la fin de l'araignée avec la tremblante
Remarques sur la création d'un environnement LAMP à l'aide de Vagrant et VirtulBox
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Traitez le résultat de l'exécution de Splunk en utilisant Python et enregistrez-le dans un fichier
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
[Langage C] Comment créer, éviter et créer un processus zombie
Comment formater un tableau à l'aide de Pandas Appliquer, pivoter et permuter le niveau
Comment mettre à jour une source de données de classeur packagée Tableau à l'aide de Python
Comment diviser et enregistrer un DataFrame
Comment dessiner un graphique avec Matplotlib
Comment installer un package à l'aide d'un référentiel
[Python] Explique comment utiliser la fonction range avec un exemple concret
[Python] Comment utiliser la fonction enumerate (extraire le numéro d'index et l'élément)
Comment réparer la population initiale avec un algorithme génétique utilisant DEAP
Comment créer un wrapper qui préserve la signature de la fonction à envelopper
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
[Environnement de développement] Comment créer un ensemble de données proche de la base de données de production
Comment copier et coller le contenu d'une feuille au format JSON avec une feuille de calcul Google (en utilisant Google Colab)
Comment calculer la volatilité d'une marque
Comment coder un drone en utilisant la reconnaissance d'image
Comment créer un objet fonction à partir d'une chaîne
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment obtenir des données d'article à l'aide de l'API Qiita
Je suis accro à la différence dans la façon dont Flask et Django reçoivent les données JSON
Comment lire les fichiers de numéros de série en boucle, les traiter et les représenter graphiquement
Changer le bloc de données des données d'achat de pandas (produit ID X) en dictionnaire
J'ai essayé de traiter et de transformer l'image et d'élargir les données pour l'apprentissage automatique
[Python] Comment utiliser la fonction de hachage et taple.
Comment rechercher des données HTML à l'aide de Beautiful Soup
Nettoyage des données Comment gérer les valeurs manquantes et aberrantes
La première étape de l'analyse du journal (comment formater et mettre les données du journal dans Pandas)
[Go] Comment écrire ou appeler une fonction
Sous Linux (Ubuntu), réglez le Trackpad et réglez la fonction sur un balayage à trois doigts
Comment mettre en ligne sur un Drive partagé à l'aide de pydrive
Comment désinstaller un module installé à l'aide de setup.py
Comment se moquer d'une fonction publique dans Pytest
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
Comment utiliser la commande grep pour rechercher de manière récursive des répertoires et des fichiers à une profondeur spécifiée
[Pour les débutants] Comment afficher des cartes et des champs de recherche à l'aide de l'API Javascript GoogleMap
Comment confirmer le théorème de Persival en utilisant matplotlib et la transformée de Fourier de Scipy (FFT)
Lire la source Python-Markdown: Comment créer un analyseur