Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen
Ich erzähle Ihnen aus eigener Erfahrung, was wo und wann nützlich war. Es ist ein Überblick und eine These, damit klar ist, was und wo Sie weiter graben können – aber hier habe ich ausschließlich subjektive persönliche Erfahrungen, vielleicht ist bei Ihnen alles ganz anders.

Warum ist es wichtig, Abfragesprachen zu kennen und verwenden zu können? Im Kern besteht Data Science aus mehreren wichtigen Arbeitsphasen, und die allererste und wichtigste (ohne sie wird sicherlich nichts funktionieren!) ist das Erhalten oder Extrahieren von Daten. Meistens liegen die Daten irgendwo in irgendeiner Form und müssen von dort „abgerufen“ werden. 

Mit Abfragesprachen können Sie genau diese Daten extrahieren! Und heute erzähle ich Ihnen von den Abfragesprachen, die mir nützlich waren, und ich werde Ihnen sagen und zeigen, wo und wie genau – warum es zum Lernen benötigt wird.

Es gibt drei Hauptblöcke von Datenabfragetypen, die wir in diesem Artikel besprechen:

  • Unter „Standard“-Abfragesprachen versteht man allgemein, wenn man von einer Abfragesprache spricht, beispielsweise von relationaler Algebra oder SQL.
  • Skript-Abfragesprachen: zum Beispiel Python Things Pandas, Numpy oder Shell-Scripting.
  • Abfragesprachen für Wissensgraphen und Graphdatenbanken.

Alles, was hier geschrieben steht, ist nur eine persönliche Erfahrung, was nützlich war, mit einer Beschreibung von Situationen und „warum es nötig war“ – jeder kann ausprobieren, wie ähnliche Situationen auf ihn zukommen können, und versuchen, sich im Voraus darauf vorzubereiten, indem er diese Sprachen versteht ​Bevor Sie sich (dringend) für ein Projekt bewerben müssen oder überhaupt zu einem Projekt kommen, bei dem sie benötigt werden.

„Standard“-Abfragesprachen

Standardabfragesprachen sind genau in dem Sinne, wie wir normalerweise an sie denken, wenn wir über Abfragen sprechen.

Relationale Algebra

Warum wird relationale Algebra heute benötigt? Um gut zu verstehen, warum Abfragesprachen auf eine bestimmte Weise strukturiert sind, und sie bewusst einzusetzen, muss man den ihnen zugrunde liegenden Kern verstehen.

Was ist relationale Algebra?

Die formale Definition lautet wie folgt: Die relationale Algebra ist ein geschlossenes System von Operationen auf Beziehungen in einem relationalen Datenmodell. Um es etwas menschlicher auszudrücken: Dies ist ein System von Operationen auf Tabellen, sodass das Ergebnis immer eine Tabelle ist.

Alle relationalen Operationen finden Sie unter diese Artikel von Habr – hier beschreiben wir, warum Sie es wissen müssen und wo es nützlich ist.

Warum?

Wenn man beginnt zu verstehen, worum es in Abfragesprachen geht und welche Operationen hinter Ausdrücken in bestimmten Abfragesprachen stecken, erhält man oft ein tieferes Verständnis dafür, was in Abfragesprachen funktioniert und wie.

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen
Genommen von diese Artikel. Ein Beispiel für eine Operation: Join, die Tabellen verbindet.

Materialien zum Lernen:

Guter Einführungskurs von Stanford. Im Allgemeinen gibt es viele Materialien zur relationalen Algebra und Theorie – Coursera, Udacity. Auch online gibt es jede Menge Material, auch gutes akademische Kurse. Mein persönlicher Rat: Sie müssen die relationale Algebra sehr gut verstehen – das ist die Grundlage der Grundlagen.

SQL

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen
Genommen von diese artikel.

SQL ist im Wesentlichen eine Implementierung der relationalen Algebra – mit einer wichtigen Einschränkung: SQL ist deklarativ! Das heißt, wenn Sie eine Abfrage in der Sprache der relationalen Algebra schreiben, sagen Sie eigentlich, wie man rechnet – aber mit SQL geben Sie an, was Sie extrahieren möchten, und dann generiert das DBMS bereits (effektive) Ausdrücke in der Sprache der relationalen Algebra (deren). Äquivalenz ist bei uns bekannt als Satz von Codd).

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen
Genommen von diese artikel.

Warum?

Relationale DBMS: Oracle, Postgres, SQL Server usw. sind immer noch praktisch überall und es besteht eine unglaublich hohe Wahrscheinlichkeit, dass Sie mit ihnen interagieren müssen, was bedeutet, dass Sie entweder SQL lesen müssen (was sehr wahrscheinlich ist) oder es schreiben müssen ( auch nicht unwahrscheinlich).

Was man lesen und lernen sollte

Laut den gleichen Links oben (über relationale Algebra) gibt es unglaublich viel Material, zum Beispiel: diese.

Was ist übrigens NoSQL?

„Es ist noch einmal hervorzuheben, dass der Begriff „NoSQL“ einen absolut spontanen Ursprung hat und keine allgemein anerkannte Definition oder wissenschaftliche Institution dahinter steht.“ Dazugehörigen Beitrag auf Habr.

Tatsächlich erkannten die Leute, dass zur Lösung vieler Probleme kein vollständiges relationales Modell erforderlich ist, insbesondere für solche, bei denen beispielsweise die Leistung entscheidend ist und bestimmte einfache Abfragen mit Aggregation dominieren – wo es entscheidend ist, Metriken schnell zu berechnen und in die zu schreiben Datenbank, und die meisten Funktionen sind relational, erwies sich nicht nur als unnötig, sondern auch schädlich – warum etwas normalisieren, wenn es das Wichtigste für uns (für eine bestimmte Aufgabe) ruiniert – die Produktivität?

Außerdem werden häufig flexible Schemata anstelle der festen mathematischen Schemata des klassischen relationalen Modells benötigt – und dies vereinfacht die Anwendungsentwicklung enorm, wenn es darauf ankommt, das System bereitzustellen und schnell mit der Arbeit zu beginnen und die Ergebnisse – oder das Schema und die Arten der gespeicherten Daten – zu verarbeiten sind nicht so wichtig.

Wir erstellen beispielsweise ein Expertensystem und möchten Informationen zu einer bestimmten Domäne zusammen mit einigen Metainformationen speichern. Möglicherweise kennen wir nicht alle Felder und speichern einfach JSON für jeden Datensatz. Dadurch erhalten wir eine sehr flexible Umgebung zum Erweitern der Daten modellieren und schnell iterieren – in diesem Fall ist NoSQL sogar noch vorzuziehen und besser lesbar. Beispieleintrag (aus einem meiner Projekte, bei dem NoSQL genau dort war, wo es benötigt wurde).

{"en_wikipedia_url":"https://en.wikipedia.org/wiki/Johnny_Cash",
"ru_wikipedia_url":"https://ru.wikipedia.org/wiki/?curid=301643",
"ru_wiki_pagecount":149616,
"entity":[42775,"Джонни Кэш","ru"],
"en_wiki_pagecount":2338861}

Sie können mehr lesen hier über NoSQL.

Was studieren?

Hier müssen Sie lediglich Ihre Aufgabe gründlich analysieren, welche Eigenschaften sie hat und welche NoSQL-Systeme verfügbar sind, die zu dieser Beschreibung passen würden – und dann mit dem Studium dieses Systems beginnen.

Skript-Abfragesprachen

Auf den ersten Blick scheint es, was Python im Allgemeinen damit zu tun hat – es ist eine Programmiersprache und es geht überhaupt nicht um Abfragen.

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen

  • Pandas ist im wahrsten Sinne des Wortes ein Schweizer Taschenmesser der Datenwissenschaft; darin findet eine große Menge an Datentransformation, -aggregation usw. statt.
  • Numpy – Vektorberechnungen, Matrizen und lineare Algebra dort.
  • Scipy – dieses Paket enthält viel Mathematik, insbesondere Statistiken.
  • Jupyter-Labor – viele explorative Datenanalysen passen gut in Laptops – nützlich zu wissen.
  • Anfragen – Arbeiten mit dem Netzwerk.
  • Pyspark ist bei Dateningenieuren sehr beliebt. Wahrscheinlich werden Sie aufgrund der Beliebtheit mit diesem oder Spark interagieren müssen.
  • *Selenium – sehr nützlich zum Sammeln von Daten von Websites und Ressourcen, manchmal gibt es einfach keine andere Möglichkeit, an die Daten zu gelangen.

Mein wichtigster Rat: Lerne Python!

Pandas

Nehmen wir den folgenden Code als Beispiel:

import pandas as pd
df = pd.read_csv(“data/dataset.csv”)
# Calculate and rename aggregations
all_together = (df[df[‘trip_type’] == “return”]
    .groupby(['start_station_name','end_station_name'])
                  	    .agg({'trip_duration_seconds': [np.size, np.mean, np.min, np.max]})
                           .rename(columns={'size': 'num_trips', 
           'mean': 'avg_duration_seconds',    
           'amin': min_duration_seconds', 
           ‘amax': 'max_duration_seconds'}))

Im Wesentlichen sehen wir, dass der Code in das klassische SQL-Muster passt.

SELECT start_station_name, end_station_name, count(trip_duration_seconds) as size, …..
FROM dataset
WHERE trip_type = ‘return’
GROUPBY start_station_name, end_station_name

Aber der wichtige Teil ist, dass dieser Code Teil des Skripts und der Pipeline ist; tatsächlich betten wir Abfragen in die Python-Pipeline ein. In dieser Situation kommt die Abfragesprache aus Bibliotheken wie Pandas oder pySpark.

Im Allgemeinen sehen wir in pySpark eine ähnliche Art der Datentransformation durch eine Abfragesprache im Sinne von:

df.filter(df.trip_type = “return”)
  .groupby(“day”)
  .agg({duration: 'mean'})
  .sort()

Wo und was zu lesen ist

Auf Python selbst im Allgemeinen Kein Problem Materialien zum Lernen finden. Es gibt eine große Anzahl an Tutorials online Pandas, pySpark und Kurse zu Spark (und auch von alleine DS). Insgesamt eignet sich der Inhalt hier hervorragend zum Googeln, und wenn ich mich auf ein Paket konzentrieren müsste, wäre es natürlich Pandas. Auch in Bezug auf die Kombination von DS+Python-Materialien sehr viel.

Shell als Abfragesprache

Bei vielen Datenverarbeitungs- und Analyseprojekten, mit denen ich gearbeitet habe, handelt es sich tatsächlich um Shell-Skripte, die Code in Python, Java und die Shell-Befehle selbst aufrufen. Daher können Sie Pipelines in bash/zsh/etc im Allgemeinen als eine Art Abfrage auf hoher Ebene betrachten (Sie können dort natürlich Schleifen hineinstopfen, aber das ist nicht typisch für DS-Code in Shell-Sprachen). Ein einfaches Beispiel: Ich musste eine QID-Zuordnung von Wikidaten und vollständigen Links zu den russischen und englischen Wikis erstellen. Dazu habe ich eine einfache Anfrage aus den Befehlen in der Bash geschrieben und für die Ausgabe habe ich ein einfaches Skript in Python geschrieben, das ich so zusammenstellen:

pv “data/latest-all.json.gz” | 
unpigz -c  | 
jq --stream $JQ_QUERY | 
python3 scripts/post_process.py "output.csv"

wo

JQ_QUERY = 'select((.[0][1] == "sitelinks" and (.[0][2]=="enwiki" or .[0][2] =="ruwiki") and .[0][3] =="title") or .[0][1] == "id")' 

Dies war tatsächlich die gesamte Pipeline, die das erforderliche Mapping erstellte; wie wir sehen, funktionierte alles im Stream-Modus:

  • pv filepath – gibt einen Fortschrittsbalken basierend auf der Dateigröße aus und gibt den Inhalt weiter
  • unpigz -c hat einen Teil des Archivs gelesen und an jq übergeben
  • jq mit dem Schlüssel -stream erzeugte sofort das Ergebnis und übergab es an den Postprozessor (wie beim allerersten Beispiel) in Python
  • Intern war der Postprozessor eine einfache Zustandsmaschine, die die Ausgabe formatierte 

Insgesamt eine komplexe Pipeline, die im Flow-Modus mit großen Datenmengen (0.5 TB) arbeitet, ohne nennenswerte Ressourcen und aus einer einfachen Pipeline und einigen Tools besteht.

Noch ein wichtiger Tipp: gut und effektiv im Terminal arbeiten und bash/zsh/etc schreiben können.

Wo wird es nützlich sein? Ja, fast überall – auch hier gibt es im Internet eine Menge Materialien zum Lernen. Insbesondere hier diese mein vorheriger Artikel.

R-Skripterstellung

Auch hier könnte der Leser ausrufen: Nun, das ist eine ganze Programmiersprache! Und natürlich wird er Recht haben. Normalerweise begegnete mir R jedoch in einem solchen Kontext, dass es tatsächlich einer Abfragesprache sehr ähnlich war.

R ist eine statistische Rechenumgebung und Sprache für statisches Rechnen und Visualisieren (gemäß dies).

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen
Genommen daher. Ich empfehle es übrigens, gutes Material.

Warum muss ein Datenwissenschaftler R kennen? Zumindest, weil es eine große Schicht von Nicht-IT-Leuten gibt, die Daten in R analysieren. Ich bin an folgenden Stellen darauf gestoßen:

  • Pharmazeutischer Sektor.
  • Biologen.
  • Finanzsektor.
  • Menschen mit einer rein mathematischen Ausbildung, die sich mit Statistiken beschäftigen.
  • Spezialisierte statistische Modelle und Modelle für maschinelles Lernen (die oft nur in der Version des Autors als R-Paket zu finden sind).

Warum ist es eigentlich eine Abfragesprache? In der Form, in der es oft vorkommt, handelt es sich tatsächlich um eine Aufforderung zum Erstellen eines Modells, einschließlich des Lesens von Daten und des Festlegens von Abfrage-(Modell-)Parametern sowie der Visualisierung von Daten in Paketen wie ggplot2 – dies ist auch eine Form des Schreibens von Abfragen .

Beispielabfragen zur Visualisierung

ggplot(data = beav, 
       aes(x = id, y = temp, 
           group = activ, color = activ)) +
  geom_line() + 
  geom_point() +
  scale_color_manual(values = c("red", "blue"))

Im Allgemeinen sind viele Ideen von R in Python-Pakete wie Pandas, Numpy oder Scipy übergegangen, etwa Datenrahmen und Datenvektorisierung – daher werden Ihnen im Allgemeinen viele Dinge in R vertraut und praktisch vorkommen.

Es gibt viele Quellen, die man studieren kann, zum Beispiel: diese.

Wissensgraphen

Hier mache ich eine etwas ungewöhnliche Erfahrung, da ich ziemlich oft mit Wissensgraphen und Abfragesprachen für Graphen arbeiten muss. Lassen Sie uns deshalb kurz auf die Grundlagen eingehen, da dieser Teil etwas exotischer ist.

In klassischen relationalen Datenbanken haben wir ein festes Schema, aber hier ist das Schema flexibel, jedes Prädikat ist tatsächlich eine „Spalte“ und noch mehr.

Stellen Sie sich vor, Sie modellieren eine Person und möchten wichtige Dinge beschreiben. Nehmen wir zum Beispiel eine bestimmte Person, Douglas Adams, und verwenden Sie diese Beschreibung als Grundlage.

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen
www.wikidata.org/wiki/Q42

Wenn wir eine relationale Datenbank verwenden würden, müssten wir eine oder mehrere riesige Tabellen mit einer großen Anzahl von Spalten erstellen, von denen die meisten NULL wären oder mit einem standardmäßigen Falschwert gefüllt wären. Es ist unwahrscheinlich, dass viele von uns beispielsweise einen haben Eintrag in der koreanischen Nationalbibliothek – natürlich könnten wir sie in separate Tabellen einfügen, aber das wäre letztendlich ein Versuch, einen flexiblen logischen Schaltkreis mit Prädikaten zu modellieren, der einen festen relationalen Schaltkreis verwendet.

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen
Stellen Sie sich also vor, dass alle Daten als Diagramm oder als binäre und unäre boolesche Ausdrücke gespeichert werden.

Wo kann man so etwas überhaupt antreffen? Erstens die Zusammenarbeit mit Daten-Wikiund mit beliebigen Diagrammdatenbanken oder verbundenen Daten.

Im Folgenden sind die wichtigsten Abfragesprachen aufgeführt, die ich verwendet und mit denen ich gearbeitet habe.

Sparql

Wiki:
SPARQL (rekursives Akronym aus Engl. SPARQL-Protokoll und RDF-Abfragesprache) - Datenabfragesprache, dargestellt durch das Modell RDF, und auch Protokoll um diese Anfragen zu übermitteln und darauf zu antworten. SPARQL ist eine Empfehlung W3C-Konsortium und eine der Technologien Semantisches Web.

In Wirklichkeit handelt es sich jedoch um eine Abfragesprache für logische unäre und binäre Prädikate. Sie geben lediglich bedingt an, was in einem booleschen Ausdruck festgelegt ist und was nicht (sehr vereinfacht).

Die RDF-Basis (Resource Description Framework), über die SPARQL-Abfragen ausgeführt werden, ist ein Triple object, predicate, subject - und die Abfrage wählt die erforderlichen Tripel gemäß den angegebenen Einschränkungen im Sinne von: Finden Sie ein Objekt mit ID 55 (hier und die ganze Geschichte, wiederum unter Auslassung aller möglichen Details).

Beispiel einer Datenpräsentation:

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen
Bilder und Beispiele mit Ländern hier daher.

Beispiel für eine einfache Abfrage

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen

Tatsächlich möchten wir den Wert der Variablen „?country“ für das Prädikat ermitteln
member_of, es stimmt, dass member_of(?country,q458) und q458 die ID der Europäischen Union ist.

Ein Beispiel für eine echte SPARQL-Abfrage innerhalb der Python-Engine:

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen

Normalerweise musste ich SPARQL lesen, anstatt es zu schreiben – in dieser Situation wäre es wahrscheinlich eine nützliche Fähigkeit, die Sprache zumindest auf einem grundlegenden Niveau zu verstehen, um genau zu verstehen, wie Daten abgerufen werden. 

Es gibt viel Material zum Online-Lernen: zum Beispiel hier diese и diese. Normalerweise google ich nach bestimmten Designs und Beispielen und das reicht für den Moment.

Logische Abfragesprachen

Mehr zum Thema können Sie in meinem Artikel lesen hier. Und hier wollen wir nur kurz untersuchen, warum sich logische Sprachen gut zum Schreiben von Abfragen eignen. Im Wesentlichen ist RDF nur eine Menge logischer Anweisungen der Form p(X) und h(X,Y), und eine logische Abfrage hat die folgende Form:

output(X) :- country(X), member_of(X,“EU”).

Hier geht es um die Erstellung eines neuen Prädikats „output/1“ (/1 bedeutet „unär“), vorausgesetzt, dass für

Das heißt, in diesem Fall werden sowohl die Daten als auch die Regeln auf die gleiche Weise dargestellt, wodurch wir Probleme sehr einfach und gut modellieren können.

Wo haben Sie sich in der Branche kennengelernt?: ein ganzes großes Projekt mit einem Unternehmen, das Abfragen in einer solchen Sprache schreibt, sowie zum aktuellen Projekt im Kern des Systems - es scheint, dass dies eine ziemlich exotische Sache ist, aber manchmal passiert es.

Ein Beispiel für ein Codefragment in einer logischen Sprache, die Wikidaten verarbeitet:

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen

Materialien: Ich gebe hier ein paar Links zur modernen logischen Programmiersprache Answer Set Programming – ich empfehle, sie zu studieren:

Anmerkungen des Datenwissenschaftlers: Eine personalisierte Überprüfung der Datenabfragesprachen

Source: habr.com

Kommentar hinzufügen