[PYTHON] Gérez les structures de données 3D avec les pandas

Gérer les données 3D

La structure de données principale dans pandas est la [Series] unidimensionnelle ou en ligne (http://pandas.pydata.org/pandas-docs/dev/generated/). Il existe pandas.Series.html) et DataFrame bidimensionnel ou tabulaire (http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.html). C'est l'objet principal des pandas et il est également détaillé dans Python for Data Analysis.

Mais il y a en fait un autre objet majeur. C'est le troisième [Panel] tridimensionnel (http: //pandas.pydata) qui apparaît dans Intro to Data Structures. .org / pandas-docs / stable / generated / pandas.Panel.html).

Cette structure de données tridimensionnelle est utile, par exemple, lorsque vous souhaitez extraire des nombres arbitraires à partir de données de table quotidiennes et effectuer une analyse statistique sur les journaux de séries chronologiques.

Créer un objet Panel

Les panneaux peuvent être créés en prenant un DataFrame au format dictionnaire ou un ndarray en trois dimensions comme argument. Faisons-le concrètement.

import pandas as pd
rng = pd.date_range('1/1/2014',periods=100,freq='D')

#Créez un bloc de données avec des nombres aléatoires et définissez l'index sur ABCD
df1 = pd.DataFrame(np.random.randn(100, 4), index = rng, columns = ['A','B','C','D'])
df2 = pd.DataFrame(np.random.randn(100, 4), index = rng, columns = ['A','B','C','D'])
df3 = pd.DataFrame(np.random.randn(100, 4), index = rng, columns = ['A','B','C','D'])

#Créer un objet Panel en combinant ces blocs de données
pf = pd.Panel({'df1':df1,'df2':df2,'df3':df3})

pf
#=>
# <class 'pandas.core.panel.Panel'>
# Dimensions: 3 (items) x 100 (major_axis) x 4 (minor_axis)
# Items axis: df1 to df3
# Major_axis axis: 2014-01-01 00:00:00 to 2014-04-10 00:00:00
# Minor_axis axis: A to D

L'objet Panel a été créé comme ceci. Chaque dimension est appelée axe Items, Major_axis, Minor_axis.

Consultez la documentation (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Panel.html) pour connaître les méthodes de cet objet.

Opérations clés de l'objet Panel

Tout d'abord, il sera populaire d'accéder par index.

pf.ix[0] #Accès à df1
pf.ix[1] #Accès à df2
pf['df1'] #C'est aussi l'accès à df1

De cette façon, vous pouvez accéder à chaque table que Panel possède.

#Ajouter une nouvelle colonne à la table
pf['df1']['E'] = pd.DataFrame(np.random.randn(100, 1), index = rng)
pf['df2']['E'] = pd.DataFrame(np.random.randn(100, 1), index = rng)

#Vérifiez la structure des données
pf.shape
#=> (3, 100, 4)

#df1 Accéder à 10 colonnes de la colonne E du tableau
pf.ix['df1',-10:,'E']
#=>
# 2014-04-01   -1.623615
# 2014-04-02    1.878481
# 2014-04-03   -0.890555
# 2014-04-04    0.736037
# 2014-04-05   -1.451665
# 2014-04-06    0.126473
# 2014-04-07    0.997485
# 2014-04-08   -1.252981
# 2014-04-09   -1.136791
# 2014-04-10   -1.873199

Le panneau peut également être converti en trames de données empilées avec to_flame (). Vous pouvez utiliser des fonctions statistiques pour ce bloc de données empilées. De plus, cet objet peut être reconverti dans le Panel d'origine avec to_panel ().

pf.to_frame().to_panel()
#=>
# <class 'pandas.core.panel.Panel'>
# Dimensions: 3 (items) x 100 (major_axis) x 4 (minor_axis)
# Items axis: df1 to df3
# Major_axis axis: 2014-01-01 00:00:00 to 2014-04-10 00:00:00
# Minor_axis axis: A to D

Utilisez le Panel pour analyser les données du journal

Supposons qu'un fichier journal d'application soit généré quotidiennement dans un répertoire, par exemple Fluentd. Lors de l'analyse de ce fichier journal sur plusieurs dates, il est très pratique de tabuler les données pour une journée et d'utiliser une structure de données en trois dimensions pour l'analyse des séries chronologiques.

L'article de l'autre jour Je vais réécrire et appliquer le programme pour obtenir la liste des fichiers du répertoire qui est sorti comme exemple.

import sys
import os
import pandas as pd

def list_files(path):
    dic = {}
    for root, dirs, files in os.walk(path):
        for filename in files:
            fullname = os.path.join(root, filename)
            if filename.startswith("fluent") \
               and filename.endswith(".log"):
                try:
                    print("Reading: %(filename)s" % locals())
                    df = pd.read_table(
                        os.path.join(path, filename), header=None)
                    dic[filename] = df
                except pd.parser.CParserError:
                    print("Skip: %(filename)s" % locals())
    return pd.Panel(dic)

Étant donné que l'objet Panel renvoyé par cette méthode est une structure de données en trois dimensions qui regroupe plusieurs fichiers journaux, vous pouvez utiliser des fonctions statistiques pour analyser les données de séries chronologiques.

Résumé

les pandas peuvent utiliser Panel pour travailler avec des structures de données 3D. En ajoutant une autre dimension en plus de la structure de données de ligne et de colonne, il est utile pour l'analyse des données de séries chronologiques.

Recommended Posts

Gérez les structures de données 3D avec les pandas
Essayez de travailler avec des données binaires en Python
Visualisation des données avec les pandas
Manipulation des données avec les Pandas!
Exploitez LibreOffice avec Python
Gérer les sons en Python
Conseils de traitement des données avec Pandas
Ingéniosité pour gérer les données avec Pandas de manière à économiser la mémoire
Travailler avec LibreOffice en Python: import
Traçage de données polyvalent avec pandas + matplotlib
Structure de données Python apprise avec la chimioinfomatique
Travailler avec des images DICOM en Python
Obtenez des données supplémentaires vers LDAP avec python
Chargez csv avec des colonnes en double dans pandas
Livre Ali en python: Sec.2-4, structure de données
Essayez de convertir en données ordonnées avec les pandas
Les données RDS via la plate-forme pas à pas sont envoyées aux Pandas
Exemple de traitement efficace des données avec PANDAS
Meilleures pratiques pour manipuler les données avec les pandas
Agrégation pratique de séries chronologiques avec TimeGrouper de pandas
Visualisez les données d'infection corona à Tokyo avec matplotlib
Essayez d'agréger les données de musique doujin avec des pandas
Lire les données csv Python avec Pandas ⇒ Graphique avec Matplotlib
Supprimer des données dans un modèle avec Redis Cluster
Lire les données de la table dans un fichier PDF avec Python
lecture de données pandas
Précautions lors du traitement des structures de contrôle dans Python 2.6
Visualisez de manière interactive les données avec Treasure Data, Pandas et Jupyter.
Essayez de travailler avec Mongo en Python sur Mac
Supprimer les lignes avec des index en double dans pandas DataFrame
Gérer les types entiers avec des valeurs manquantes dans Pandas
[Introduction pour les débutants] Manipuler MySQL avec Python
Enregistrez les données pandas dans des actifs de données au format Excel avec Cloud Pak for Data (Watson Studio)
Entraînez les données MNIST avec PyTorch en utilisant un réseau neuronal
Obtenez des données Amazon RDS (PostgreSQL) à l'aide de SQL avec pandas
Exemple de code spécifique pour travailler avec SQLite3 en Python
Comment convertir des données détenues horizontalement en données détenues verticalement avec des pandas
Soyez prudent lors de la lecture de données avec des pandas (spécifiez dtype)
Construction d'un environnement d'analyse de données avec Python (notebook IPython + Pandas)
Remplissez les valeurs aberrantes avec NaN en fonction des quadrants dans Pandas
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
Traiter les données csv avec python (traitement du comptage à l'aide de pandas)
Trier les données de publication dans l'ordre inverse avec ListView de Django
[Mémo] Correspondance de texte dans le cadre de données pandas à l'aide de Flashtext
Convertissez les variables numériques en variables catégorielles avec les pandas en définissant un seuil
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
Analyse de données avec python 2
Apprenez les pandas en 10 minutes
Traitement des ensembles de données avec des pandas (1)
Convertir 202003 en 2020-03 avec les pandas
Traitement des ensembles de données avec des pandas (2)
Fusionner les ensembles de données avec les pandas
Échantillonnage dans des données déséquilibrées
Pandas apprenant avec la chimioinfomatique
Lecture de données avec TensorFlow
UnicodeDecodeError dans pandas read_csv
Graphique 2D dans matplotlib