Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave
Unë po ju them nga përvoja personale se çfarë ishte e dobishme ku dhe kur. Është një pasqyrë dhe tezë, në mënyrë që të jetë e qartë se çfarë dhe ku mund të gërmoni më tej - por këtu kam përvojë ekskluzivisht subjektive personale, mbase gjithçka është krejtësisht e ndryshme për ju.

Pse është e rëndësishme të njihni dhe të jeni në gjendje të përdorni gjuhët e pyetjeve? Në thelb, Shkenca e të Dhënave ka disa faza të rëndësishme të punës, dhe e para dhe më e rëndësishmja (pa të, sigurisht që asgjë nuk do të funksionojë!) është marrja ose nxjerrja e të dhënave. Më shpesh, të dhënat janë ulur diku në një formë dhe duhet "të merren" prej andej. 

Gjuhët e pyetjeve ju lejojnë të nxirrni pikërisht këto të dhëna! Dhe sot do t'ju tregoj për ato gjuhë pyetjesh që kanë qenë të dobishme për mua dhe do t'ju tregoj dhe do t'ju tregoj se ku dhe si saktësisht - pse është e nevojshme për të studiuar.

Do të ketë tre blloqe kryesore të llojeve të pyetjeve të të dhënave, të cilat do t'i diskutojmë në këtë artikull:

  • Gjuhët "standarde" të pyetjeve janë ato që zakonisht kuptohet kur flitet për një gjuhë pyetëse, të tilla si algjebra relacionale ose SQL.
  • Gjuhët e pyetjeve të skriptimit: për shembull, Python gjëra panda, skriptim numpy ose guaskë.
  • Pyetni gjuhët për grafikët e njohurive dhe bazat e të dhënave të grafikëve.

Gjithçka e shkruar këtu është thjesht një përvojë personale, ajo që ishte e dobishme, me një përshkrim të situatave dhe "pse ishte e nevojshme" - të gjithë mund të provojnë se si situata të ngjashme mund të vijnë në rrugën tuaj dhe të përpiqen të përgatiten për to paraprakisht duke kuptuar këto gjuhë ​Para se të duhet të aplikoni (urgjentisht) në një projekt apo edhe të shkoni në një projekt ku ato janë të nevojshme.

Gjuhët "standarde" të pyetjeve

Gjuhët standarde të pyetjeve janë pikërisht në kuptimin që ne zakonisht mendojmë për to kur flasim për pyetje.

Algjebër relacionale

Pse është e nevojshme algjebra relacionale sot? Në mënyrë që të keni një kuptim të mirë se pse gjuhët e pyetjeve janë të strukturuara në një mënyrë të caktuar dhe t'i përdorni ato me vetëdije, duhet të kuptoni thelbin që qëndron në themel të tyre.

Çfarë është algjebra relacionale?

Përkufizimi zyrtar është si më poshtë: algjebra relacionale është një sistem i mbyllur operacionesh mbi marrëdhëniet në një model të dhënash relacionale. Për ta thënë pak më njerëzore, ky është një sistem operacionesh në tabela të tilla që rezultati të jetë gjithmonë një tabelë.

Shihni të gjitha operacionet relacionale në kjo artikull nga Habr - këtu ne përshkruajmë pse duhet të dini dhe ku ju vjen në ndihmë.

Pse?

Fillimi për të kuptuar se për çfarë bëhet fjalë për gjuhët e pyetjeve dhe cilat operacione fshihen pas shprehjeve në gjuhët specifike të pyetjeve shpesh jep një kuptim më të thellë të asaj që funksionon në gjuhët e pyetjeve dhe si.

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave
Marre nga kjo artikuj. Një shembull i një operacioni: bashkim, i cili bashkon tabelat.

Materialet për studim:

Kurs i mirë hyrës nga Stanford. Në përgjithësi, ka shumë materiale mbi algjebrën dhe teorinë relacionale - Coursera, Udacity. Ekziston gjithashtu një sasi e madhe materialesh në internet, duke përfshirë të mirën kurse akademike. Këshilla ime personale: ju duhet të kuptoni shumë mirë algjebrën relacionale - kjo është baza e bazave.

SQL

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave
Marre nga kjo artikull.

SQL është në thelb një zbatim i algjebrës relacionale - me një paralajmërim të rëndësishëm, SQL është deklarative! Kjo do të thotë, kur shkruani një pyetje në gjuhën e algjebrës relacionale, ju në të vërtetë thoni se si të llogaritni - por me SQL ju specifikoni atë që dëshironi të nxirrni, dhe më pas DBMS tashmë gjeneron shprehje (efektive) në gjuhën e algjebrës relacionale (e tyre ekuivalenca është e njohur tek ne si Teorema e Codd-it).

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave
Marre nga kjo artikull.

Pse?

DBMS-të relacionale: Oracle, Postgres, SQL Server, etj janë ende pothuajse kudo dhe ka një shans jashtëzakonisht të lartë që do t'ju duhet të ndërveproni me ta, që do të thotë se ose do të duhet të lexoni SQL (që ka shumë mundësi) ose ta shkruani atë ( gjithashtu nuk ka gjasa).

Çfarë duhet lexuar dhe studiuar

Sipas të njëjtave lidhjet e mësipërme (rreth algjebrës relacionale), ka një sasi të pabesueshme materiali, për shembull, этот.

Nga rruga, çfarë është NoSQL?

“Ia vlen të theksohet edhe një herë se termi “NoSQL” ka një origjinë absolutisht spontane dhe nuk ka asnjë përkufizim të pranuar përgjithësisht apo institucion shkencor pas tij.” Përkatëse artikull në Habr.

Në fakt, njerëzit kuptuan se një model i plotë relacional nuk nevojitet për të zgjidhur shumë probleme, veçanërisht për ata ku, për shembull, performanca është kritike dhe dominojnë disa pyetje të thjeshta me grumbullim - ku është kritike të llogariten shpejt metrikat dhe t'i shkruajmë ato në baza e të dhënave, dhe shumica e veçorive janë relacionale doli të jenë jo vetëm të panevojshme, por edhe të dëmshme - pse të normalizojmë diçka nëse do të na prishë gjënë më të rëndësishme (për ndonjë detyrë specifike) - produktivitetin?

Gjithashtu, skemat fleksibël shpesh nevojiten në vend të skemave fikse matematikore të modelit klasik relacional - dhe kjo thjeshton jashtëzakonisht zhvillimin e aplikacionit kur është kritike për të vendosur sistemin dhe për të filluar punën shpejt, duke përpunuar rezultatet - ose skemën dhe llojet e të dhënave të ruajtura nuk janë aq të rëndësishme.

Për shembull, ne po krijojmë një sistem ekspert dhe duam të ruajmë informacione në një domen specifik së bashku me disa informacione meta - mund të mos i dimë të gjitha fushat dhe thjesht të ruajmë JSON për çdo rekord - kjo na jep një mjedis shumë fleksibël për zgjerimin e të dhënave model dhe iterues i shpejtë - kështu që në këtë rast, NoSQL do të jetë edhe më i preferueshëm dhe më i lexueshëm. Shembull hyrje (nga një nga projektet e mia ku NoSQL ishte pikërisht aty ku duhej).

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

Më shumë detaje mund të lexohen këtu rreth NoSQL.

Çfarë të studiojmë?

Këtu, përkundrazi, ju vetëm duhet të analizoni tërësisht detyrën tuaj, cilat veçori ka dhe cilat sisteme NoSQL janë të disponueshme që do t'i përshtateshin këtij përshkrimi - dhe më pas të filloni të studioni këtë sistem.

Scripting Query Gjuhët

