W dzisiejszej lekcji zbudujemy prosty pipeline ETL (Extract, Transform, Load), który zademonstruje praktyczne zastosowanie teorii poznanej na wcześniejszych zajęciach. Przejdziemy przez proces pobierania danych, ich przekształcania i ładowania do uproszczonej bazy danych.
Celem tego projektu jest stworzenie prostego pipeline ETL, który pobierze dane o książkach z pliku CSV, przetworzy je (np. poprawi format danych, usunie duplikaty) i załaduje do uproszczonej bazy danych (np. pliku JSON). Będzie to fundament do zrozumienia bardziej skomplikowanych procesów ETL, które często wykorzystywane są w prawdziwych projektach data science. Wykorzystamy język Python i kilka podstawowych bibliotek.
W kroku "Extract" pobieramy dane ze źródła. W naszym przypadku będzie to plik CSV. Załóżmy, że mamy plik ksiazki.csv
o następującej strukturze:
ID,Tytul,Autor,RokWydania,Gatunek
1,"Mistrz i Małgorzata",Michaił Bułhakow,1967,Fantastyka
2,"Dziady",Adam Mickiewicz,1823,Dramat
3,"Ogniem i Mieczem",Henryk Sienkiewicz,1884,Historyczna
Użyjemy biblioteki pandas
do wczytania danych:
import pandas as pd
def extract_data(file_path):
try:
df = pd.read_csv(file_path)
return df
except FileNotFoundError:
print(f"Błąd: Nie znaleziono pliku {file_path}")
return None
data = extract_data('ksiazki.csv')
if data is not None:
print(data.head())
Uwaga: Pamiętaj, aby plik ksiazki.csv
znajdował się w tym samym katalogu co Twój skrypt Python, lub podaj pełną ścieżkę do pliku.
W kroku "Transform" przekształcamy dane, aby były zgodne z wymaganiami. Może to obejmować czyszczenie danych, konwersję typów danych, usuwanie duplikatów lub dodawanie nowych kolumn. Przykład:
import pandas as pd
def transform_data(df):
if df is None:
return None
# Konwersja kolumny RokWydania na typ int
try:
df['RokWydania'] = df['RokWydania'].astype(int)
except ValueError:
print("Błąd: Kolumna RokWydania zawiera nieprawidłowe wartości.")
return None
# Usunięcie duplikatów po kolumnie Tytul
df = df.drop_duplicates(subset=['Tytul'])
return df
Po przetworzeniu danych, otrzymamy oczyszczony i przygotowany zbiór danych.
W kroku "Load" ładujemy przetworzone dane do docelowego miejsca. W naszym przypadku będzie to plik JSON. Poniżej przykład:
import pandas as pd
import json
def load_data(df, output_file):
if df is None:
return
try:
df.to_json(output_file, orient="records", indent=4)
print(f"Dane załadowane do pliku {output_file}")
except Exception as e:
print(f"Błąd podczas ładowania danych: {e}")
Po uruchomieniu tego kodu, przetworzone dane zostaną zapisane w pliku JSON. orient="records"
sprawia, że dane są zapisane w formacie listy słowników, co jest powszechnie używane w data science.
Połączmy wszystkie trzy kroki w jeden pipeline:
import pandas as pd
import json
def extract_data(file_path):
# ... kod extract_data ...
def transform_data(df):
# ... kod transform_data ...
def load_data(df, output_file):
# ... kod load_data ...
def etl_pipeline(input_file, output_file):
# Extract
extracted_data = extract_data(input_file)
if extracted_data is None:
return
# Transform
transformed_data = transform_data(extracted_data)
if transformed_data is None:
return
# Load
load_data(transformed_data, output_file)
# Uruchomienie pipeline
etl_pipeline('ksiazki.csv', 'ksiazki_po_etl.json')
Teraz mamy kompletny pipeline ETL!
Explore advanced insights, examples, and bonus exercises to deepen understanding.
Witaj! Dzisiaj zanurzamy się głębiej w świat ETL, budując na fundamentach postawionych w naszej dzisiejszej lekcji. Po zbudowaniu prostego pipeline'u, czas na poszerzenie horyzontów i poznanie bardziej zaawansowanych aspektów.
Przejdźmy do bardziej zaawansowanych tematów i alternatywnych podejść do ETL:
Oto kilka dodatkowych zadań, które pomogą Ci pogłębić wiedzę:
Gdzie możemy spotkać ETL w działaniu?
Gotowy na wyzwanie?
Co warto zgłębić dalej?
Powodzenia w dalszej nauce! Pamiętaj, praktyka czyni mistrza. Im więcej będziesz eksperymentować, tym lepiej zrozumiesz i opanujesz techniki ETL.
Dodaj do funkcji `transform_data` operację polegającą na dodaniu nowej kolumny `Kategoria`, w której na podstawie kolumny `Gatunek` przypiszesz kategorię (np. 'Literatura' dla 'Dramat' i 'Fantastyka', 'Historyczna' dla 'Historyczna').
Zmodyfikuj funkcję `extract_data`, tak aby obsługiwała sytuację, gdy plik `ksiazki.csv` nie istnieje (wykorzystaj `try-except`). Pokaż komunikat o błędzie zamiast przerywania działania skryptu.
Zamiast zapisywania danych do pliku JSON, zmodyfikuj funkcję `load_data`, aby zapisywała przetworzone dane do innego formatu, np. pliku CSV. Upewnij się, że kolumny w pliku CSV są oddzielone przecinkami.
Stwórz pipeline ETL, który będzie pobierał dane o cenach produktów ze strony internetowej sklepu online (np. z pliku CSV lub HTML). Następnie przetwórz te dane (np. przelicz ceny z waluty obcej na PLN) i załaduj je do pliku JSON, gotowego do dalszej analizy.
Przygotuj się na lekcję o modelowaniu danych. Zastanów się nad różnymi rodzajami baz danych i sposobami ich wykorzystania. Przejrzyj materiały na temat normalizacji danych.
We're automatically tracking your progress. Sign up for free to keep your learning paths forever and unlock advanced features like detailed analytics and personalized recommendations.