Daten aus der realen Welt sind selten perfekt – sie sind oft chaotisch, inkonsistent und voller Überraschungen. In diesem Beitrag erfahren Sie, wie Sie in Python eine Datenbereinigung für einen Datensatz aus dem Museum of Fashionable Artwork (MoMA) durchführen. Der Datensatz, der Hunderte von Kunstwerken katalogisiert, enthält häufige Datenprobleme wie fehlende Werte, inkonsistente Formate und schwierige Datumsbereiche.
Über den MoMA-Datensatz
Kunst ist ein chaotisches Geschäft. Im Laufe der Jahrhunderte haben Künstler alles geschaffen, von einfachen Gemälden bis hin zu komplexen Skulpturen, und Kunsthistoriker haben dabei alles katalogisiert, was ihnen möglich warfare. Das Museum of Fashionable Artwork, kurz MoMA, ist eines der einflussreichsten Museen der Welt und hat seinen Kunstkatalog öffentlich zugänglich gemacht. Sie können den Datensatz herunterladen unter GitHub und begleiten Sie uns bei der Reinigung und Vorbereitung für die Analyse.
Das Museum hat jedoch einen Haftungsausschluss herausgegeben, dass der Datensatz noch in Arbeit ist – vielleicht ein sich weiterentwickelndes Kunstwerk für sich. Wie bei vielen realen Datensätzen bedeutet dies, dass sie Qualitätsprobleme enthalten, die behoben werden müssen. Wir verwenden Python, um diese Eigenheiten zu untersuchen, Muster zu identifizieren und den Datensatz in ein saubereres Format für tiefere Einblicke umzuwandeln.
Warum Datenbereinigung in Python durchführen?
Python hat sich dank seiner Benutzerfreundlichkeit und leistungsstarken Bibliotheken zu einem der beliebtesten Instruments für die Arbeit mit Daten entwickelt. Organisationen aller Branchen verlassen sich auf Python, von der Verarbeitung von Finanzberichten bis hin zur Analyse wissenschaftlicher Forschung. Wenn es um die Datenbereinigung geht, bietet die Pandas-Bibliothek von Python effiziente Instruments für den Umgang mit unordentlichen Datensätzen, wie wir sie vom MoMA verwenden.
Gleich werden wir Pandas verwenden, um den Datensatz schnell zu laden, seine Struktur zu untersuchen und häufige Probleme zu beheben. Wenn Sie neu bei Python sind oder die Grundlagen auffrischen möchten, schauen Sie sich unsere an Einführung in die Python-Programmierung Kurs, der eine solide Grundlage für den Einstieg bietet.
Mit Pandas die Daten erkunden
Bevor wir mit der Bereinigung beginnen, werfen wir einen genaueren Blick auf den MoMA-Datensatz, um seine Struktur zu verstehen und mögliche Probleme zu identifizieren. Wir verwenden Pandas, eine beliebte Python-Bibliothek zum Arbeiten mit Daten, um die ersten 100 Zeilen in einen DataFrame zu laden. Dadurch können wir den Datensatz erkunden und eine Vorschau auf das erhalten, womit wir arbeiten.
import pandas
artworks_100 = pandas.read_csv("MOMA_Artworks.csv")
artworks_100.head(10)
Titel | Künstler | KünstlerBio | Datum | Medium | Abmessungen | CreditLine | MoMANummer | Einstufung | Abteilung | Datum des Erwerbs | Vom Kurator genehmigt | Objekt-ID | URL | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Projekt Ferdinandsbrücke, Wien, Österreich, El… | Otto Wagner | (Österreichisch, 1841–1918) | 1896 | Tusche und ausgeschnittene und geklebte bemalte Seiten auf Papier | 19 1/8 x 66 1/2″ (48,6 x 168,9 cm) | Bruchteil und versprochenes Geschenk von Jo Carole und … | 885.1996 | A&D-Architekturzeichnung | Architektur & Design | 09.04.1996 | Y | 2 | https://www.moma.org/assortment/works/2 |
1 | Stadt der Musik, Nationwide Superior Conservatory … | Christian de Portzamparc | (Französisch, geb. 1944) | 1987 | Farbe und Buntstift auf dem Druck | 16 x 11 3/4″ (40,6 x 29,8 cm) | Geschenk des Architekten zu Ehren von Lily Auchinc… | 1.1995 | A&D-Architekturzeichnung | Architektur & Design | 17.01.1995 | Y | 3 | https://www.moma.org/assortment/works/3 |
2 | Villa in der Nähe von Wien Projekt, außerhalb von Wien, Österreich… | Emil Hoppe | (Österreichisch, 1876–1957) | 1903 | Graphit, Stift, Farbstift, Tinte und Gouache … | 13 1/2 x 12 1/2″ (34,3 x 31,8 cm) | Geschenk von Jo Carole und Ronald S. Lauder | 1.1997 | A&D-Architekturzeichnung | Architektur & Design | 15.01.1997 | Y | 4 | https://www.moma.org/assortment/works/4 |
3 | Das Manhattan Transcripts Mission, New York, N… | Bernard Tschumi | (Franzose und Schweizer, geboren 1944 in der Schweiz) | 1980 | Fotografische Reproduktion mit farbigem Synthetikmaterial. | 20 x 20″ (50,8 x 50,8 cm) | Kauf und teilweise Schenkung des Architekten in … | 2.1995 | A&D-Architekturzeichnung | Architektur & Design | 17.01.1995 | Y | 5 | https://www.moma.org/assortment/works/5 |
4 | Villa, Projekt, außerhalb von Wien, Österreich, Außen… | Emil Hoppe | (Österreichisch, 1876–1957) | 1903 | Graphit, Farbstift, Tinte und Gouache auf Tr… | 15 1/8 x 7 1/2″ (38,4 x 19,1 cm) | Geschenk von Jo Carole und Ronald S. Lauder | 2.1997 | A&D-Architekturzeichnung | Architektur & Design | 15.01.1997 | Y | 6 | https://www.moma.org/assortment/works/6 |
5 | Das Manhattan Transcripts Mission, New York, N… | Bernard Tschumi | (Franzose und Schweizer, geboren 1944 in der Schweiz) | 1976-77 | Foto aus Gelatinesilber | 14 x 18 Zoll (35,6 x 45,7 cm) | Kauf und teilweise Schenkung des Architekten in … | 3.1995.1 | A&D-Architekturzeichnung | Architektur & Design | 17.01.1995 | Y | 7 | https://www.moma.org/assortment/works/7 |
6 | Das Manhattan Transcripts Mission, New York, N… | Bernard Tschumi | (Franzose und Schweizer, geboren 1944 in der Schweiz) | 1976-77 | Fotografien aus Gelatinesilber | Jeweils: 14 x 18″ (35,6 x 45,7 cm) | Kauf und teilweise Schenkung des Architekten in … | 3.1995.1-24 | A&D-Architekturzeichnung | Architektur & Design | 17.01.1995 | Y | 8 | https://www.moma.org/assortment/works/8 |
7 | Das Manhattan Transcripts Mission, New York, N… | Bernard Tschumi | (Franzose und Schweizer, geboren 1944 in der Schweiz) | 1976-77 | Foto aus Gelatinesilber | 14 x 18 Zoll (35,6 x 45,7 cm) | Kauf und teilweise Schenkung des Architekten in … | 3.1995.10 | A&D-Architekturzeichnung | Architektur & Design | 17.01.1995 | Y | 9 | https://www.moma.org/assortment/works/9 |
8 | Das Manhattan Transcripts Mission, New York, N… | Bernard Tschumi | (Franzose und Schweizer, geboren 1944 in der Schweiz) | 1976-77 | Foto aus Gelatinesilber | 14 x 18 Zoll (35,6 x 45,7 cm) | Kauf und teilweise Schenkung des Architekten in … | 3.1995.11 | A&D-Architekturzeichnung | Architektur & Design | 17.01.1995 | Y | 10 | https://www.moma.org/assortment/works/10 |
9 | Das Manhattan Transcripts Mission, New York, N… | Bernard Tschumi | (Franzose und Schweizer, geboren 1944 in der Schweiz) | 1976-77 | Foto aus Gelatinesilber | 14 x 18 Zoll (35,6 x 45,7 cm) | Kauf und teilweise Schenkung des Architekten in … | 3.1995.12 | A&D-Architekturzeichnung | Architektur & Design | 17.01.1995 | Y | 11 | https://www.moma.org/assortment/works/11 |
Der .head()
Die Methode zeigt die ersten paar Zeilen des Datensatzes an und hilft uns, etwaige Unregelmäßigkeiten sofort zu erkennen. Auf den ersten Blick enthält der Datensatz wertvolle Metadaten wie Titel, Künstler, Jahr und Medium jedes Kunstwerks. Allerdings können wir bereits einige Unregelmäßigkeiten feststellen Date
Spalte, wie Jahresbereiche und nicht standardmäßige Einträge wie Unknown
. Wir werden uns mit diesen Problemen befassen, während wir den Reinigungsprozess durchlaufen.
Arbeiten mit Daten in Pandas
Datumsangaben sind ein wichtiger Bestandteil vieler Datensätze, insbesondere bei der Analyse von Tendencies oder Mustern im Zeitverlauf. Im MoMA-Datensatz ist die Date
Die Spalte enthält eine Mischung aus Formaten, z. B. Jahresbereiche (1976-77
) und nicht standardmäßige Einträge (Unknown
). Diese Inkonsistenzen erschweren die effektive Nutzung der Daten, sei es für die grafische Darstellung oder die Filterung nach Jahren.
Schauen wir uns zunächst die einzigartigen Werte im genauer an Date
Spalte mit der .value_counts()
Verfahren. Dies verschafft uns einen Überblick über die Daten und hilft uns, Muster oder Unregelmäßigkeiten zu erkennen, die behoben werden müssen.
# Verify the distribution of values within the 'Date' column
artworks_100('Date').value_counts()
Folgendes finden wir:
1976-77 25
1980-81 15
1979 12
Unknown 7
1980 5
1917 5
1978 5
1923 4
1935 3
1987 2
1903 2
1970 1
1896 1
1975 1
1984 1
1918 1
1986 1
n.d. 1
1906 1
1905 1
1930 1
1974 1
1936 1
1968 1
1900 1
c. 1917 1
dtype: int64
Diese Ausgabe hebt vier Schlüsselmuster in den Daten hervor:
- Muster 1: Jahresbereiche wie
1976-77
- Muster 2: Ungefähre Daten wie
c. 1917
- Muster 3: Fehlende Werte mit der Bezeichnung
Unknown
- Muster 4: Fehlende Werte mit der Bezeichnung
n.d.
Bereinigen der Daten
Nachdem wir nun Unregelmäßigkeiten festgestellt haben Date
Lassen Sie uns in der Spalte skizzieren, wie wir die Datenbereinigung in Python durchführen, um diese Probleme zu beheben. Jedes der vier Muster erfordert einen etwas anderen Ansatz:
- Muster 1: Jahresbereiche ersetzen (z. B.
1976-77
) mit dem ersten Jahr im Bereich. - Muster 2: Ungefähre Daten standardisieren (z. B.
c. 1917
) durch Entfernen derc.
Präfix. - Muster 3: Fehlende Werte mit der Bezeichnung belassen
Unknown
unverändert. - Muster 4: Fehlende Werte mit der Bezeichnung konvertieren
n.d.
ZuUnknown
für Konsistenz.
Durch die Anwendung dieser Transformationen stellen wir sicher, dass alle Werte in der Date
In der Spalte sind entweder standardisierte Jahresangaben enthalten oder eindeutig als fehlende Informationen gekennzeichnet. Dadurch lässt sich der Datensatz einfacher analysieren und visualisieren.
Als Nächstes schreiben wir etwas Python-Code, um diese Änderungen Schritt für Schritt umzusetzen.
Muster 1: Jahresbereiche
Jahresbereiche wie 1976-77
erschweren die Analyse oder Visualisierung der Daten. Der Einfachheit halber ersetzen wir diese Bereiche durch das erste Jahr im Bereich. Zum Beispiel, 1976-77
wird werden 1976
.
Dies können wir erreichen, indem wir den Wert am Bindestrich teilen (-
) und nur den ersten Teil beibehalten. So geht’s:
def clean_split_dates(row):
# Convert the present 'Date' worth to a string
initial_date = str(row('Date'))
# Break up the string on the hyphen
split_date = initial_date.cut up('-')
# Return the primary half if a hyphen is discovered; in any other case, return the unique worth
return split_date(0) if len(split_date) > 1 else initial_date
# Apply the perform row by row to the 'Date' column
artworks_100('Date') = artworks_100.apply(clean_split_dates, axis=1)
# Verify the up to date distribution of values within the 'Date' column
artworks_100('Date').value_counts()
Nach Anwendung dieser Transformation wurden alle Jahresbereiche durch einzelne Jahre ersetzt, wodurch die Date
Spalte konsistenter:
1976 25
1980 20
1979 12
Unknown 7
1917 5
1978 5
1923 4
1935 3
1987 2
1903 2
c. 1917 1
1918 1
1975 1
1968 1
n.d. 1
1905 1
1896 1
1984 1
1930 1
1970 1
1974 1
1986 1
1936 1
1900 1
1906 1
dtype: int64
Als nächstes werden wir darauf eingehen Muster 2 durch Standardisierung ungefährer Daten.
Muster 2: Ungefähre Daten
Im Datensatz werden einige Daten mithilfe des Präfixes als ungefähr gekennzeichnet c.
(z.B, c. 1917
). Um diese Einträge zu standardisieren, entfernen wir die c.
Präfix, während das Jahr intakt bleibt. Zum Beispiel, c. 1917
wird werden 1917
.
So können wir diese Einträge bereinigen:
def clean_approx_dates(row):
# Convert the present 'Date' worth to a string
initial_date = str(row('Date'))
# Take away the 'c.' prefix if it exists
if initial_date.startswith('c. '):
return initial_date(3:) # Return the string ranging from the 4th character
return initial_date
# Apply the perform row by row to the 'Date' column
artworks_100('Date') = artworks_100.apply(clean_approx_dates, axis=1)
# Verify the up to date distribution of values within the 'Date' column
artworks_100('Date').value_counts()
Nach diesem Schritt wurden die ungefähren Daten bereinigt, so dass standardisierte Jahre übrig blieben. Hier ist eine aktualisierte Verteilung der Date
Spalte:
1976 25
1980 20
1979 12
Unknown 7
1917 6
1978 5
1923 4
1935 3
1987 2
1903 2
1918 1
1975 1
1968 1
n.d. 1
1905 1
1896 1
1984 1
1930 1
1970 1
1974 1
1986 1
1936 1
1900 1
1906 1
dtype: int64
Nach diesem Schritt wurden die ungefähren Daten bereinigt, so dass standardisierte Jahre übrig blieben. Wir überspringen Muster 3 (Unknown
), da wir diese Einträge unverändert lassen. Gehen wir stattdessen direkt zu Muster 4wobei wir andere fehlende Werte mit der Bezeichnung standardisieren n.d.
.
Muster 4: Fehlende Werte (n.d.
)
Zusätzlich zu den Einträgen mit der Bezeichnung Unknown
der Datensatz verwendet n.d.
um fehlende Datumsinformationen anzuzeigen. Um die Daten konsistenter zu machen, ersetzen wir alle Instanzen von n.d.
mit Unknown
. Dadurch wird sichergestellt, dass fehlende Werte im gesamten Datensatz einheitlich dargestellt werden.
So können wir damit umgehen:
def clean_missing_dates(row):
# Change 'n.d.' with 'Unknown' if discovered within the 'Date' column
return 'Unknown' if row('Date') == 'n.d.' else row('Date')
# Apply the perform row by row to the 'Date' column
artworks_100('Date') = artworks_100.apply(clean_missing_dates, axis=1)
# Verify the up to date distribution of values within the 'Date' column
artworks_100('Date').value_counts()
1976 25
1980 20
1979 12
Unknown 8
1917 6
1978 5
1923 4
1935 3
1987 2
1903 2
1918 1
1975 1
1968 1
1905 1
1896 1
1984 1
1930 1
1970 1
1974 1
1986 1
1936 1
1900 1
1906 1
dtype: int64
Mit n.d.
Einträge vereinheitlicht, alle fehlenden Werte werden nun mit gekennzeichnet Unknown
. Diese Konsistenz erleichtert die Analyse oder Filterung der Daten bei fehlenden Daten.
Zu diesem Zeitpunkt haben wir alle Muster erfolgreich angegangen Date
Spalte. Der Datensatz ist jetzt viel sauberer und bereit für die weitere Analyse.
Nächste Schritte
Wir haben einige wichtige Datenbereinigungstechniken in Python beim Bereinigen behandelt Date
Spalte im MoMA-Datensatz, aber bei der Datenbereinigung müssen häufig eine Reihe von Problemen über mehrere Spalten hinweg behoben werden. Wenn Sie noch weiter gehen möchten, ist unser Exemplarische Vorgehensweise für das Datenbereinigungsprojekt Kurs ist ein toller nächster Schritt. In diesem sechsteiligen Kurs lernen Sie nicht nur, wie Sie Daten mit Python und Pandas bereinigen und transformieren, sondern umfassen auch zwei geführte Projekte, die sich perfekt für den Aufbau eines Portfolios eignen.
Während Sie diese Projekte durcharbeiten, sammeln Sie praktische Erfahrungen, die Sie potenziellen Arbeitgebern präsentieren können. Tipps, wie Sie Ihre Projekte wirkungsvoll präsentieren, finden Sie in unserem Leitfaden Erstellen eines Information-Science-Portfolios das fällt auf.