Analyser des données XML en Python
Le langage de balisage extensible (XML) est un langage de balisage qui code les données dans un format lisible par l’homme et la machine. XML est utilisé dans une variété de programmes pour structurer, stocker et transmettre des données. Python contient plusieurs interfaces pour le traitement des données XML. Dans cet article, nous verrons comment utiliser le module «ElementTree» dans la bibliothèque python «xml» pour analyser les données XML et stocker les données dans un cadre de données Pandas.
Commençons!
Pour nos besoins, nous utiliserons un exemple de fichier «xml», «books.xml», qui peut être trouvé ici. Le fichier contient des informations sur une variété de livres, tels que les titres, les noms des auteurs et les prix.
Pour commencer, importons ‘parse’ à partir du module ‘ElementTree’ dans la bibliothèque python ‘xml’:
from xml.etree.ElementTree import parse
Voyons maintenant les balises de fichier dans «books.xml»:
Nous pouvons définir un objet de document «XML» analysé en passant le nom de fichier dans la méthode «parse ()»:
document = parse('books.xml')
Si nous imprimons l’objet, nous voyons que nous avons un objet «Elementree» à une adresse mémoire spécifiée:
print(document)
Voyons les méthodes et les attributs disponibles pour cet objet en utilisant la méthode intégrée «dir ()»:
print(dir(document))
Utilisons la méthode ‘iterfind ()’ pour renvoyer un générateur sur lequel nous pouvons utiliser l’itération dans une ‘for-loop’. Nous aurons besoin de spécifier un argument de chemin dans la méthode ‘iterfind ()’. Sélectionnons le chemin du « livre »:
for item in document.iterfind(‘book’):
print(item)
Nous voyons que nous avons plusieurs objets ‘Livre d’éléments’ stockés à différentes adresses mémoire. Nous pouvons extraire les informations de ces objets en utilisant la méthode ‘findtext ()’. Extrayons les informations dans les balises « auteur »:
for item in document.iterfind('book'):
print(item.findtext('author'))
Nous pouvons également extraire des titres:
for item in document.iterfind('book'):
print(item.findtext('title'))
Regardons également les prix:
for item in document.iterfind('book'):
print(item.findtext('price'))
Ensuite, nous pouvons initialiser des listes que nous pouvons utiliser pour stocker ces valeurs:
author = []
title = []
price = []
Et dans la boucle for, nous pouvons ajouter les valeurs:
for item in document.iterfind('book'):
author.append(item.findtext('author'))
title.append(item.findtext('title'))
price.append(item.findtext('price'))
Nous pouvons ensuite stocker ces listes dans un bloc de données. Importons d’abord la bibliothèque Pandas:
import pandas as pd
Définissons ensuite un bloc de données contenant le « titre », « l’auteur » et le « prix » de chaque livre:
df = pd.DataFrame({'title': title, 'author':author, 'price':price})
Imprimons ensuite le bloc de données résultant:
print(df)
Nous pouvons également ajouter le «genre», la «date de publication» et la «description» au bloc de données:
genre = []
description = []
publish_date = []for item in document.iterfind('book'):
...
genre.append(item.findtext('genre'))
description.append(item.findtext('description'))
publish_date.append(item.findtext('publish_date'))
Maintenant que nous avons toutes les informations dans un bloc de données, nous pouvons faire des choses comme convertir les chaînes de «prix» en «flottant» et calculer la moyenne de la colonne «prix»:
df['price'] = df['price'].astype(float)
print("Mean price: ", df['price'].mean())
Convertissons également la «publication_date» en un objet «datetime» et tirons les valeurs de l’année, du mois et du jour:
df['publish_date'] = pd.to_datetime(df['publish_date'])
df['year'] = df['publish_date'].dt.year
df['month'] = df['publish_date'].dt.month
df['day'] = df['publish_date'].dt.day
print(df.head())
Nous pouvons également utiliser la méthode ‘Counter ()’ du module collections pour regarder la distribution en auteurs et genres:
from collections import Counter
print(Counter(df['author']))
print(Counter(df['genre']))
Je m’arrête ici, mais n’hésitez pas à jouer avec les données et à coder vous-même.
Pour résumer, dans cet article, nous avons discuté de la façon d’analyser les données XML en utilisant la bibliothèque ‘xml’ en python. Nous avons montré comment utiliser la méthode ‘iterfind ()’ pour définir un objet générateur que nous pouvons parcourir dans une ‘for-loop’. Nous avons également montré comment accéder aux informations de balise d’élément à l’aide de la méthode «findtext ()». Nous avons ensuite stocké les informations XML dans des listes que nous avons utilisées pour définir une trame de données Pandas. J’espère que vous avez trouvé cet article utile / intéressant. Les données et le code de cet article sont disponibles sur GitHub. Merci pour la lecture!