Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj
Mi rakontas al vi laŭ persona sperto, kio estis utila kie kaj kiam. Ĝi estas superrigardo kaj tezo, por ke estu klare kion kaj kie vi povas fosi plu - sed ĉi tie mi havas ekskluzive subjektivan personan sperton, eble ĉio estas tute malsama por vi.

Kial gravas scii kaj povi uzi konsultlingvojn? En ĝia kerno, Datuma Scienco havas plurajn gravajn etaĝojn de laboro, kaj la plej unua kaj plej grava (sen ĝi, certe nenio funkcios!) Estas akiri aŭ ĉerpi datumojn. Plej ofte, la datumoj sidas ie en iu formo kaj devas esti "retrovitaj" de tie. 

Demandlingvoj ebligas al vi ĉerpi ĉi tiujn datumojn! Kaj hodiaŭ mi rakontos al vi pri tiuj konsultlingvoj, kiuj estis utilaj al mi, kaj mi rakontos al vi kaj montros al vi kie kaj kiel ĝuste - kial necesas studi.

Estos tri ĉefaj blokoj de datumpetoj, kiujn ni diskutos en ĉi tiu artikolo:

  • "Normaj" konsultlingvoj estas tio, kion oni kutime komprenas kiam oni parolas pri demandlingvo, kiel interrilata algebro aŭ SQL.
  • Skribataj konsultlingvoj: ekzemple, Python-aĵoj pandoj, numpy aŭ shell scripting.
  • Pridemandu lingvojn por sciaj grafikaĵoj kaj grafikaj datumbazoj.

Ĉio ĉi tie skribita estas nur persona sperto, kio estis utila, kun priskribo de situacioj kaj "kial ĝi estis bezonata" - ĉiuj povas provi kiel similaj situacioj povas veni al vi kaj provi prepari por ili anticipe komprenante ĉi tiujn lingvojn. antaŭ ol vi devas kandidatiĝi (urĝe) pri projekto aŭ eĉ atingi projekton, kie ili bezonas.

"Normaj" demandlingvoj

Normaj demandlingvoj estas ĝuste en la senco, ke ni kutime pensas pri ili kiam ni parolas pri demandoj.

Rilata algebro

Kial necesas interrilata algebro hodiaŭ? Por bone kompreni kial konsultlingvoj estas strukturitaj en certa maniero kaj uzi ilin konscie, vi devas kompreni la kernon sub ili.

Kio estas interrilata algebro?

La formala difino estas kiel sekvas: interrilata algebro estas fermita sistemo de operacioj sur rilatoj en interrilata datummodelo. Por diri ĝin iom pli home, ĉi tio estas sistemo de operacioj sur tabeloj tia, ke la rezulto ĉiam estas tablo.

Vidu ĉiujn rilatajn operaciojn en ĉi tio artikolo de Habr - ĉi tie ni priskribas kial vi bezonas scii kaj kie ĝi utilas.

Kial?

Komenci kompreni, pri kio konsultlingvoj temas kaj kiaj operacioj estas malantaŭ esprimoj en specifaj demandlingvoj, ofte donas pli profundan komprenon pri kio funkcias en demandlingvoj kaj kiel.

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj
Prenita de ĉi tio artikoloj. Ekzemplo de operacio: kunigi, kiu kunigas tabelojn.

Materialoj por studado:

Bona enkonduka kurso el Stanfordo. Ĝenerale, ekzistas multaj materialoj pri interrilata algebro kaj teorio - Coursera, Udacity. Ekzistas ankaŭ grandega kvanto da materialo interrete, inkluzive de bona akademiaj kursoj. Mia persona konsilo: vi devas tre bone kompreni interrilatan algebron - jen la bazo de la bazoj.

SQL

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj
Prenita de ĉi tio artikoloj.

SQL estas esence efektivigo de interrilata algebro - kun grava averto, SQL estas deklara! Tio estas, kiam oni verkas demandon en la lingvo de interrilata algebro, oni fakte diras kiel kalkuli - sed per SQL oni precizigas tion, kion oni volas ĉerpi, kaj tiam la DBMS jam generas (efikajn) esprimojn en la lingvo de interrilata algebro (ilia). ekvivalento estas konata al ni kiel Teoremo de Codd).

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj
Prenita de ĉi tio artikoloj.

Kial?

Rilataj DBMSoj: Oracle, Postgres, SQL Server, ktp estas ankoraŭ preskaŭ ĉie kaj estas nekredeble alta ŝanco ke vi devos interagi kun ili, kio signifas, ke vi aŭ devos legi SQL (kio estas tre verŝajne) aŭ skribi ĝin ( ankaŭ ne malverŝajne).

