Teil meiner Information-Engineering-Reisereihe. Im ersten Teil habe ich meine geteilt 12-monatige Roadmap für den Übergang vom Datenanalysten zum Dateningenieur. Hier beginnt der eigentliche Bau.

Als ich meinen ersten Artikel veröffentlichte, der meine Reise zum Information Engineering dokumentierte, geschah etwas Unerwartetes. Die Leute fanden es intestine. Fremde meldeten sich bei mir und sagten, sie seien begeistert, mitzumachen. Das fühlte sich intestine an.

Aber es struggle auch mit Druck verbunden.

Plötzlich struggle dies nicht mehr nur ein persönliches Ziel, das ich stillschweigend aufgeben konnte, wenn es schwierig wurde. Die Leute schauten zu. Die Leute saßen im selben Boot. Und diese Verantwortung ist, ehrlich gesagt, einer der Gründe, warum Sie dies gerade lesen.

Additionally musste ich umziehen. Und wie jeder, der mit einer neuen Fertigkeit beginnt, suchte ich zunächst nach Ressourcen. Im Web gibt es unzählige Tutorials zum Thema Information Engineering. YouTube-Movies, Kurse, schriftliche Leitfäden. Mehr, als du jemals schaffen könntest.

Aber ich konnte mich nicht dazu durchringen, nur Theorie zu konsumieren. Ich musste etwas bauen. Etwas Reales, mit echten Daten, das am Ende tatsächlich funktioniert hat.

Additionally habe ich die Tutorials geschlossen und stattdessen ein Google Colab-Notizbuch geöffnet. Ich habe die GitHub-API-Dokumentation gefunden und beschlossen, meine erste ETL-Pipeline von Grund auf zu erstellen. Kein Händchenhalten. Nur ich, etwas Python und ein Ziel.

In diesem Artikel wird diese Erfahrung vollständig dokumentiert. Der Code, die Verwirrung, die kleinen Erfolge und was ich dadurch tatsächlich gelernt habe.

Was ist ETL?

Bevor ich auf das eingehe, was ich erstellt habe, möchte ich kurz erklären, was ETL eigentlich bedeutet, da ich das vor nicht allzu langer Zeit selbst nachschlagen musste.

ETL steht für Extract, Rework, Load. Es ist eines der grundlegendsten Konzepte im Information Engineering.

  • Extrakt bedeutet, irgendwohin zu gehen, um Daten zu bekommen. Eine API, eine Datenbank, eine Web site, eine Datei. Sie beziehen Rohinformationen aus einer Quelle.
  • Verwandeln bedeutet, diese Daten zu bereinigen und zu formen. Entfernen fehlerhafter Zeilen, Hinzufügen neuer Spalten und Umstrukturieren, damit es tatsächlich nützlich ist.
  • Laden bedeutet, die bereinigten Daten irgendwo zu speichern. Eine Datenbank, ein Information Warehouse, eine einfache CSV-Datei.

Das ist es. Diese drei Schritte, die nacheinander ausgeführt werden, bilden eine Datenpipeline. Alles andere in der Datentechnik, Airflow, Spark, Databricks, sind einfach ausgefeiltere Methoden, um dieselben drei Dinge in großem Maßstab zu erledigen.

Da ich noch am Anfang meiner Roadmap stehe, habe ich es einfach gehalten. Reines Python, noch keine Orchestrierungstools. Aber die Kind des Issues ist dieselbe.

Was ich gebaut habe

Ich habe Daten aus der GitHub-API extrahiert, insbesondere die am häufigsten markierten Python-Repositories, die in den letzten 30 Tagen erstellt wurden. Anschließend habe ich es bereinigt, eine neue Spalte hinzugefügt und die Ausgabe als CSV-Datei gespeichert.
Einfach. Actual. Ganz meins.

So lief es.

Schritt 1: Extrahieren

Als Erstes musste ich herausfinden, wie ich mit der GitHub-API kommunizieren kann. Eine API ist im Grunde eine Tür, die ein Unternehmen oder eine Plattform öffnet, sodass Entwickler programmgesteuert Daten von ihr anfordern können, ohne etwas manuell kopieren und einfügen zu müssen.

