You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Data-Science-For-Beginners/translations/de/2-Working-With-Data/07-python/README.md

24 KiB

Arbeiten mit Daten: Python und die Pandas-Bibliothek

 Sketchnote von (@sketchthedocs)
Arbeiten mit Python - Sketchnote von @nitya

Einführungsvideo

Während Datenbanken sehr effiziente Möglichkeiten bieten, Daten zu speichern und sie mit Abfragesprachen zu durchsuchen, ist die flexibelste Art der Datenverarbeitung das Schreiben eines eigenen Programms zur Manipulation von Daten. In vielen Fällen wäre eine Datenbankabfrage effektiver. In einigen Fällen, in denen komplexere Datenverarbeitung erforderlich ist, kann dies jedoch nicht einfach mit SQL durchgeführt werden.
Die Datenverarbeitung kann in jeder Programmiersprache programmiert werden, aber es gibt bestimmte Sprachen, die in Bezug auf die Arbeit mit Daten höher entwickelt sind. Datenwissenschaftler bevorzugen typischerweise eine der folgenden Sprachen:

  • Python, eine universelle Programmiersprache, die aufgrund ihrer Einfachheit oft als eine der besten Optionen für Anfänger gilt. Python verfügt über viele zusätzliche Bibliotheken, die Ihnen helfen können, praktische Probleme zu lösen, wie z. B. das Extrahieren Ihrer Daten aus einem ZIP-Archiv oder das Konvertieren eines Bildes in Graustufen. Neben der Datenwissenschaft wird Python auch häufig für die Webentwicklung verwendet.
  • R ist ein traditionelles Werkzeug, das speziell für die statistische Datenverarbeitung entwickelt wurde. Es enthält auch ein großes Repository von Bibliotheken (CRAN), was es zu einer guten Wahl für die Datenverarbeitung macht. R ist jedoch keine universelle Programmiersprache und wird außerhalb des Bereichs der Datenwissenschaft selten verwendet.
  • Julia ist eine weitere Sprache, die speziell für die Datenwissenschaft entwickelt wurde. Sie soll eine bessere Leistung als Python bieten und ist daher ein großartiges Werkzeug für wissenschaftliche Experimente.

In dieser Lektion konzentrieren wir uns auf die Verwendung von Python für einfache Datenverarbeitung. Wir setzen grundlegende Kenntnisse der Sprache voraus. Wenn Sie eine tiefere Einführung in Python wünschen, können Sie auf eine der folgenden Ressourcen zurückgreifen:

Daten können in vielen Formen vorliegen. In dieser Lektion betrachten wir drei Formen von Daten - tabellarische Daten, Text und Bilder.

Wir konzentrieren uns auf einige Beispiele für Datenverarbeitung, anstatt Ihnen einen vollständigen Überblick über alle zugehörigen Bibliotheken zu geben. Dies ermöglicht es Ihnen, die Hauptidee dessen, was möglich ist, zu verstehen und zu wissen, wo Sie Lösungen für Ihre Probleme finden können, wenn Sie sie benötigen.

Der nützlichste Rat. Wenn Sie eine bestimmte Operation an Daten durchführen müssen, die Sie nicht kennen, versuchen Sie, danach im Internet zu suchen. Stackoverflow enthält normalerweise viele nützliche Codebeispiele in Python für viele typische Aufgaben.

Quiz vor der Vorlesung

Tabellarische Daten und Dataframes

Sie haben bereits tabellarische Daten kennengelernt, als wir über relationale Datenbanken gesprochen haben. Wenn Sie viele Daten haben, die in vielen verschiedenen verknüpften Tabellen enthalten sind, macht es definitiv Sinn, SQL zu verwenden, um damit zu arbeiten. Es gibt jedoch viele Fälle, in denen wir eine Tabelle mit Daten haben und einige Einblicke oder Verständnis über diese Daten gewinnen müssen, wie z. B. die Verteilung, Korrelation zwischen Werten usw. In der Datenwissenschaft gibt es viele Fälle, in denen wir einige Transformationen der ursprünglichen Daten durchführen müssen, gefolgt von einer Visualisierung. Beide Schritte können leicht mit Python durchgeführt werden.

Es gibt zwei nützliche Bibliotheken in Python, die Ihnen helfen können, mit tabellarischen Daten umzugehen:

  • Pandas ermöglicht es Ihnen, sogenannte Dataframes zu manipulieren, die relationalen Tabellen ähnlich sind. Sie können benannte Spalten haben und verschiedene Operationen auf Zeilen, Spalten und Dataframes im Allgemeinen durchführen.
  • Numpy ist eine Bibliothek für die Arbeit mit Tensors, d. h. mehrdimensionalen Arrays. Ein Array hat Werte des gleichen zugrunde liegenden Typs und ist einfacher als ein Dataframe, bietet jedoch mehr mathematische Operationen und erzeugt weniger Overhead.

Es gibt auch ein paar andere Bibliotheken, die Sie kennen sollten:

  • Matplotlib ist eine Bibliothek, die für die Datenvisualisierung und das Plotten von Diagrammen verwendet wird
  • SciPy ist eine Bibliothek mit zusätzlichen wissenschaftlichen Funktionen. Wir sind bereits auf diese Bibliothek gestoßen, als wir über Wahrscheinlichkeit und Statistik gesprochen haben.

Hier ist ein Stück Code, das Sie typischerweise verwenden würden, um diese Bibliotheken am Anfang Ihres Python-Programms zu importieren:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need

Pandas basiert auf einigen grundlegenden Konzepten.

Series

Series ist eine Sequenz von Werten, ähnlich einer Liste oder einem Numpy-Array. Der Hauptunterschied besteht darin, dass Series auch einen Index hat, und wenn wir mit Series arbeiten (z. B. sie addieren), wird der Index berücksichtigt. Der Index kann so einfach wie eine ganzzahlige Zeilennummer sein (dies ist der Standardindex, wenn eine Series aus einer Liste oder einem Array erstellt wird), oder er kann eine komplexe Struktur wie ein Datumsintervall haben.

Hinweis: Es gibt einige einführende Pandas-Codes im begleitenden Notebook notebook.ipynb. Wir skizzieren hier nur einige der Beispiele, und Sie sind herzlich eingeladen, das vollständige Notebook zu überprüfen.

Betrachten Sie ein Beispiel: Wir möchten die Verkäufe unseres Eisdielenstandes analysieren. Lassen Sie uns eine Serie von Verkaufszahlen (Anzahl der täglich verkauften Artikel) für einen bestimmten Zeitraum erstellen:

start_date = "Jan 1, 2020"
end_date = "Mar 31, 2020"
idx = pd.date_range(start_date,end_date)
print(f"Length of index is {len(idx)}")
items_sold = pd.Series(np.random.randint(25,50,size=len(idx)),index=idx)
items_sold.plot()

Zeitreihen-Diagramm

Angenommen, jede Woche organisieren wir eine Party für Freunde und nehmen zusätzlich 10 Packungen Eis für die Party. Wir können eine weitere Serie erstellen, die nach Wochen indiziert ist, um dies zu demonstrieren:

additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))

Wenn wir zwei Serien zusammenfügen, erhalten wir die Gesamtzahl:

total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()

Zeitreihen-Diagramm

Hinweis: Wir verwenden nicht die einfache Syntax total_items+additional_items. Wenn wir dies tun würden, würden wir viele NaN (Not a Number)-Werte in der resultierenden Serie erhalten. Dies liegt daran, dass für einige Indexpunkte in der Serie additional_items Werte fehlen und das Hinzufügen von NaN zu irgendetwas zu NaN führt. Daher müssen wir den Parameter fill_value während der Addition angeben.

Mit Zeitreihen können wir die Serie auch mit unterschiedlichen Zeitintervallen neu abtasten. Zum Beispiel, wenn wir das durchschnittliche Verkaufsvolumen monatlich berechnen möchten, können wir den folgenden Code verwenden:

monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')

Monatliche Zeitreihen-Durchschnitte

DataFrame

Ein DataFrame ist im Wesentlichen eine Sammlung von Series mit demselben Index. Wir können mehrere Series zu einem DataFrame zusammenfügen:

a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
df = pd.DataFrame([a,b])

Dies wird eine horizontale Tabelle wie diese erstellen:

0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 9
1 I like to use Python and Pandas very much

Wir können auch Series als Spalten verwenden und Spaltennamen mit einem Wörterbuch angeben:

df = pd.DataFrame({ 'A' : a, 'B' : b })

Dies ergibt eine Tabelle wie diese:

A B
0 1 I
1 2 like
2 3 to
3 4 use
4 5 Python
5 6 and
6 7 Pandas
7 8 very
8 9 much

Hinweis: Wir können dieses Tabellenlayout auch durch Transponieren der vorherigen Tabelle erhalten, z. B. durch Schreiben

df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })

Hier bedeutet .T die Operation des Transponierens des DataFrames, d. h. das Ändern von Zeilen und Spalten, und die rename-Operation ermöglicht es uns, Spalten umzubenennen, um dem vorherigen Beispiel zu entsprechen.

Hier sind einige der wichtigsten Operationen, die wir auf DataFrames durchführen können:

Spaltenauswahl. Wir können einzelne Spalten auswählen, indem wir df['A'] schreiben - diese Operation gibt eine Series zurück. Wir können auch eine Teilmenge von Spalten in einen anderen DataFrame auswählen, indem wir df[['B','A']] schreiben - dies gibt einen anderen DataFrame zurück.

Filtern bestimmter Zeilen nach Kriterien. Zum Beispiel, um nur Zeilen mit Spalte A größer als 5 zu behalten, können wir df[df['A']>5] schreiben.

Hinweis: Die Funktionsweise des Filterns ist wie folgt. Der Ausdruck df['A']<5 gibt eine boolesche Serie zurück, die angibt, ob der Ausdruck für jedes Element der ursprünglichen Serie df['A'] True oder False ist. Wenn die boolesche Serie als Index verwendet wird, gibt sie eine Teilmenge von Zeilen im DataFrame zurück. Daher ist es nicht möglich, beliebige Python-Boolesche Ausdrücke zu verwenden, z. B. wäre das Schreiben von df[df['A']>5 and df['A']<7] falsch. Stattdessen sollten Sie die spezielle &-Operation auf booleschen Serien verwenden, indem Sie df[(df['A']>5) & (df['A']<7)] schreiben (Klammern sind hier wichtig).

Erstellen neuer berechenbarer Spalten. Wir können leicht neue berechenbare Spalten für unseren DataFrame erstellen, indem wir intuitive Ausdrücke wie diesen verwenden:

df['DivA'] = df['A']-df['A'].mean() 

Dieses Beispiel berechnet die Abweichung von A von seinem Mittelwert. Was hier tatsächlich passiert, ist, dass wir eine Serie berechnen und diese Serie dann der linken Seite zuweisen, wodurch eine weitere Spalte erstellt wird. Daher können wir keine Operationen verwenden, die nicht mit Serien kompatibel sind, z. B. ist der folgende Code falsch:

# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Wrong result

Das letzte Beispiel, obwohl syntaktisch korrekt, gibt uns ein falsches Ergebnis, da es die Länge der Serie B allen Werten in der Spalte zuweist und nicht die Länge der einzelnen Elemente, wie wir beabsichtigt haben.

Wenn wir komplexe Ausdrücke wie diesen berechnen müssen, können wir die Funktion apply verwenden. Das letzte Beispiel kann wie folgt geschrieben werden:

df['LenB'] = df['B'].apply(lambda x : len(x))
# or 
df['LenB'] = df['B'].apply(len)

Nach den obigen Operationen erhalten wir den folgenden DataFrame:

A B DivA LenB
0 1 I -4.0 1
1 2 like -3.0 4
2 3 to -2.0 2
3 4 use -1.0 3
4 5 Python 0.0 6
5 6 and 1.0 3
6 7 Pandas 2.0 6
7 8 very 3.0 4
8 9 much 4.0 4

Auswahl von Zeilen basierend auf Zahlen kann mit der iloc-Konstruktion durchgeführt werden. Zum Beispiel, um die ersten 5 Zeilen aus dem DataFrame auszuwählen:

df.iloc[:5]

Gruppierung wird oft verwendet, um ein Ergebnis ähnlich wie Pivot-Tabellen in Excel zu erhalten. Angenommen, wir möchten den Mittelwert der Spalte A für jede gegebene Anzahl von LenB berechnen. Dann können wir unseren DataFrame nach LenB gruppieren und mean aufrufen:

df.groupby(by='LenB').mean()

Wenn wir den Mittelwert und die Anzahl der Elemente in der Gruppe berechnen müssen, können wir die komplexere Funktion aggregate verwenden:

df.groupby(by='LenB') \
 .aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
 .rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})

Dies ergibt die folgende Tabelle:

LenB Count Mean
1 1 1.000000
2 1 3.000000
3 2 5.000000
4 3 6.333333
6 2 6.000000

Daten abrufen

Wir haben gesehen, wie einfach es ist, Series und DataFrames aus Python-Objekten zu erstellen. Allerdings liegen Daten normalerweise in Form einer Textdatei oder einer Excel-Tabelle vor. Glücklicherweise bietet Pandas uns eine einfache Möglichkeit, Daten von der Festplatte zu laden. Zum Beispiel ist das Lesen einer CSV-Datei so einfach wie folgt:

df = pd.read_csv('file.csv')

Wir werden weitere Beispiele zum Laden von Daten sehen, einschließlich des Abrufens von externen Websites, im Abschnitt "Challenge".

Drucken und Plotten

Ein Data Scientist muss oft die Daten erkunden, daher ist es wichtig, sie visualisieren zu können. Wenn ein DataFrame groß ist, möchten wir oft nur sicherstellen, dass wir alles richtig machen, indem wir die ersten paar Zeilen ausgeben. Dies kann durch Aufrufen von df.head() erfolgen. Wenn Sie es in Jupyter Notebook ausführen, wird der DataFrame in einer schönen tabellarischen Form angezeigt.

Wir haben auch die Verwendung der Funktion plot gesehen, um einige Spalten zu visualisieren. Während plot für viele Aufgaben sehr nützlich ist und viele verschiedene Diagrammtypen über den Parameter kind= unterstützt, können Sie immer die rohe matplotlib-Bibliothek verwenden, um etwas Komplexeres zu zeichnen. Wir werden die Datenvisualisierung in separaten Kurslektionen ausführlich behandeln.

Dieser Überblick deckt die wichtigsten Konzepte von Pandas ab, jedoch ist die Bibliothek sehr umfangreich, und es gibt keine Grenzen für das, was Sie damit tun können! Wenden wir dieses Wissen nun an, um ein spezifisches Problem zu lösen.

🚀 Challenge 1: Analyse der COVID-Ausbreitung

Das erste Problem, auf das wir uns konzentrieren werden, ist die Modellierung der epidemischen Ausbreitung von COVID-19. Dazu verwenden wir die Daten über die Anzahl der infizierten Personen in verschiedenen Ländern, bereitgestellt vom Center for Systems Science and Engineering (CSSE) der Johns Hopkins University. Der Datensatz ist in diesem GitHub-Repository verfügbar.

Da wir demonstrieren möchten, wie man mit Daten umgeht, laden wir Sie ein, notebook-covidspread.ipynb zu öffnen und es von oben bis unten zu lesen. Sie können auch Zellen ausführen und einige Herausforderungen lösen, die wir am Ende für Sie hinterlassen haben.

COVID Spread

Wenn Sie nicht wissen, wie man Code in Jupyter Notebook ausführt, werfen Sie einen Blick auf diesen Artikel.

Arbeiten mit unstrukturierten Daten

Während Daten sehr oft in tabellarischer Form vorliegen, müssen wir in einigen Fällen mit weniger strukturierten Daten umgehen, beispielsweise Text oder Bildern. In diesem Fall müssen wir, um die oben gesehenen Datenverarbeitungstechniken anzuwenden, irgendwie strukturierte Daten extrahieren. Hier sind einige Beispiele:

  • Extrahieren von Schlüsselwörtern aus Text und Analysieren, wie oft diese Schlüsselwörter vorkommen
  • Verwenden von neuronalen Netzwerken, um Informationen über Objekte auf Bildern zu extrahieren
  • Ermitteln von Emotionen von Personen in einem Videokamera-Feed

🚀 Challenge 2: Analyse von COVID-Papieren

In dieser Challenge setzen wir das Thema der COVID-Pandemie fort und konzentrieren uns auf die Verarbeitung wissenschaftlicher Arbeiten zu diesem Thema. Es gibt den CORD-19-Datensatz mit mehr als 7000 (zum Zeitpunkt des Schreibens) Arbeiten zu COVID, verfügbar mit Metadaten und Abstracts (und für etwa die Hälfte von ihnen ist auch der vollständige Text verfügbar).

Ein vollständiges Beispiel für die Analyse dieses Datensatzes mit dem kognitiven Dienst Text Analytics for Health wird in diesem Blogbeitrag beschrieben. Wir werden eine vereinfachte Version dieser Analyse besprechen.

NOTE: Wir stellen keine Kopie des Datensatzes als Teil dieses Repositorys bereit. Sie müssen möglicherweise zuerst die Datei metadata.csv aus diesem Datensatz auf Kaggle herunterladen. Eine Registrierung bei Kaggle kann erforderlich sein. Sie können den Datensatz auch ohne Registrierung hier herunterladen, aber er enthält alle Volltexte zusätzlich zur Metadaten-Datei.

Öffnen Sie notebook-papers.ipynb und lesen Sie es von oben bis unten. Sie können auch Zellen ausführen und einige Herausforderungen lösen, die wir am Ende für Sie hinterlassen haben.

Covid Medical Treatment

Verarbeitung von Bilddaten

In letzter Zeit wurden sehr leistungsstarke KI-Modelle entwickelt, die es ermöglichen, Bilder zu verstehen. Es gibt viele Aufgaben, die mit vortrainierten neuronalen Netzwerken oder Cloud-Diensten gelöst werden können. Einige Beispiele sind:

  • Bildklassifikation, die Ihnen helfen kann, das Bild einer der vordefinierten Klassen zuzuordnen. Sie können Ihre eigenen Bildklassifikatoren leicht mit Diensten wie Custom Vision trainieren.
  • Objekterkennung, um verschiedene Objekte im Bild zu erkennen. Dienste wie Computer Vision können eine Reihe von häufigen Objekten erkennen, und Sie können ein Custom Vision-Modell trainieren, um spezifische Objekte von Interesse zu erkennen.
  • Gesichtserkennung, einschließlich Alter, Geschlecht und Emotionserkennung. Dies kann über die Face API erfolgen.

Alle diese Cloud-Dienste können mit Python SDKs aufgerufen werden und können somit leicht in Ihren Workflow zur Datenexploration integriert werden.

Hier sind einige Beispiele für die Erforschung von Daten aus Bilddatenquellen:

Fazit

Egal, ob Sie bereits strukturierte oder unstrukturierte Daten haben, mit Python können Sie alle Schritte der Datenverarbeitung und -analyse durchführen. Es ist wahrscheinlich die flexibelste Methode der Datenverarbeitung, und das ist der Grund, warum die Mehrheit der Data Scientists Python als ihr Hauptwerkzeug verwendet. Python gründlich zu lernen, ist wahrscheinlich eine gute Idee, wenn Sie Ihre Reise in der Datenwissenschaft ernsthaft verfolgen möchten!

Quiz nach der Vorlesung

Überprüfung & Selbststudium

Bücher

Online-Ressourcen

Python lernen

Aufgabe

Führen Sie eine detailliertere Datenstudie für die oben genannten Herausforderungen durch

Credits

Diese Lektion wurde mit ♥️ von Dmitry Soshnikov verfasst.


Haftungsausschluss:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Nutzung dieser Übersetzung entstehen.