Kion legi kaj studi

Laŭ la samaj ligiloj supre (pri interrilata algebro), ekzistas nekredebla kvanto da materialo, ekzemple, ĉi tio.

Cetere, kio estas NoSQL?

"Indas substreki denove, ke la termino "NoSQL" havas absolute spontanean originon kaj havas neniun ĝenerale akceptitan difinon aŭ sciencan institucion malantaŭ ĝi." Korespondanta artikolo sur Habr.

Fakte, homoj rimarkis, ke plena interrilata modelo ne estas bezonata por solvi multajn problemojn, precipe por tiuj kie, ekzemple, rendimento estas kritika kaj certaj simplaj demandoj kun agregado dominas - kie estas kritike rapide kalkuli metrikojn kaj skribi ilin al la datumbazo, kaj la plej multaj funkcioj estas interrilataj montriĝis ne nur nenecesaj, sed ankaŭ malutilaj - kial normaligi ion se ĝi difektos la plej gravan aferon por ni (por iu specifa tasko) - produktiveco?

Ankaŭ, flekseblaj skemoj ofte estas bezonataj anstataŭe de la fiksaj matematikaj skemoj de la klasika interrilata modelo - kaj tio nekredeble simpligas aplikaĵevoluon kiam estas kritike deploji la sistemon kaj komenci labori rapide, prilabori la rezultojn - aŭ la skemon kaj specojn de stokitaj datumoj. ne estas tiom gravaj.

Ekzemple, ni kreas spertan sistemon kaj volas stoki informojn pri specifa domajno kune kun iuj metainformoj - ni eble ne konas ĉiujn kampojn kaj simple stokas JSON por ĉiu rekordo - ĉi tio donas al ni tre flekseblan medion por vastigi la datumojn. modelo kaj rapide ripetadi - do en ĉi tiu kazo, NoSQL estos eĉ preferinda kaj pli legebla. Ekzempla eniro (de unu el miaj projektoj kie NoSQL estis ĝuste kie ĝi estis bezonata).

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

Vi povas legi pli tie pri NoSQL.

Kion studi?

Ĉi tie, prefere, vi nur bezonas ĝisfunde analizi vian taskon, kiajn ecojn ĝi havas kaj kiajn NoSQL-sistemojn disponeblas, kiuj taŭgus ĉi tiun priskribon - kaj poste komencu studi ĉi tiun sistemon.

Skriptaj Demandlingvoj

Komence, ŝajnas, kion Python devas fari kun ĝi ĝenerale - ĝi estas programlingvo, kaj tute ne pri demandoj.

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj

  • Pandoj estas laŭvorte svisa armeotranĉilo de Datuma Scienco; grandega kvanto da datuma transformo, agregado, ktp okazas en ĝi.
  • Numpy - vektoraj kalkuloj, matricoj kaj lineara algebro tie.
  • Scipy - estas multe da matematiko en ĉi tiu pako, precipe statistikoj.
  • Jupyter-laboratorio - multe da esplorada datuma analizo bone taŭgas en tekkomputiloj - utila scii.
  • Petoj - laborante kun la reto.
  • Pyspark estas tre populara inter datumaj inĝenieroj, plej verŝajne vi devos interagi kun ĉi tiu aŭ Spark, simple pro ilia populareco.
  • *Seleno - tre utila por kolekti datumojn de retejoj kaj rimedoj, foje simple ne ekzistas alia maniero akiri la datumojn.

Mia ĉefa konsilo: lernu Python!

Pandoj

Ni prenu la sekvan kodon kiel ekzemplon:

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

Esence, ni vidas, ke la kodo konvenas al la klasika SQL-ŝablono.

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

Sed la grava parto estas, ke ĉi tiu kodo estas parto de la skripto kaj la dukto; fakte, ni enigas demandojn en la Python-dukto. En ĉi tiu situacio, la konsultlingvo venas al ni el bibliotekoj kiel Pandas aŭ pySpark.

Ĝenerale, en pySpark ni vidas similan specon de datumtransformo per demanda lingvo en la spirito de:

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

Kie kaj kion legi

Sur Python mem ĝenerale ne estas problemo trovi materialojn por studi. Estas grandega nombro da lerniloj interrete pandoj, pySpark kaj kursoj plu Sparko (kaj ankaŭ per si mem DS). Ĝenerale, la enhavo ĉi tie estas bonega por guglo, kaj se mi devus elekti unu pakaĵon por koncentriĝi, ĝi estus pandoj, kompreneble. Koncerne la kombinaĵon de DS+Python-materialoj ankaŭ tre multe.

