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

Data Scientist's Notes: A Review Personalized of Data Query Languages
Vi dicu da a sperienza persunale ciò chì era utile induve è quandu. Hè una panoramica è a tesi, per chì sia chjaru ciò chì è induve pudete scavà più - ma quì aghju una sperienza persunale esclusivamente subjectiva, forse tuttu hè completamente diversu per voi.

Perchè hè impurtante di sapè è di pudè utilizà e lingue di quistione? In u so core, Data Science hà parechje tappe impurtanti di u travagliu, è u primu è u più impurtante (senza ellu, certamenti nunda ùn hà da travaglià!) Hè ottene o estrazione di dati. A maiò spessu, i dati si trovanu in un locu in qualchì forma è deve esse "ritruvatu" da quì. 

E lingue di interrugazione vi permettenu di caccià queste dati! È oghje vi dicu di e lingue di ricerca chì mi sò state utili è vi dicu è vi mustraraghju induve è cumu esattamente - perchè hè necessariu di studià.

Ci saranu trè blocchi principali di tipi di query di dati, chì discutemu in questu articulu:

  • Lingui di quistione "Standard" sò ciò chì hè cumunimenti capitu quandu si parla di una lingua di dumanda, cum'è l'algebra relazionale o SQL.
  • Linguaggi di dumanda di scrittura: per esempiu, Python things pandas, numpy o shell scripting.
  • Lingue di ricerca per i grafici di cunniscenza è e basa di dati di grafici.

Tuttu ciò chì hè scrittu quì hè solu una sperienza persunale, ciò chì era utile, cù una descrizzione di e situazioni è "perchè era necessariu" - ognunu pò pruvà cumu si ponu accade situazioni simili è pruvate à preparà per elli in anticipu cumprendendu queste lingue. prima avete da dumandà (urgenza) nantu à un prughjettu o ancu ghjunghje à un prughjettu induve sò necessarii.

Lingue di dumanda "Standard".

Lingue di dumanda standard sò precisamente in u sensu chì generalmente pensemu à elli quandu parlemu di dumande.

Algebra relazionale

Perchè l'algebra relazionale hè necessaria oghje? Per avè una bona capiscitura di perchè e lingue di quistione sò strutturate in un certu modu è l'utilizanu in cuscenza, avete bisognu di capiscenu u core sottu.

Cosa hè l'algebra relazionale?

A definizione formale hè a siguenti: l'algebra relazionale hè un sistema chjusu di operazioni nantu à relazioni in un mudellu di dati relazionale. Per fà un pocu più umanu, questu hè un sistema di operazioni nantu à i tavulini chì u risultatu hè sempre un tavulinu.

Vede tutte l'operazioni relazionali in questu articulu di Habr - quì avemu discrittu perchè avete bisognu di sapè è induve vene in pratica.

Perchè

Cumincià à capisce ciò chì e lingue di query sò tutte è ciò chì l'operazioni sò daretu à l'espressioni in lingue di query specifiche spessu dà una cunniscenza più profonda di ciò chì funziona in e lingue di query è cumu.

Data Scientist's Notes: A Review Personalized of Data Query Languages
Pigliatu da questu articuli. Un esempiu di operazione: join, chì unisce i tavule.

Materiali per u studiu:

Bonu cursu introduttivu da Stanford. In generale, ci sò assai materiali nantu à l'algebra relazionale è a teoria - Coursera, Udacity. Ci hè ancu una quantità enorme di materiale in linea, ancu bè corsi accademici. U mo cunsigliu persunale: avete bisognu di capisce l'algebra relazionale assai bè - questu hè a basa di i principii.

SQL

Data Scientist's Notes: A Review Personalized of Data Query Languages
Pigliatu da questu articuli.

SQL hè essenzialmente una implementazione di l'algebra relazionale - cù una caveat impurtante, SQL hè dichjarazione! Questu hè, quandu scrivite una dumanda in a lingua di l'algebra relazionale, in realtà dite cumu per calculà - ma cù SQL specificate ciò chì vulete estrattà, è allora u DBMS hà digià generatu espressioni (effettivi) in a lingua di l'algebra relazionale (u so l'equivalenza hè cunnisciuta da noi cum'è Teorema di Codd).

Data Scientist's Notes: A Review Personalized of Data Query Languages
Pigliatu da questu articuli.

Perchè

DBMS relazionali: Oracle, Postgres, SQL Server, etc. sò sempre praticamenti in ogni locu è ci hè una probabilità incredibilmente alta chì avete da interagisce cun elli, chì significa chì avete da leghje SQL (chì hè assai prubabile) o scrivite ( micca improbabile ancu).

Cosa à leghje è studià

Sicondu i stessi ligami sopra (nantu à l'algebra relazionale), ci hè una quantità incredibile di materiale, per esempiu, questu.

Per via, chì hè NoSQL?

"Vale a pena enfatizà una volta chì u terminu "NoSQL" hà una origine assolutamente spontanea è ùn hà micca una definizione generalmente accettata o istituzione scientifica daretu à questu. Corrispondente un articulu nantu à Habr.

In fatti, a ghjente hà capitu chì un mudellu relazionale cumpletu ùn hè micca necessariu per risolve parechji prublemi, soprattuttu per quelli induve, per esempiu, u rendiment hè criticu è certe dumande simplici cù l'agregazione dominanu - induve hè criticu per calculà rapidamente metriche è scrivite à u a basa di dati, è a maiò parte di e funzioni sò relazionali ùn sò micca solu innecessarii, ma ancu dannusu - perchè nurmalizà qualcosa s'ellu sguasserà u più impurtante per noi (per qualchì compitu specificu) - a produtividade?

Inoltre, i schemi flessibili sò spessu necessarii invece di i schemi matematichi fissi di u mudellu relazionale classicu - è questu simplificà incredibilmente u sviluppu di l'applicazioni quandu hè criticu per implementà u sistema è cumincià à travaglià rapidamente, processendu i risultati - o u schema è i tipi di dati almacenati. ùn sò micca cusì impurtanti.

Per esempiu, creemu un sistema espertu è vulemu almacenà l'infurmazioni nantu à un duminiu specificu cù qualchì meta infurmazione - ùn pudemu micca cunnosce tutti i campi è simpricimenti almacenà JSON per ogni record - questu ci dà un ambiente assai flexible per espansione e dati. mudellu è rapidamente iterazione - cusì in questu In questu casu, NoSQL serà ancu preferibile è più leggibile. Esempiu di entrata (da unu di i mo prughjetti induve NoSQL era ghjustu induve era necessariu).

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

Pudete leghje più ccà circa NoSQL.

Chì studià?

Quì, piuttostu, vi basta à analizà bè u vostru compitu, ciò chì proprietà hà è ciò chì i sistemi NoSQL sò dispunibuli chì s'adattanu sta descrizzione - è poi cumincianu à studià stu sistema.

Scripting Query Languages

À u principiu, pare chì ciò chì Python hà da fà cù questu in generale - hè una lingua di prugrammazione, è micca nantu à e dumande.

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

  • Pandas hè literalmente un cuteddu di l'Armata Svizzera di Data Science; una quantità enorme di trasfurmazioni di dati, aggregazione, etc.
  • Numpy - calculi vettoriali, matrici è algebra lineare quì.
  • Scipy - ci hè assai di matematica in stu pacchettu, in particulare stats.
  • Jupyter lab - assai analisi di dati esploratori si mette bè in i laptops - utile à sapè.
  • Requests - travaglià cù a reta.
  • Pyspark hè assai populari trà l'ingegneri di dati, più prubabilmente avete da interagisce cù questu o Spark, solu per via di a so popularità.
  • * Seleniu - assai utile per a cullizzioni di dati da siti è risorse, qualchì volta ùn ci hè simplicemente micca altru modu per uttene e dati.

U mo cunsigliu principale: amparà Python!

Pandas

Pigliemu u codice seguente cum'è un esempiu:

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

Essenzialmente, vedemu chì u codice si mette in u mudellu SQL classicu.

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

Ma a parte impurtante hè chì stu codice hè parte di u script è di u pipeline; in fattu, simu incrustendu dumande in u pipeline Python. In questa situazione, a lingua di quistione vene à noi da biblioteche cum'è Pandas o pySpark.

In generale, in pySpark vedemu un tipu simili di trasfurmazioni di dati attraversu una lingua di quistione in u spiritu di:

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

Induve è chì leghje

In Python stessu in generale micca un prublema truvà materiali per studià. Ci hè un gran numaru di tutoriali in linea pandas, pySpark e corsi avanti Spark (è ancu da ellu stessu DS). In generale, u cuntenutu quì hè grande per google, è se aghju avutu à sceglie un pacchettu per fucalizza nantu, saria pandas, sicuru. In quantu à a cumminazione di materiali DS + Python ancu una mansa di.

Shell cum'è una lingua di dumanda

Un pocu di prughjetti di prucessu di dati è analisi chì aghju travagliatu sò, in fattu, script di shell chì chjamanu codice in Python, Java, è i cumandamenti di shell. Dunque, in generale, pudete cunsiderà pipeline in bash/zsh/etc cum'è un tipu di query d'altu livellu (pudete, sicuru, stuff loops in quì, ma questu ùn hè micca tipicu per u codice DS in lingue di shell), damu un esempiu simplice - avia bisognu di fà una mappa QID di wikidata è ligami cumpleti à i wikis russi è inglesi, per questu aghju scrittu una dumanda simplice da i cumandamenti in u bash è per l'output aghju scrittu un script simplice in Python, chì aghju scrittu. mette inseme cusì:

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

induve

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

Questu era, in fattu, tuttu u pipeline chì hà creatu a mappatura necessaria; cum'è vedemu, tuttu hà travagliatu in modu di flussu:

  • pv filepath - dà una barra di prugressu basatu nantu à a dimensione di u schedariu è passa u so cuntenutu in avanti
  • unpigz -c leghje una parte di l'archiviu è l'hà datu à jq
  • jq cù a chjave - u flussu hà immediatamente produttu u risultatu è l'hà passatu à u postprocessore (cum'è cù u primu esempiu) in Python
  • internu, u postprocessore era una macchina statale simplice chì formate l'output 

In tuttu, un pipeline cumplessu chì travaglia in modu di flussu nantu à grande dati (0.5TB), senza risorse significativu è fattu da un pipeline simplice è un coppiu di strumenti.

Un altru cunsigliu impurtante: esse capace di travaglià bè è efficace in u terminal è scrive bash/zsh/etc.

Induve serà utile? Iè, quasi in ogni locu - dinò, ci sò assai materiali per studià in Internet. In particulare, quì questu u mo articulu precedente.

R scripting

In novu, u lettore pò esclamà - bè, questu hè tutta una lingua di prugrammazione! È di sicuru, hà da esse ghjustu. In ogni casu, di solitu scontru R in un cuntestu cusì chì, in fattu, era assai simili à una lingua di quistione.

R hè un ambiente di calculu statisticu è lingua per l'informatica statica è a visualizazione (sicondu questu).

Data Scientist's Notes: A Review Personalized of Data Query Languages
pigliatu da quì. Per via, u cunsigliu, bonu materiale.

Perchè un scientist di dati hà bisognu di sapè R? Almenu, perchè ci hè una grande capa di persone chì ùn sò micca IT chì analizanu e dati in R. L'aghju scontru in i seguenti lochi:

  • Settore farmaceuticu.
  • Biuloghi.
  • Settore finanziariu.
  • E persone cù una educazione puramente matematica chì trattanu di stats.
  • Modelli statistici spicializati è mudelli di machine learning (chì spessu ponu esse truvati solu in a versione di l'autore cum'è un pacchettu R).

Perchè hè veramente una lingua di quistione? In a forma in quale si trova spessu, hè in realtà una dumanda per creà un mudellu, cumprese a lettura di dati è a fissazione di i paràmetri di query (mudellu), è ancu a visualizazione di dati in pacchetti cum'è ggplot2 - questu hè ancu una forma di scrittura di dumande. .

Esempi di dumande per a visualizazione

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

In generale, assai idee da R anu migratu in pacchetti python cum'è panda, numpy o scipy, cum'è dataframes è vectorization di dati - cusì in generale assai cose in R vi pareranu familiari è convenienti.

Ci sò parechje fonti per studià, per esempiu, questu.

Graficu di cunniscenza

Quì aghju una sperienza un pocu inusual, perchè abbastanza spessu avè da travaglià cù i gràfici di cunniscenza è e lingue di quistione per i grafici. Dunque, andemu in breve nantu à i principii, postu chì sta parte hè un pocu più esotica.

In a basa di dati relazionale classica avemu un schema fissu, ma quì u schema hè flexible, ogni predicatu hè in realtà una "colonna" è ancu più.

