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

Data Scientist's Notes: Personalized Review of Data Query Languages
Říkám vám z vlastní zkušenosti, co bylo užitečné kde a kdy. Je to přehled a teze, aby bylo jasné, v čem a kde se můžete dále hrabat - ale tady mám výhradně subjektivní osobní zkušenost, možná je u vás všechno úplně jinak.

Proč je důležité znát a umět používat dotazovací jazyky? Ve svém jádru má Data Science několik důležitých fází práce a úplně první a nejdůležitější (bez ní určitě nic nebude fungovat!) je získávání nebo extrahování dat. Nejčastěji data někde v nějaké formě sedí a je třeba je odtud „načíst“. 

Dotazovací jazyky vám umožňují extrahovat tato data! A dnes vám řeknu o těch dotazovacích jazycích, které mi byly užitečné, a řeknu vám a ukážu vám, kde a jak přesně - proč je potřeba studovat.

Budou existovat tři hlavní bloky typů datových dotazů, o kterých budeme diskutovat v tomto článku:

  • „Standardní“ dotazovací jazyky jsou to, co se běžně rozumí, když mluvíme o dotazovacím jazyce, jako je relační algebra nebo SQL.
  • Skriptovací dotazovací jazyky: například Python věci pandy, numpy nebo shell skriptování.
  • Dotazovací jazyky pro znalostní grafy a databáze grafů.

Vše, co je zde napsáno, je jen osobní zkušenost, co bylo užitečné, s popisem situací a „proč to bylo potřeba“ - každý si může vyzkoušet, jak se vám podobné situace mohou objevit a pokusit se na ně předem připravit porozuměním těmto jazykům ​​předtím, než se budete muset (naléhavě) přihlásit na projekt nebo se dokonce dostat k projektu, kde jsou potřeba.

"Standardní" dotazovací jazyky

Standardní dotazovací jazyky jsou přesně v tom smyslu, že na ně obvykle myslíme, když mluvíme o dotazech.

Relační algebra

Proč je dnes potřeba relační algebra? Abyste dobře porozuměli tomu, proč jsou dotazovací jazyky určitým způsobem strukturovány, a vědomě je používat, musíte porozumět jejich jádru.

Co je relační algebra?

Formální definice je následující: relační algebra je uzavřený systém operací s relacemi v relačním datovém modelu. Řečeno trochu lidštěji, jedná se o systém operací nad tabulkami tak, že výsledkem je vždy tabulka.

Podívejte se na všechny relační operace v tohle článek od Habra - zde popisujeme, proč to potřebujete vědět a kde se to hodí.

Proč?

Když začnete chápat, o čem jsou dotazovací jazyky a jaké operace jsou za výrazy v konkrétních dotazovacích jazycích, často získáte hlubší pochopení toho, co a jak funguje v dotazovacích jazycích.

Data Scientist's Notes: Personalized Review of Data Query Languages
Vzáno z tohle články. Příklad operace: join, která spojuje tabulky.

Materiály ke studiu:

Dobrý úvodní kurz ze Stanfordu. Obecně existuje spousta materiálů o relační algebře a teorii - Coursera, Udacity. Na internetu je také obrovské množství materiálu, včetně dobrého akademické kurzy. Moje osobní rada: musíte velmi dobře rozumět relační algebře – to je základ základů.

SQL

Data Scientist's Notes: Personalized Review of Data Query Languages
Vzáno z tohle články.

SQL je v podstatě implementace relační algebry – s důležitým upozorněním je SQL deklarativní! To znamená, že při psaní dotazu v jazyce relační algebry vlastně řeknete, jak počítat - ale u SQL určíte, co chcete extrahovat, a pak už DBMS generuje (efektivní) výrazy v jazyce relační algebry (jejich ekvivalence je nám známa jako Coddův teorém).

Data Scientist's Notes: Personalized Review of Data Query Languages
Vzáno z tohle články.

Proč?

Relační DBMS: Oracle, Postgres, SQL Server atd. jsou stále prakticky všude a je neuvěřitelně vysoká pravděpodobnost, že s nimi budete muset komunikovat, což znamená, že budete muset SQL buď číst (což je velmi pravděpodobné), nebo je psát ( ani ne nepravděpodobné).

Co číst a studovat

Podle stejných odkazů výše (o relační algebře) existuje neuvěřitelné množství materiálu, např. tento.

Mimochodem, co je NoSQL?

"Je vhodné ještě jednou zdůraznit, že pojem "NoSQL" má naprosto spontánní původ a nemá za sebou žádnou obecně uznávanou definici ani vědeckou instituci." Odpovídající článek na Habr.

Ve skutečnosti si lidé uvědomili, že k řešení mnoha problémů není potřeba úplný relační model, zvláště u těch, kde je například kritický výkon a dominují určité jednoduché dotazy s agregací – kde je důležité rychle vypočítat metriky a zapsat je do databáze a většina funkcí je relačních se ukázala nejen jako zbytečná, ale i škodlivá – proč něco normalizovat, když nám to zkazí to nejdůležitější (pro nějaký konkrétní úkol) – produktivitu?

Často jsou také potřeba flexibilní schémata namísto pevných matematických schémat klasického relačního modelu – a to neuvěřitelně zjednodušuje vývoj aplikací, když je důležité nasadit systém a začít rychle pracovat, zpracovávat výsledky – nebo schéma a typy uložených dat. nejsou tak důležité.

Například vytváříme expertní systém a chceme ukládat informace o konkrétní doméně spolu s některými meta informacemi - nemusíme znát všechna pole a jednoduše ukládáme JSON pro každý záznam - to nám poskytuje velmi flexibilní prostředí pro rozšiřování dat model a rychle iterující - tak v tomto V tomto případě bude NoSQL ještě výhodnější a čitelnější. Příklad záznamu (z jednoho z mých projektů, kde NoSQL bylo přesně tam, kde bylo potřeba).

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

Přečtěte si více zde o NoSQL.

Co studovat?

Zde si spíše stačí důkladně analyzovat svůj úkol, jaké má vlastnosti a jaké jsou dostupné NoSQL systémy, které by tomuto popisu odpovídaly – a poté tento systém začít studovat.

Skriptovací dotazovací jazyky

Zpočátku se zdá, co s tím má Python obecně společného - je to programovací jazyk a vůbec ne o dotazech.

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

  • Pandas je doslova švýcarský armádní nůž Data Science, děje se v něm obrovské množství datových transformací, agregací atd.
  • Numpy - vektorové výpočty, matice a lineární algebra tam.
  • Scipy - v tomto balíčku je hodně matematiky, zejména statistik.
  • Jupyter lab – mnoho průzkumných datových analýz se dobře hodí do notebooků – užitečné vědět.
  • Požadavky - práce se sítí.
  • Pyspark je velmi populární mezi datovými inženýry, s největší pravděpodobností budete muset komunikovat s tímto nebo Sparkem, jednoduše kvůli jejich popularitě.
  • *Selen – velmi užitečné pro sběr dat z webů a zdrojů, někdy prostě není jiný způsob, jak data získat.

Moje hlavní rada: naučte se Python!

Pandy

Vezměme si jako příklad následující kód:

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 podstatě 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 součástí skriptu a kanálu; ve skutečnosti vkládáme dotazy do kanálu Pythonu. V této situaci k nám dotazovací jazyk přichází z knihoven, jako jsou Pandas nebo pySpark.

Obecně v pySpark vidíme podobný typ transformace dat prostřednictvím dotazovacího jazyka v duchu:

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

Kde a co číst

Obecně o Pythonu žádný problém najít materiály ke studiu. Na internetu je obrovské množství návodů pandy, pySpark a kurzy na Jiskra (a také sám o sobě DS). Celkově je zde obsah skvělý na googlování, a pokud bych si měl vybrat jeden balíček, na který se zaměřím, byly by to samozřejmě pandy. Co se týče kombinace materiálů DS+Python velmi.

