Datenanalyse mit Python
In diesem Artikel besprechen wir, wie man Datenanalysen mit Python durchführt. Wir werden alle Arten der Datenanalyse besprechen, d. h. die Analyse numerischer Daten mit NumPy, tabellarische Daten mit Pandas, Datenvisualisierung Matplotlib und explorative Datenanalyse.
Datenanalyse mit Python
Datenanalyse ist die Technik des Sammelns, Transformierens und Organisierens von Daten, um zukünftige Vorhersagen und fundierte datengesteuerte Entscheidungen zu treffen. Es hilft auch, mögliche Lösungen für ein Geschäftsproblem zu finden. Die Datenanalyse umfasst sechs Schritte. Sie sind:
- Fragen Sie nach Datenanforderungen oder geben Sie diese an
- Daten vorbereiten oder sammeln
- Reinigen und verarbeiten
- Analysieren
- Aktie
- Handeln oder melden
Datenanalyse mit Python
Notiz: Weitere Informationen zu diesen Schritten finden Sie in unserem NumPy ist ein Array-Verarbeitungspaket in Python und bietet ein leistungsstarkes mehrdimensionales Array-Objekt und Tools für die Arbeit mit diesen Arrays. Es ist das grundlegende Paket für wissenschaftliches Rechnen mit Python.
Arrays in NumPy
NumPy-Array ist eine Tabelle mit Elementen (normalerweise Zahlen), die alle vom gleichen Typ sind und durch ein Tupel positiver Ganzzahlen indiziert sind. In Numpy wird die Anzahl der Dimensionen des Arrays als Rang des Arrays bezeichnet. Ein Tupel von ganzen Zahlen, die die Größe des Arrays entlang jeder Dimension angeben, wird als Form des Arrays bezeichnet.
Erstellen eines NumPy-Arrays
NumPy-Arrays können auf verschiedene Arten und mit unterschiedlichen Rängen erstellt werden. Es kann auch unter Verwendung verschiedener Datentypen wie Listen, Tupel usw. erstellt werden. Der Typ des resultierenden Arrays wird aus dem Typ der Elemente in den Sequenzen abgeleitet. NumPy bietet mehrere Funktionen zum Erstellen von Arrays mit anfänglichen Platzhalterinhalten. Dadurch wird die Notwendigkeit des kostspieligen Ausbaus von Arrays minimiert.
Array erstellen mit numpy.empty(shape, dtype=float, order=’C’)
Python3import numpy as np b = np.empty(2, dtype = int) print('Matrix b :
', b) a = np.empty([2, 2], dtype = int) print('
Matrix a :
', a) c = np.empty([3, 3]) print('
Matrix c :
', c) Ausgabe:
Leere Matrix mit Pandas
Array erstellen mit numpy.zeros(shape, dtype = None, order = ‚C‘)
Python3import numpy as np b = np.zeros(2, dtype = int) print('Matrix b :
', b) a = np.zeros([2, 2], dtype = int) print('
Matrix a :
', a) c = np.zeros([3, 3]) print('
Matrix c :
', c) Ausgabe:
Matrix b : [0 0] Matrix a : [[0 0] [0 0]] Matrix c : [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
Operationen auf Numpy-Arrays
Rechenoperationen
- Zusatz:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing addition using arithmetic operator add_ans = a+b print(add_ans) # Performing addition using numpy function add_ans = np.add(a, b) print(add_ans) # The same functions and operations can be used for # multiple matrices c = np.array([1, 2, 3, 4]) add_ans = a+b+c print(add_ans) add_ans = np.add(a, b, c) print(add_ans)
Ausgabe:
[ 7 77 23 130] [ 7 77 23 130] [ 8 79 26 134] [ 7 77 23 130]
- Subtraktion:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing subtraction using arithmetic operator sub_ans = a-b print(sub_ans) # Performing subtraction using numpy function sub_ans = np.subtract(a, b) print(sub_ans)
Ausgabe:
[ 3 67 3 70] [ 3 67 3 70]
- Multiplikation:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing multiplication using arithmetic # operator mul_ans = a*b print(mul_ans) # Performing multiplication using numpy function mul_ans = np.multiply(a, b) print(mul_ans)
Ausgabe:
[ 10 360 130 3000] [ 10 360 130 3000]
- Aufteilung:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing division using arithmetic operators div_ans = a/b print(div_ans) # Performing division using numpy functions div_ans = np.divide(a, b) print(div_ans)
Ausgabe:
[ 2.5 14.4 1.3 3.33333333] [ 2.5 14.4 1.3 3.33333333]
Weitere Informationen finden Sie in unserem NumPy – Tutorial zu arithmetischen Operationen
NumPy-Array-Indizierung
Indizierung kann in NumPy durch die Verwendung eines Arrays als Index erfolgen. Im Fall des Slice wird eine Ansicht oder flache Kopie des Arrays zurückgegeben, im Index-Array wird jedoch eine Kopie des ursprünglichen Arrays zurückgegeben. Numpy-Arrays können mit Ausnahme von Tupeln mit anderen Arrays oder jeder anderen Sequenz indiziert werden. Das letzte Element wird um -1 indiziert, das vorletzte um -2 und so weiter.
Python NumPy Array-Indizierung
Python3# Python program to demonstrate # the use of index arrays. import numpy as np # Create a sequence of integers from # 10 to 1 with a step of -2 a = np.arange(10, 1, -2) print('
A sequential array with a negative step:
',a) # Indexes are specified inside the np.array method. newarr = a[np.array([3, 1, 2 ])] print('
Elements at these indices are:
',newarr) Ausgabe:
A sequential array with a negative step: [10 8 6 4 2] Elements at these indices are: [4 8 6]
NumPy-Array-Slicing
Betrachten Sie die Syntax x[obj], wobei x das Array und obj der Index ist. Das Slice-Objekt ist im Fall von der Index grundlegendes Schneiden . Grundlegendes Slicing findet statt, wenn obj:
- ein Slice-Objekt, das die Form start: stop: step hat
- eine Ganzzahl
- oder ein Tupel aus Slice-Objekten und Ganzzahlen
Alle durch einfaches Slicing generierten Arrays sind immer die Ansicht im ursprünglichen Array.
Python3# Python program for basic slicing. import numpy as np # Arrange elements from 0 to 19 a = np.arange(20) print('
Array is:
',a) # a[start:stop:step] print('
a[-8:17:1] = ',a[-8:17:1]) # The : operator means all elements till the end. print('
a[10:] = ',a[10:]) Ausgabe:
Array is: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] a[-8:17:1] = [12 13 14 15 16] a[10:] = [10 11 12 13 14 15 16 17 18 19]
Ellipsen können auch zusammen mit dem einfachen Schneiden verwendet werden. Ellipse (…) ist die Anzahl der Objekte, die erforderlich sind, um ein Auswahltupel mit der gleichen Länge wie die Abmessungen des Arrays zu erstellen.
Python3# Python program for indexing using basic slicing with ellipsis import numpy as np # A 3 dimensional array. b = np.array([[[1, 2, 3],[4, 5, 6]], [[7, 8, 9],[10, 11, 12]]]) print(b[...,1]) #Equivalent to b[: ,: ,1 ]
Ausgabe:
[[ 2 5] [ 8 11]]
NumPy Array Broadcasting
Der Begriff Rundfunk bezieht sich darauf, wie Numpy Arrays mit unterschiedlichen Dimensionen während arithmetischer Operationen behandelt, die zu bestimmten Einschränkungen führen. Das kleinere Array wird über das größere Array verteilt, sodass sie kompatible Formen haben.
Nehmen wir an, wir haben einen großen Datensatz, jedes Datum ist eine Liste von Parametern. In Numpy haben wir ein 2D-Array, bei dem jede Zeile ein Datum ist und die Anzahl der Zeilen der Größe des Datensatzes entspricht. Angenommen, wir möchten auf alle diese Daten eine Art Skalierung anwenden. Jeder Parameter erhält seinen eigenen Skalierungsfaktor, oder sagen wir: Jeder Parameter wird mit einem bestimmten Faktor multipliziert.
Um ein klares Verständnis zu schaffen, zählen wir die Kalorien in Lebensmitteln anhand einer Makronährstoffaufschlüsselung. Grob gesagt bestehen die Kalorienanteile der Nahrung aus Fetten (9 Kalorien pro Gramm), Proteinen (4 CPG) und Kohlenhydraten (4 CPG). Wenn wir also einige Lebensmittel (unsere Daten) auflisten und für jedes Lebensmittel seine Makronährstoffaufteilung (Parameter) auflisten, können wir dann jeden Nährstoff mit seinem Kalorienwert multiplizieren (Skalierung anwenden), um die Kalorienaufteilung jedes Lebensmittels zu berechnen.
Mit dieser Transformation können wir nun alle möglichen nützlichen Informationen berechnen. Wie hoch ist zum Beispiel die Gesamtkalorienzahl eines Lebensmittels? Wenn ich eine Aufschlüsselung meines Abendessens durchführe, weiß ich, wie viele Kalorien ich durch Eiweiß zu mir genommen habe und so weiter.
Sehen wir uns eine naive Möglichkeit an, diese Berechnung mit Numpy durchzuführen:
Python3import numpy as np macros = np.array([ [0.8, 2.9, 3.9], [52.4, 23.6, 36.5], [55.2, 31.7, 23.9], [14.4, 11, 4.9] ]) # Create a new array filled with zeros, # of the same shape as macros. result = np.zeros_like(macros) cal_per_macro = np.array([3, 3, 8]) # Now multiply each row of macros by # cal_per_macro. In Numpy, `*` is # element-wise multiplication between two arrays. for i in range(macros.shape[0]): result[i, :] = macros[i, :] * cal_per_macro result
Ausgabe:
array([[ 2.4, 8.7, 31.2], [157.2, 70.8, 292. ], [165.6, 95.1, 191.2], [ 43.2, 33. , 39.2]])
Senderegeln: Für die gemeinsame Übertragung zweier Arrays gelten folgende Regeln:
- Wenn die Arrays nicht den gleichen Rang haben, stellen Sie der Form des Arrays mit dem niedrigeren Rang Einsen voran, bis beide Formen die gleiche Länge haben.
- Die beiden Arrays sind in einer Dimension kompatibel, wenn sie in der Dimension die gleiche Größe haben oder wenn eines der Arrays in dieser Dimension die Größe 1 hat.
- Die Arrays können zusammen übertragen werden, wenn sie mit allen Dimensionen kompatibel sind.
- Nach der Übertragung verhält sich jedes Array so, als hätte es eine Form, die dem elementweisen Maximum der Formen der beiden Eingabearrays entspricht.
- In jeder Dimension, in der ein Array eine Größe von 1 und das andere Array eine Größe größer als 1 hatte, verhält sich das erste Array so, als ob es entlang dieser Dimension kopiert würde.
import numpy as np v = np.array([12, 24, 36]) w = np.array([45, 55]) # To compute an outer product we first # reshape v to a column vector of shape 3x1 # then broadcast it against w to yield an output # of shape 3x2 which is the outer product of v and w print(np.reshape(v, (3, 1)) * w) X = np.array([[12, 22, 33], [45, 55, 66]]) # x has shape 2x3 and v has shape (3, ) # so they broadcast to 2x3, print(X + v) # Add a vector to each column of a matrix X has # shape 2x3 and w has shape (2, ) If we transpose X # then it has shape 3x2 and can be broadcast against w # to yield a result of shape 3x2. # Transposing this yields the final result # of shape 2x3 which is the matrix. print((X.T + w).T) # Another solution is to reshape w to be a column # vector of shape 2X1 we can then broadcast it # directly against X to produce the same output. print(X + np.reshape(w, (2, 1))) # Multiply a matrix by a constant, X has shape 2x3. # Numpy treats scalars as arrays of shape(); # these can be broadcast together to shape 2x3. print(X * 2)
Ausgabe:
[[ 540 660] [1080 1320] [1620 1980]] [[ 24 46 69] [ 57 79 102]] [[ 57 67 78] [100 110 121]] [[ 57 67 78] [100 110 121]] [[ 24 44 66] [ 90 110 132]]
Notiz: Weitere Informationen finden Sie in unserem Python NumPy-Tutorial .
Daten mit Pandas analysieren
Python Pandas wird für relationale oder gekennzeichnete Daten verwendet und stellt verschiedene Datenstrukturen zur Bearbeitung solcher Daten und Zeitreihen bereit. Diese Bibliothek basiert auf der NumPy-Bibliothek. Dieses Modul wird im Allgemeinen importiert als:
import pandas as pd
Hier wird pd als Alias für die Pandas bezeichnet. Es ist jedoch nicht notwendig, die Bibliothek mit dem Alias zu importieren, es hilft lediglich dabei, bei jedem Aufruf einer Methode oder Eigenschaft weniger Code zu schreiben. Pandas bieten im Allgemeinen zwei Datenstrukturen zum Bearbeiten von Daten:
- Serie
- Datenrahmen
Serie:
Pandas-Serie ist ein eindimensional beschriftetes Array, das Daten jeglichen Typs (Ganzzahl, String, Float, Python-Objekte usw.) enthalten kann. Die Achsenbeschriftungen werden zusammenfassend als Indizes bezeichnet. Die Pandas-Serie ist nichts anderes als eine Spalte in einer Excel-Tabelle. Beschriftungen müssen nicht eindeutig sein, sondern müssen einen hashbaren Typ haben. Das Objekt unterstützt sowohl ganzzahlige als auch kennzeichnungsbasierte Indizierung und stellt eine Vielzahl von Methoden zum Ausführen von Vorgängen bereit, die den Index betreffen.
Pandas-Serie
Es kann mit der Funktion Series() erstellt werden, indem der Datensatz aus dem vorhandenen Speicher wie SQL, Datenbank, CSV-Dateien, Excel-Dateien usw. oder aus Datenstrukturen wie Listen, Wörterbüchern usw. geladen wird.
Python Pandas erstellen Serien
Python3import pandas as pd import numpy as np # Creating empty series ser = pd.Series() print(ser) # simple array data = np.array(['g', 'e', 'e', 'k', 's']) ser = pd.Series(data) print(ser)
Ausgabe:
Pandas-Serie
Datenrahmen:
Pandas DataFrame ist eine zweidimensionale, in ihrer Größe veränderliche, potenziell heterogene tabellarische Datenstruktur mit beschrifteten Achsen (Zeilen und Spalten). Ein Datenrahmen ist eine zweidimensionale Datenstruktur, d. h. Daten werden tabellarisch in Zeilen und Spalten angeordnet. Pandas DataFrame besteht aus drei Hauptkomponenten: den Daten, Zeilen und Spalten.
Pandas-Datenrahmen
Es kann mit der Methode Dataframe() erstellt werden und kann wie eine Serie auch aus verschiedenen Dateitypen und Datenstrukturen bestehen.
Python Pandas erstellen Datenrahmen
Python3import pandas as pd # Calling DataFrame constructor df = pd.DataFrame() print(df) # list of strings lst = ['Geeks', 'For', 'Geeks', 'is', 'portal', 'for', 'Geeks'] # Calling DataFrame constructor on list df = pd.DataFrame(lst) df
Ausgabe:
Erstellen eines Datenrahmens aus einer Python-Liste
Datenrahmen aus CSV erstellen
Wir können Erstellen Sie einen Datenrahmen aus der CSV Dateien mit der read_csv() Funktion.
Python Pandas lesen CSV
Python3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # Printing top 5 rows df.head() Ausgabe:
Kopf eines Datenrahmens
DataFrame filtern
Pandas dataframe.filter() Die Funktion wird verwendet, um Zeilen oder Spalten des Datenrahmens entsprechend den Beschriftungen im angegebenen Index zu unterteilen. Beachten Sie, dass diese Routine einen Datenrahmen nicht nach seinem Inhalt filtert. Der Filter wird auf die Beschriftungen des Index angewendet.
Python Pandas Filterdatenrahmen
Python3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # applying filter function df.filter(['Species', 'SepalLengthCm', 'SepalLengthCm']).head() Ausgabe:
Filter auf Datensatz anwenden
DataFrame sortieren
Um den Datenrahmen in Pandas zu sortieren, ist die Funktion sort_values() wird eingesetzt. Pandas sort_values() kann den Datenrahmen in aufsteigender oder absteigender Reihenfolge sortieren.
Python Pandas sortiert Datenrahmen in aufsteigender Reihenfolge
Ausgabe:
Sortierter Datensatz basierend auf einem Spaltenwert
Pandas GroupBy
Gruppiere nach ist ein ziemlich einfaches Konzept. Wir können eine Gruppierung von Kategorien erstellen und eine Funktion auf die Kategorien anwenden. In echten Data-Science-Projekten müssen Sie mit großen Datenmengen umgehen und Dinge immer wieder ausprobieren. Aus Effizienzgründen verwenden wir daher das Groupby-Konzept. Groupby bezieht sich hauptsächlich auf einen Prozess, der einen oder mehrere der folgenden Schritte umfasst:
- Aufteilung: Dabei handelt es sich um einen Prozess, bei dem wir Daten in Gruppen aufteilen, indem wir einige Bedingungen auf Datensätze anwenden.
- Bewirbt sich: Dabei handelt es sich um einen Prozess, bei dem wir auf jede Gruppe unabhängig eine Funktion anwenden.
- Kombinieren: Dabei handelt es sich um einen Prozess, bei dem wir verschiedene Datensätze kombinieren, nachdem wir Groupby angewendet haben, und die Ergebnisse zu einer Datenstruktur zusammenfügen.
Das folgende Bild hilft beim Verständnis des Prozesses im Groupby-Konzept.
1. Gruppieren Sie die eindeutigen Werte aus der Spalte „Team“.
Pandas Groupby-Methode
2. Jetzt gibt es für jede Gruppe einen Eimer
3. Werfen Sie die anderen Daten in die Buckets
4. Wenden Sie eine Funktion auf die Gewichtsspalte jedes Buckets an.
Anwenden der Funktion auf die Gewichtsspalte jeder Spalte
Python Pandas GroupBy
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'Name': ['Jai', 'Anuj', 'Jai', 'Princi', 'Gaurav', 'Anuj', 'Princi', 'Abhi'], 'Age': [27, 24, 22, 32, 33, 36, 27, 32], 'Address': ['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj', 'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'], 'Qualification': ['Msc', 'MA', 'MCA', 'Phd', 'B.Tech', 'B.com', 'Msc', 'MA']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) print('Original Dataframe') display(df) # applying groupby() function to # group the data on Name value. gk = df.groupby('Name') # Let's print the first entries # in all the groups formed. print('After Creating Groups') gk.first() Ausgabe:
Pandas Groupby
Funktion auf Gruppe anwenden:
Nachdem wir Daten in eine Gruppe aufgeteilt haben, wenden wir auf jede Gruppe eine Funktion an, um dazu einige Operationen auszuführen:
- Anhäufung: Dabei handelt es sich um einen Prozess, bei dem wir eine zusammenfassende Statistik (oder Statistiken) über jede Gruppe berechnen. Berechnen Sie beispielsweise Gruppensummen oder -mittelwerte
- Transformation: Dabei handelt es sich um einen Prozess, bei dem wir einige gruppenspezifische Berechnungen durchführen und einen Like-Index zurückgeben. Beispiel: Füllen von NAs innerhalb von Gruppen mit einem von jeder Gruppe abgeleiteten Wert
- Filtration: Dabei handelt es sich um einen Prozess, bei dem wir einige Gruppen entsprechend einer gruppenweisen Berechnung verwerfen, die „Wahr“ oder „Falsch“ auswertet. Zum Beispiel das Herausfiltern von Daten basierend auf der Gruppensumme oder dem Gruppenmittelwert
Pandas-Aggregation
Anhäufung ist ein Prozess, bei dem wir eine zusammenfassende Statistik über jede Gruppe berechnen. Die aggregierte Funktion gibt einen einzelnen aggregierten Wert für jede Gruppe zurück. Nach der Aufteilung der Daten in Gruppen mithilfe der Groupby-Funktion können mehrere Aggregationsvorgänge für die gruppierten Daten durchgeführt werden.
Python-Pandas-Aggregation
Python3# importing pandas module import pandas as pd # importing numpy as np import numpy as np # Define a dictionary containing employee data data1 = {'Name': ['Jai', 'Anuj', 'Jai', 'Princi', 'Gaurav', 'Anuj', 'Princi', 'Abhi'], 'Age': [27, 24, 22, 32, 33, 36, 27, 32], 'Address': ['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj', 'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'], 'Qualification': ['Msc', 'MA', 'MCA', 'Phd', 'B.Tech', 'B.com', 'Msc', 'MA']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) # performing aggregation using # aggregate method grp1 = df.groupby('Name') grp1.aggregate(np.sum) Ausgabe:
Verwendung der Summenaggregatfunktion für den Datensatz
Verketten von DataFrame
Um den Datenrahmen zu verknüpfen, verwenden wir concat() Funktion, die beim Verketten des Datenrahmens hilft. Diese Funktion übernimmt die ganze schwere Arbeit der Durchführung von Verkettungsoperationen entlang einer Achse von Pandas-Objekten und führt gleichzeitig eine optionale Mengenlogik (Vereinigung oder Schnittmenge) der Indizes (falls vorhanden) auf den anderen Achsen aus.
Python Pandas verketten Datenrahmen
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], 'Age':[27, 24, 22, 32],} # Define a dictionary containing employee data data2 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'], 'Qualification':['Btech', 'B.A', 'Bcom', 'B.hons']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) # Convert the dictionary into DataFrame df1 = pd.DataFrame(data2) display(df, df1) # combining series and dataframe res = pd.concat([df, df1], axis=1) res Ausgabe:
DataFrame zusammenführen
Wenn wir sehr große DataFrames kombinieren müssen, sind Verknüpfungen eine leistungsstarke Möglichkeit, diese Vorgänge schnell auszuführen. Verknüpfungen können jeweils nur für zwei DataFrames durchgeführt werden, die als linke und rechte Tabelle bezeichnet werden. Der Schlüssel ist die gemeinsame Spalte, in der die beiden DataFrames verbunden werden. Es empfiehlt sich, Schlüssel mit eindeutigen Werten in der gesamten Spalte zu verwenden, um unbeabsichtigte Duplikate von Zeilenwerten zu vermeiden. Pandas bieten eine einzige Funktion: verschmelzen() , als Einstiegspunkt für alle standardmäßigen Datenbankverknüpfungsvorgänge zwischen DataFrame-Objekten.
Es gibt vier grundlegende Möglichkeiten, die Verknüpfung zu handhaben (innere, linke, rechte und äußere), abhängig davon, welche Zeilen ihre Daten behalten müssen.
Python Pandas Merge-Datenrahmen
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], 'Age':[27, 24, 22, 32],} # Define a dictionary containing employee data data2 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'], 'Qualification':['Btech', 'B.A', 'Bcom', 'B.hons']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) # Convert the dictionary into DataFrame df1 = pd.DataFrame(data2) display(df, df1) # using .merge() function res = pd.merge(df, df1, on='key') res Ausgabe:
Verknüpfen zweier Datensätze
Beitritt zu DataFrame
Um den Datenrahmen zu verbinden, verwenden wir .verbinden() Funktion: Diese Funktion wird zum Kombinieren der Spalten von zwei möglicherweise unterschiedlich indizierten DataFrames zu einem einzigen Ergebnis-DataFrame verwendet.
Python-Pandas treten Dataframe bei
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], 'Age':[27, 24, 22, 32]} # Define a dictionary containing employee data data2 = {'Address':['Allahabad', 'Kannuaj', 'Allahabad', 'Kannuaj'], 'Qualification':['MCA', 'Phd', 'Bcom', 'B.hons']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1,index=['K0', 'K1', 'K2', 'K3']) # Convert the dictionary into DataFrame df1 = pd.DataFrame(data2, index=['K0', 'K2', 'K3', 'K4']) display(df, df1) # joining dataframe res = df.join(df1) res Ausgabe:
Zusammenfügen zweier Datensätze
Weitere Informationen finden Sie in unserem Pandas verschmelzen, verbinden und verketten Lernprogramm
Eine vollständige Anleitung zu Pandas finden Sie in unserer Pandas-Tutorial .
Visualisierung mit Matplotlib
Matplotlib ist einfach zu verwenden und eine erstaunliche Visualisierungsbibliothek in Python. Es basiert auf NumPy-Arrays und ist für die Zusammenarbeit mit dem breiteren SciPy-Stack konzipiert. Es besteht aus mehreren Diagrammen wie Linie, Balken, Streuung, Histogramm usw.
Pyplot
Pyplot ist ein Matplotlib-Modul, das eine MATLAB-ähnliche Schnittstelle bereitstellt. Pyplot bietet Funktionen, die mit der Figur interagieren, d. h. eine Figur erstellen, den Plot mit Beschriftungen versehen und einen Plotbereich in einer Figur erstellen.
Python3# Python program to show pyplot module import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4], [1, 4, 9, 16]) plt.axis([0, 6, 0, 20]) plt.show()
Ausgabe:
Balkendiagramm
A Balkengrundstück oder Balkendiagramm ist ein Diagramm, das die Datenkategorie mit rechteckigen Balken darstellt, deren Länge und Höhe proportional zu den Werten ist, die sie darstellen. Die Balkendiagramme können horizontal oder vertikal dargestellt werden. Ein Balkendiagramm beschreibt die Vergleiche zwischen den einzelnen Kategorien. Es kann mit der Methode bar() erstellt werden.
Python Matplotlib-Balkendiagramm
Hier verwenden wir nur den Iris-Datensatz
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') # This will plot a simple bar chart plt.bar(df['Species'], df['SepalLengthCm']) # Title to the plot plt.title('Iris Dataset') # Adding the legends plt.legend(['bar']) plt.show() Ausgabe:
Balkendiagramm mit Matplotlib-Bibliothek
Histogramme
A Histogramm wird im Wesentlichen zur Darstellung von Daten in Form einiger Gruppen verwendet. Es handelt sich um eine Art Balkendiagramm, bei dem die X-Achse die Bin-Bereiche darstellt, während die Y-Achse Informationen über die Häufigkeit liefert. Um ein Histogramm zu erstellen, besteht der erste Schritt darin, einen Abschnitt der Bereiche zu erstellen, dann den gesamten Wertebereich auf eine Reihe von Intervallen zu verteilen und die Werte zu zählen, die in jedes der Intervalle fallen. Bins werden eindeutig als aufeinanderfolgende, nicht überlappende Intervalle von Variablen identifiziert. Der hist() Die Funktion wird verwendet, um ein Histogramm von x zu berechnen und zu erstellen.
Python Matplotlib-Histogramm
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.hist(df['SepalLengthCm']) # Title to the plot plt.title('Histogram') # Adding the legends plt.legend(['SepalLengthCm']) plt.show() Ausgabe:
Histplot unter Verwendung der Matplotlib-Bibliothek
Streudiagramm
Streudiagramme werden verwendet, um die Beziehung zwischen Variablen zu beobachten, und verwenden Punkte, um die Beziehung zwischen ihnen darzustellen. Der streuen() Die Methode in der Matplotlib-Bibliothek wird zum Zeichnen eines Streudiagramms verwendet.
Python Matplotlib-Streudiagramm
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.scatter(df['Species'], df['SepalLengthCm']) # Title to the plot plt.title('Scatter Plot') # Adding the legends plt.legend(['SepalLengthCm']) plt.show() Ausgabe:
Streudiagramm mit der Matplotlib-Bibliothek
Box-Plot
A Box-Plot ,Korrelation, auch Box- und Whisker-Plot genannt. Es ist eine sehr gute visuelle Darstellung, wenn es um die Messung der Datenverteilung geht. Zeigt die Medianwerte, Ausreißer und Quartile übersichtlich an. Das Verständnis der Datenverteilung ist ein weiterer wichtiger Faktor, der zu einer besseren Modellbildung führt. Wenn Daten Ausreißer aufweisen, ist der Boxplot eine empfohlene Methode, um diese zu identifizieren und die erforderlichen Maßnahmen zu ergreifen. Das Box- und Whisker-Diagramm zeigt, wie die Daten verteilt sind. Im Allgemeinen sind fünf Informationen im Diagramm enthalten
- Das Minimum wird ganz links im Diagramm am Ende des linken „Schnurrhaars“ angezeigt.
- Das erste Quartil, Q1, befindet sich ganz links in der Box (linker Whisker).
- Der Median wird als Linie in der Mitte der Box angezeigt
- Drittes Quartil, Q3, ganz rechts in der Box angezeigt (rechter Whisker)
- Das Maximum befindet sich ganz rechts in der Box
Darstellung des Boxplots
Interquartilbereich
Veranschaulichender Boxplot
Python Matplotlib Boxplot
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.boxplot(df['SepalWidthCm']) # Title to the plot plt.title('Box Plot') # Adding the legends plt.legend(['SepalWidthCm']) plt.show() Ausgabe:
Boxplot mit der Matplotlib-Bibliothek
Korrelations-Heatmaps
Eine 2D-Heatmap ist ein Datenvisualisierungstool, das dabei hilft, das Ausmaß des Phänomens in Form von Farben darzustellen. Eine Korrelations-Heatmap ist eine Heatmap, die eine 2D-Korrelationsmatrix zwischen zwei diskreten Dimensionen zeigt und dabei farbige Zellen verwendet, um Daten aus normalerweise einer monochromatischen Skala darzustellen. Die Werte der ersten Dimension erscheinen als Zeilen der Tabelle, während die zweite Dimension eine Spalte ist. Die Farbe der Zelle ist proportional zur Anzahl der Messungen, die mit dem Dimensionswert übereinstimmen. Dies macht Korrelations-Heatmaps ideal für die Datenanalyse, da sie Muster leicht lesbar machen und die Unterschiede und Variationen in denselben Daten hervorheben. Eine Korrelations-Heatmap wird wie eine normale Heatmap durch einen Farbbalken unterstützt, der die Daten leicht lesbar und verständlich macht.
Notiz: Die Daten müssen hier mit der corr()-Methode übergeben werden, um eine Korrelations-Heatmap zu generieren. Außerdem eliminiert corr() selbst Spalten, die beim Generieren einer Korrelations-Heatmap keinen Nutzen haben, und wählt diejenigen aus, die verwendet werden können.
Python Matplotlib Korrelations-Heatmap
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.imshow(df.corr() , cmap = 'autumn' , interpolation = 'nearest' ) plt.title('Heat Map') plt.show() Ausgabe:
Heatmap mit Matplotlib-Bibliothek
Weitere Informationen zur Datenvisualisierung finden Sie in unseren folgenden Tutorials –
- Notiz: Wir werden Iris Dataset verwenden.
Informationen zum Datensatz abrufen
Wir werden den Formparameter verwenden, um die Form des Datensatzes zu erhalten.
Form des Datenrahmens
Python3df.shapeAusgabe:
(150, 6)Wir können sehen, dass der Datenrahmen 6 Spalten und 150 Zeilen enthält.
Notiz: Wir werden Iris Dataset verwenden.
Informationen zum Datensatz abrufen
Schauen wir uns nun auch die Spalten und ihre Datentypen an. Dazu verwenden wir die die Info() Methode.
Informationen zum Datensatz
Python3df.info()Ausgabe:
![]()
Informationen zum Datensatz
Wir können sehen, dass nur eine Spalte kategoriale Daten enthält und alle anderen Spalten vom numerischen Typ mit Nicht-Null-Einträgen sind.
Lassen Sie uns mithilfe von eine kurze statistische Zusammenfassung des Datensatzes erhalten beschreiben() Methode. Die Funktion „beschreiben()“ wendet grundlegende statistische Berechnungen auf den Datensatz an, z. B. Extremwerte, Anzahl der Datenpunkte, Standardabweichung usw. Alle fehlenden Werte oder NaN-Werte werden automatisch übersprungen. Die Funktion „beschreiben()“ liefert ein gutes Bild der Datenverteilung.
Beschreibung des Datensatzes
Python3df.describe()Ausgabe:
![]()
Beschreibung des Datensatzes
Wir können die Anzahl jeder Spalte zusammen mit ihrem Mittelwert, ihrer Standardabweichung sowie ihren Minimal- und Maximalwerten sehen.
Überprüfung fehlender Werte
Wir prüfen, ob in unseren Daten fehlende Werte enthalten sind oder nicht. Fehlende Werte können auftreten, wenn für einen oder mehrere Artikel oder für eine ganze Einheit keine Informationen bereitgestellt werden. Wir werden das verwenden ist Null() Methode.
Python-Code für fehlenden Wert
Python3df.isnull().sum()Ausgabe:
![]()
Fehlende Werte im Datensatz
Wir können sehen, dass in keiner Spalte ein Wert fehlt.
Duplikate prüfen
Mal sehen, ob unser Datensatz Duplikate enthält oder nicht. Pandas drop_duplicates() Die Methode hilft beim Entfernen von Duplikaten aus dem Datenrahmen.
Pandas-Funktion für fehlende Werte
Python3data = df.drop_duplicates(subset ='Species',) dataAusgabe:
![]()
Löschen doppelter Werte im Datensatz
Wir können sehen, dass es nur drei einzigartige Arten gibt. Sehen wir uns an, ob der Datensatz ausgeglichen ist oder nicht, d. h. ob alle Arten die gleiche Anzahl an Zeilen enthalten oder nicht. Wir werden das verwenden Series.value_counts() Funktion. Diese Funktion gibt eine Reihe zurück, die die Anzahl der eindeutigen Werte enthält.
Python-Code für die Wertzählung in der Spalte
Python3df.value_counts('Species')Ausgabe:
![]()
Wertanzahl im Datensatz
Wir können sehen, dass alle Arten die gleiche Anzahl an Zeilen enthalten, daher sollten wir keine Einträge löschen.
Beziehung zwischen Variablen
Wir werden die Beziehung zwischen Kelchblattlänge und Kelchblattbreite sowie zwischen Blütenblattlänge und Blütenblattbreite sehen.
Vergleich der Kelchblattlänge und Kelchblattbreite
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.scatterplot(x='SepalLengthCm', y='SepalWidthCm', hue='Species', data=df, ) # Placing Legend outside the Figure plt.legend(bbox_to_anchor=(1, 1), loc=2) plt.show()Ausgabe:
![]()
Streudiagramm mit der Matplotlib-Bibliothek
Aus der obigen Darstellung können wir Folgendes ableiten:
- Die Art Setosa hat kleinere Kelchblattlängen, aber größere Kelchblattbreiten.
- Die Versicolor-Art liegt hinsichtlich der Kelchblattlänge und -breite in der Mitte der beiden anderen Arten
- Die Art Virginica hat größere Kelchblattlängen, aber kleinere Kelchblattbreiten.
Vergleich von Blütenblattlänge und Blütenblattbreite
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.scatterplot(x='PetalLengthCm', y='PetalWidthCm', hue='Species', data=df, ) # Placing Legend outside the Figure plt.legend(bbox_to_anchor=(1, 1), loc=2) plt.show()Ausgabe:
![]()
Länge des Blütenblatts im Sactter-Plot
Aus der obigen Darstellung können wir Folgendes ableiten:
- Die Art Setosa hat kleinere Blütenblattlängen und -breiten.
- Die Versicolor-Art liegt hinsichtlich der Blütenblattlänge und -breite im Mittelfeld der beiden anderen Arten
- Die Art Virginica hat die größten Blütenblattlängen und -breiten.
Lassen Sie uns alle Beziehungen der Spalte mithilfe eines Paardiagramms darstellen. Es kann für multivariate Analysen verwendet werden.
Python-Code für Pairplot
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.pairplot(df.drop(['Id'], axis = 1), hue='Species', height=2)Ausgabe:
Pairplot für den Datensatz
Wir können in diesem Diagramm viele Arten von Verwandtschaftsbeziehungen erkennen, wie zum Beispiel, dass die Art Seotsa die kleinsten Blütenblattbreiten und -längen aufweist. Es hat auch die kleinste Kelchblattlänge, aber größere Kelchblattbreiten. Solche Informationen können über jede andere Art gesammelt werden.
Umgang mit Korrelationen
Pandas dataframe.corr() wird verwendet, um die paarweise Korrelation aller Spalten im Datenrahmen zu ermitteln. Alle NA-Werte werden automatisch ausgeschlossen. Alle nicht numerischen Datentypspalten im Datenrahmen werden ignoriert.
Beispiel:
Python3data.corr(method='pearson')Ausgabe:
![]()
Korrelation zwischen Spalten im Datensatz
Heatmaps
Die Heatmap ist eine Datenvisualisierungstechnik, mit der der Datensatz als Farben in zwei Dimensionen analysiert wird. Grundsätzlich zeigt es eine Korrelation zwischen allen numerischen Variablen im Datensatz. Vereinfacht ausgedrückt können wir die oben gefundene Korrelation mithilfe der Heatmaps darstellen.
Python-Code für Heatmap
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.heatmap(df.corr(method='pearson').drop( ['Id'], axis=1).drop(['Id'], axis=0), annot = True); plt.show()Ausgabe:
![]()
Heatmap für Korrelation im Datensatz
Aus der obigen Grafik können wir Folgendes ersehen:
- Blütenblattbreite und Blütenblattlänge weisen starke Korrelationen auf.
- Blütenblattlänge und Kelchblattbreite weisen gute Korrelationen auf.
- Blütenblattbreite und Kelchblattlänge weisen gute Korrelationen auf.
Umgang mit Ausreißern
Ein Ausreißer ist ein Datenelement/Objekt, das erheblich von den übrigen (sogenannten normalen) Objekten abweicht. Sie können durch Mess- oder Ausführungsfehler verursacht werden. Die Analyse zur Ausreißererkennung wird als Ausreißer-Mining bezeichnet. Es gibt viele Möglichkeiten, Ausreißer zu erkennen, und der Prozess zum Entfernen des Datenrahmens ist derselbe wie das Entfernen eines Datenelements aus dem Datenrahmen des Pandas.
Betrachten wir den Iris-Datensatz und zeichnen wir das Boxplot für die Spalte SepalWidthCm.
Python-Code für Boxplot
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt # Load the dataset df = pd.read_csv('Iris.csv') sns.boxplot(x='SepalWidthCm', data=df)Ausgabe:
![]()
Boxplot für sepalwidth-Spalte
In der obigen Grafik fungieren die Werte über 4 und unter 2 als Ausreißer.
Ausreißer entfernen
Um den Ausreißer zu entfernen, muss man den gleichen Prozess wie das Entfernen eines Eintrags aus dem Datensatz unter Verwendung seiner genauen Position im Datensatz durchführen, da das Endergebnis bei allen oben genannten Methoden zur Erkennung des Ausreißers die Liste aller Datenelemente ist, die der Ausreißerdefinition entsprechen je nach verwendeter Methode.
Wir werden die Ausreißer anhand von erkennen IQR und dann werden wir sie entfernen. Wir werden auch das Boxplot zeichnen, um zu sehen, ob die Ausreißer entfernt werden oder nicht.
Python3# Importing import sklearn from sklearn.datasets import load_boston import pandas as pd import seaborn as sns # Load the dataset df = pd.read_csv('Iris.csv') # IQR Q1 = np.percentile(df['SepalWidthCm'], 25, interpolation = 'midpoint') Q3 = np.percentile(df['SepalWidthCm'], 75, interpolation = 'midpoint') IQR = Q3 - Q1 print('Old Shape: ', df.shape) # Upper bound upper = np.where(df['SepalWidthCm']>= (Q3+1.5*IQR)) # Untergrenze Lower = np.where(df['SepalWidthCm'] <= (Q1-1.5*IQR)) # Removing the Outliers df.drop(upper[0], inplace = True) df.drop(lower[0], inplace = True) print('New Shape: ', df.shape) sns.boxplot(x='SepalWidthCm', data=df)Ausgabe:
![]()
Boxplot mit Seaborn-Bibliothek
Weitere Informationen zu EDA finden Sie in unseren folgenden Tutorials –