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.
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 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).
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).
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.
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.
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:
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ì:
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).
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.
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.
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.
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).
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:
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:
Materiali: daraghju quì un paru di ligami à u linguaghju di prugrammazione logica muderna Answer Set Programming - Vi cunsigliu di studià: