Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats

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.

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats
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

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats
Paņemts no Å”is raksti.

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).

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats
Paņemts no Å”is raksti.

Kāpēc?

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).

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

Jūs varat lasīt vairāk Ŕeit par NoSQL.

Ko studēt?

Å 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.

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats

  • 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.

Mans galvenais padoms: iemācieties Python!

Pandas

Kā piemēru ņemsim Ŕādu kodu:

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

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:

df.filter(df.trip_type = ā€œreturnā€)
  .groupby(ā€œdayā€)
  .agg({duration: 'mean'})
  .sort()

Kur un ko lasīt

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:

pv ā€œdata/latest-all.json.gzā€ | 
unpigz -c  | 
jq --stream $JQ_QUERY | 
python3 scripts/post_process.py "output.csv"

kur

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).

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats
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.

Ir daudz avotu, ko pētÄ«t, piemēram, Å”is.

ZināŔanu grafiki

Å 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.

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats
www.wikidata.org/wiki/Q42

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.

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats
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.

SPARQL

Wiki:
SPARQL (rekursÄ«vs akronÄ«ms no Eng. SPARQL protokols un RDF vaicājumu valoda) - datu vaicājuma valoda, ko attēlo modelis RDFun protokols pārsÅ«tÄ«t Å”os pieprasÄ«jumus un atbildēt uz tiem. SPARQL ir ieteikums W3C konsorcijs un viena no tehnoloÄ£ijām semantiskais tÄ«meklis.

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).

Datu prezentācijas piemērs:

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats
Bildes un piemērs ar valstÄ«m Å”eit tātad.

Pamatvaicājuma piemērs

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats

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.

ÄŖsta SPARQL vaicājuma piemērs python dzinējā:

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats

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:

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats

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:

Datu zinātnieka piezīmes: personalizēts datu vaicājumu valodu pārskats

Avots: www.habr.com

Pievieno komentāru