Shell jako dotazovací jazyk

Poměrně mnoho projektů zpracování a analýzy dat, se kterými jsem pracoval, jsou ve skutečnosti skripty shellu, které volají kód v Pythonu, Javě a samotné příkazy shellu. Obecně tedy můžete pipelines v bash/zsh/etc považovat za nějaký druh dotazu na vysoké úrovni (můžete tam samozřejmě cpát smyčky, ale to není typické pro kód DS v jazycích shellu), dejme tomu jednoduchý příklad - potřeboval jsem udělat QID mapování wikidat a úplné odkazy na ruské a anglické wiki, k tomu jsem napsal jednoduchý požadavek z příkazů v bash a pro výstup jsem napsal jednoduchý skript v Pythonu, který jsem dát dohromady 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 bylo ve skutečnosti celé potrubí, které vytvořilo požadované mapování; jak vidíme, vše fungovalo v režimu streamu:

  • pv filepath - poskytuje ukazatel průběhu na základě velikosti souboru a předává jeho obsah dále
  • unpigz -c přečetl část archivu a dal ji jq
  • jq s klíčem - stream okamžitě vytvořil výsledek a předal jej postprocesoru (stejně jako v prvním příkladu) v Pythonu
  • interně byl postprocesor jednoduchý stavový stroj, který formátoval výstup 

Celkově jde o komplexní pipeline pracující v režimu toku na velkých datech (0.5 TB), bez významných zdrojů a vytvořenou z jednoduchého potrubí a několika nástrojů.

Další důležitý tip: umět dobře a efektivně pracovat v terminálu a psát bash/zsh/atd.

Kde to bude užitečné? Ano, skoro všude – na internetu je opět HODNĚ materiálů ke studiu. Zejména zde tohle můj předchozí článek.

R skriptování

Čtenář může opět zvolat – no, tohle je celý programovací jazyk! A samozřejmě bude mít pravdu. Obvykle jsem se však s R setkal v takovém kontextu, že ve skutečnosti bylo velmi podobné dotazovacímu jazyku.

R je statistické výpočetní prostředí a jazyk pro statické výpočty a vizualizaci (podle tento).

Data Scientist's Notes: Personalized Review of Data Query Languages
Přijato proto. Mimochodem doporučuji, dobrý materiál.

Proč datový vědec potřebuje znát R? Přinejmenším proto, že existuje obrovská vrstva lidí bez IT, kteří analyzují data v R. Narazil jsem na to na následujících místech:

  • Farmaceutický sektor.
  • Biologové.
  • Finanční sektor.
  • Lidé s čistě matematickým vzděláním, kteří se zabývají statistikami.
  • Specializované statistické modely a modely strojového učení (které lze často nalézt pouze v autorské verzi jako R balíček).

Proč je to vlastně dotazovací jazyk? V podobě, v jaké se často vyskytuje, je to vlastně požadavek na vytvoření modelu včetně čtení dat a opravy parametrů dotazu (modelu) a také vizualizace dat v balíčcích typu ggplot2 - to je také forma zápisu dotazů .

Příklad dotazů pro vizualizaci

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

Obecně platí, že mnoho nápadů z R migrovalo do pythonových balíčků, jako jsou pandas, numpy nebo scipy, jako jsou datové rámce a vektorizace dat – takže obecně vám bude spousta věcí v R připadat známých a pohodlných.

Existuje mnoho zdrojů ke studiu, např. tento.

Znalostní grafy

Zde mám trochu neobvyklou zkušenost, protože poměrně často musím pracovat se znalostními grafy a dotazovacími jazyky na grafy. Pojďme si proto krátce projít základy, protože tato část je trochu exotičtější.

V klasických relačních databázích máme pevné schéma, ale zde je schéma flexibilní, každý predikát je vlastně „sloupec“ a ještě více.

Představte si, že modelujete člověka a chcete popsat klíčové věci, vezměme si například konkrétního člověka, Douglase Adamse, a tento popis použijte jako základ.

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

Pokud bychom použili relační databázi, museli bychom vytvořit obrovskou tabulku nebo tabulky s velkým počtem sloupců, z nichž většina by byla NULL nebo by byla vyplněna nějakou výchozí hodnotou False, například je nepravděpodobné, že by mnoho z nás mělo záznam v korejské národní knihovně - samozřejmě bychom je mohli dát do samostatných tabulek, ale to by byl nakonec pokus o modelování flexibilního logického obvodu s predikáty pomocí pevného relačního.

Data Scientist's Notes: Personalized Review of Data Query Languages
Představte si tedy, že všechna data jsou uložena jako graf nebo jako binární a unární booleovské výrazy.

Kde se s tím vůbec můžete setkat? Za prvé, práce s datová wikia s libovolnými databázemi grafů nebo připojenými daty.

Níže jsou uvedeny hlavní dotazovací jazyky, které jsem používal a pracoval s nimi.

SPARQL

Wiki:
SPARQL (rekurzivní zkratka z Eng. Protokol SPARQL a dotazovací jazyk RDF) - jazyk dotazu na data, reprezentovaný modelem RDFa protokol předávat tyto žádosti a reagovat na ně. SPARQL je doporučení Konsorcium W3C a jedna z technologií sémantický web.

Ale ve skutečnosti je to dotazovací jazyk pro logické unární a binární predikáty. Jednoduše podmínečně určujete, co je v booleovském výrazu opraveno a co ne (velmi zjednodušeno).

Samotná základna RDF (Resource Description Framework), přes kterou se provádějí dotazy SPARQL, je trojitá object, predicate, subject - a dotaz vybere požadované trojice podle zadaných omezení v duchu: najděte X takové, že p_55(X, q_33) je pravdivé - kde samozřejmě p_55 je nějaký druh vztahu s ID 55 a q_33 je objekt s ID 33 (zde a celý příběh, opět s vynecháním nejrůznějších detailů).

Příklad prezentace dat:

Data Scientist's Notes: Personalized Review of Data Query Languages
Obrázky a příklad se zeměmi zde proto.

Příklad základního dotazu

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

Ve skutečnosti chceme najít hodnotu proměnné ?země takovou, že pro predikát
member_of, platí, že member_of(?country,q458) a q458 je ID Evropské unie.

Příklad skutečného dotazu SPARQL uvnitř python motoru:

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

Typicky jsem musel SPARQL číst, než ho psát – v takové situaci by bylo pravděpodobně užitečnou dovedností rozumět jazyku alespoň na základní úrovni, abych přesně pochopil, jak se data získávají. 

Na internetu je spousta materiálů ke studiu: například zde tento и tento. Obvykle googluji konkrétní návrhy a příklady a to zatím stačí.

Logické dotazovací jazyky

Více k tématu si můžete přečíst v mém článku zde. A zde jen stručně prozkoumáme, proč jsou logické jazyky vhodné pro psaní dotazů. RDF je v podstatě jen sada logických příkazů ve tvaru p(X) a h(X,Y) a logický dotaz má následující tvar:

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

Zde mluvíme o vytvoření nového predikátu output/1 (/1 znamená unární), za předpokladu, že pro X platí, že country(X) - tedy X je země a také member_of(X,"EU ").

To znamená, že v tomto případě jsou data i pravidla prezentována stejným způsobem, což umožňuje velmi snadno a dobře modelovat problémy.

Kde jste se v branži potkali?: celý velký projekt s firmou, která v takovém jazyce píše dotazy, i na aktuální projekt v jádru systému - zdálo by se, že jde o dost exotickou věc, ale občas se to stane.

Příklad fragmentu kódu v logickém jazyce zpracovávajícím wikidata:

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

Materiály: Dám sem pár odkazů na moderní logický programovací jazyk Answer Set Programming - doporučuji prostudovat:

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

Zdroj: www.habr.com

Přidat komentář