Në fillim, duket se çfarë lidhje ka Python me të në përgjithësi - është një gjuhë programimi dhe jo fare për pyetje.

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave

  • Pandas është fjalë për fjalë një thikë e ushtrisë zvicerane e shkencës së të dhënave; një sasi e madhe e transformimit, grumbullimit të të dhënave, etj. ndodh në të.
  • Numpy - llogaritjet vektoriale, matricat dhe algjebra lineare atje.
  • Scipy - ka shumë matematikë në këtë paketë, veçanërisht statistika.
  • Laboratori Jupyter - shumë analiza të të dhënave eksploruese përshtaten mirë në laptopë - të dobishme për t'u ditur.
  • Kërkesat - puna me rrjetin.
  • Pyspark është shumë i popullarizuar në mesin e inxhinierëve të të dhënave, ka shumë të ngjarë që do t'ju duhet të ndërveproni me këtë ose Spark, thjesht për shkak të popullaritetit të tyre.
  • *Seleni - shumë i dobishëm për mbledhjen e të dhënave nga faqet dhe burimet, ndonjëherë thjesht nuk ka asnjë mënyrë tjetër për të marrë të dhënat.

Këshilla ime kryesore: mësoni Python!

Pandas

Le të marrim kodin e mëposhtëm si shembull:

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

Në thelb, ne shohim se kodi përshtatet në modelin klasik SQL.

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

Por pjesa e rëndësishme është se ky kod është pjesë e skriptit dhe tubacionit; në fakt, ne po fusim pyetje në tubacionin Python. Në këtë situatë, gjuha e pyetjes na vjen nga bibliotekat si Pandas ose pySpark.

Në përgjithësi, në pySpark ne shohim një lloj të ngjashëm të transformimit të të dhënave përmes një gjuhe pyetjesh në frymën e:

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

Ku dhe çfarë të lexoni

Në vetë Python në përgjithësi nuk është problem gjeni materiale për të studiuar. Ka një numër të madh të mësimeve në internet pandas, pySpark dhe kurse mbi Shkëndijë (dhe gjithashtu në vetvete DS). Në përgjithësi, përmbajtja këtu është e shkëlqyeshme për google dhe nëse do të më duhej të zgjidhja një paketë për t'u fokusuar, sigurisht që do të ishin pandat. Edhe në lidhje me kombinimin e materialeve DS+Python shumë.

Shell si gjuhë pyetëse

Shumë projekte të përpunimit dhe analizës së të dhënave me të cilat kam punuar janë, në fakt, skriptet shell që thërrasin kodin në Python, Java dhe vetë komandat e guaskës. Prandaj, në përgjithësi, ju mund t'i konsideroni tubacionet në bash/zsh/etj si një lloj pyetjeje të nivelit të lartë (natyrisht, mund të vendosni sythe atje, por kjo nuk është tipike për kodin DS në gjuhët e guaskës), le të japim një shembull i thjeshtë - më duhej të bëja një hartë QID të wiki të dhënave dhe lidhjet e plota me wiki-t ruse dhe angleze, për këtë shkrova një kërkesë të thjeshtë nga komandat në bash dhe për daljen shkrova një skrip të thjeshtë në Python, të cilin unë bashkohen si kjo:

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

ku

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

Ky ishte, në fakt, i gjithë tubacioni që krijoi hartën e kërkuar; siç e shohim, gjithçka funksionoi në modalitetin e rrjedhës:

  • shtegu i skedarit pv - jep një shirit progresi bazuar në madhësinë e skedarit dhe kalon përmbajtjen e tij në vazhdim
  • unpigz -c lexoi një pjesë të arkivit dhe ia dha jq
  • jq me key - stream prodhoi menjëherë rezultatin dhe ia kaloi atë postprocesorit (njëlloj si me shembullin e parë) në Python
  • Brenda, postprocesori ishte një makinë e thjeshtë shtetërore që formatonte daljen 

Në total, një tubacion kompleks që punon në modalitetin e rrjedhës në të dhëna të mëdha (0.5 TB), pa burime të konsiderueshme dhe i bërë nga një tubacion i thjeshtë dhe disa mjete.

Një këshillë tjetër e rëndësishme: të jeni në gjendje të punoni mirë dhe në mënyrë efektive në terminal dhe të shkruani bash/zsh/etj.

Ku do të jetë e dobishme? Po, pothuajse kudo - përsëri, ka shumë materiale për të studiuar në internet. Në veçanti, këtu kjo artikulli im i mëparshëm.

R skriptimi

Përsëri, lexuesi mund të bërtasë - mirë, kjo është një gjuhë e tërë programimi! Dhe sigurisht, ai do të ketë të drejtë. Megjithatë, unë zakonisht e hasja R në një kontekst të tillë që, në fakt, ishte shumë i ngjashëm me një gjuhë pyetëse.

R është një mjedis dhe gjuhë llogaritëse statistikore për llogaritjen dhe vizualizimin statik (sipas kjo).

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave
marrë prandaj. Meqë ra fjala, e rekomandoj, material i mirë.

Pse një shkencëtar i të dhënave duhet të dijë R? Të paktën, sepse ekziston një shtresë e madhe njerëzish jo-IT që analizojnë të dhënat në R. Unë i hasa në vendet e mëposhtme:

  • Sektori farmaceutik.
  • Biologët.
  • Sektori financiar.
  • Njerëz me një edukim thjesht matematikor që merren me statistika.
  • Modele të specializuara statistikore dhe modele të mësimit të makinerive (të cilat shpesh mund të gjenden vetëm në versionin e autorit si një paketë R).

Pse është në të vërtetë një gjuhë pyetëse? Në formën në të cilën gjendet shpesh, në fakt është një kërkesë për të krijuar një model, duke përfshirë leximin e të dhënave dhe rregullimin e parametrave të pyetjes (modelit), si dhe vizualizimin e të dhënave në paketa të tilla si ggplot2 - kjo është gjithashtu një formë e shkrimit të pyetjeve. .

Shembuj të pyetjeve për vizualizim

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

Në përgjithësi, shumë ide nga R kanë migruar në paketa python si panda, numpy ose scipy, si kornizat e të dhënave dhe vektorizimi i të dhënave - kështu që në përgjithësi shumë gjëra në R do t'ju duken të njohura dhe të përshtatshme.

Ka shumë burime për të studiuar, për shembull, этот.

Grafikët e njohurive

Këtu kam një përvojë paksa të pazakontë, sepse shpesh më duhet të punoj me grafikët e njohurive dhe gjuhët e pyetjeve për grafikët. Prandaj, le të kalojmë shkurtimisht mbi bazat, pasi kjo pjesë është pak më ekzotike.

Në bazat e të dhënave relacionale klasike kemi një skemë fikse, por këtu skema është fleksibël, çdo kallëzues është në të vërtetë një "kolona" dhe akoma më shumë.

Imagjinoni që po modeloni një person dhe dëshironi të përshkruani gjërat kryesore, për shembull, le të marrim një person specifik, Douglas Adams, dhe ta përdorim këtë përshkrim si bazë.

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave
www.wikidata.org/wiki/Q42

Nëse do të përdornim një bazë të dhënash relacionale, do të duhej të krijonim një tabelë ose tabela të mëdha me një numër të madh kolonash, shumica e të cilave do të ishin NULL ose të mbushura me një vlerë të paracaktuar False, për shembull, nuk ka gjasa që shumë prej nesh të kenë një hyrje në bibliotekën kombëtare të Koresë - sigurisht, ne mund t'i vendosim ato në tabela të veçanta, por në fund të fundit kjo do të ishte një përpjekje për të modeluar një qark logjik fleksibël me kallëzues duke përdorur një relacional fiks.

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave
Pra, imagjinoni që të gjitha të dhënat të ruhen si një grafik ose si shprehje binar dhe unare boolean.

Ku mund ta hasni edhe këtë? Së pari, duke punuar me wiki të dhënash, dhe me çdo bazë të dhënash grafike ose të dhëna të lidhura.

Më poshtë janë gjuhët kryesore të pyetjeve me të cilat kam përdorur dhe punuar.

SPARQL

Wiki:
SPARQL (akronim rekurziv nga Eng. Protokolli SPARQL dhe gjuha e pyetjeve RDF) - gjuha e pyetjes së të dhënave, e përfaqësuar nga modeli RDFDhe protokolli për të transmetuar këto kërkesa dhe për t'iu përgjigjur atyre. SPARQL është një rekomandim Konsorciumi W3C dhe një nga teknologjitë rrjeti semantik.

Por në realitet është një gjuhë pyetëse për kallëzuesit logjikë unar dhe binar. Ju thjesht po specifikoni me kusht se çfarë është fikse në një shprehje Boolean dhe çfarë jo (shumë e thjeshtuar).

Vetë baza RDF (Resource Description Framework), mbi të cilën ekzekutohen pyetjet SPARQL, është e trefishtë object, predicate, subject - dhe pyetja zgjedh trefishat e kërkuara sipas kufizimeve të specifikuara në frymë: gjeni një X të tillë që p_55(X, q_33) të jetë e vërtetë - ku, natyrisht, p_55 është një lloj lidhjeje me ID 55, dhe q_33 është një objekti me ID 33 (këtu dhe i gjithë historia, duke lënë sërish gjithfarë detajesh).

Shembull i paraqitjes së të dhënave:

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave
Foto dhe shembull me vendet këtu prandaj.

Shembull i pyetjes bazë

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave

Në fakt, ne duam të gjejmë vlerën e ndryshores ?country të tillë që për kallëzuesin
anëtar_of, është e vërtetë që anëtari_of(?country,q458) dhe q458 është ID e Bashkimit Europian.

Një shembull i një pyetjeje të vërtetë SPARQL brenda motorit python:

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave

Në mënyrë tipike, më është dashur të lexoj SPARQL në vend që ta shkruaj - në atë situatë, ka të ngjarë të jetë një aftësi e dobishme për të kuptuar gjuhën të paktën në një nivel bazë për të kuptuar saktësisht se si merren të dhënat. 

Ka shumë materiale për të studiuar në internet: për shembull, këtu этот и этот. Unë zakonisht kërkoj në google modele dhe shembuj specifikë dhe kjo është e mjaftueshme për momentin.

Gjuhët e pyetjeve logjike

Ju mund të lexoni më shumë për këtë temë në artikullin tim këtu. Dhe këtu, ne do të shqyrtojmë vetëm shkurtimisht pse gjuhët logjike janë të përshtatshme për të shkruar pyetje. Në thelb, RDF është vetëm një grup deklaratash logjike të formës p(X) dhe h(X,Y), dhe një pyetje logjike ka formën e mëposhtme:

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

Këtu po flasim për krijimin e një prodhimi të ri kallëzues/1 (/1 do të thotë unary), me kusht që për X të jetë e vërtetë që vendi (X) - d.m.th., X është një vend dhe gjithashtu anëtar_of (X,"EU ").

Domethënë, në këtë rast, si të dhënat ashtu edhe rregullat paraqiten në të njëjtën mënyrë, gjë që na lejon të modelojmë problemet shumë lehtë dhe mirë.

Ku jeni takuar në industri?: një projekt i tërë i madh me një kompani që shkruan pyetje në një gjuhë të tillë, si dhe në projektin aktual në thelbin e sistemit - do të duket se kjo është një gjë mjaft ekzotike, por ndonjëherë ndodh.

Një shembull i një fragmenti kodi në një wiki të dhëna të përpunimit të gjuhës logjike:

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave

Materialet: Unë do të jap këtu disa lidhje me gjuhën moderne të programimit logjik Programimi i grupeve të përgjigjeve - Unë rekomandoj ta studioni atë:

Shënimet e shkencëtarit të të dhënave: Një rishikim i personalizuar i gjuhëve të pyetjeve të të dhënave

Burimi: www.habr.com

Shto një koment