Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen
Ech soen Iech aus perséinlecher Erfahrung wat nëtzlech war wou a wéini. Et ass Iwwerbléck an Dissertatioun, sou datt et kloer ass wat a wou Dir weider gräift - awer hei hunn ech exklusiv subjektiv perséinlech Erfahrung, vläicht ass alles komplett anescht fir Iech.

Firwat ass et wichteg Ufro Sproochen ze wëssen a kënnen ze benotzen? Am Kär huet Data Science e puer wichteg Etappe vun der Aarbecht, an déi éischt an déi wichtegst (ouni et wäert sécher näischt funktionnéieren!) ass d'Daten erhalen oder extrahéieren. Meeschtens sëtzen d'Donnéeën iergendwou an iergendenger Form a musse vun do "erholl" ginn. 

Query Sproochen erlaben Iech dës ganz Donnéeën extrahéieren! An haut wäert ech Iech iwwer dës Ufro Sproochen soen, déi fir mech nëtzlech waren an ech soen Iech a weisen Iech wou a wéi genau - firwat et néideg ass ze studéieren.

Et ginn dräi Haaptblocke vun Datequery-Typen, déi mir an dësem Artikel diskutéieren:

  • "Standard" Ufro Sprooche sinn dat wat allgemeng verstan gëtt wann Dir iwwer eng Ufro Sprooch schwätzt, sou wéi relational Algebra oder SQL.
  • Scripting Query Sproochen: Zum Beispill, Python Saachen pandas, numpy oder Shell scripting.
  • Query Sprooche fir Wëssensgrafiken a Grafikdatenbanken.

Alles wat hei geschriwwe gëtt ass just eng perséinlech Erfahrung, wat nëtzlech war, mat enger Beschreiwung vun de Situatiounen a "firwat et gebraucht gouf" - jidderee ka probéieren wéi ähnlech Situatiounen op Äre Wee kommen a probéiert se am Viraus ze preparéieren andeems Dir dës Sprooche versteet ier Dir Iech (dréngend) op e Projet muss ufroen oder souguer op e Projet kommen wou se gebraucht ginn.

"Standard" Ufro Sproochen

Standard Query Sprooche si präzis am Sënn datt mir normalerweis iwwer si denken wa mir iwwer Ufroe schwätzen.

Relational Algebra

Firwat ass relational Algebra haut gebraucht? Fir e gutt Verständnis ze hunn firwat Ufro Sproochen op eng gewësse Manéier strukturéiert sinn a se bewosst benotzen, musst Dir de Kär verstoen deen hinnen ënnerleien.

Wat ass relational Algebra?

Déi formell Definitioun ass wéi follegt: relational Algebra ass e zouenen System vun Operatiounen op Relatiounen an engem relationalen Datemodell. Fir et e bësse méi mënschlech ze soen, ass dëst e System vun Operatiounen op Dëscher sou datt d'Resultat ëmmer en Dësch ass.

Gesinn all relational Operatiounen an dat Artikel aus Habr - hei beschreiwen mir firwat Dir musst wëssen a wou et praktesch kënnt.

Firwat?

Ufänken ze verstoen iwwer wat Ufrosproochen alles sinn a wéi eng Operatiounen hannert Ausdréck a spezifesche Ufrosprooche stinn, gëtt dacks e méi déif Verständnis vu wat an Ufrosproochen funktionnéiert a wéi.

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen
Vun geholl dat Artikelen. E Beispill vun enger Operatioun: join, déi mat Dëscher bäitrieden.

Material fir Studie:

Gutt Aféierungscours aus Stanford. Am Allgemengen ginn et vill Materialien iwwer relational Algebra an Theorie - Coursera, Udacity. Et gëtt och eng grouss Quantitéit vun Material online, dorënner gutt akademesch Coursen. Mäi perséinleche Rot: Dir musst relational Algebra ganz gutt verstoen - dat ass d'Basis vun de Basics.

SQL

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen
Vun geholl dat Artikelen.

SQL ass am Wesentlechen eng Implementatioun vu relationaler Algebra - mat engem wichtegen Opgepasst, SQL ass deklarativ! Dat ass, wann Dir eng Ufro an der Sprooch vun der relationaler Algebra schreift, seet Dir tatsächlech wéi Dir berechent - awer mat SQL spezifizéiert Dir wat Dir wëllt extrahéieren, an dann generéiert d'DBMS scho (effektiv) Ausdréck an der Sprooch vun der relationaler Algebra (hirem) Equivalenz ass eis bekannt als Codd's Theorem).

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen
Vun geholl dat Artikelen.

Firwat?

Relational DBMSen: Oracle, Postgres, SQL Server, etc sinn nach ëmmer quasi iwwerall an et ass eng onheemlech grouss Chance datt Dir mat hinnen interagéiere musst, dat heescht datt Dir entweder SQL musst liesen (wat ganz wahrscheinlech ass) oder et schreiwen ( och net onwahrscheinlech).

Wat ze liesen a studéieren

No deene selwechte Linken hei uewen (iwwer relational Algebra) gëtt et eng onheemlech Quantitéit u Material, zum Beispill, dat.

Iwwregens, wat ass NoSQL?

"Et ass derwäert nach eng Kéier ze ënnersträichen datt de Begrëff "NoSQL" en absolut spontanen Urspronk huet a keng allgemeng akzeptéiert Definitioun oder wëssenschaftlech Institutioun hannert sech huet." Korrespondéiert en Artikel op Habr.

Tatsächlech hunn d'Leit gemierkt datt e komplette relationale Modell net gebraucht gëtt fir vill Probleemer ze léisen, besonnesch fir déi wou zum Beispill d'Performance kritesch ass a verschidde einfach Ufroe mat Aggregatioun dominéieren - wou et kritesch ass fir séier Metriken ze berechnen an ze schreiwen Datebank, an déi meescht Fonctiounen sinn relational huet sech net nëmmen onnéideg, mä och schiedlech - firwat eppes normaliséieren wann et déi wichtegst Saach fir eis (fir e puer spezifesch Aufgab) - Produktivitéit verwinnt?

Och flexibel Schemae ginn dacks gebraucht amplaz vun de fixe mathematesche Schemae vum klassesche relationelle Modell - an dëst vereinfacht onheemlech d'Applikatiounsentwécklung wann et kritesch ass de System z'installéieren an unzefänken séier ze schaffen, d'Resultater ze veraarbechten - oder de Schema an Aarte vu gespäichert Daten sinn net esou wichteg.

Zum Beispill kreéiere mir en Expert System a wëllen Informatioun iwwer e spezifescht Domain zesumme mat e puer Meta Informatioun späicheren - mir kënnen net all Felder kennen an einfach JSON fir all Rekord späicheren - dëst gëtt eis e ganz flexibel Ëmfeld fir d'Daten auszebauen Modell a séier iteréieren - also an dësem Fall wäert NoSQL souguer léiwer a méi liesbar sinn. Beispill Entrée (vun engem vu menge Projeten wou NoSQL richteg war wou et gebraucht gouf).

{"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}

Méi Detailer kënne gelies ginn hei iwwer NoSQL.

Wat fir ze studéieren?

Hei, éischter, Dir musst just Är Aufgab grëndlech analyséieren, wéi eng Eegeschafte se huet a wéi eng NoSQL Systemer verfügbar sinn déi dës Beschreiwung passen - an dann ufänken dëse System ze studéieren.

Scripting Query Sproochen

Am Ufank, schéngt et, wat huet Python am Allgemengen domat ze dinn - et ass eng Programméierungssprooch, a guer net iwwer Ufroen.

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen

  • Pandas ass wuertwiertlech e Schwäizer Arméi Messer vun Data Science; eng enorm Quantitéit vun Daten Transformatioun, Aggregatioun, etc. geschitt an et.
  • Numpy - Vecteure Berechnungen, Matrixentgasung an linear Algebra do.
  • Scipy - et gëtt vill Mathematik an dësem Package, besonnesch Statistiken.
  • Jupyter Labo - vill explorativ Datenanalyse passt gutt op Laptops - nëtzlech ze wëssen.
  • Ufroen - mat dem Netz schaffen.
  • Pyspark ass ganz populär bei Dateningenieuren, héchstwahrscheinlech musst Dir mat dësem oder Spark interagéieren, einfach wéinst hirer Popularitéit.
  • *Selen - ganz nëtzlech fir Daten vu Siten a Ressourcen ze sammelen, heiansdo gëtt et einfach keen anere Wee fir d'Donnéeën ze kréien.

Meng Haaptrot: Léiert Python!

Pandas

Loosst eis de folgende Code als Beispill huelen:

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'}))

Wesentlech gesi mir datt de Code an de klassesche 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

Awer de wichtegen Deel ass datt dëse Code en Deel vum Skript an der Pipeline ass; Tatsächlech baue mir Ufroen an d'Python Pipeline. An dëser Situatioun kënnt d'Ufrosprooch bei eis vu Bibliothéike wéi Pandas oder pySpark.

Am Allgemengen, am pySpark gesi mir eng ähnlech Aart vun Datentransformatioun duerch eng Ufrosprooch am Geescht vun:

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

Wou a wat ze liesen

Op Python selwer am Allgemengen kee Problem fannen Material fir ze studéieren. Et ginn eng grouss Zuel vun Tutorials online pandas, pySpark a Coursen op Drëps (an och selwer DS). Insgesamt ass den Inhalt hei super fir ze googelen, a wann ech ee Package muss wielen fir op ze fokusséieren, wier et natierlech Pandas. Wat d'Kombinatioun vun DS + Python Material och ugeet ganz vill.

Shell als Ufrosprooch

Zimlech e puer Dateveraarbechtung an Analyseprojeten, mat deenen ech geschafft hunn, sinn tatsächlech Shellskripter déi Code am Python, Java an d'Shellbefehl selwer nennen. Dofir, am Allgemengen, kënnt Dir Pipelines a bash/zsh/etc als eng Zort Héichniveau Ufro betruechten (Dir kënnt natierlech Loops dran stuffen, awer dëst ass net typesch fir DS Code a Shell Sproochen), loosst eis ginn en einfacht Beispill - ech brauch eng QID Mapping vu Wikidata a voll Linken op déi russesch an englesch Wikien ze maachen, dofir hunn ech eng einfach Ufro vun de Kommandoen am Bash geschriwwen a fir d'Ausgab hunn ech en einfache Skript am Python geschriwwen, wat ech esou zesummegesat:

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

wou

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

Dëst war tatsächlech déi ganz Pipeline déi déi erfuerderlech Mapping erstallt huet; wéi mir gesinn, huet alles am Flowmodus geschafft:

  • pv Filepath - gëtt eng Fortschrëttbar baséiert op Dateigréisst a passt säin Inhalt weider
  • unpigz -c huet en Deel vum Archiv gelies an et dem jq ginn
  • jq mam Schlëssel - Stream huet direkt d'Resultat produzéiert an et un de Postprozessor weiderginn (selwecht wéi mam alleréischt Beispill) am Python
  • intern war de Postprozessor eng einfach Staatsmaschinn déi den Ausgang formatéiert huet 

Am Ganzen ass eng komplex Pipeline déi am Flowmodus op grouss Daten (0.5TB) funktionnéiert, ouni bedeitend Ressourcen a gemaach aus enger einfacher Pipeline an e puer Tools.

En anere wichtegen Tipp: fäeg sinn gutt an effektiv am Terminal ze schaffen a bash/zsh/etc schreiwen.

Wou wäert et nëtzlech sinn? Jo, bal iwwerall - erëm, et gi vill Material um Internet ze studéieren. Besonnesch hei dat meng virdrun Artikel.

R schrëftlech

Nach eng Kéier kann de Lieser ausruffen - gutt, dëst ass eng ganz Programméierungssprooch! An natierlech wäert hien Recht hunn. Wéi och ëmmer, ech hunn R normalerweis an esou engem Kontext begéint, datt et tatsächlech ganz ähnlech wéi eng Ufrosprooch war.

R ass e statistescht Informatikëmfeld a Sprooch fir statesch Informatik a Visualiséierung (geméiss dat).

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen
Geduecht vun hei. Iwwregens, ech recommandéieren et, gutt Material.

Firwat muss en Datewëssenschaftler R wëssen? Op d'mannst, well et eng rieseg Schicht vun Net-IT Leit ass, déi Daten am R analyséieren. Ech sinn op de folgende Plazen fonnt:

  • Pharmazeuteschen Secteur.
  • Biologen.
  • Finanzsecteur.
  • Leit mat enger reng mathematescher Ausbildung, déi sech mat Statistiken beschäftegen.
  • Spezialiséiert statistesch Modeller a Maschinn Léieren Modeller (déi dacks nëmmen an der Versioun vum Auteur als R Package fonnt ginn).

Firwat ass et eigentlech eng Ufro Sprooch? An der Form an där et dacks fonnt gëtt, ass et tatsächlech eng Ufro fir e Modell ze kreéieren, inklusiv d'Liesen vun Donnéeën an d'Fixéiere vun Ufro (Modell) Parameteren, souwéi d'Visualiséierung vun Daten a Packagen wéi ggplot2 - dëst ass och eng Form vu Schreiwen Ufroen .

Beispill Ufroe fir Visualiséierung

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

Am Allgemengen si vill Iddie vu R a Python-Pakete migréiert wéi Pandas, numpy oder scipy, wéi Datframes an Datevektoriséierung - also am Allgemengen wäerte vill Saachen am R fir Iech vertraut a praktesch schéngen.

Et gi vill Quelle fir ze studéieren, zum Beispill, dat.

Wëssen Grafiken

Hei hunn ech eng liicht ongewéinlech Erfahrung, well ech zimlech dacks mat Wëssensgrafiken a Query Sprooche fir Grafike musse schaffen. Dofir, loosst eis kuerz iwwer d'Grondlage goen, well dësen Deel e bësse méi exotesch ass.

A klassesche relationalen Datenbanken hu mir e fixe Schema, awer hei ass de Schema flexibel, all Prädikat ass tatsächlech eng "Kolonn" an nach méi.

Stellt Iech vir datt Dir eng Persoun modelléiert a Schlëssel Saache wëllt beschreiwen, zum Beispill, loosst eis eng spezifesch Persoun huelen, Douglas Adams, a benotzen dës Beschreiwung als Basis.

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen
www.wikidata.org/wiki/Q42

Wa mir eng relational Datebank benotzen, musse mir eng rieseg Tabell oder Dëscher mat enger enormer Unzuel vu Kolonnen erstellen, déi meescht vun deenen NULL wieren oder mat engem Standard falsche Wäert gefëllt sinn, zum Beispill, et ass onwahrscheinlech datt vill vun eis eng Entrée an der koreanescher Nationalbibliothéik - selbstverständlech kënne mir se an getrennten Dëscher setzen, awer dëst wier schlussendlech e Versuch, e flexibele logesche Circuit mat Prädikate mat engem fixe relationalen Modell ze modelléieren.

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen
Also stellt Iech vir datt all Donnéeën als Grafik oder als binär an unär boolesch Ausdréck gespäichert ginn.

Wou kënnt Dir dëst iwwerhaapt begéinen? Éischtens, schaffen mat daten Wiki, a mat all Grafik Datenbanken oder verbonne Donnéeën.

Déi folgend sinn d'Haaptufro Sproochen, déi ech benotzt a geschafft hunn.

SPARQL

Wiki:
SPARQL (rekursiv Akronym от Englesch SPARQL Protokoll an RDF Query Sprooch) - daten Ufro Sprooch, representéiert vum Modell R.F.D., wéi och Protokoll fir dës Ufroen ze vermëttelen an op hinnen ze reagéieren. SPARQL ass eng Empfehlung W3C Konsortium an ee vun den Technologien semantesche Web.

Awer a Wierklechkeet ass et eng Ufrosprooch fir logesch unär a binär Prädikate. Dir spezifizéiert einfach bedingt wat an engem booleschen Ausdrock fix ass a wat net (ganz vereinfacht).

D'RDF (Resource Description Framework) Basis selwer, iwwer déi SPARQL Ufroen ausgefouert ginn, ass en Triple object, predicate, subject - an d'Ufro wielt déi erfuerderlech Triple no de spezifizéierte Restriktiounen am Geescht: Fannt en X sou datt p_55(X, q_33) wouer ass - wou natierlech p_55 eng Aart vu Relatioun mat ID 55 ass, an q_33 eng Objet mat ID 33 (hei an déi ganz Geschicht, nees all Zorte vun Detailer ewechzehuelen).

Beispill vun Datepresentatioun:

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen
Biller an Beispill mat Länner hei vun hei.

Basis Query Beispill

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen

Tatsächlech wëlle mir de Wäert vun der ?Land Variabel fannen esou datt fir de Prädikat
member_of, et stëmmt datt member_of(?country,q458) an q458 d'ID vun der Europäescher Unioun ass.

E Beispill vun enger realer SPARQL Ufro am Python-Motor:

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen

Normalerweis hunn ech SPARQL missen liesen anstatt et ze schreiwen - an där Situatioun wier et méiglecherweis eng nëtzlech Fäegkeet fir d'Sprooch op d'mannst op engem Basisniveau ze verstoen fir genau ze verstoen wéi d'Donnéeën erëmfonnt ginn. 

Et gëtt vill Material fir online ze studéieren: zum Beispill hei dat и dat. Ech google normalerweis spezifesch Designen a Beispiller an dat ass genuch fir elo.

Logesch Ufro Sproochen

Dir kënnt méi iwwer dëst Thema a mengem Artikel liesen hei. An hei wäerte mir nëmme kuerz ënnersichen firwat logesch Sprooche gutt gëeegent sinn fir Ufroen ze schreiwen. Wesentlech ass RDF just eng Rei vu logeschen Aussoe vun der Form p (X) an h (X, Y), an eng logesch Ufro huet déi folgend Form:

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

Hei schwätze mer iwwer d'Schafe vun engem neie Prädikatausgang/1 (/1 heescht unär), virausgesat datt fir X et richteg ass dat Land(X) - dh X ass e Land an och Member_of(X,"EU ").

Dat ass, an dësem Fall sinn souwuel d'Donnéeën an d'Regelen op déiselwecht Manéier presentéiert, wat eis erlaabt Problemer ganz einfach a gutt ze modelléieren.

Wou hutt Dir an der Industrie begéint?: e ganz grousse Projet mat enger Firma, déi Ufroen an esou enger Sprooch schreift, wéi och iwwer den aktuelle Projet am Kär vum System - et géif schéngen datt dëst eng zimlech exotesch Saach ass, awer heiansdo geschitt et.

E Beispill vun engem Code Fragment an enger logescher Sprooch Veraarbechtung Wikidata:

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen

Material: Ech ginn hei e puer Linken op déi modern logesch Programméierungssprooch Answer Set Programming - ech recommandéieren et ze studéieren:

Datewëssenschaftler Notizen: Eng personaliséiert Iwwerpréiwung vun Daten Query Sproochen

Source: will.com

Setzt e Commentaire