Immaginate chì avete modellu una persona è vulia discrive e cose chjave, per esempiu, pigliamu una persona specifica, Douglas Adams, è utilizate sta descrizzione cum'è una basa.

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

Se avemu usatu una basa di dati relazionale, avissimu da creà una tavola enormi o tavule cù un gran numaru di culonne, a maiò parte di quale seria NULL o pienu di qualchì valore falsu predeterminatu, per esempiu, hè improbabile chì parechji di noi avemu un entrata in a biblioteca naziunale coreana - di sicuru, pudemu mette in tavule separati, ma questu seria un tentativu di modellà un circuitu logicu flexible cù predicati chì utilizanu un relazionale fissu.

Data Scientist's Notes: A Review Personalized of Data Query Languages
Allora imaginate chì tutti i dati sò guardati cum'è un gràficu o cum'è espressioni booleane binari è unarii.

Induve pudete ancu scuntrà questu? Prima, travaglià cù wiki di dati, è cù qualsiasi basa di dati gràficu o dati cunnessi.

I seguenti sò i principali lingue di quistione chì aghju utilizatu è travagliatu.

SPARQL

Wiki:
SPARQL (acronimu recursive от Eng. SPARQL Protocol è RDF Query Language) - lingua di dumanda di dati, rapprisintatu da u mudellu RDF, cum'è ancu protocolu per trasmette queste dumande è risponde à elli. SPARQL hè una raccomandazione Cunsorziu W3C è una di e tecnulugia web semanticu.

Ma in realtà hè una lingua di quistione per i predicati unari è binari lògichi. Sò solu specificà cundiziunali ciò chì hè fissatu in una espressione booleana è ciò chì ùn hè micca (assai simplificatu).

A basa RDF (Resource Description Framework) stessu, nantu à quale e dumande SPARQL sò eseguite, hè un triplu. object, predicate, subject - è a dumanda selezziunà i tripli necessarii secondu e restrizioni specificate in u spiritu: truvate un X tali chì p_55(X, q_33) hè vera - induve, sicuru, p_55 hè un tipu di relazione cù ID 55, è q_33 hè un ughjettu cù ID 33 (qui è tutta a storia, omettendu dinò ogni tipu di dettagli).

Esempiu di presentazione di dati:

Data Scientist's Notes: A Review Personalized of Data Query Languages
Pictures è esempiu cù i paesi quì da quì.

Esempiu di quistione basica

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

In fatti, vulemu truvà u valore di a variabile ?paese cusì chì per u predicatu
member_of, hè vera chì member_of(?country,q458) è q458 hè l'ID di l'Unione Europea.

Un esempiu di una vera dumanda SPARQL in u mutore python:

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

Di genere, aghju avutu à leghje SPARQL piuttostu chè à scrive - in quella situazione, puderia esse una cumpetenza utile per capiscenu a lingua almenu à un livellu basu per capisce esattamente cumu si recuperanu e dati. 

Ci hè assai materiale per studià in linea: per esempiu, quì questu и questu. Di solitu google disinni specifichi è esempii è hè abbastanza per avà.

Linguaggi di dumanda logica

Pudete leghje più nantu à u tema in u mo articulu ccà. E quì, esamineremu solu brevemente perchè e lingue logiche sò bè ​​adattate per scrive dumande. Essenzialmente, RDF hè solu un inseme di dichjarazioni lògichi di a forma p (X) è h (X, Y), è una dumanda logica hà a forma seguente:

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

Quì parlemu di creà un novu predicatu output / 1 (/1 significa unary), basta chì per X hè veru chì paese (X) - vale à dì, X hè un paese è ancu membru_di (X, "EU ").

Questu hè, in questu casu, i dati è e regule sò presentati in u stessu modu, chì ci permette di mudificà i prublemi assai facilmente è bè.

Induve avete scontru in l'industria?: un prughjettu sanu grande cù una cumpagnia chì scrive dumande in una tale lingua, è ancu nantu à u prughjettu attuale in u core di u sistema - pare chì questu hè una cosa piuttostu esotica, ma qualchì volta succede.

Un esempiu di un fragmentu di codice in una wikidata di trasfurmazioni di lingua logica:

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

Materiali: daraghju quì un paru di ligami à u linguaghju di prugrammazione logica muderna Answer Set Programming - Vi cunsigliu di studià:

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

Source: www.habr.com

Add a comment