Datu zinÄtnieka piezÄ«mes: personalizÄts datu vaicÄjumu valodu pÄrskats
Es jums stÄstu no personÄ«gÄs pieredzes, kas kur un kad bija noderÄ«gs. Tas ir pÄrskats un tÄze, lai bÅ«tu skaidrs, ko un kur var rakt tÄlÄk - bet Å”eit man ir tikai subjektÄ«va personÄ«gÄ pieredze, iespÄjams, jums viss ir pavisam savÄdÄk.
KÄpÄc ir svarÄ«gi zinÄt un prast lietot vaicÄjumu valodas? Datu zinÄtnei savÄ pamatÄ ir vairÄki svarÄ«gi darba posmi, un pats pirmais un vissvarÄ«gÄkais (bez tÄ noteikti nekas nedarbosies!) ir datu iegÅ«Å”ana vai ieguve. VisbiežÄk dati kaut kur atrodas kaut kur un no turienes tie ir ājÄizgÅ«stā.
VaicÄjumu valodas ļauj iegÅ«t tieÅ”i Å”os datus! Un Å”odien es jums pastÄstÄ«Å”u par tÄm vaicÄjumu valodÄm, kas man ir bijuÅ”as noderÄ«gas, un es jums pastÄstÄ«Å”u un parÄdÄ«Å”u, kur un kÄ tieÅ”i - kÄpÄc tas ir nepiecieÅ”ams mÄcÄ«ties.
BÅ«s trÄ«s galvenie datu vaicÄjumu veidu bloki, kurus mÄs apspriedÄ«sim Å”ajÄ rakstÄ:
"Standarta" vaicÄjumu valodas ir tas, ko parasti saprot, runÄjot par vaicÄjuma valodu, piemÄram, relÄciju algebra vai SQL.
Skriptu vaicÄjumu valodas: piemÄram, Python lietas pandas, numpy vai Äaulas skriptÄÅ”ana.
VaicÄjumu valodas zinÄÅ”anu grafikiem un grafiku datubÄzÄm.
Viss Å”eit rakstÄ«tais ir tikai personÄ«gÄ pieredze, kas bija noderÄ«gs, ar situÄciju aprakstu un ākÄpÄc tas bija vajadzÄ«gsā ā ikviens var izmÄÄ£inÄt, kÄ lÄ«dzÄ«gas situÄcijas var nonÄkt tavÄ ceÄ¼Ä un mÄÄ£inÄt tÄm iepriekÅ” sagatavoties, saprotot Ŕīs valodas āāpirms jums (steidzami) jÄpiesakÄs kÄdam projektam vai pat jÄnokļūst projektÄ, kur tie ir nepiecieÅ”ami.
"Standarta" vaicÄjumu valodas
Standarta vaicÄjumu valodas ir tieÅ”i tÄdÄ nozÄ«mÄ, ka mÄs par tÄm parasti domÄjam, kad runÄjam par vaicÄjumiem.
RelÄciju algebra
KÄpÄc mÅ«sdienÄs ir nepiecieÅ”ama relÄciju algebra? Lai labi izprastu, kÄpÄc vaicÄjumu valodas ir strukturÄtas noteiktÄ veidÄ, un tÄs apzinÄti lietotu, jums ir jÄsaprot to pamatÄ esoÅ”Ä bÅ«tÄ«ba.
Kas ir relÄciju algebra?
FormÄlÄ definÄ«cija ir Å”Äda: relÄciju algebra ir slÄgta relÄciju operÄciju sistÄma relÄciju datu modelÄ«. Mazliet cilvÄciskÄk sakot, Ŕī ir tabulu darbÄ«bu sistÄma, lai rezultÄts vienmÄr bÅ«tu tabula.
Skatiet visas relÄciju darbÄ«bas Å”is raksts no Habr - Å”eit mÄs aprakstÄm, kÄpÄc jums tas jÄzina un kur tas noder.
KÄpÄc?
SÄkot saprast, kas ir vaicÄjumu valodas un kÄdas darbÄ«bas ir aiz izteiksmÄm noteiktÄs vaicÄjumu valodÄs, bieži vien sniedz dziļÄku izpratni par to, kas un kÄ darbojas vaicÄjumu valodÄs.
PaÅemts no Å”is rakstus. DarbÄ«bas piemÄrs: join, kas savieno tabulas.
MateriÄli mÄcÄ«bÄm:
Labs ievadkurss no Stenfordas. KopumÄ ir daudz materiÄlu par relÄciju algebru un teoriju - Coursera, Udacity. InternetÄ ir arÄ« milzÄ«gs daudzums materiÄlu, tostarp labu akadÄmiskie kursi. Mans personÄ«gais padoms: jums ļoti labi jÄsaprot relÄciju algebra - tas ir pamatu pamats.
SQL bÅ«tÄ«bÄ ir relÄciju algebras Ä«stenoÅ”ana ā ar svarÄ«gu piebildi, SQL ir deklaratÄ«va! Tas ir, rakstot vaicÄjumu relÄciju algebras valodÄ, jÅ«s faktiski sakÄt, kÄ aprÄÄ·inÄt - bet ar SQL jÅ«s norÄdÄt, ko vÄlaties iegÅ«t, un tad DBVS jau Ä£enerÄ (efektÄ«vas) izteiksmes relÄciju algebras valodÄ (to lÄ«dzvÄrtÄ«ba mums ir zinÄma kÄ Koda teorÄma).
RelÄciju DBVS: Oracle, Postgres, SQL Server utt. joprojÄm ir praktiski visur, un pastÄv neticami liela iespÄja, ka jums ar tÄm bÅ«s jÄsazinÄs, kas nozÄ«mÄ, ka jums bÅ«s vai nu jÄlasa SQL (kas ir ļoti iespÄjams), vai arÄ« jÄraksta ( arÄ« nav maz ticams).
Ko lasÄ«t un mÄcÄ«ties
SaskaÅÄ ar tÄm paÅ”Äm iepriekÅ” minÄtajÄm saitÄm (par relÄciju algebru) ir neticami daudz materiÄla, piemÄram, Å”is.
Starp citu, kas ir NoSQL?
"Ir vÄrts vÄlreiz uzsvÄrt, ka terminam "NoSQL" ir absolÅ«ti spontÄna izcelsme un aiz tÄ nav vispÄrpieÅemtas definÄ«cijas vai zinÄtniskas institÅ«cijas." AtbilstoÅ”i raksts uz Habr.
PatiesÄ«bÄ cilvÄki saprata, ka daudzu problÄmu risinÄÅ”anai nav nepiecieÅ”ams pilnÄ«gs relÄciju modelis, jo Ä«paÅ”i tiem, kur, piemÄram, veiktspÄja ir kritiska un dominÄ daži vienkÄrÅ”i vaicÄjumi ar apkopoÅ”anu ā kur ir ļoti svarÄ«gi Ätri aprÄÄ·inÄt metriku un ierakstÄ«t tos datubÄze, un lielÄkÄ daļa funkciju ir relÄciju, izrÄdÄ«jÄs ne tikai nevajadzÄ«gas, bet arÄ« kaitÄ«gas - kÄpÄc kaut ko normalizÄt, ja tas sabojÄs mums vissvarÄ«gÄko (kÄdam konkrÄtam uzdevumam) - produktivitÄti?
TurklÄt klasiskÄ relÄciju modeļa fiksÄto matemÄtisko shÄmu vietÄ bieži ir nepiecieÅ”amas elastÄ«gas shÄmas ā un tas neticami vienkÄrÅ”o lietojumprogrammu izstrÄdi, kad ir ļoti svarÄ«gi izvietot sistÄmu un Ätri sÄkt darbu, apstrÄdÄjot rezultÄtus ā vai saglabÄto datu shÄmu un veidus. nav tik svarÄ«gi.
PiemÄram, mÄs veidojam ekspertu sistÄmu un vÄlamies glabÄt informÄciju par noteiktu domÄnu kopÄ ar kÄdu metainformÄciju ā iespÄjams, mÄs nezinÄm visus laukus un vienkÄrÅ”i saglabÄjam JSON katram ierakstam ā tas mums sniedz ļoti elastÄ«gu vidi datu paplaÅ”inÄÅ”anai. modelis un Ätri atkÄrtojas - tÄpÄc Å”ajÄ Å ajÄ gadÄ«jumÄ NoSQL bÅ«s vÄl labÄk un lasÄmÄks. PiemÄra ieraksts (no viena no maniem projektiem, kur NoSQL bija tieÅ”i tur, kur tas bija nepiecieÅ”ams).
Å eit jums vienkÄrÅ”i ir rÅ«pÄ«gi jÄizanalizÄ savs uzdevums, kÄdi rekvizÄ«ti tam ir un kÄdas NoSQL sistÄmas ir pieejamas, kas atbilstu Å”im aprakstam - un tad sÄciet pÄtÄ«t Å”o sistÄmu.
Skriptu vaicÄjumu valodas
SÄkumÄ Å”Ä·iet, kÄds Python ar to vispÄr sakars - tÄ ir programmÄÅ”anas valoda, nevis par vaicÄjumiem.
Pandas burtiski ir Å veices armijas datu zinÄtnes nazis, tajÄ notiek milzÄ«gs datu pÄrveidoÅ”anas, apkopoÅ”anas u.c. apjoms.
Numpy - tur vektoru aprÄÄ·ini, matricas un lineÄrÄ algebra.
Scipy ā Å”ajÄ paketÄ ir daudz matemÄtikas, Ä«paÅ”i statistikas.
Jupyter laboratorija ā liela daļa izpÄtes datu analÄ«zes labi iederas klÄpjdatoros ā noderÄ«gi zinÄt.
Pieprasījumi - darbs ar tīklu.
Pyspark ir ļoti populÄrs datu inženieru vidÅ«, visticamÄk, jums bÅ«s jÄsazinÄs ar Å”o vai Spark, vienkÄrÅ”i to popularitÄtes dÄļ.
*SelÄns ā ļoti noder datu ievÄkÅ”anai no vietnÄm un resursiem, dažkÄrt vienkÄrÅ”i nav citas iespÄjas iegÅ«t datus.
BÅ«tÄ«bÄ mÄs redzam, ka kods iekļaujas klasiskajÄ SQL modelÄ«.
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
Bet svarÄ«gÄkais ir tas, ka Å”is kods ir daļa no skripta un konveijera; patiesÄ«bÄ mÄs ieguljam vaicÄjumus Python konveijerÄ. Å ÄdÄ situÄcijÄ vaicÄjumu valoda mums nÄk no tÄdÄm bibliotÄkÄm kÄ Pandas vai pySpark.
KopumÄ pySpark mÄs redzam lÄ«dzÄ«ga veida datu pÄrveidoÅ”anu, izmantojot vaicÄjumu valodu, ievÄrojot:
Par paÅ”u Python vispÄr nav problÄma atrast materiÄlus, ko pÄtÄ«t. TieÅ”saistÄ ir milzÄ«gs skaits pamÄcÄ«bu pandas, pySpark un kursi tÄlÄk Dzirkstele (un arÄ« pats par sevi DS). KopumÄ Å”eit esoÅ”ais saturs ir lieliski piemÄrots googlÄÅ”anai, un, ja man bÅ«tu jÄizvÄlas viena pakotne, uz kuru koncentrÄties, tas, protams, bÅ«tu pandas. ArÄ« attiecÄ«bÄ uz DS+Python materiÄlu kombinÄciju ļoti daudz.
Shell kÄ vaicÄjumu valoda
Diezgan daudz datu apstrÄdes un analÄ«zes projektu, ar kuriem esmu strÄdÄjis, patiesÄ«bÄ ir Äaulas skripti, kas izsauc kodu Python, Java un paÅ”as Äaulas komandas. TÄpÄc kopumÄ jÅ«s varat uzskatÄ«t konveijerus bash/zsh/etc kÄ kaut kÄdu augsta lÄ«meÅa vaicÄjumu (tur, protams, var iebÄzt cilpas, bet tas nav raksturÄ«gi DS kodam Äaulas valodÄs), dosim vienkÄrÅ”s piemÄrs - man vajadzÄja veikt wikidatu QID kartÄÅ”anu un pilnas saites uz krievu un angļu wiki, Å”im nolÅ«kam es uzrakstÄ«ju vienkÄrÅ”u pieprasÄ«jumu no komandÄm bash un izvadei uzrakstÄ«ju vienkÄrÅ”u skriptu Python, ko es salikt kopÄ Å”Ädi:
JQ_QUERY = 'select((.[0][1] == "sitelinks" and (.[0][2]=="enwiki" or .[0][2] =="ruwiki") and .[0][3] =="title") or .[0][1] == "id")'
Faktiski tas bija viss cauruļvads, kas izveidoja nepiecieÅ”amo kartÄÅ”anu; kÄ redzam, viss darbojÄs straumes režīmÄ:
pv faila ceļŔ ā nodroÅ”ina progresa joslu, pamatojoties uz faila lielumu, un nodod tÄ saturu tÄlÄk
unpigz -c izlasīja daļu no arhīva un iedeva jq
jq ar atslÄgu - straume nekavÄjoties radÄ«ja rezultÄtu un nodeva to pÄcprocesoram (tÄpat kÄ pirmajÄ piemÄrÄ) Python
iekÅ”Äji pÄcprocesors bija vienkÄrÅ”a stÄvokļa maŔīna, kas formatÄja izvadi
KopumÄ sarežģīts cauruļvads, kas darbojas plÅ«smas režīmÄ uz lieliem datiem (0.5 TB), bez ievÄrojamiem resursiem un izgatavots no vienkÄrÅ”a cauruļvada un pÄris rÄ«kiem.
VÄl viens svarÄ«gs padoms: jÄspÄj labi un efektÄ«vi strÄdÄt terminÄlÄ« un rakstÄ«t bash/zsh/utt.
Kur tas noderÄs? JÄ, gandrÄ«z visur - atkal ir DAUDZ materiÄlu, ko pÄtÄ«t internetÄ. Jo Ä«paÅ”i Å”eit Å”is mans iepriekÅ”Äjais raksts.
R skriptu veidoŔana
Atkal lasÄ«tÄjs var iesaukties ā nu, tÄ ir vesela programmÄÅ”anas valoda! Un, protams, viÅam bÅ«s taisnÄ«ba. TomÄr es parasti saskÄros ar R tÄdÄ kontekstÄ, ka patiesÄ«bÄ tas bija ļoti lÄ«dzÄ«gs vaicÄjumu valodai.
R ir statistikas skaitļoÅ”anas vide un valoda statiskai skaitļoÅ”anai un vizualizÄcijai (saskaÅÄ ar Å”is).
paÅemts tÄtad. Starp citu, iesaku, labs materiÄls.
KÄpÄc datu zinÄtniekam ir jÄzina R? Vismaz tÄpÄc, ka ir milzÄ«gs ar IT nesaistÄ«tu cilvÄku slÄnis, kas analizÄ datus R. Es ar tiem saskÄros Å”ÄdÄs vietÄs:
FarmÄcijas nozare.
Biologi.
FinanŔu sektors.
CilvÄki ar tÄ«ri matemÄtisko izglÄ«tÄ«bu, kas nodarbojas ar statistiku.
SpecializÄti statistikas modeļi un maŔīnmÄcÄ«Å”anÄs modeļi (kurus bieži vien var atrast tikai autora versijÄ kÄ R pakotni).
KÄpÄc tÄ patiesÄ«bÄ ir vaicÄjumu valoda? FormÄ, kÄdÄ tas bieži tiek atrasts, patiesÄ«bÄ tas ir pieprasÄ«jums izveidot modeli, ieskaitot datu nolasÄ«Å”anu un vaicÄjuma (modeļa) parametru laboÅ”anu, kÄ arÄ« datu vizualizÄciju tÄdÄs pakotnÄs kÄ ggplot2 - tas ir arÄ« vaicÄjumu rakstÄ«Å”anas veids. .
VizualizÄcijas vaicÄjumu piemÄri
ggplot(data = beav,
aes(x = id, y = temp,
group = activ, color = activ)) +
geom_line() +
geom_point() +
scale_color_manual(values = c("red", "blue"))
KopumÄ daudzas idejas no R ir migrÄjuÅ”as python pakotnÄs, piemÄram, pandas, numpy vai scipy, piemÄram, datu rÄmji un datu vektorizÄcija, tÄpÄc kopumÄ daudzas lietas programmÄ R jums ŔķitÄ«s pazÄ«stamas un Ärtas.
Å eit man ir nedaudz neparasta pieredze, jo man diezgan bieži nÄkas strÄdÄt ar zinÄÅ”anu grafikiem un vaicÄjumu valodÄm grafikiem. TÄpÄc Ä«si apskatÄ«sim pamatus, jo Ŕī daļa ir nedaudz eksotiskÄka.
KlasiskajÄs relÄciju datu bÄzÄs mums ir fiksÄta shÄma, taÄu Å”eit shÄma ir elastÄ«ga, katrs predikÄts faktiski ir ākolonnaā un vÄl vairÄk.
IedomÄjieties, ka veidojat cilvÄku un vÄlaties aprakstÄ«t galvenÄs lietas, piemÄram, Åemsim konkrÄtu personu Duglasu Adamsu un izmantojiet Å”o aprakstu par pamatu.
Ja mÄs izmantotu relÄciju datu bÄzi, mums bÅ«tu jÄizveido milzÄ«ga tabula vai tabulas ar milzÄ«gu skaitu kolonnu, no kurÄm lielÄkÄ daļa bÅ«tu NULL vai aizpildÄ«tas ar kÄdu noklusÄjuma False vÄrtÄ«bu, piemÄram, maz ticams, ka daudziem no mums ir ieraksts Korejas nacionÄlajÄ bibliotÄkÄ - protams, mÄs varÄtu tÄs ievietot atseviŔķÄs tabulÄs, taÄu tas galu galÄ bÅ«tu mÄÄ£inÄjums modelÄt elastÄ«gu loÄ£isko Ä·Ädi ar predikÄtiem, izmantojot fiksÄtu relÄciju.
TÄpÄc iedomÄjieties, ka visi dati tiek glabÄti kÄ grafiks vai kÄ binÄras un unÄras BÅ«la izteiksmes.
Kur ar to vispÄr var saskarties? PirmkÄrt, strÄdÄjot ar datu wiki, un ar jebkurÄm grafiku datu bÄzÄm vai saistÄ«tajiem datiem.
TÄlÄk ir norÄdÄ«tas galvenÄs vaicÄjumu valodas, kuras esmu izmantojis un ar kurÄm strÄdÄju.
Bet patiesÄ«bÄ tÄ ir vaicÄjumu valoda loÄ£iskiem unÄrajiem un binÄrajiem predikÄtiem. JÅ«s vienkÄrÅ”i nosacÄ«ti norÄdÄt, kas BÅ«la izteiksmÄ ir fiksÄts un kas nav (ļoti vienkÄrÅ”oti).
Pati RDF (Resource Description Framework) bÄze, kurÄ tiek izpildÄ«ti SPARQL vaicÄjumi, ir trÄ«skÄrÅ”a object, predicate, subject - un vaicÄjums atlasa nepiecieÅ”amos trÄ«skÄrÅ”us atbilstoÅ”i norÄdÄ«tajiem ierobežojumiem garÄ: atrodiet tÄdu X, lai p_55(X, q_33) bÅ«tu patiess - kur, protams, p_55 ir kaut kÄda saistÄ«ba ar ID 55, un q_33 ir objekts ar ID 33 (Å”eit un viss stÄsts, atkal izlaižot visÄdas detaļas).
Faktiski mÄs vÄlamies atrast mainÄ«gÄ valsts vÄrtÄ«bu tÄdu, kas atbilst predikÄtam
Member_of, ir taisnība, ka member_of(?country,q458) un q458 ir Eiropas Savienības ID.
Parasti man bija jÄlasa SPARQL, nevis jÄraksta ā Å”ÄdÄ situÄcijÄ, iespÄjams, bÅ«tu noderÄ«ga prasme saprast valodu vismaz pamata lÄ«menÄ«, lai precÄ«zi saprastu, kÄ dati tiek izgÅ«ti.
Ir daudz materiÄlu, ko izpÄtÄ«t tieÅ”saistÄ: piemÄram, Å”eit Å”is Šø Å”is. Es parasti meklÄju google konkrÄtus dizainus un piemÄrus, un pagaidÄm ar to pietiek.
LoÄ£iskÄ vaicÄjuma valodas
VairÄk par tÄmu varat lasÄ«t manÄ rakstÄ Å”eit. Un Å”eit mÄs tikai Ä«si pÄrbaudÄ«sim, kÄpÄc loÄ£iskÄs valodas ir labi piemÄrotas vaicÄjumu rakstÄ«Å”anai. BÅ«tÄ«bÄ RDF ir tikai loÄ£isku paziÅojumu kopa formÄ p(X) un h(X,Y), un loÄ£iskajam vaicÄjumam ir Å”Äda forma:
output(X) :- country(X), member_of(X,āEUā).
Å eit mÄs runÄjam par jaunas predikÄta izvades/1 izveidi (/1 nozÄ«mÄ unÄru), ar nosacÄ«jumu, ka X ir taisnÄ«ba, ka valsts(X) - t.i., X ir valsts un arÄ«(X,"ES ") dalÄ«bnieks.
Tas ir, Å”ajÄ gadÄ«jumÄ gan dati, gan noteikumi tiek parÄdÄ«ti vienÄdi, kas ļauj ļoti viegli un labi modelÄt problÄmas.
Kur jÅ«s satikÄties nozarÄ?: vesels liels projekts ar kompÄniju, kas raksta vaicÄjumus Å”ÄdÄ valodÄ, kÄ arÄ« par paÅ”reizÄjo projektu sistÄmas kodolÄ - varÄtu Ŕķist, ka tÄ ir diezgan eksotiska lieta, bet reizÄm gadÄs.
Koda fragmenta piemÄrs loÄ£iskÄs valodas apstrÄdes vikidatos:
MateriÄli: Es Å”eit iedoÅ”u pÄris saites uz mÅ«sdienu loÄ£iskÄs programmÄÅ”anas valodu Answer Set Programming - iesaku to izpÄtÄ«t: