L'ingénierie des données simplifiée - Scripts Python joints pour démarrer vos tâches ETL
Aperçu:
Assumez le travail d'un ingénieur de données, extrayez des données de plusieurs sources de formats de fichiers, transformez-les en types de données particuliers et chargez-les dans une source unique pour analyse. Bientôt Après avoir lu cet article, à l'aide de plusieurs exemples pratiques, vous pourrez mettre vos compétences à l'épreuve en mettant en place du web scraping et en extrayant des données avec des API. Avec Python et l'ingénierie des données, vous pourrez commencer à collecter d'énormes ensembles de données à partir de nombreuses sources et à les transformer en une seule source principale ou commencer à rechercher des informations commerciales utiles sur le Web.
Synopsis:
- Pourquoi l'ingénierie des données est plus fiable ?
- Déroulement du cycle ETL
- Pas à pas Extraire, Transformer, la fonction Charger
- À propos de l'ingénierie des données
- Conclusion
Il s'agit d'une profession technologique plus fiable et à la croissance la plus rapide dans la génération actuelle, car elle se concentre davantage sur le grattage Web et l'exploration d'ensembles de données.
Processus (cycle ETL) :
Vous êtes-vous déjà demandé comment des données provenant de nombreuses sources étaient intégrées pour créer une seule source d'informations ? Le traitement par lots est une sorte de collecte de données et en savoir plus sur "comment explorer un type de traitement par lots" appelé Extraire, Transformer et Charger.
ETL est le processus d'extraction d'énormes volumes de données à partir d'une variété de sources et de formats et de leur conversion en un seul format avant de les mettre dans une base de données ou un fichier de destination.
Certaines de vos données sont stockées dans des fichiers CSV, tandis que d'autres sont stockées dans des fichiers JSON. Vous devez rassembler toutes ces informations dans un seul fichier pour que l'IA puisse les lire. Parce que vos données sont en unités impériales, mais que l'IA a besoin d'unités métriques, vous devrez les convertir. Étant donné que l'IA ne peut lire que des données CSV dans un seul gros fichier, vous devez d'abord le charger. Si les données sont au format CSV, mettons l'ETL suivant avec python et regardons l'étape d'extraction avec quelques exemples simples.
En regardant la liste des fichiers.json et.csv. L'extension de fichier glob est précédée d'une étoile et d'un point dans l'entrée. Une liste de fichiers.csv est renvoyée. Pour les fichiers.json, nous pouvons faire la même chose. Nous pouvons créer un fichier qui extrait les noms, les tailles et les poids au format CSV. Le nom de fichier du fichier.csv est l'entrée et la sortie est une trame de données. Pour les formats JSON, nous pouvons faire la même chose.
Étape 1:
Importer les fonctions et les modules requis
import glob
import pandas as pd
import xml.etree.ElementTree as ET
from datetime import datetime
Les fichiers dealership_data
contiennent des fichiers CSV, JSON et XML pour les données de voitures d'occasion qui contiennent des fonctionnalités nommées car_model
, year_of_manufacture
, price
et fuel
. Nous allons donc extraire le fichier des données brutes et le transformer en fichier cible et le charger dans la sortie.
Définissez le chemin des fichiers cibles :
tmpfile = "dealership_temp.tmp" # store all extracted data
logfile = "dealership_logfile.txt" # all event logs will be stored
targetfile = "dealership_transformed_data.csv" # transformed data is stored
La fonction extraira de grandes quantités de données de plusieurs sources par lots. En ajoutant cette fonction, il va maintenant découvrir et charger tous les noms de fichiers CSV, et les fichiers CSV seront ajoutés au cadre de date à chaque itération de la boucle, la première itération étant attachée en premier, suivie de la deuxième itération, résultant dans une liste de données extraites. Après avoir rassemblé les données, nous passerons à l'étape "Transformer" du processus.
Remarque : Si "ignorer l'index" est défini sur vrai, l'ordre de chaque ligne sera le même que l'ordre dans lequel les lignes ont été ajoutées au bloc de données.
Fonction d'extraction CSV
def extract_from_csv(file_to_process):
dataframe = pd.read_csv(file_to_process)
return dataframe
def extract_from_json(file_to_process):
dataframe = pd.read_json(file_to_process,lines=True)
return dataframe
def extract_from_xml(file_to_process):
dataframe = pd.DataFrame(columns=['car_model','year_of_manufacture','price', 'fuel'])
tree = ET.parse(file_to_process)
root = tree.getroot()
for person in root:
car_model = person.find("car_model").text
year_of_manufacture = int(person.find("year_of_manufacture").text)
price = float(person.find("price").text)
fuel = person.find("fuel").text
dataframe = dataframe.append({"car_model":car_model, "year_of_manufacture":year_of_manufacture, "price":price, "fuel":fuel}, ignore_index=True)
return dataframe
Appelez maintenant la fonction d'extraction en utilisant son appel de fonction pour CSV , JSON , XML.
def extract():
extracted_data = pd.DataFrame(columns=['car_model','year_of_manufacture','price', 'fuel'])
#for csv files
for csvfile in glob.glob("dealership_data/*.csv"):
extracted_data = extracted_data.append(extract_from_csv(csvfile), ignore_index=True)
#for json files
for jsonfile in glob.glob("dealership_data/*.json"):
extracted_data = extracted_data.append(extract_from_json(jsonfile), ignore_index=True)
#for xml files
for xmlfile in glob.glob("dealership_data/*.xml"):
extracted_data = extracted_data.append(extract_from_xml(xmlfile), ignore_index=True)
return extracted_data
Après avoir rassemblé les données, nous passerons à la phase « Transformer » du processus. Cette fonction convertira la hauteur de la colonne, qui est en pouces, en millimètres et la colonne en livres, qui est en livres, en kilogramme, et renverra les résultats dans les données variables. Dans le bloc de données d'entrée, la hauteur de la colonne est en pieds. Convertissez la colonne pour la convertir en mètres et arrondissez-la à deux décimales.
def transform(data):
data['price'] = round(data.price, 2)
return data
Il est temps de charger les données dans le fichier cible maintenant que nous les avons rassemblées et spécifiées. Nous enregistrons la trame de données pandas au format CSV dans ce scénario. Nous avons maintenant parcouru les étapes d'extraction, de transformation et de chargement de données provenant de diverses sources dans un seul fichier cible. Nous devons établir une entrée de journalisation avant de pouvoir terminer notre travail. Nous y parviendrons en écrivant une fonction de journalisation.
Fonction de chargement :
def load(targetfile,data_to_load):
data_to_load.to_csv(targetfile)
Toutes les données écrites seront ajoutées aux informations actuelles lorsque le "a" sera ajouté. Nous pouvons ensuite attacher un horodatage à chaque phase du processus, indiquant quand il commence et quand il se termine, en générant ce type d'entrée. Après avoir défini tout le code requis pour exécuter le processus ETL sur les données, la dernière étape consiste à appeler toutes les fonctions.
def log(message):
timestamp_format = '%H:%M:%S-%h-%d-%Y'
#Hour-Minute-Second-MonthName-Day-Year
now = datetime.now() # get current timestamp
timestamp = now.strftime(timestamp_format)
with open("dealership_logfile.txt","a") as f: f.write(timestamp + ',' + message + 'n')
Nous commençons d'abord par appeler la fonction extract_data. Les données reçues de cette étape seront ensuite transférées à la deuxième étape de transformation des données. Une fois cette opération terminée, les données sont ensuite chargées dans le fichier cible. Notez également qu'avant et après chaque étape, l'heure et la date de début et de fin ont été ajoutées.
Le journal que vous avez lancé le processus ETL :
log("ETL Job Started")
log("Extract phase Started")
extracted_data = extract()
log("Extract phase Ended")
log("Phase de transformation démarrée")
données_transformées = transformer(données_extraites)
log("Transform phase Ended")
log("Load phase Started")
load(targetfile,transformed_data)
log("Load phase Ended")
log("ETL Job Ended")
- Comment écrire une simple fonction d'extraction.
- Comment écrire une simple fonction de transformation.
- Comment écrire une fonction Load simple.
- Comment écrire une fonction de journalisation simple.
Tout au plus, nous avons discuté de tous les processus ETL. Plus loin, voyons, « quels sont les avantages du métier d'ingénieur de données ? ».
À propos de l'ingénierie des données :
L'ingénierie des données est un vaste domaine aux nombreux noms. Il peut même ne pas avoir de titre officiel dans de nombreuses institutions. Par conséquent, il est généralement préférable de commencer par définir les objectifs du travail d'ingénierie des données qui conduisent aux résultats attendus. Les utilisateurs qui s'appuient sur les ingénieurs de données sont aussi divers que les talents et les résultats des équipes d'ingénierie de données. Vos consommateurs définiront toujours les problèmes que vous gérez et comment vous les résolvez, quel que soit le secteur que vous recherchez.
Conclusion:
J'espère que vous trouverez de l'aide dans l'article et que vous comprendrez comment utiliser Python pour ETL alors que vous commencez votre voyage pour apprendre l'ingénierie des données. Envie d'en savoir plus ? Je vous encourage à consulter mes autres articles sur la façon dont vous pourriez utiliser les classes python pour améliorer les processus d'ingénierie des données . Je montre également comment utiliser pydantic pour améliorer la validation de vos données à l'une des premières et principales étapes de votre pipeline de données. Si vous êtes intéressé par la visualisation de données, consultez ce guide étape par étape pour créer votre premier graphique avec Apache Superset .
Appel à l'action
Si vous trouvez le guide utile, n'hésitez pas à applaudir et à me suivre. Rejoignez medium via ce lien pour accéder à tous les articles premium de moi et de tous les autres écrivains géniaux ici sur medium.
Codage de niveau supérieur
Merci de faire partie de notre communauté ! Avant que tu partes:
- Applaudissez pour l'histoire et suivez l'auteur
- Voir plus de contenu dans la publication Level Up Coding
- Suivez-nous : Twitter | LinkedIn | Bulletin