Jag rÀÀgin oma kogemusest, kus ja millal midagi kasulikku leidsin. Ălevaatlikult ja lĂŒhidalt, et oleks arusaadav, mida ja kuhu edasi uurida â kuid see on ainult minu subjektiivne kogemus, teil vĂ”ib olla kĂ”ik tĂ€iesti teistmoodi.
Miks on oluline teada ja osata kasutada pĂ€ringukeeli? Data Science'is on mitmeid olulisi tööetappe, kus kĂ”ige esimene ja olulisem (ilma selleta ei toimi midagi!) on andmete hankimine vĂ”i vĂ€ljavĂ”tmine. KĂ”ige sagedamini on andmed mingis vormis kusagil peidus ja need tuleb sealt "vĂ€lja tuua".Â
PĂ€ringukeeled just vĂ”imaldavad neid andmeid vĂ€lja tĂ”mmata! TĂ€na rÀÀgin nendest pĂ€ringukeeltest, mis on mulle kasulikud olnud, ja nĂ€itan, kus ja kuidas â miks on vajalik nende Ă”ppimine.
Kokku on kolm peamist tĂŒĂŒpi pĂ€ringute blokki, mida me selles artiklis kĂ€sitleme:
- "Standardsed" pĂ€ringukeeled â need, mida tavaliselt mĂ”istetakse rÀÀgides pĂ€ringukeeltest, nagu nĂ€iteks relatsiooniline algebra vĂ”i SQL.
- Skripti pÀringukeeled: nÀiteks Pythonis kasutatavad pandas, numpy vÔi shell scripting.
- PĂ€ringukeeled teadmiste graafide ja graafandmebaaside jaoks.
KĂ€esolevas kirjutises esitatud on lihtsalt isiklik kogemus, mis osutus kasulikuks, olukordadega ja "miks see vajalik oli" â igaĂŒks vĂ”ib proovida ette kujutada, kui sarnased olukorrad talle ette vĂ”ivad tulla ning valmistuda neiseks ette, uurides neid keeli enne, kui peab neid (kiireloomuliselt) projektis rakendama vĂ”i ĂŒldse sattuma projekti, kus neid vajatakse.
"Standardsed" pÀringukeeled
Standardsed pÀringukeeled just selles mÔttes, et me mÔtleme tavaliselt nendest, kui rÀÀgime pÀringutest.
Relatsiooniline algebra
Miks on tÀna vajalik relatsiooniline algebra? Selleks, et saada hea arusaam, miks pÀringukeeltes asjad on seadistatud teatud viisil, tuleb mÔista aluspÔhimÔtteid.
Mis on relatsiooniline algebra?
Formaalne mÀÀratlemine on jĂ€rgmine: relatsiooniline algebra â suletud operatsioonide sĂŒsteem suhete ĂŒle relatsioonilises andmemudelis. Inimkeeles öeldes, see on tabelite ĂŒle toimingute sĂŒsteem, mille tulemuseks on alati tabel.
Vaadake kĂ”iki relatsioonilisi toiminguid artiklis Habrast â siin selgitame, miks on vajalik teada ja kus seda kasutatakse.
Miks?
Sa saad aru, millest tegelikult pĂ€ringukeelte keeled koosnevad ja millised toimingud seisavad nende konkreetses pĂ€ringukeeles ĂŒlesannete taga â see annab sageli sĂŒgavamal arusaama, mis ja kuidas pĂ€ringukeeltes töötab.

VĂ”etud artiklid. NĂ€ide toimingust: join, mis ĂŒhendab tabeleid.
Uurimismaterjalid:
. Ăldse, relatsioonilise algebra ja teooria kohta on palju materjale â Coursera, Udacity. Samuti on tohutult palju materjale veebis, sealhulgas hĂ€id . Minu isiklik soovitus: peate relatsioonilist algebra hĂ€sti mĂ”istma â see on pĂ”hialus.
SQL

VÔetud artiklist.
SQL on tegelikult relatsioonilise algebraga seotud rakendus â oluliselt on SQL deklaratiivne! Toimides relatsioonilise algebraga, ĂŒtlete tegelikult, kuidas tuleb arvutada â aga SQL-iga mÀÀrate, mida soovite vĂ€lja vĂ”tta, ja seejĂ€rel genereerib andmebaasihaldussĂŒsteem (tĂ”husad) avaldused relatsioonilise algebraga ( nende ekvivalentsust tuntakse meile) ).

VÔetud artiklist.
Miks?
Relatsioonilised andmebaasid: Oracle, Postgres, SQL Server jne â on endiselt peaaegu igal pool ja on tohutult suur vĂ”imalus, et peate nendega suhtlema, mis tĂ€hendab, et peate kas lugema SQL-i (mis on vĂ€ga tĂ”enĂ€oline) vĂ”i kirjutama seda (ka mitte ebatĂ”enĂ€oline).
Mida lugeda ja uurida
Sama kaudu, mida linkides eespool (relatsioonilise algebraga), on palju materjale, nÀiteks .
Muide, mis on NoSQL?
"Tuleb veel kord rĂ”hutada, et termin "NoSQL" on tĂ€iesti spontaanselt tekkinud ja tal ei ole ĂŒldtunnustatud mÀÀratlust ega teaduslikku asutust selle selja taga." Vastav Habr's.
Inimesed said aru, et tĂ€ielik relatsiooniline mudel ei ole paljude probleemide lahendamiseks vajalik, eriti seal, kus nĂ€iteks on oluline jĂ”udlus ja domineerivad teatud lihtsad pĂ€ringud koos aggregeerimisega â seal on kriitiliselt oluline kiiresti arvestada mÔÔdikuid ja need andmetesse kirjutada, ning enamik relatsioonilise funksioone osutus mitte ainult mitte vajalikuks, vaid ka kahjulikuks â miks normaliseerida midagi, kui see rikub meie jaoks kĂ”ige olulisemat (konkreetse ĂŒlesande jaoks) â jĂ”udlust?
Samuti on sageli vajalikud paindlikud skeemid, mitte fikseeritud matemaatilised skeemid klassikalisest relatsioonilisest mudelist â ja see muudab rakenduste arendamise uskumatult lihtsamaks, kui on kriitiline sĂŒsteem kiiresti kĂ€ivitada ja alustada töötamist, töötades tulemusi â vĂ”i skeem ja salvestatavate andmete tĂŒĂŒbid ei ole nii olulised.
NĂ€iteks loome ekspertsĂŒsteemi ja soovime salvestada teavet teatud domeeni kohta koos mingisuguse metaandmetega â me ei pruugi teada kĂ”iki vĂ€lju ja saame lihtsalt salvestada iga kirje jaoks JSON-i â see annab meile vĂ€ga paindliku keskkonna andmemudeli laiendamiseks ja kiireks iteratsiooniks â seetĂ”ttu oleks sellisel juhul NoSQL isegi eelistatum ja loetavam. NĂ€ide kirjest (ĂŒhest minu projektist, kus NoSQL oli seal, kus seda tĂ”esti vajasime).
{"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}
Lisainfot saab lugeda NoSQL-ist.
Mida Ôppida?
Siin tuleb pigem lihtsalt hĂ€sti analĂŒĂŒsida oma ĂŒlesannet, millised on selle omadused ja millised NoSQL-sĂŒsteemid sobivad sellele kirjeldusele â ja siis hakata seda sĂŒsteemi Ă”ppima.
PĂ€ringuskripti keeled
Esmalt tundub, et mis seondub ĂŒleĂŒldse Pythoniga â see on programmeerimiskeel, mitte pĂ€ringute keel.

- Pandas on tĂ”eliselt mitmekĂŒlgne tööriist andmete teaduses, tohutu hulga andmete teisendamine, agregatsioon ja nii edasi toimub seal.
- Numpy â vektorkalkulatsioonid, maatriksid ja lineaarne algebra on seal.
- Scipy â sisaldab palju matemaatikat, eriti statistikat.
- Jupyter lab â palju uurimisandmete analĂŒĂŒsi sobitub hĂ€sti mĂ€rkmikesse â seda tasub osata.
- Requests â veebi töötlemine.
- Pyspark â vĂ€ga populaarne andmeinseneride seas, tĂ”enĂ€oliselt peate te koos töötama kas selle vĂ”i Sparkiga, lihtsalt nende populaarsuse tĂ”ttu.
- *Selenium â vĂ€ga kasulik andmete kogumiseks veebisaitidelt ja allikatelt, mĂ”nikord on andmeid lihtsalt teisiti vĂ”imatu saada.
Minu peamine soovitus: Ôppige Pythonit!
Pandas
VÔtame nÀiteks jÀrgmise koodi:
import pandas as pd
df = pd.read_csv("data/dataset.csv")
# Arvutame ja nime jÀrgi muudame agregaate
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'}))Sisuliselt nÀeme, et kood jÀrgib klassikalist SQL-mustrit.
SELECT start_station_name, end_station_name, count(trip_duration_seconds) as size, âŠ..
FROM dataset
WHERE trip_type = 'return'
GROUP BY start_station_name, end_station_nameKuid oluline osa â see kood on osa skriptist ja torustikust, tegelikult integreerime pĂ€ringud Python'i torustikku. Selles olukorras pĂ€ringukeel tuleb meile raamatukogudest, nagu Pandas vĂ”i pySpark.
Ăldiselt pySparkis nĂ€eme sarnast tĂŒĂŒpi andmete transformatsiooni pĂ€ringukeele kaudu, nĂ€iteks:
df.filter(df.trip_type = "return")
.groupby("day")
.agg({duration: 'mean'})
.sort()Kus ja mida lugeda
Kuna iseenesest Pythonis leida Ă”ppematerjale. Internetis on tohutult palju Ă”petusi , ja kursusi (ka ise (ja samuti kĂ”ige ). Ăldiselt on siin materjalid suurepĂ€raselt leitavad ja kui peaksin valima ĂŒhe paketi, millele keskenduda â siis oleks see just pandas, muidugi. DS+Python seosest on ka .
Shell pÀringukeelena
Palju andmeanalĂŒĂŒsi ja töötlemise projekte, millega olen tegelenud â need on sisuliselt shell-skriptid, mis kutsuvad esile koodi Pythonis, Java's ja shell-komandeid. SeetĂ”ttu vĂ”ib torustikke bash/zsh/ jne. vaadelda kui mingit kĂ”rgema taseme pĂ€ringut (seal on muidugi vĂ”imalik ka silmusid kasutada, kuid see ei ole tĂŒĂŒpiline DS koodi puhul shelli keeltes), toome lihtsa nĂ€ite â mul oli vaja teha QID mapping Wikidata ja tĂ€islinke vene ja inglise viki jaoks, selleks kirjutasin lihtsalt kĂ€skluste pĂ€ringu bashis ja vĂ€ljastamiseks kasutasin lihtsat Python'i skripti, mille kokku panin nagu nii:
pv "data/latest-all.json.gz" |
unpigz -c |
jq --stream $JQ_QUERY |
python3 scripts/post_process.py "output.csv"
kus
JQ_QUERY = 'select((.[0][1] == "sitelinks" and (.[0][2]=="enwiki" or .[0][2] =="ruwiki") and .[0][3] =="title") or .[0][1] == "id")' See oli sisuliselt kogu torustik, mis lĂ”i vajaliku mappingu, nagu me nĂ€eme, kĂ”ik töötas voogesituse reĆŸiimis:
- pv filepath â annab edusammu ribaga pĂ”hinevalt faili suurusest ja edastab oma sisu edasi
- unpigz -c luges osa arhiivist ja edastas selle jq-le
- jq vĂ”tmega â stream edastas kohe tulemuse ja edastas selle post-protsessorile (nagu ka esimese nĂ€ite puhul) Python'is
- post-protsessor on seespool lihtne olekuma, mis vormindas vĂ€ljundiÂ
Seega keeruline torustik, mis töötab voogesituse reĆŸiimis suurte andmemahtude juures (0.5TB), ilma oluliste ressurssideta ja loodud lihtsalt kerge torustiku ja paari tööriistaga.
Veel oluline nÔuanne: osake hÀsti ja tÔhusalt töötama terminalis ning kirjutama bash/zsh/jne.
Kus seda vaja lĂ€heb? Praktiliselt igal pool â Ă”ppematerjale on veebis samuti ĂLI palju. Eriti, siin on minu eelmine artikkel.
R skriptimine
JĂ€llegi vĂ”ib lugeja hĂŒĂŒatada â noh, see on ju terve programmeerimiskeel! Ja tal on kindlasti Ă”igus. Siiski olen enamasti kokku puutunud R-iga kontekstis, kus see sarnanes pigem pĂ€ringukeeles.
R on statistikaarvutuste keskkond ja statistilise arvutamise ja visualiseerimise keeles (vastavalt ).

VÔetud . Muide, soovitan, hea materjal.
Miks peab andeteadlane R-i teadma? VĂ€hemalt seetĂ”ttu, et on tohutult inimesi, kes ei vasta IT-le ja teevad R-is andmeanalĂŒĂŒsi. Olen seda kohanud jĂ€rgmistes kohtades:
- Farmatseutiline sektor.
- Bioloogid.
- FinantssĂŒsteem.
- Inimesed, kellel on rangelt matemaatiline haridus ja kes tegelevad statistikaga.
- Spetsialiseeritud statistilised mudelid ja masinÔppe mudelid (mida sageli leidub ainult autori versioonis R-pakendina).
Miks on see tegelikult pĂ€ringukeel? Nagu see tihti esineb â see on tegelikult pĂ€ring mudeli loomiseks, sealhulgas andmete lugemine ja pĂ€ringu (mudeli) parameetrite fikseerimine ning andmete visualiseerimine sellistes pakettides nagu ggplot2 â see on ka pĂ€ringu kirjutamise vorm.
Visualiseerimiseks pÀringud
ggplot(data = beav,
aes(x = id, y = temp,
group = activ, color = activ)) +
geom_line() +
geom_point() +
scale_color_manual(values = c("red", "blue"))Ăldiselt on paljusid R-i ideid ĂŒle viidud Pythonis olevatesse pakettidesse, nagu pandas, numpy vĂ”i scipy, nagu andmeraamid ja andmete vektoreerimine â seega tunduvad paljud asjad R-is teile tuttavad ja mugavad.
Ăppematerjale on palju, nĂ€iteks .
Teadmiste graafid (Knowledge graph)
Siin on mul veidi ebatavaline kogemus, sest pean ĂŒsna sageli töötama teadmiste graafide ja nende pĂ€ringukeeltega. Seega kĂ€ime lĂ”petuseks kiiresti lĂ€bi pĂ”hialused, kuna see osa on veidi eksootilisem.
Klassikalistes relatsioonilistes andmebaasides on meil fikseeritud skeem â siin on skeem aga paindlik, iga predikaat on tegelikult "veerg" ja veel rohkem.
Kujutage ette, et modelleerisite inimest ja soovite kirjeldada olulisi aspekte, nÀiteks vÔtame konkreetselt Douglas Adamsi, lÀhtudes jÀrgmisest kirjeldusest.

Kui kasutaksime relatsioonilisi andmeid, peaksime looma tohutu tabeli vĂ”i tabelid tohutu arvu veergudega, kus enamik oleks NULL vĂ”i tĂ€idetud mingite vaikimisi vale vÀÀrtustega, nĂ€iteks ei ole ilmselt paljude meist sissekannet riiklikus Korea raamatukogus â muidugi vĂ”iksime need eraldi tabelitesse viia, kuid see oleks lĂ”ppkokkuvĂ”ttes katse modelleerida paindlik loogilise skeemiga predikaate, kasutades fikseeritud relatsioonilisi.

Kujutage seega ette, et kÔik andmed on salvestatud graafina vÔi binaarsete ja unaarsete loogiliste vÀljenditena.
Kus te sellise asjaga kokku pÔrkate? Esiteks, töötades , samuti kÔikide graafide andmebaaside vÔi seotud andmete puhul.
Edasi tulevad peamised pÀringu keeled, millega olen kokku puutunud ja millega olen pidanud töötama.
SPARQL
Wiki:
SPARQL ( alates SPARQL Protocol and RDF Query Language) â , nende pĂ€ringute ja vastuste edastamiseks. SPARQL on W3C konsortsiumi soovitus , samuti ja ĂŒks tehnoloogiatest Tegelikult on see pĂ€ringukeel loogiliste unaarsete ja binaarsete predikaatide jaoks. Te lihtsalt mÀÀrate tinglikult, mis on loogilises vĂ€ljendis fikseeritud ja mis mitte (vĂ€ga lihtsustatult). .
object, predicate, subject
â ja pĂ€ring valib vajalikud kolmikud toodud piirangute pĂ”hjal, mis tĂ€hendab: leida selline X, et p_55(X, q_33) on tĂ”ene â kus loomulikult p_55 on mingi suhe ID 55, ja q_33 on objekt ID 33 (see on kogu jutt, samuti jĂ€ttes kĂ”rvale kĂ”ik ĂŒmbritsevad detailid). Andmete esitamise nĂ€ide: Pildid ja nĂ€ide maadest on siin
PÔhipÀringu nÀide

Tegelikult tahame leida muutuja ?country vÀÀrtust, nii et predikaadi .
member_of on tÔene, et member_of(?country,q458), ja q458 on Euroopa Liidu ID.

Reaalse SPARQL pÀringu nÀide Pythonis:
Reeglina olen ma pidanud lugema SPARQL-i, mitte kirjutama â sellistes olukordades on tĂ”enĂ€oliselt kasulik osata keelt vĂ€hemalt pĂ”hiliselt, et mĂ”ista, kuidas andmeid tĂ€pselt vĂ€lja tĂ”mmatakse.
Internetis on palju Ôppematerjale: nÀiteks siin on

Reeglina olen pidanud lugema SPARQL-i, mitte kirjutama â sellises olukorras on tĂ”enĂ€oliselt kasulik osata keelt vĂ€hemalt baas-toe tasemel, et mĂ”ista, kuidas andmeid tĂ€pselt ekstraktitakse.Â
Veebis on palju Ôppematerjale: nÀiteks, siin on ja . Tavaliselt otsin spetsiifilisi konstruktsioone ja nÀiteid Googlest ning see on seni piisav.
Loogilised pÀringuvahendid
Lisainfot teema kohta leiate minu artiklist . Siin kĂ€sitleme vaid lĂŒhidalt, miks loogilised pĂ€ringuvahendid sobivad pĂ€ringute kirjutamiseks. Sisuliselt on RDF lihtsalt loogiliste vĂ€idete kogum, nĂ€iteks p(X) ja h(X,Y), ja loogiline pĂ€ring on sellise vormiga:
output(X) :- country(X), member_of(X,âEUâ).
Siin loome uue predikaadi output/1 (/1 â tĂ€hendab ĂŒhemĂ”ttelist), tingimusel, et X jaoks kehtib, et country(X) â st, X on riik ja samuti member_of(X,âEUâ).
Seega on meil andmed ja reeglid sellisel puhul esindatud tĂ€ielikult ĂŒhtmoodi, mis vĂ”imaldab ĂŒlesannete modelleerimist vĂ€ga lihtsalt ja hĂ€sti.
Kus oleme tööstuses kokku puutunud: suur projekt ettevĂ”ttega, kes kirjutab sellise keele pĂ€ringuid, samuti praeguses projektis sĂŒsteemi tuumas â nĂ€iliselt ĂŒsna eksootiline, kuid aeg-ajalt esineb.
Loogilisel keelel pÔhinev koodifragmendi nÀide, mis töötleb wikidata:

Materjalid: tutvustan siin paar linki tĂ€napĂ€eva loogilisele programmeerimiskeelele Answer Set Programming â soovitan just seda uurida:
Allikas: habr.com
