Warum bevorzugen die Leute Pandas gegenüber SQL?

69

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.

vy32
quelle
Kommentare sind nicht für längere Diskussionen gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Sean Owen

Antworten:

51

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.

cvonsteg
quelle
2
Ich denke, SQL, das größtenteils auf der Grundlage von Sätzen erstellt wird, spielt eine große Rolle, wenn viele Leute aus anderen technischen Bereichen es gewohnt sind, zeilenweise mit Daten umzugehen. Bedenken Sie auch, dass Daten meistens nur Daten für Pandas sind, aber verschiedene SQL-Engines unterschiedliche integrierte Funktionen unterstützen, die sehr schnell nerven können, wenn Sie während Ihres Arbeitstages hacken und wechseln müssen
Dave,
3
Ich würde nicht sagen, dass es nicht lebensfähig ist. Wenn Sie die Daten in einen Pandas-Datenrahmen übertragen können, können Sie sie wahrscheinlich in eine PostgreSQL-Datenbank verschieben. Aber für einen und fertig ist es wahrscheinlich mehr Aufwand und Zeit, als Sie sparen würden.
jpmc26
2
Ich stimme zu, dass einige ETL-Ansätze auf Programmierer ausgerichtete Entscheidungen zu sein scheinen. Das heißt, sie bevorzugen es, die Daten zu manipulieren und dann diese "perfekte" Nutzlast für die Datenbank bereitzustellen. Wie Sie jedoch angeben, ist die zusätzliche Programmebene nicht erforderlich, wenn dies über mehrere SQL-Abfragen erfolgen kann. Genau das, womit ich in letzter Zeit konfrontiert war. Wie das OP und Ihre Antwort zeigen, könnte es sein, dass "alte" oder DBA-zentrierte Leute es betrachten und sagen, warum man es nicht in SQL macht (sogar nur einige einfache Abfragen!). Trotzdem habe ich festgestellt, dass Pandas für extrem unterschiedliche Datensätze sehr leistungsfähig sind.
SaltySub2
1
@SaltySub Nur ein Punkt zur Verlagerung von Dingen aus der Programmebene in SQL: Es ist ein fairer Punkt und kann durchaus gültig sein, aber wenn man Anwendungslogik in SQL-Prozeduren vergräbt, kann dies seinen eigenen besonderen Kopfschmerz erzeugen.
Electric Head
1
@ElectricHead Ich stimme zu, dass es eine richtige Balance geben muss. Wenn eine Reihe von SQL-Abfragen die Aufgaben angemessen ausführen kann, kann dies auf jeden Fall einfacher und effizienter sein. Umgekehrt sollten Pandas, wie Sie angeben, stark in Betracht gezogen werden, wenn man eine große Menge an Logik in SQL-Prozeduren usw. stecken muss. Besonders wie oben, wenn Sie verschiedene Datenbankvarianten verwenden - SQL-Syntaxunterschiede können dann sehr haarig werden.
SaltySub2
29

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

  • Arbeiten mit Daten in einem RDBMS *, das für die Arbeitslast geeignet sein kann oder nicht, auch wenn es sich nur um eine kleine SQLite-Datenbank handelt,
  • Datenbankdomänenwissen (als Endbenutzer, Entwickler und / oder Administrator; der Vorschlag, dass "SQL schneller ist", sehe ich oft eine massive Übervereinfachung) und
  • Überwindung der nicht unerheblichen Lernkurve bei der effektiven Verwendung von SQL, insbesondere in Spezialanwendungen wie der Datenanalyse (im Gegensatz zur Erstellung einfacher Berichte aus einfachen Daten).

* Es sollte betont werden, dass SQL so domänenspezifisch ist, dass es für die Arbeit mit immer häufiger vorkommenden Alternativen zu relationalen Datenbanken wie NoSQL- Datenbanken immer weniger relevant wird . Dies stellt eine grundlegende Verschiebung in der Art und Weise dar, wie Daten gespeichert und strukturiert werden, und es gibt wirklich keine allgemein übliche Art des Zugriffs darauf wie die Entwicklung der angestrebten SQL-Standardisierung.

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.

Elektrischer Kopf
quelle
1
Dies ist die einzig wahre Antwort, es sollte die gewählte sein. SQL und Pandas sind zwei verschiedene Dinge. Ich verstehe nicht, welchen Vergleich die Leute anstellen wollen.
Gented
Ich vermute, es ist eine Endbenutzerperspektive, etwas Code-ähnliches zu schreiben, um Daten von irgendwoher abzurufen und zu massieren und einige Zahlen auszuspucken. Ich bin nicht ganz überrascht; Ich habe aus erster Hand erfahren, wie Datenanalysten, die sich mit einer alten, aber ansonsten unauffälligen Oracle-Datenbank befassen, nicht einmal die erste Vorstellung davon haben, was es ist und wie man sich damit verbindet, geschweige denn Daten herausholt. Ich glaube, dass es einen grundlegenden Mangel an Verständnis für die Technologie verrät - ich habe tatsächlich ein wenig hinzugefügt, um hoffentlich zu betonen, wie schnell das Missverständnis des Umfangs von SQL nachlässt.
Electric Head
Ich fordere Sie heraus, für NoSQL-Situationen irrelevant zu sein. Betrachten Sie zum Beispiel die Fortschritte, die PostgreSQL mit seinem JSON-Speicher gemacht hat.
jpmc26
Ich versuchte, meine Worte sorgfältig zu wählen. PostgreSQL ist immer noch ein RDBMS, obwohl es viele Dinge gut macht (wie SQL Server, obwohl es Diagramme unterstützt). Aber ich habe den Wortlaut etwas gelockert, weil es immer noch ein guter Punkt ist: Es gibt einige Crossover- und vor allem SQL-APIs für einige NoSQL-Systeme. Es ist jedoch ein Crossover, da SQL keine universelle Sprache ist und nicht alle Daten relational strukturiert sind.
Electric Head
Ich denke, man kann alles in SQL machen, was in Pandas möglich ist. SQL ist nicht flexibel, aber so viel optimiert.
Medien
22

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.

Ankit Seth
quelle
Ist diese Ineffizienz spezifisch für Pandas? Ich habe in C # eine Menge speicherinterner Datenmanipulationen durchgeführt und fand sie ziemlich einfach und effizient, vorausgesetzt, sie passen in den Arbeitsspeicher und waren einmalig (dh es ist nicht erforderlich, die Indizes schrittweise zu aktualisieren, wenn sich die Daten ändern).
CodesInChaos
pandas soll über schnell bequem sein, aber das heißt nicht, dass es nicht schnell sein kann, wenn Sie es richtig verwenden. Letztendlich ist das Ausführen einer SQL-Abfrage für Daten in einer Datenbank nicht magisch - es erfordert Ressourcen wie nichts anderes, es ist nur so, dass Sie (wenn Sie es richtig machen!) Hoffentlich Ressourcen auf sorgfältig konfigurierten, leistungsfähigen Datenbankservern verwenden . Wenn Sie Ihre Pipeline in Pandas oder Ähnlichem richtig einsetzen (z. B. Daten streamen, anstatt alles in den Speicher zu laden), hängt dies davon ab, wie erfolgreich einige Bemühungen sind.
Electric Head
@CodesInChaos Es gibt diese Antwort von Pandas vs SQl - qr.ae/TUIpzE . Dort werden die Vor- und Nachteile des Einsatzes von Pandas beschrieben.
Ankit Seth
12

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 WITHAnweisungen und dergleichen ausführen, aber es erfordert viel mehr Code und es ist nicht so klar, welches Objekt im Vergleich zu Piping verwendet wird.

Robin Gertenbach
quelle
6

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.

Sisdog
quelle
5

Was Pandas können, kann SQL nicht

  1. df.describe()
  2. Plotten, z df['population'].plot(kind='hist')
  3. Verwenden Sie einen Datenrahmen direkt zum Trainieren von Algorithmen für maschinelles Lernen

Was Pandas können, war mir nicht bewusst, dass SQL dies auch kann

  1. Export nach CSV: 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 es df.to_excelauch. Aber in SQL können Sie SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;(danke, vy32!)
Martin Thoma
quelle
1
Nett. Obwohl die meisten davon wie Funktionen aussehen, die in SQL implementiert werden könnten. (SQL hat direkt CSV-Export.)
vy32
Könnten Sie mir bitte eine Anfrage schicken, die nach CSV exportiert? (Ich kenne nur Tools, die dies für einige SQL-basierte Datenbanken tun, aber ich habe noch nie eine Abfrage gesehen ... daher bezweifle ich, dass dies Teil der SQL-Spezifikation ist)
Martin Thoma
1
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.html
vy32
Vielen Dank, vy! Ich denke, ich werde meine Antwort anpassen, wenn ich zu Hause bin :-)
Martin Thoma
Sichere Sache. Denken Sie daran, dass die Datei auf dem SQL-Server und nicht auf dem Client gespeichert wird.
VY32
3

Das 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.

user38175
quelle
5
Vielleicht traurig, dass es bei modernen Jobs darum geht, die richtigen Schlagworte in Ihrem Lebenslauf zu haben, im Gegensatz zu den Ansätzen, die Sie zur Lösung eines Problems verwenden (vorausgesetzt, Sie können dieses Schlagwort relativ schnell lernen). Es ist, als ob das Schlagwort wichtiger ist als das Lösen von Problemen. Wenn die Problemlösung für X das Erlernen und Verwenden von Technologie A, B, C und nicht umgekehrt beinhalten soll. Ich frage mich, ob die meisten Entwicklerteams jetzt Dinge wegen Modewort und Trendigkeit zerschlagen, und dann über Problemlösungen als sekundäres oder "altmodisches" Ding nachdenken, weil Sie das besagte Modewort nicht kannten / verwendeten.
SaltySub2
1
@ElectricHead Wenn Sie nach meiner Erfahrung Ihre eigene SQL-Funktion in Python schreiben, ist es einfacher, den Cursor zu missbrauchen und fehlerhafte Abfragen zu schreiben, als Pandas / Numpy zu verwenden. Denken Sie daran, dass nicht alle SQL-Module / Bibliotheken gleich sind. In meinem Fall gibt es mit arcpy.da.SearchCursors und dergleichen keine gute Möglichkeit, eine Reihe von Datensätzen auf effiziente Weise zu bearbeiten, da es komische Einschränkungen gibt. Wenn ich pandas / numpy benutze, gibt es eine gute Möglichkeit, Dinge zu tun, und genau das möchte ich, wenn ich Python benutze.
1
Ahhh OK. Sie meinen eine homespun SQL-Pipeline über eine Python-Dbapi-Implementierung im Vergleich zur Verwendung von Numpy / Pandas? In welchem ​​Fall, yeah gotcha, kein Streit von mir da; Pflege erforderlich! Es liest sich für mich wie normales SQL, mit dem Sie natürlich Set-Operationen verstehen müssen, aber das wird sich schnell herausstellen, wenn Sie alberne Abfragen von einem Datenbank-Client ausführen.
Electric Head
1
@Steve Ja, wird die Leute nicht davon abhalten, Dinge in Schleifen in Pandas oder ähnlichem dynamisch zu ändern :) Ich denke, SQL zu verstehen hilft dabei, in Pandas effektiv zu arbeiten (es ist jedoch nicht so, als ob sie die Ähnlichkeit in einigen Konzepten verbergen).
Electric Head
1
@Steve In der Tat sind Pandas auch mächtig ... Ich denke, einer meiner Frustrationen sind die Entwickler und das Management, auch ich selbst. Sie verbringen nicht genügend Zeit damit, Lösungen zu evaluieren und Trends zu jagen (wo Geld für die Förderung von Selbst / Unternehmen verwendet wird). Aber auch in Lean Prototyping / MVP müsste man entsprechende Grundlagen für die Skalierung legen. SQL, noSQL und Pandas ... haben alle ihre Zwecke für die entsprechenden Aufgaben und Projekte in verschiedenen Phasen. Im letzten Jahr hat mir noSQL für einen schlanken Prototyp / MVP sicherlich in mehrfacher Hinsicht geholfen. SQL wäre dafür übertrieben gewesen.
SaltySub2
3

Ich dachte, ich würde hinzufügen, dass ich viele zeitreihenbasierte Datenanalysen durchführe, und die Pandas resampleund reindexMethoden sind dafür von unschätzbarem Wert. Ja, Sie können ähnliche Aufgaben in SQL ausführen (ich neige dazu, eine DateDimensionTabelle 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.

Ken Syme
quelle
2

Ich werde versuchen, diese Frage aufgrund meiner eigenen Erfahrung zu beantworten. Im Gegensatz zu den anderen Antworten bevorzuge ich SqlDeep Learning und Big Data-bezogene Dinge. Dafür gibt es zahlreiche Gründe. Wie hier zu sehen ist ,

Pandas bietet eine intuitive, leistungsstarke und schnelle Datenanalyse für tabellarische Daten. Da Pandas jedoch nur einen Ausführungsthread verwendet und erfordert, dass sich alle Daten auf einmal im Speicher befinden, ist die Skalierung auf Datasets, die weit über die Gigabyte-Skala hinausgehen, nicht gut.

B+

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 .

Medien
quelle
1

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.

user3800527
quelle