Ŝelo kiel demandlingvo

Nemalmultaj datumtraktado kaj analizprojektoj kun kiuj mi laboris estas, fakte, ŝelaj skriptoj, kiuj nomas kodon en Python, Java, kaj la ŝelkomandoj mem. Tial, ĝenerale, vi povas konsideri duktojn en bash/zsh/etc kiel ian altnivelan demandon (vi povas, kompreneble, ŝtopi buklojn tie, sed ĉi tio ne estas tipa por DS-kodo en ŝellingvoj), ni donu simpla ekzemplo - mi bezonis fari QID-mapon de vikidatumoj kaj plenajn ligilojn al la rusa kaj angla vikioj, por tio mi skribis simplan peton el la komandoj en la bash kaj por la eligo mi skribis simplan skripton en Python, kiun mi kunmetita tiel:

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

kie

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

Ĉi tio estis, fakte, la tuta dukto kiu kreis la postulatan mapadon; kiel ni vidas, ĉio funkciis en fluoreĝimo:

  • pv dosiervojo - donas progresbreton bazitan sur dosiergrandeco kaj pludonas ĝian enhavon
  • unpigz -c legis parton de la arkivo kaj donis ĝin al jq
  • jq per la ŝlosilo - fluo tuj produktis la rezulton kaj transdonis ĝin al la postprocesoro (same kiel ĉe la plej unua ekzemplo) en Python
  • interne, la postprocesoro estis simpla ŝtatmaŝino kiu formatis la produktaĵon 

Entute, kompleksa dukto funkcianta en fluoreĝimo sur grandaj datumoj (0.5TB), sen signifaj rimedoj kaj farita el simpla dukto kaj paro da iloj.

Alia grava konsilo: povi labori bone kaj efike en la terminalo kaj skribi bash/zsh/etc.

Kie ĝi estos utila? Jes, preskaŭ ĉie - denove, estas MULTE da materialoj por studi en Interreto. Precipe ĉi tie ĉi tio mia antaŭa artikolo.

R-skripto

Denove, la leganto povas ekkrii - nu, ĉi tio estas tuta programlingvo! Kaj kompreneble, li pravos. Tamen mi kutime renkontis R en tia kunteksto ke, fakte, ĝi estis tre simila al demandlingvo.

R estas statistika komputika medio kaj lingvo por senmova komputado kaj bildigo (laŭ ĉi tio).

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj
prenita de ĉi tie. Cetere, mi rekomendas ĝin, bona materialo.

Kial datumsciencisto bezonas koni R? Almenaŭ, ĉar estas grandega tavolo de ne-IT-uloj, kiuj analizas datumojn en R. Mi trovis ĝin en la sekvaj lokoj:

  • Farmacia sektoro.
  • Biologoj.
  • Financa sektoro.
  • Homoj kun pure matematika edukado, kiuj okupiĝas pri statistiko.
  • Specialigitaj statistikaj modeloj kaj maŝinlernado-modeloj (kiuj ofte troveblas nur en la versio de la aŭtoro kiel R-pakaĵo).

Kial ĝi fakte estas demandlingvo? En la formo, en kiu ĝi ofte troviĝas, ĝi fakte estas peto krei modelon, inkluzive de legado de datumoj kaj fiksado de demandaj (modelaj) parametroj, kaj ankaŭ bildigado de datumoj en pakaĵoj kiel ggplot2 - ĉi tio ankaŭ estas formo de skribado de demandoj. .

Ekzemplaj demandoj por bildigo

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

Ĝenerale, multaj ideoj de R migris al python-pakaĵoj kiel pandoj, numpy aŭ scipy, kiel datumkadroj kaj datumvektorizado - do ĝenerale multaj aferoj en R ŝajnos al vi konataj kaj oportunaj.

Estas multaj fontoj por studi, ekzemple, ĉi tio.

Scio-grafikoj

Ĉi tie mi havas iomete nekutiman sperton, ĉar mi sufiĉe ofte devas labori kun sciaj grafikaĵoj kaj konsultlingvoj por grafikaĵoj. Sekve, ni simple transiru la bazojn, ĉar ĉi tiu parto estas iom pli ekzotika.

En klasikaj interrilataj datumbazoj ni havas fiksan skemon, sed ĉi tie la skemo estas fleksebla, ĉiu predikativo estas fakte "kolumno" kaj eĉ pli.

Imagu, ke vi modelis homon kaj volis priskribi ŝlosilajn aferojn, ekzemple, ni prenu specifan personon, Douglas Adams, kaj uzu ĉi tiun priskribon kiel bazon.

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj
www.wikidata.org/wiki/Q42

Se ni uzus rilatan datumbazon, ni devus krei grandegan tabelon aŭ tabelojn kun grandega nombro da kolumnoj, la plej multaj el kiuj estus NULL aŭ plenigita per iu defaŭlta Falsa valoro, ekzemple, estas malprobable ke multaj el ni havas eniro en la korea nacia biblioteko - kompreneble, ni povus meti ilin en apartajn tabelojn, sed tio finfine estus provo modeligi flekseblan logikan cirkviton kun predikatoj uzante fiksan interrilatan.

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj
Do imagu, ke ĉiuj datumoj estas konservitaj kiel grafeo aŭ kiel binaraj kaj unaraj buleaj esprimoj.

Kie vi eĉ povas renkonti ĉi tion? Unue, laborante kun datumvikio, kaj kun iuj grafikaj datumbazoj aŭ ligitaj datumoj.

La jenaj estas la ĉefaj konsultlingvoj, kiujn mi uzis kaj kun kiuj mi laboris.

SPARQL

Vikio:
SPARQL (rekursiva akronimo el la angla SPARQL-Protokolo kaj RDF Demanda Lingvo) - datum-demanda lingvo, reprezentita de la modelo RDFKaj protokolo transdoni ĉi tiujn petojn kaj respondi al ili. SPARQL estas rekomendo W3C-konsorcio kaj unu el la teknologioj semantika reto.

Sed fakte ĝi estas demandlingvo por logikaj unuraj kaj binaraj predikatoj. Vi simple kondiĉe specifas kio estas fiksita en Bulea esprimo kaj kio ne estas (tre simpligita).

La RDF (Resource Description Framework) mem, super kiu SPARQL-demandoj estas ekzekutitaj, estas triobla object, predicate, subject - kaj la demando elektas la bezonatajn trioblojn laŭ la specifitaj limigoj en la spirito: trovu X tia ke p_55(X, q_33) estas vera - kie, kompreneble, p_55 estas ia rilato kun ID 55, kaj q_33 estas objekto kun ID 33 (ĉi tie kaj la tuta rakonto, denove preterlasante ĉiajn detalojn).

Ekzemplo de prezento de datumoj:

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj
Bildoj kaj ekzemplo kun landoj ĉi tie de ĉi tie.

Baza Demanda Ekzemplo

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj

Fakte, ni volas trovi la valoron de la ?lando-variablo tia ke por la predikativo
membro_de, estas vere, ke membro_de(?lando,q458) kaj q458 estas la ID de Eŭropa Unio.

Ekzemplo de reala SPARQL-demando ene de la python-motoro:

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj

Tipe, mi devis legi SPARQL prefere ol skribi ĝin - en tiu situacio, verŝajne estus utila kapablo kompreni la lingvon almenaŭ je baza nivelo por kompreni ĝuste kiel datumoj estas prenitaj. 

Estas multe da materialo por studi rete: ekzemple ĉi tie ĉi tio и ĉi tio. Mi kutime guglas specifajn dezajnojn kaj ekzemplojn kaj tio sufiĉas nuntempe.

Logikaj demandlingvoj

Vi povas legi pli pri la temo en mia artikolo tie. Kaj ĉi tie ni nur mallonge ekzamenos kial logikaj lingvoj taŭgas por skribi demandojn. Esence, RDF estas nur aro de logikaj deklaroj de la formo p(X) kaj h(X,Y), kaj logika demando havas la sekvan formon:

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

Ĉi tie ni parolas pri kreado de nova predikativo eligo/1 (/1 signifas unuario), kondiĉe ke por X estas vero, ke lando(X) - t.e., X estas lando kaj ankaŭ membro_de(X,"EU ").

Tio estas, en ĉi tiu kazo, kaj la datumoj kaj la reguloj estas prezentitaj en la sama maniero, kio permesas al ni modeligi problemojn tre facile kaj bone.

Kie vi renkontis en la industrio?: tuta granda projekto kun firmao, kiu verkas demandojn en tia lingvo, same kiel pri la nuna projekto en la kerno de la sistemo - ŝajnus, ke tio estas sufiĉe ekzotika afero, sed foje okazas.

Ekzemplo de kodfragmento en logika lingvo-prilabora vikidatumoj:

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj

Materialoj: Mi donos ĉi tie kelkajn ligilojn al la moderna logika programlingvo Answer Set Programming - mi rekomendas studi ĝin:

Datumsciencaj Notoj: Persona Revizio de Datumaj Demandaj Lingvoj

fonto: www.habr.com

Aldoni komenton