GitHub verfügt über eine kostenlose, öffentliche API. Für einfache Suchen ist kein Konto oder kostenpflichtiger Plan erforderlich.

Hier ist der Code, den ich geschrieben habe, um die Daten zu extrahieren:

import requests

url = "https://api.github.com/search/repositories"

params = {
    "q": "language:python created:>2025-04-22",
    "kind": "stars",
    "order": "desc",
    "per_page": 30
}

response = requests.get(url, params=params)
information = response.json()

print(response.status_code)
print(information.keys())

Ich werde ehrlich sein. Dieser Block hat mich zunächst verwirrt. Der requests Die Bibliothek struggle für mich neu. Der params Wörterbuch damit q Die Syntax fühlte sich fremd an. Ich wusste nicht sofort, was .json() was ich tat oder warum ich es brauchte.

Lassen Sie es mich einfach aufschlüsseln.

  • requests.get() ist die Artwork und Weise, wie man an die Tür von GitHub klopft und um etwas bittet. Der url ist die Adresse dessen, wonach Sie fragen. Der
  • params Wörterbuch ist die spezifische Frage, die Sie stellen. In diesem Fall: „Gib mir Python-Repos, sortiert nach Sternen, erstellt nach dem 22. April, zeige mir 30 Ergebnisse.“
  • .json() Konvertiert GitHubs Antwort aus Rohtext in ein Python-Wörterbuch, mit dem Sie tatsächlich arbeiten können.

Als ich es ausgeführt habe, bekam ich Folgendes:

200 
dict_keys(('total_count', 'incomplete_results', 'objects'))

Der 200 bedeutet Erfolg. Das ist die Artwork und Weise, wie das Web sagt: „Ihre Anfrage hat funktioniert.“ Wenn Sie 403 oder 404 sehen, ist ein Fehler aufgetreten.
Das Wörterbuch verfügt über drei Schlüssel. total_count gibt an, wie viele Repos mit der Suche übereinstimmten. incomplete_results sagt Ihnen, ob GitHub etwas kürzen musste. Und objects Hier befinden sich die eigentlichen Daten.

Dann lief ich einen zweiten Block, um einen Blick hineinzuwerfen:

print("Whole matches on GitHub:", information('total_count'))
print("Repos returned:", len(information('objects')))

first_repo = information('objects')(0)
print("nFirst repo title:", first_repo('title'))
print("Stars:", first_repo('stargazers_count'))
print("Language:", first_repo('language'))
print("URL:", first_repo('html_url'))

Ausgabe:

Whole matches on GitHub: 9228201
Repos returned: 30

First repo title: expertise
Stars: 139136
Language: Python
URL: https://github.com/anthropics/expertise

Das erste Ergebnis struggle ein Anthropic-Repo mit 139.000 Sternen. Echte Daten. Reside. Gezogen durch Code, den ich geschrieben habe.

Damit ist der Extrakt fertig.

Schritt 2: Transformieren

Jetzt hatte ich 30 Repos in einer Python-Liste, jedes davon ein verschachteltes Wörterbuch mit Dutzenden von Feldern. Das meiste davon brauchte ich nicht. Im Schritt „Transformieren“ nehmen Sie diese rohen, unübersichtlichen Daten und formen sie in etwas Sauberes und Zweckmäßiges.

Zuerst habe ich nur die Felder herausgezogen, die mir wichtig waren, und sie in einen Pandas-Datenrahmen geladen:

import pandas as pd

repos = ()

for repo in information('objects'):
    repos.append({
        "title": repo('title'),
        "proprietor": repo('proprietor')('login'),
        "stars": repo('stargazers_count'),
        "forks": repo('forks_count'),
        "language": repo('language'),
        "description": repo('description'),
        "url": repo('html_url'),
        "created_at": repo('created_at')
    })

df = pd.DataFrame(repos)
df.head()

Das Erscheinen dieses Datenrahmens struggle ein echter „Wow“-Second. Ich bin von einer JSON-Wand zu einer sauberen, lesbaren Tabelle mit beschrifteten Spalten in wenigen Zeilen übergegangen.

Dann habe ich drei Transformationen durchgeführt:

# Drop rows the place description is lacking
df_clean = df.dropna(subset=('description'))

# Add a viral flag for repos with over 50k stars
df_clean = df_clean.copy()
df_clean('viral') = df_clean('stars').apply(lambda x: 'Sure' if x > 50000 else 'No')

# Kind by stars descending
df_clean = df_clean.sort_values('stars', ascending=False).reset_index(drop=True)

print("Earlier than cleansing:", len(df))
print("After cleansing:", len(df_clean))

Ausgabe:

Earlier than cleansing: 30 
After cleansing: 29

Ein Repo hatte keine Beschreibung und wurde gelöscht. Die Virussäule wurde sauber angezeigt. Die Daten waren nun sortiert und strukturiert.
Damit ist die Transformation abgeschlossen.

Schritt 3: Laden

Der letzte Schritt. Nehmen Sie die sauberen Daten und speichern Sie sie irgendwo. Ich habe es einfach gehalten und es in eine CSV-Datei geladen:

df_clean.to_csv('github_trending_repos.csv', index=False)

print("Pipeline full. File saved.")
print(f"{len(df_clean)} repos loaded into github_trending_repos.csv")

Ausgabe:

Pipeline full. File saved.
29 repos loaded into github_trending_repos.csv

Ich habe die Datei heruntergeladen und geöffnet. Eine saubere Tabelle mit 29 Zeilen und 9 Spalten. Echte GitHub-Daten, geformt und gespeichert durch eine Pipeline, die ich von Grund auf neu erstellt habe.

Das ist fertig.

Wie sich das tatsächlich anfühlte

Zuvor suchte ich immer dann, wenn ich mit Daten arbeiten wollte, nach einem öffentlichen Datensatz, den jemand bereits bereinigt und hochgeladen hatte. Kaggle, Google Dataset Search, wo auch immer. Ich struggle immer ein Konsument von Daten, die jemand anderes aufbereitet hatte.

Das hat etwas für mich verändert.

Als mir klar wurde, dass ich Python einfach auf eine API verweisen konnte, die mich interessierte, und selbst Reside-Daten extrahieren konnte, fühlten sich die Möglichkeiten völlig anders an. Ich bin nicht auf bereits vorhandene Datensätze beschränkt. Ich kann die Pipeline erstellen, die den Datensatz erstellt.

Das ist eine andere Artwork von Macht. Und es ist eines der Dinge, die mich überhaupt zum Information Engineering hingezogen haben.

Was kommt als nächstes?

Diese Pipeline ist vom Design her einfach. Ich stehe am Anfang meiner Roadmap und werde noch nicht so tun, als würde ich Airflow oder Spark verwenden. Aber das Fundament ist actual. Extrahieren, transformieren, laden. Es funktioniert. Ich habe es gebaut. Ich verstehe es.

Der nächste Schritt besteht darin, es robuster zu machen. Planen Sie die tägliche Ausführung. Speichern Sie die Ausgabe in einer SQLite-Datenbank statt in einer flachen CSV-Datei. Beginnen Sie mit der Verfolgung der Repo-Developments im Laufe der Zeit.

Und schließlich orchestrieren Sie das Ganze mit Airflow. Aber das ist ein zukünftiger Artikel.

Das Wichtigste, was ich mir vorerst bewiesen habe, ist, dass man beim Bauen Dinge lernt, die man beim Anschauen nie lernen wird. Ich verbrachte Wochen im Tutorialland und bewegte mich kaum. Ich habe einen Nachmittag damit verbracht, tatsächlich zu bauen, und ich verstehe ETL besser als jedes Video, das es vermittelt.

Hör auf zu schauen. Beginnen Sie mit dem Bau.

Dies ist Teil zwei meiner fortlaufenden Information-Engineering-Reihe. Begleiten Sie mich, während ich jeden Schritt der Reise dokumentiere, einschließlich der Teile, die nicht reibungslos verlaufen. Schauen Sie sich gerne meine ausführlichere ETL-Erfahrung auf meinem YouTube-Kanal unten an.

Verbinde dich mit mir LinkedIn, YouTubeUnd Twitter.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert