Data Scientist's Notes: Personalized Review of Data Query Languages

Data Scientist's Notes: Personalized Review of Data Query Languages
Hovorím vám z vlastnej skúsenosti, čo bolo užitočné, kde a kedy. Je to prehľad a téza, aby bolo jasné, v čom a kde sa dá hrabať ďalej - ale tu mám výlučne subjektívnu osobnú skúsenosť, možno je u vás všetko úplne inak.

Prečo je dôležité poznať a vedieť používať dopytovacie jazyky? Data Science má vo svojom jadre niekoľko dôležitých fáz práce a úplne prvou a najdôležitejšou (bez nej určite nič nebude fungovať!) je získavanie alebo extrahovanie údajov. Najčastejšie sú dáta niekde v nejakej forme a treba ich odtiaľ „získať“. 

Dotazovacie jazyky vám umožňujú extrahovať práve tieto údaje! A dnes vám poviem o tých dopytovacích jazykoch, ktoré boli pre mňa užitočné, a poviem vám a ukážem vám, kde a ako presne - prečo je potrebné študovať.

Existujú tri hlavné bloky typov dotazov na údaje, o ktorých budeme diskutovať v tomto článku:

  • „Štandardné“ dopytovacie jazyky sú to, čo sa bežne chápe, keď hovoríme o jazyku dopytov, ako je relačná algebra alebo SQL.
  • Skriptovacie dopytovacie jazyky: napríklad, Python veci pandy, numpy alebo shell skriptovanie.
  • Dotazovacie jazyky pre znalostné grafy a databázy grafov.

Všetko, čo je tu napísané, je len osobná skúsenosť, čo bolo užitočné, s popisom situácií a „prečo to bolo potrebné“ - každý si môže vyskúšať, ako sa vám podobné situácie môžu vyskytnúť a pokúsiť sa na ne vopred pripraviť pochopením týchto jazykov ​predtým, než sa budete musieť (naliehavo) prihlásiť na projekt alebo sa dokonca dostať na projekt, kde sú potrebné.

„Štandardné“ jazyky dopytov

Štandardné dopytovacie jazyky sú presne v tom zmysle, že na ne zvyčajne myslíme, keď hovoríme o dopytoch.

Relačná algebra

Prečo je dnes potrebná relačná algebra? Aby ste dobre pochopili, prečo sú dopytovacie jazyky určitým spôsobom štruktúrované a vedome ich používať, musíte pochopiť jadro, na ktorom sú založené.

Čo je relačná algebra?

Formálna definícia je nasledovná: relačná algebra je uzavretý systém operácií s vzťahmi v relačnom dátovom modeli. Povedané trochu ľudskejšie, ide o systém operácií nad tabuľkami tak, že výsledkom je vždy tabuľka.

Pozrite si všetky relačné operácie v toto článok od Habra - tu popisujeme, prečo to potrebujete vedieť a kde sa to hodí.

Prečo?

Ak začnete chápať, o čom sú dopytovacie jazyky a aké operácie sú za výrazmi v konkrétnych dopytovacích jazykoch, často získate hlbšie pochopenie toho, čo a ako funguje v dopytovacích jazykoch.

Data Scientist's Notes: Personalized Review of Data Query Languages
Prevzaté z toto články. Príklad operácie: join, ktorá spája tabuľky.

Materiály na štúdium:

Dobrý úvodný kurz zo Stanfordu. Vo všeobecnosti existuje veľa materiálov o relačnej algebre a teórii - Coursera, Udacity. Na internete je tiež obrovské množstvo materiálu, vrátane dobrého akademické kurzy. Moja osobná rada: musíte veľmi dobre rozumieť relačnej algebre – to je základ základov.

SQL

Data Scientist's Notes: Personalized Review of Data Query Languages
Prevzaté z toto článok.

SQL je v podstate implementácia relačnej algebry – s dôležitým upozornením je SQL deklaratívny! To znamená, že pri písaní dotazu v jazyku relačnej algebry v skutočnosti poviete, ako počítať - ale pri SQL určíte, čo chcete extrahovať, a potom už DBMS generuje (efektívne) výrazy v jazyku relačnej algebry (ich ekvivalencia je nám známa ako Coddova veta).

Data Scientist's Notes: Personalized Review of Data Query Languages
Prevzaté z toto článok.

Prečo?

Relačné DBMS: Oracle, Postgres, SQL Server atď. sú stále prakticky všade a existuje neuveriteľne vysoká šanca, že s nimi budete musieť komunikovať, čo znamená, že budete musieť SQL čítať (čo je veľmi pravdepodobné) alebo ho písať ( ani nepravdepodobné).

Čo čítať a študovať

Podľa rovnakých odkazov vyššie (o relačnej algebre) existuje neskutočné množstvo materiálu, napr. toto.

Mimochodom, čo je NoSQL?

"Je potrebné ešte raz zdôrazniť, že pojem "NoSQL" má úplne spontánny pôvod a nemá za sebou žiadnu všeobecne akceptovanú definíciu alebo vedeckú inštitúciu." Zodpovedajúce článok na Habr.

V skutočnosti si ľudia uvedomili, že na vyriešenie mnohých problémov nie je potrebný úplný relačný model, najmä pre tie, kde je kritický napríklad výkon a dominujú určité jednoduché dotazy s agregáciou – kde je dôležité rýchlo vypočítať metriky a zapísať ich do databáza a väčšina funkcií je relačných sa ukázala ako nielen zbytočná, ale aj škodlivá – prečo niečo normalizovať, ak nám to pokazí to najdôležitejšie (pre nejakú konkrétnu úlohu) – produktivitu?

Okrem toho sú často potrebné flexibilné schémy namiesto pevných matematických schém klasického relačného modelu – a to neuveriteľne zjednodušuje vývoj aplikácií, keď je dôležité nasadiť systém a začať pracovať rýchlo, spracovať výsledky – alebo schému a typy uložených údajov. nie sú také dôležité.

Napríklad vytvárame expertný systém a chceme ukladať informácie o konkrétnej doméne spolu s niektorými meta informáciami – možno nepoznáme všetky polia a jednoducho ukladáme JSON pre každý záznam – to nám dáva veľmi flexibilné prostredie na rozširovanie údajov. model a rýchlo iteruje - tak v tomto V tomto prípade bude NoSQL ešte výhodnejšie a čitateľnejšie. Príklad záznamu (z jedného z mojich projektov, kde bol NoSQL presne tam, kde ho bolo treba).

{"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ôžete si prečítať viac tu o NoSQL.

Čo študovať?

Tu si skôr stačí dôkladne analyzovať svoju úlohu, aké vlastnosti má a aké NoSQL systémy sú dostupné, ktoré by tomuto popisu vyhovovali - a potom začať študovať tento systém.

Skriptovacie dopytovacie jazyky

Najprv sa zdá, čo s tým má Python vo všeobecnosti spoločné - je to programovací jazyk a vôbec nie o dotazoch.

Data Scientist's Notes: Personalized Review of Data Query Languages

  • Pandas je doslova švajčiarsky nôž Data Science, dochádza v ňom k veľkému množstvu transformácií dát, agregácií atď.
  • Numpy - vektorové výpočty, matice a lineárna algebra tam.
  • Scipy - v tomto balíku je veľa matematiky, najmä štatistiky.
  • Jupyter lab – množstvo prieskumných dátových analýz sa hodí do notebookov – užitočné vedieť.
  • Požiadavky - práca so sieťou.
  • Pyspark je medzi dátovými inžiniermi veľmi populárny, s najväčšou pravdepodobnosťou budete musieť komunikovať s týmto alebo Sparkom, jednoducho kvôli ich popularite.
  • *Selén – veľmi užitočný na zhromažďovanie údajov zo stránok a zdrojov, niekedy jednoducho neexistuje iný spôsob, ako údaje získať.

Moja hlavná rada: naučte sa Python!

pandy

Zoberme si nasledujúci kód ako príklad:

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

V podstate vidíme, že kód zapadá do klasického vzoru SQL.

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

Ale dôležité je, že tento kód je súčasťou skriptu a potrubia; v skutočnosti vkladáme dotazy do potrubia Pythonu. V tejto situácii k nám dopytovací jazyk prichádza z knižníc, ako sú Pandas alebo pySpark.

Vo všeobecnosti v pySpark vidíme podobný typ transformácie údajov prostredníctvom dopytovacieho jazyka v duchu:

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

Kde a čo čítať

O samotnom Pythone všeobecne žiadny problém nájsť materiály na štúdium. Na internete je obrovské množstvo návodov pandy, pySpark a kurzy na Iskra (a tiež sám od seba DS). Celkovo je tu obsah skvelý na googlovanie a ak by som si mal vybrať jeden balíček, na ktorý by som sa mal zamerať, boli by to samozrejme pandy. Čo sa týka kombinácie materiálov DS+Python veľmi veľa.

Shell ako dopytovací jazyk

Pomerne veľa projektov na spracovanie a analýzu údajov, s ktorými som pracoval, sú v skutočnosti skripty shellu, ktoré volajú kód v jazyku Python, Java a samotné príkazy shellu. Preto vo všeobecnosti môžete pipeline v bash/zsh/atď považovať za nejaký druh dotazu na vysokej úrovni (môžete tam samozrejme napchať slučky, ale to nie je typické pre kód DS v jazykoch shellu), dajme jednoduchý príklad - potreboval som urobiť QID mapovanie wikidát a úplné odkazy na ruskú a anglickú wiki, na to som napísal jednoduchú požiadavku z príkazov v bash a na výstup som napísal jednoduchý skript v Pythone, ktorý som dať dokopy takto:

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

kde

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

Toto bolo v skutočnosti celé potrubie, ktoré vytvorilo požadované mapovanie; ako vidíme, všetko fungovalo v režime streamu:

  • pv filepath - poskytuje indikátor priebehu na základe veľkosti súboru a odovzdáva jeho obsah ďalej
  • unpigz -c prečítal časť archívu a dal ju jq
  • jq s kľúčom - stream okamžite vytvoril výsledok a odovzdal ho postprocesoru (rovnako ako v prvom príklade) v Pythone
  • interne bol postprocesor jednoduchý stavový stroj, ktorý formátoval výstup 

Celkovo ide o komplexný kanál pracujúci v režime toku na veľkých dátach (0.5 TB), bez významných zdrojov a vytvorený z jednoduchého potrubia a niekoľkých nástrojov.

Ďalší dôležitý tip: vedieť dobre a efektívne pracovať v termináli a písať bash/zsh/atď.

Kde to bude užitočné? Áno, takmer všade – opäť je na internete VEĽA materiálov na štúdium. Najmä tu toto môj predchádzajúci článok.

R skriptovanie

Čitateľ môže opäť zvolať – no, toto je celý programovací jazyk! A samozrejme, bude mať pravdu. S R som sa však zvyčajne stretol v takom kontexte, že v skutočnosti bol veľmi podobný dopytovaciemu jazyku.

R je štatistické výpočtové prostredie a jazyk pre statické výpočty a vizualizáciu (podľa tento).

Data Scientist's Notes: Personalized Review of Data Query Languages
prijaté preto. Mimochodom odporúčam, dobrý materiál.

Prečo potrebuje dátový vedec poznať R? Prinajmenšom preto, že existuje obrovská vrstva ľudí bez IT, ktorí analyzujú údaje v R. Narazil som na to na nasledujúcich miestach:

  • Farmaceutický sektor.
  • Biológovia.
  • Finančný sektor.
  • Ľudia s čisto matematickým vzdelaním, ktorí sa zaoberajú štatistikami.
  • Špecializované štatistické modely a modely strojového učenia (ktoré možno často nájsť iba v autorskej verzii ako balík R).

Prečo je to vlastne dopytovací jazyk? V podobe, v akej sa často nachádza, ide vlastne o požiadavku na vytvorenie modelu, vrátane čítania dát a opravy parametrov dotazu (modelu), ako aj vizualizácie údajov v balíkoch ako ggplot2 - aj to je forma zápisu dotazov .

Príklady dotazov na vizualizáciu

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

Vo všeobecnosti sa veľa nápadov z R presunulo do balíkov python, ako sú pandas, numpy alebo scipy, ako sú dátové rámce a vektorizácia údajov - takže vo všeobecnosti sa vám veľa vecí v R bude zdať známych a pohodlných.

Existuje veľa zdrojov na štúdium, napr. toto.

Vedomostné grafy

Tu mám trochu nezvyčajnú skúsenosť, pretože pomerne často musím pracovať so znalostnými grafmi a dopytovacími jazykmi pre grafy. Poďme si preto v krátkosti prejsť základy, keďže táto časť je trochu exotickejšia.

V klasických relačných databázach máme pevnú schému, ale tu je schéma flexibilná, každý predikát je vlastne „stĺpec“ a ešte viac.

Predstavte si, že ste modelovali osobu a chceli ste popísať kľúčové veci, napríklad, zoberme si konkrétnu osobu, Douglasa Adamsa, a tento popis použite ako základ.

Data Scientist's Notes: Personalized Review of Data Query Languages
www.wikidata.org/wiki/Q42

Ak by sme použili relačnú databázu, museli by sme vytvoriť obrovskú tabuľku alebo tabuľky s veľkým počtom stĺpcov, z ktorých väčšina by bola NULL alebo vyplnená nejakou predvolenou hodnotou False, napríklad je nepravdepodobné, že mnohí z nás majú záznam v Kórejskej národnej knižnici – samozrejme, mohli by sme ich dať do samostatných tabuliek, ale to by bol v konečnom dôsledku pokus o modelovanie flexibilného logického obvodu s predikátmi pomocou pevného relačného.

Data Scientist's Notes: Personalized Review of Data Query Languages
Predstavte si teda, že všetky údaje sú uložené ako graf alebo ako binárne a unárne booleovské výrazy.

Kde sa s tým vôbec môžete stretnúť? Po prvé, práca s dátová wikia s akýmikoľvek databázami grafov alebo pripojenými údajmi.

Nasledujú hlavné dopytovacie jazyky, ktoré som používal a pracoval s nimi.

SPARQL

Wiki:
SPARQL (rekurzívna skratka od Eng. Protokol SPARQL a dopytovací jazyk RDF) - jazyk dotazovania na údaje, ktorú predstavuje model RDFa protokol zasielať tieto žiadosti a odpovedať na ne. SPARQL je odporúčanie Konzorcium W3C a jedna z technológií sémantický web.

Ale v skutočnosti je to dopytovací jazyk pre logické unárne a binárne predikáty. Jednoducho podmienečne špecifikujete, čo je v booleovskom výraze pevné a čo nie (veľmi zjednodušené).

Samotná základňa RDF (Resource Description Framework), cez ktorú sa vykonávajú SPARQL dotazy, je trojitá object, predicate, subject - a dotaz vyberie požadované trojice podľa špecifikovaných obmedzení v duchu: nájdite X také, že p_55(X, q_33) je pravdivé - kde, samozrejme, p_55 je nejaký vzťah s ID 55 a q_33 je objekt s ID 33 (tu a celý príbeh, opäť s vynechaním najrôznejších detailov).

Príklad prezentácie údajov:

Data Scientist's Notes: Personalized Review of Data Query Languages
Obrázky a príklady s krajinami tu preto.

Príklad základného dotazu

Data Scientist's Notes: Personalized Review of Data Query Languages

V skutočnosti chceme nájsť hodnotu premennej ?krajina takú, že pre predikát
member_of, platí, že member_of(?country,q458) a q458 je ID Európskej únie.

Príklad skutočného dotazu SPARQL vo vnútri python motora:

Data Scientist's Notes: Personalized Review of Data Query Languages

Typicky som musel SPARQL čítať a nie písať - v takejto situácii by bolo pravdepodobne užitočnou zručnosťou rozumieť jazyku aspoň na základnej úrovni, aby som presne pochopil, ako sa získavajú údaje. 

Existuje veľa materiálu na štúdium online: napríklad tu toto и toto. Zvyčajne si googlim konkrétne návrhy a príklady a to mi zatiaľ stačí.

Logické dopytovacie jazyky

Viac o téme si môžete prečítať v mojom článku tu. A tu len stručne preskúmame, prečo sú logické jazyky vhodné na písanie dotazov. RDF je v podstate len súbor logických príkazov vo forme p(X) a h(X,Y) a logický dotaz má nasledujúci tvar:

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

Tu hovoríme o vytvorení nového predikátového výstupu/1 (/1 znamená jednočlenný), za predpokladu, že pre X platí, že country(X) - teda X je krajina a zároveň člen(X,"EU ").

To znamená, že v tomto prípade sú údaje aj pravidlá prezentované rovnakým spôsobom, čo umožňuje veľmi jednoducho a dobre modelovať problémy.

Kde ste sa stretli v brandži?: celý veľký projekt s firmou, ktorá v takomto jazyku píše dopyty, aj na aktuálny projekt v jadre systému - zdalo by sa, že ide o dosť exotickú vec, ale občas sa to stáva.

Príklad fragmentu kódu v logickom jazyku spracovávajúcom wikiúdaje:

Data Scientist's Notes: Personalized Review of Data Query Languages

Materiály: Dám sem pár odkazov na moderný logický programovací jazyk Answer Set Programming - odporúčam si ho preštudovať:

Data Scientist's Notes: Personalized Review of Data Query Languages

Zdroj: hab.com

Pridať komentár