Ich benutze SQL seit 1996, daher bin ich möglicherweise voreingenommen. Ich habe MySQL und SQLite 3 ausgiebig verwendet, aber auch Microsoft SQL Server und Oracle.
Die überwiegende Mehrheit der Operationen, die ich mit Pandas durchgeführt habe, ist mit SQL einfacher durchzuführen. Dazu gehört das Filtern eines Datasets, das Auswählen bestimmter Spalten für die Anzeige, das Anwenden einer Funktion auf Werte usw.
SQL hat den Vorteil eines Optimierers und einer Datenpersistenz. SQL hat auch Fehlermeldungen, die klar und verständlich sind. Pandas hat eine etwas kryptische API, in der es manchmal angebracht ist, eine einzige zu verwenden, ein [ stuff ]
anderes Mal, das Sie benötigen [[ stuff ]]
, und manchmal eine .loc
. Ein Teil der Komplexität von Pandas ergibt sich aus der Tatsache, dass so viel Überlastung stattfindet.
Also versuche ich zu verstehen, warum Pandas so beliebt sind.
Antworten:
Die eigentliche erste Frage ist, warum Menschen mit DataFrame-Abstraktionen produktiver sind als mit reinen SQL-Abstraktionen.
TLDR; SQL orientiert sich nicht am (menschlichen) Entwicklungs- und Debugging-Prozess, sondern an DataFrames.
Der Hauptgrund dafür ist, dass Sie mit DataFrame-Abstraktionen SQL-Anweisungen erstellen können, ohne dass eine ausführliche und unleserliche Verschachtelung erforderlich ist. Das Muster, geschachtelte Routinen zu schreiben, sie auszukommentieren, um sie zu überprüfen und sie dann zu entfernen, wird durch einzelne Transformationszeilen ersetzt. Sie können natürlich die Dinge Zeile für Zeile in einer Replik ausführen (auch in Spark) und die Ergebnisse anzeigen.
Stellen Sie sich das Beispiel vor, einer Tabelle eine neue transformierte (durch einen String verstümmelte) Spalte hinzuzufügen, sie danach zu gruppieren und einige Aggregationen durchzuführen. Die SQL wird ziemlich hässlich. Pandas können das beheben, aber es fehlen einige Dinge, wenn es um wirklich große Datenmengen oder bestimmte Partitionen geht (möglicherweise in letzter Zeit verbessert).
DataFrames sollten als API auf hoher Ebene für SQL-Routinen angesehen werden, auch wenn sie mit Pandas für einige SQL-Planer überhaupt nicht gerendert werden.
-
Sie können wahrscheinlich viele technische Diskussionen darüber führen, aber ich denke über die Benutzerperspektive unten nach.
Ein einfacher Grund, warum Sie im Gegensatz zu SQL viel mehr Fragen zu Pandas Datenmanipulation haben, ist, dass die Verwendung von SQL per Definition die Verwendung einer Datenbank bedeutet und viele Anwendungsfälle heutzutage ganz einfach Datenmengen erfordern für ' einmalige Aufgaben (von .csv, Web-API usw.). In diesen Fällen ist das Laden, Speichern, Bearbeiten und Extrahieren aus einer Datenbank nicht möglich.
Wenn Sie jedoch Fälle in Betracht ziehen, in denen der Anwendungsfall die Verwendung von Pandas oder SQL rechtfertigt, liegen Sie mit Sicherheit nicht falsch. Wenn Sie viele sich wiederholende Datenbearbeitungsaufgaben ausführen und die Ausgaben beibehalten möchten, empfehle ich immer, zuerst SQL zu verwenden. Nach allem, was ich gesehen habe, ist der Grund, warum viele Benutzer auch in diesen Fällen nicht über SQL gehen, zweifach.
Erstens ist der Hauptvorteil von Pandas gegenüber SQL, dass es Teil des erweiterten Python-Universums ist. Das bedeutet, dass ich meine Daten auf einen Schlag laden, bereinigen, manipulieren und visualisieren kann (ich kann sogar SQL über Pandas ausführen ...). Das andere ist ganz einfach, dass allzu viele Benutzer den Umfang der SQL-Funktionen nicht kennen. Jeder Anfänger lernt die 'Extraktionssyntax' von SQL (SELECT, FROM, WHERE usw.), um Ihre Daten aus einer DB an den nächsten Ort zu bringen. Einige greifen möglicherweise auf die erweiterte Gruppierungs- und Iterationssyntax zurück. Danach besteht jedoch eine erhebliche Wissenslücke, bis Sie zu den Experten (DBA, Dateningenieure usw.) gelangen.
tl; dr: Es hängt oft vom Anwendungsfall, der Benutzerfreundlichkeit oder einer Wissenslücke im Hinblick auf den Umfang der SQL-Funktionen ab.
quelle
So sehr es Überschneidungen bei der Anwendung dieser beiden Dinge gibt, werden Äpfel mit Orangen verglichen.
pandas ist ein Datenanalyse-Toolkit, das in Python, einer Allzweck-Programmiersprache, implementiert ist. SQL ist eine domänenspezifische Sprache zum Abfragen relationaler Daten (normalerweise in einem relationalen Datenbankverwaltungssystem, bei dem es sich um SQLite, MySQL, Oracle, SQL Server, PostgreSQL usw. handelt).
SQL impliziert
Python hingegen (Pandas ist ziemlich "pythonisch", was hier zutrifft) ist flexibel und für Menschen mit unterschiedlichem Hintergrund zugänglich. Es kann als "Skriptsprache", als Funktionssprache und als voll funktionsfähige OOP-Sprache verwendet werden. Visualisierungsfunktionen und Datenquellen-Interoperabilität sind in pandas integriert, Sie können jedoch alles, was Python in Ihrem Workflow tun kann, einbinden (was die meisten Dinge sind). Das wissenschaftliche Python-Ökosystem ist im Aufschwung und umfasst großartige Tools wie Jupyter Notebook und wichtige Scipy- Bibliotheken wie Matplotlib und Numpy (auf denen Pandas aufbauen ). Wesentliche Elemente der Datenanalyse von Pandas sind R-inspiriert und Sie werden im Allgemeinen keine Statistiker finden, die sich darüber Gedanken machen, ob sie R (oder möglicherweise zunehmend Pandas!) verwenden, um alles in eine Datenbank zu stellen und ihre Analysen in SQL zu schreiben.
Ich sage nicht, dass Pandas besser ist als SQL oder umgekehrt, aber SQL ist ein sehr domänenspezifisches Tool, während Pandas Teil eines riesigen, flexiblen und zugänglichen Ökosystems ist. Ich arbeite mit Geodatensystemen, von denen relationale Datenbanken einen großen Anteil haben und SQL ein leistungsstarkes und unverzichtbares Werkzeug ist. Pandas ist jedoch ein ebenso wichtiger Teil meines täglichen Toolkits, und SQL wird häufig zum Abrufen von Daten herangezogen - möglicherweise mit einer gewissen Vorverarbeitung -, damit ich in Pandas etwas damit anfangen kann.
quelle
Erstens sind Pandas nicht so beliebt. Ich benutze sowohl Pandas als auch SQL. Zuerst versuche ich, die Aufgabe zu verstehen. Wenn dies in SQL möglich ist, bevorzuge ich SQL, da es effizienter ist als Pandas. Versuchen Sie, mit großen Datenmengen (10.000.000 x 50) zu arbeiten. Versuchen Sie, eine Groupby- Operation sowohl in SQL als auch in Pandas auszuführen . Du wirst verstehen.
Ich benutze Pandas, wo es praktisch ist, Spaltenwerte in ein Array aufzuteilen und ein paar Dinge zu tun (zum Beispiel, nur einige Werte aus diesem Array auszuwählen). Jetzt ist diese Art von Aufgabe in SQL relativ schwer zu programmieren, aber Pandas werden Ihre Aufgabe erleichtern.
quelle
Ich gehöre zu den Leuten, die (in meinem Fall) Rs Dplyr (die Sprache, nicht unbedingt das Werkzeug) in jedem Fall verwenden würden, wenn ich könnte, obwohl ich mein SQL kenne.
Der Hauptvorteil, den ich in Pandas / dplyr / data.table-Pipelines sehe, ist, dass die Operationen atomar sind und von oben nach unten gelesen werden können.
In SQL müssen Sie das gesamte Skript analysieren und herumspringen (was wird zusammengefasst, was wird verbunden und wie - links? Innen? Rechts? Gibt es Filter?), Um vollständig zu erfassen, was passiert.
In Pandas et al. Ist jeder Schritt der Pipeline in sich abgeschlossen, es wird etwas mit den Eingabedaten gemacht und es werden Ausgabedaten zurückgegeben. Dieser sequentielle Prozess erleichtert das Überlegen, was passiert, da für jede Operation ein klar definierter Status vorhanden ist und nicht nur ein Status eine Abfrageebene.
Und ja, Sie können
WITH
Anweisungen und dergleichen ausführen, aber es erfordert viel mehr Code und es ist nicht so klar, welches Objekt im Vergleich zu Piping verwendet wird.quelle
Ich bin ziemlich neu in Pandas / Python, habe aber mehr als 20 Jahre Erfahrung als SQLServer-DBA, Architekt, Administrator usw. Ich liebe Pandas und bin bestrebt, immer zu versuchen, die Dinge in Pandas zum Laufen zu bringen, bevor ich wieder zu meinem Komfort zurückkehre. gemütliche SQL-Welt.
Warum RDBMS besser sind: Der Vorteil von RDBMS ist die jahrelange Erfahrung in der Optimierung der Abfragegeschwindigkeit und der Datenlesevorgänge. Das Beeindruckende ist, dass sie dies tun können und gleichzeitig die Notwendigkeit ausgleichen, die Schreibgeschwindigkeit zu optimieren und den hochgradig gleichzeitigen Zugriff zu verwalten. Diese zusätzlichen Kosten beeinträchtigen manchmal den Vorteil für Pandas, wenn es um einfache Anwendungsfälle für Einzelbenutzer geht. Aber selbst dann kann ein erfahrener DBA eine Datenbank so optimieren, dass sie für die Lesegeschwindigkeit gegenüber der Schreibgeschwindigkeit optimiert ist. DBAs können von Dingen wie der Optimierung der Datenspeicherung, der strategischen Größenanpassung von Datenträgerseiten, dem Füllen / Auffüllen von Seiten, Datencontroller- und Datenträgerpartitionierungsstrategien, optimierten E / A-Plänen, speicherinternen Datenverknüpfungen, vordefinierten Ausführungsplänen, Indexierung und Datenkomprimierung profitieren , und viele mehr. Ich habe von vielen Pandas-Entwicklern den Eindruck, dass sie Ich verstehe nicht die Tiefe, die dort verfügbar ist. Ich denke, normalerweise passiert Folgendes: Wenn Pandas-Entwickler niemals Daten haben, die groß genug sind, um diese Optimierungen zu benötigen, schätzen sie nicht, wie viel Zeit sie Ihnen sofort ersparen können. Die RDBMS-Welt verfügt über 30 Jahre Erfahrung in der Optimierung dieser Funktion. Wenn also Rohgeschwindigkeit für große Datasets erforderlich ist, können RDBMS-Systeme überboten werden.
Warum ist Python / Pandas besser: Das heißt, Geschwindigkeit ist nicht alles und in vielen Anwendungsfällen nicht der treibende Faktor. Es hängt davon ab, wie Sie die Daten verwenden, ob sie gemeinsam genutzt werden und ob Sie sich für die Geschwindigkeit der Verarbeitung interessieren. RDBMSs sind im Allgemeinen in ihren Datenstrukturen starrer und belasten den Entwickler damit, mit Datenformen deterministischer umzugehen. Mit Pandas kannst du hier lockerer sein. Auch und das ist mein Lieblingsgrund, Sie sind in einer echten Programmiersprache. Programmiersprachen bieten Ihnen unendlich mehr Flexibilität, um erweiterte Logik auf die Daten anzuwenden. Natürlich gibt es auch ein reichhaltiges Ökosystem an Modulen und Frameworks von Drittanbietern, an das SQL nicht herankommen kann. Die Möglichkeit, von den Rohdaten bis zur Webpräsentation oder Datenvisualisierung in einer Codebasis zu arbeiten, ist SEHR praktisch. Es ist auch viel tragbarer. Sie können Python fast überall ausführen, einschließlich öffentlicher Notizbücher, mit denen Sie die Reichweite Ihrer Ergebnisse erhöhen und schneller auf andere zugreifen können. Datenbanken zeichnen sich dabei nicht aus.
Mein Rat? Wenn Sie feststellen, dass Sie zu immer größeren Datensätzen wechseln, müssen Sie den Sprung wagen und lernen, wie RDBMS helfen kann. Ich habe gesehen, wie Millionen Zeilen, Multi-Table-Joins und aggregierte Abfragen von 5 Minuten auf 2 Sekunden reduziert wurden. Dieses Verständnis in Ihrem Werkzeuggürtel zu haben, macht Sie zu einem runderen Datenwissenschaftler. Sie können heute vielleicht alles in Pandas tun, aber eines Tages haben Sie möglicherweise eine Aufgabe, bei der RDBMS die beste Wahl ist.
quelle
Was Pandas können, kann SQL nicht
df.describe()
df['population'].plot(kind='hist')
Was Pandas können, war mir nicht bewusst, dass SQL dies auch kann
df.to_csv('foobar.sv')
. Dies ist wichtig, wenn Sie einem Geschäftsinhaber etwas zeigen möchten, der mit Excel arbeiten möchte. Und das gibt esdf.to_excel
auch. Aber in SQL können SieSELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;
(danke, vy32!)quelle
SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;
Siehe dev.mysql.com/doc/refman/8.0/en/select-into.htmlDas einzige, was in diesen Antworten nicht erwähnt wird, ist, dass es auch davon abhängt, wie Sie SQL verwenden. Nehmen wir zum Beispiel arcpy. Aus irgendeinem Grund verfügt keine der arcpy.da-Funktionen über eine Funktion zum Ausführen vieler Funktionen. Das ist wirklich seltsam, weil es so ziemlich jede andere Python-SQL-Bibliothek tut. Die Where-Anweisung in den Funktionen von arcpy.da ist ebenfalls auf ca. 120 Zeichen begrenzt. Dies bedeutet im Wesentlichen, dass Sie bei einer relativ hohen Anzahl von Aufgaben, die Sie mit Ihrer Datenbank ausführen möchten, die einzige echte Wahl darin bestehen, die von Ihnen gewählte arcpy.da-Funktion mehrmals aufzurufen und die where-Anweisung jedes Mal zu ändern. Es gibt ein paar Tricks, mit denen Sie diesen Prozess beschleunigen können - Sie können beispielsweise Teile Ihres Datasets durchlaufen -, aber buchstäblich ist jeder dieser Tricks viel langsamer als nur die Verwendung einer arcpy.da. Suchvorläufer, um Ihre gesamte Tabelle in einen Pandas-Datenrahmen zu laden und dann mit Pandas, Numpy und, wenn Ihre Daten wirklich so umfangreich sind, Dask zu bearbeiten. Ich muss hier betonen, dass Pandas in diesem Fall nicht nur ein bisschen schneller sind. Es ist widerlich schneller. Es ist so viel schneller, dass ich mich buchstäblich selbst ausgelacht habe, weil ich es nicht früher getan habe. Mit Pandas konnte die Ausführungszeit eines Skripts von weit über einer Stunde auf buchstäblich 12 Minuten gesenkt werden. Ich vergesse, dass dies der Sprung von 3,5 Stunden auf 1,5 Stunden war. Es ist so viel schneller, dass ich mich buchstäblich auslachte, weil ich es nicht früher getan hatte. Mit Pandas konnte die Ausführungszeit eines Skripts von weit über einer Stunde auf buchstäblich 12 Minuten gesenkt werden. Ich vergesse, dass dies der Sprung von 3,5 Stunden auf 1,5 Stunden war. Es ist so viel schneller, dass ich mich buchstäblich auslachte, weil ich es nicht früher getan hatte. Mit Pandas konnte die Ausführungszeit eines Skripts von weit über einer Stunde auf buchstäblich 12 Minuten gesenkt werden. Ich vergesse, dass dies der Sprung von 3,5 Stunden auf 1,5 Stunden war.
Eine Sache zu beachten ist, dass ich, obwohl ich dies mit SQL hätte tun können, viel länger gebraucht hätte, um zu lernen. Ich hätte entweder in Access speziell für SQL bestimmte Vorgänge lernen müssen - dort endeten die Daten für dieses Skript - - SQL in Access war nicht so robust, wie ich es benötigt hätte, als ich dies tatsächlich in Betracht gezogen hätte - oder Ich hätte alle meine Daten in eine SQLite3-Datenbank schreiben, dort bearbeiten und dann in Access ablegen müssen. Während dies zu ähnlichen Leistungsergebnissen geführt hätte, hätte es mir in Zukunft erschwert, mein Skript zu ändern.
Also ja, manchmal Pandas und ist nur streng besser als mit den SQL-Optionen, die Sie zu Ihrer Verfügung haben . Alles, was ich in SQL hätte tun müssen, wurde mit einer Funktion in Pandas erledigt. Sie können auch SQL-Syntax mit Pandas verwenden, wenn Sie möchten. Es gibt kaum einen Grund, Pandas und SQL nicht gleichzeitig zu verwenden.
Eine weitere Sache, die ich über Pandas und Numpy erwähnen möchte, ist, dass beide Bibliotheken von Natur aus auf Mengen basierende Ansätze sind. Mit diesen Bibliotheken können Sie Datenrahmen und Reihen durchlaufen, aber es ist wirklich schwierig, Daten in diesen Strukturen so zu ändern, dass Sie mit beiden Bibliotheken effizienteren Code schreiben, da dies viel einfacher ist machen. Mit SQL habe ich keine Erfahrung darin gemacht, "geführt" zu werden, wenn man nicht auf der Schiene ist, setbasierte Ansätze zu verwenden.
Noch eine gewaltige Sache, die ich bei Pandas vergessen habe. Geld . Pandas ist ein Tool, mit dem Sie bei vielen Data Science-Jobs wissen müssen, wie man es verwendet. So ziemlich jeder Data Science-Job, den ich mir angesehen habe, hat mehr gekostet als Jobs vom Typ Datenbankverwaltung. Die einzige Ausnahme, die mir aufgefallen ist, ist das Data Engineering, aber ich habe weitaus weniger von diesen Stellenangeboten gesehen. Pandas sieht so aus, als ob Sie damit auf einen Blick mehr Geld verdienen.
quelle
Ich dachte, ich würde hinzufügen, dass ich viele zeitreihenbasierte Datenanalysen durchführe, und die Pandas
resample
undreindex
Methoden sind dafür von unschätzbarem Wert. Ja, Sie können ähnliche Aufgaben in SQL ausführen (ich neige dazu, eineDateDimension
Tabelle für datumsbezogene Abfragen zu erstellen ), aber ich finde die Verwendung der Pandas-Methoden viel einfacher.Wie andere bereits gesagt haben, ist der Rest meiner Modellierung in Python und ich habe oft Webanrufe oder CSV-Dateien.
quelle
Ich werde versuchen, diese Frage aufgrund meiner eigenen Erfahrung zu beantworten. Im Gegensatz zu den anderen Antworten bevorzuge ich
Sql
Deep Learning und Big Data-bezogene Dinge. Dafür gibt es zahlreiche Gründe. Wie hier zu sehen ist ,Ein weiterer Unterschied besteht darin, dass CRUD-Operationen in SQL verteilt mit unterschiedlichen Autorisierungsrichtlinien angewendet werden können, die in Pandas nicht möglich sind.
Es ist nicht gemeint zu sagen, was besser ist, es hängt alles von Ihrer Aufgabe ab. Für große Berechnungen bevorzuge ich SQL und für kleine Pandas.
Es gibt andere Dinge, die nicht in Pandas vorkommen und für die schnelle Datenextraktion von großer Bedeutung sind, auf die ich später noch eingehen werde. Sehen Sie sich das hier an .
quelle
Panda ist populärer, da Python in Form von Jupyter-Notebooks die populärste Toolbox ist, wie sie von Datenwissenschaftlern im Bereich neuronaler Netze verwendet wird. Python wird "die" Sprache. Es ist sogar möglich, SQL-Backend zu verwenden, aber Sie sind nicht nur mit Panda an SQL gebunden.
quelle
Nicht gerade die Antwort auf die Frage, aber da ich selbst hierher gekommen bin, um nach Unterschieden in der praktischen Anwendung zu suchen:
https://pandas.pydata.org/pandas-docs/stable/getting_started/comparison/comparison_with_sql.html
quelle