Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data
Qed ngħidlek mill-esperjenza personali x’kien utli fejn u meta. Hija ħarsa ġenerali u teżi, sabiex ikun ċar x'u fejn tista 'tħaffer aktar - imma hawn għandi esperjenza personali esklussivament suġġettiva, forsi kollox huwa kompletament differenti għalik.

Għaliex huwa importanti li tkun taf u tkun kapaċi tuża l-lingwi tal-mistoqsijiet? Fil-qalba tagħha, ix-Xjenza tad-Data għandha bosta stadji importanti ta 'xogħol, u l-ewwel u l-aktar importanti (mingħajrha, ċertament xejn mhu se jaħdem!) Huwa l-kisba jew l-estrazzjoni tad-dejta. Ħafna drabi, id-data tkun seduta x'imkien f'xi forma u jeħtieġ li "tiġi rkuprata" minn hemm. 

Il-lingwi tal-mistoqsijiet jippermettulek estratt din id-dejta stess! U llum se ngħidlek dwar dawk il-lingwi ta 'mistoqsijiet li kienu utli għalija u ngħidlek u nurik fejn u kif eżattament - għaliex huwa meħtieġ li tistudja.

Se jkun hemm tliet blokki ewlenin ta 'tipi ta' mistoqsijiet tad-dejta, li se niddiskutu f'dan l-artikolu:

  • Il-lingwi tal-mistoqsijiet "standard" huma dak li jinftiehem b'mod komuni meta wieħed jitkellem dwar lingwa tal-mistoqsijiet, bħall-alġebra relazzjonali jew SQL.
  • Lingwi ta' query ta' scripting: pereżempju, Python things pandas, numpy jew shell scripting.
  • Mistoqsija lingwi għal graffs tal-għarfien u databases tal-grafiċi.

Dak kollu miktub hawnhekk huwa biss esperjenza personali, dak li kien utli, b'deskrizzjoni ta 'sitwazzjonijiet u "għaliex kien meħtieġ" - kulħadd jista' jipprova kif sitwazzjonijiet simili jistgħu jiġu triqtek u jipprova jipprepara għalihom minn qabel billi jifhem dawn il-lingwi ​qabel trid tapplika (b'mod urġenti) fuq proġett jew saħansitra tasal għal proġett fejn huma meħtieġa.

Lingwi ta' mistoqsijiet "Standard".

Il-lingwi standard tal-mistoqsijiet huma preċiżament fis-sens li normalment naħsbu dwarhom meta nitkellmu dwar il-mistoqsijiet.

Alġebra relazzjonali

Għaliex hija meħtieġa l-alġebra relazzjonali llum? Sabiex ikollok fehim tajjeb ta 'għaliex il-lingwi tal-mistoqsijiet huma strutturati b'ċertu mod u tużahom b'mod konxju, trid tifhem il-qalba sottostanti tagħhom.

X'inhi l-alġebra relazzjonali?

Id-definizzjoni formali hija kif ġej: alġebra relazzjonali hija sistema magħluqa ta 'operazzjonijiet fuq relazzjonijiet f'mudell ta' data relazzjonali. Biex tpoġġiha ftit aktar umanament, din hija sistema ta 'operazzjonijiet fuq tabelli b'tali mod li r-riżultat ikun dejjem tabella.

Ara l-operazzjonijiet relazzjonali kollha fi dan artiklu minn Habr - hawnhekk niddeskrivu għaliex trid tkun taf u fejn tiġi utli.

Għaliex?

Li tibda tifhem x'inhuma l-lingwi ta' mistoqsija u liema operazzjonijiet hemm wara espressjonijiet f'lingwi ta' mistoqsija speċifiċi ħafna drabi tagħti fehim aktar profond ta 'x'jaħdem fil-lingwi ta' mistoqsija u kif.

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data
Meħuda minn dan artikoli. Eżempju ta' operazzjoni: join, li tgħaqqad it-tabelli.

Materjali għall-istudju:

Kors introduttorju tajjeb minn Stanford. B'mod ġenerali, hemm ħafna materjali dwar l-alġebra relazzjonali u t-teorija - Coursera, Udacity. Hemm ukoll ammont kbir ta’ materjal onlajn, inkluż tajjeb korsijiet akkademiċi. Il-parir personali tiegħi: trid tifhem l-alġebra relazzjonali tajjeb ħafna - din hija l-bażi tal-baŜi.

SQL

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data
Meħuda minn dan oġġetti.

L-SQL huwa essenzjalment implimentazzjoni tal-alġebra relazzjonali - b'twissija importanti, SQL huwa dikjarattiv! Jiġifieri, meta tikteb mistoqsija fil-lingwa tal-alġebra relazzjonali, fil-fatt tgħid kif tikkalkula - iżda bl-SQL inti tispeċifika dak li trid estratt, u mbagħad id-DBMS diġà jiġġenera espressjonijiet (effettivi) fil-lingwa tal-alġebra relazzjonali (tagħhom ekwivalenza hija magħrufa lilna bħala Teorema ta' Codd).

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data
Meħuda minn dan oġġetti.

Għaliex?

DBMSs Relazzjonali: Oracle, Postgres, SQL Server, eċċ għadhom prattikament kullimkien u hemm ċans oerhört għoli li jkollok jinteraġixxu magħhom, li jfisser li inti jew ikollok taqra SQL (li huwa probabbli ħafna) jew tiktebha ( mhux probabbli lanqas).

X'għandek taqra u tistudja

Skont l-istess links ta 'hawn fuq (dwar l-alġebra relazzjonali), hemm ammont inkredibbli ta' materjal, pereżempju, dan.

Mill-mod, x'inhu NoSQL?

"Ta 'min jenfasizza għal darb'oħra li t-terminu "NoSQL" għandu oriġini assolutament spontanja u m'għandu l-ebda definizzjoni ġeneralment aċċettata jew istituzzjoni xjentifika warajh." Jikkorrispondi artikolu fuq Habr.

Fil-fatt, in-nies indunaw li mudell relazzjonali sħiħ mhuwiex meħtieġ biex isolvi ħafna problemi, speċjalment għal dawk fejn, pereżempju, il-prestazzjoni hija kritika u jiddominaw ċerti mistoqsijiet sempliċi b'aggregazzjoni - fejn huwa kritiku li tikkalkula malajr il-metriċi u tiktebhom lill- database, u l-biċċa l-kbira tal-karatteristiċi huma relazzjonali irriżultaw li mhux biss mhux meħtieġa, iżda wkoll ta 'ħsara - għaliex jinnormalizzaw xi ħaġa jekk se jħassru l-aktar ħaġa importanti għalina (għal xi kompitu speċifiku) - produttività?

Ukoll, skemi flessibbli ħafna drabi huma meħtieġa minflok l-iskemi matematiċi fissi tal-mudell relazzjonali klassiku - u dan jissimplifika b'mod oerhört l-iżvilupp tal-applikazzjoni meta jkun kritiku li tintuża s-sistema u tibda taħdem malajr, tipproċessa r-riżultati - jew l-iskema u t-tipi ta 'dejta maħżuna mhumiex daqshekk importanti.

Pereżempju, qed noħolqu sistema esperta u rridu naħżnu informazzjoni fuq dominju speċifiku flimkien ma 'xi meta informazzjoni - nistgħu ma nkunux nafu l-oqsma kollha u sempliċement naħżnu JSON għal kull rekord - dan jagħtina ambjent flessibbli ħafna għall-espansjoni tad-dejta mudell u iterazzjoni malajr - għalhekk f'dan il-każ, NoSQL se jkun saħansitra preferibbli u aktar jinqara. Eżempju tad-dħul (minn wieħed mill-proġetti tiegħi fejn NoSQL kien proprju fejn kien meħtieġ).

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

Tista' taqra aktar hawn dwar NoSQL.

X'għandek tistudja?

Hawnhekk, pjuttost, għandek bżonn biss tanalizza bir-reqqa l-kompitu tiegħek, liema proprjetajiet għandha u liema sistemi NoSQL huma disponibbli li jaqblu ma 'din id-deskrizzjoni - u mbagħad tibda tistudja din is-sistema.

Lingwi ta' Mistoqsija ta' Scripting

Għall-ewwel, jidher, x'għandu x'jaqsam miegħu Python b'mod ġenerali - hija lingwa ta 'programmar, u xejn dwar mistoqsijiet.

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data

  • Pandas hija litteralment sikkina tal-Armata Żvizzera tax-Xjenza tad-Data; fiha sseħħ ammont kbir ta 'trasformazzjoni tad-dejta, aggregazzjoni, eċċ.
  • Numpy - kalkoli tal-vettur, matriċi u alġebra lineari hemmhekk.
  • Scipy - hemm ħafna matematika f'dan il-pakkett, speċjalment stats.
  • Jupyter lab - ħafna analiżi tad-dejta esploratorja tidħol sew fil-laptops - utli li tkun taf.
  • Talbiet - ħidma man-netwerk.
  • Pyspark huwa popolari ħafna fost l-inġiniera tad-dejta, x'aktarx ikollok jinteraġixxi ma 'dan jew Spark, sempliċement minħabba l-popolarità tagħhom.
  • *Selenju - utli ħafna għall-ġbir tad-dejta minn siti u riżorsi, xi kultant sempliċement ma jkun hemm l-ebda mod ieħor biex tinkiseb id-dejta.

Il-parir ewlieni tiegħi: titgħallem Python!

pandas

Ejja nieħdu l-kodiċi li ġej bħala eżempju:

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

Essenzjalment, naraw li l-kodiċi jidħol fil-mudell SQL klassiku.

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

Iżda l-parti importanti hija li dan il-kodiċi huwa parti mill-iskript u l-pipeline; fil-fatt, qed indaħħlu mistoqsijiet fil-pipeline Python. F'din is-sitwazzjoni, il-lingwa tal-mistoqsija tiġi għandna minn libreriji bħal Pandas jew pySpark.

B'mod ġenerali, f'pySpark naraw tip simili ta' trasformazzjoni tad-dejta permezz ta' lingwa ta' mistoqsija fl-ispirtu ta':

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

Fejn u x'taqra

Fuq Python innifsu b'mod ġenerali mhux problema issib materjali biex tistudja. Hemm numru kbir ta 'tutorials online panda, pySpark u korsijiet fuq Spark (u wkoll minnu nnifsu DS). B'mod ġenerali, il-kontenut hawnhekk huwa tajjeb ħafna biex wieħed ifittex fuq Google, u kieku kelli nagħżel pakkett wieħed biex niffoka fuqu, ikun il-pandas, ovvjament. Rigward il-kombinazzjoni ta 'materjali DS + Python ukoll ħafna.

Shell bħala lingwa ta' mistoqsija

Pjuttost ftit proġetti ta 'proċessar u analiżi tad-dejta li ħdimt magħhom huma, fil-fatt, skripts tal-qoxra li jsejħu kodiċi f'Python, Java, u l-kmandi tal-qoxra nfushom. Għalhekk, b'mod ġenerali, tista 'tikkunsidra l-pipelines f'bash/zsh/eċċ bħala xi tip ta' talba ta 'livell għoli (tista', ovvjament, tpoġġi l-loops hemmhekk, iżda dan mhux tipiku għall-kodiċi DS f'lingwi tal-qoxra), ejja nagħtu eżempju sempliċi - kelli bżonn nagħmel mapping QID tal-wikidata u links sħaħ għall-wikis Russi u Ingliżi, għal dan ktibt talba sempliċi mill-kmandi fil-bash u għall-output ktibt script sempliċi f'Python, li jien ktibt imqiegħda flimkien hekk:

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

fejn

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

Dan kien, fil-fatt, il-pipeline kollu li ħoloq l-immappjar meħtieġ; kif naraw, kollox ħadem fil-modalità stream:

  • pv filepath - jagħti bar tal-progress ibbażat fuq id-daqs tal-fajl u jgħaddi l-kontenut tiegħu 'l quddiem
  • unpigz -c aqra parti mill-arkivju u taha lil jq
  • jq biċ-ċavetta - stream ipproduċa immedjatament ir-riżultat u għadda lill-postprocessor (l-istess bħal fl-ewwel eżempju) f'Python
  • internament, il-postprocessor kien magna tal-istat sempliċi li fformattjat l-output 

B'kollox, pipeline kumpless li jaħdem fil-modalità tal-fluss fuq data kbira (0.5TB), mingħajr riżorsi sinifikanti u magħmul minn pipeline sempliċi u ftit għodod.

Tip ieħor importanti: tkun kapaċi taħdem tajjeb u effettivament fit-terminal u tikteb bash/zsh/eċċ.

Fejn se jkun utli? Iva, kważi kullimkien - għal darb'oħra, hemm ĦAFNA materjali biex tistudja fuq l-Internet. B'mod partikolari, hawn dan l-artiklu preċedenti tiegħi.

R scripting

Għal darb'oħra, il-qarrej jista 'jgħid - ukoll, din hija lingwa ta' programmar sħiħa! U ovvjament, se jkollu raġun. Madankollu, normalment iltqajt ma' R f'kuntest tali li, fil-fatt, kien simili ħafna għal lingwa ta' mistoqsija.

R huwa ambjent tal-kompjuters statistiku u lingwa għal kompjuters statiċi u viżwalizzazzjoni (skond din).

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data
meħuda għalhekk. Mill-mod, nirrakkomandaha, materjal tajjeb.

Għaliex xjenzat tad-dejta jeħtieġ li jkun jaf lil R? Mill-inqas, minħabba li hemm saff kbir ta 'nies mhux tal-IT li janalizzaw id-dejta f'R. Iltqajt magħha fil-postijiet li ġejjin:

  • Is-settur farmaċewtiku.
  • Bijoloġisti.
  • Is-settur finanzjarju.
  • Nies b'edukazzjoni purament matematika li jittrattaw l-istatistiċi.
  • Mudelli statistiċi speċjalizzati u mudelli ta’ tagħlim tal-magni (li ħafna drabi jistgħu jinstabu biss fil-verżjoni tal-awtur bħala pakkett R).

Għaliex fil-fatt hija lingwa ta' mistoqsija? Fil-forma li ħafna drabi tinstab, fil-fatt hija talba biex jinħoloq mudell, inkluż il-qari tad-dejta u l-iffissar tal-parametri tal-mistoqsijiet (mudell), kif ukoll il-viżwalizzazzjoni tad-dejta f'pakketti bħal ggplot2 - din hija wkoll forma ta 'kitba ta' mistoqsijiet .

Eżempji ta' mistoqsijiet għall-viżwalizzazzjoni

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

B'mod ġenerali, ħafna ideat minn R emigraw f'pakketti python bħal pandas, numpy jew scipy, bħal dataframes u data vectorization - għalhekk b'mod ġenerali ħafna affarijiet f'R jidhru familjari u konvenjenti għalik.

Hemm ħafna sorsi biex tistudja, pereżempju, dan.

Graffs tal-għarfien

Hawnhekk għandi esperjenza kemmxejn mhux tas-soltu, għax spiss ikolli naħdem bi graffs ta 'għarfien u lingwi ta' mistoqsijiet għal graffs. Għalhekk, ejja ngħaddu fil-qosor fuq l-affarijiet bażiċi, peress li din il-parti hija ftit aktar eżotika.

F'databases relazzjonali klassiċi għandna skema fissa, iżda hawnhekk l-iskema hija flessibbli, kull predicat huwa fil-fatt "kolonna" u saħansitra aktar.

Immaġina li kont qed timmudella persuna u ridt tiddeskrivi affarijiet ewlenin, pereżempju, ejja nieħdu persuna speċifika, Douglas Adams, u nużaw din id-deskrizzjoni bħala bażi.

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data
www.wikidata.org/wiki/Q42

Jekk użajna database relazzjonali, ikollna noħolqu tabella jew tabelli enormi b'numru kbir ta 'kolonni, li ħafna minnhom ikunu NULL jew mimlija b'xi valur falz default, pereżempju, huwa improbabbli li ħafna minna jkollhom dħul fil-librerija nazzjonali Koreana - ovvjament, nistgħu npoġġuhom f'tabelli separati, iżda dan fl-aħħar mill-aħħar ikun tentattiv biex jimmudella ċirkwit loġiku flessibbli b'predikati li juża wieħed relazzjonali fiss.

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data
Allura immaġina li d-dejta kollha hija maħżuna bħala graff jew bħala espressjonijiet booleani binarji u unarji.

Fejn tista 'saħansitra tiltaqa' ma 'dan? L-ewwelnett, taħdem ma ' data wiki, u ma 'kwalunkwe databases tal-grafiċi jew data konnessa.

Dawn li ġejjin huma l-lingwi ewlenin tal-mistoqsijiet li użajt u ħdimt magħhom.

SPARQL

Wiki:
SPARQL (akronimu rikorsiv minn Eng. Protokoll SPARQL u Lingwa ta' Mistoqsija RDF) - lingwa għall-mistoqsija tad-dejta, rappreżentat mill-mudell R.F.D.U protokoll biex jittrasmetti dawn it-talbiet u jwieġeb għalihom. SPARQL hija rakkomandazzjoni Konsorzju W3C u waħda mit-teknoloġiji web semantika.

Imma fir-realtà hija lingwa ta' mistoqsija għal predikati loġiċi u binarji. Sempliċement qed tispeċifika kondizzjonalment x'inhu ffissat f'espressjoni Booleana u dak li mhux (simplifikat ħafna).

Il-bażi RDF (Resource Description Framework) nnifisha, li fuqha jiġu esegwiti l-mistoqsijiet SPARQL, hija tripla. object, predicate, subject - u l-mistoqsija tagħżel it-tripli meħtieġa skont ir-restrizzjonijiet speċifikati fl-ispirtu ta’: sib X tali li p_55(X, q_33) hija vera - fejn, ovvjament, p_55 hija xi tip ta’ relazzjoni mal-ID 55, u q_33 hija oġġett b'ID 33 (hawn u l-istorja kollha, għal darb'oħra tħalli barra kull xorta ta' dettalji).

Eżempju ta' preżentazzjoni tad-dejta:

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data
Stampi u eżempju mal-pajjiżi hawn għalhekk.

Eżempju ta' Mistoqsija Bażika

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data

Fil-fatt, irridu nsibu l-valur tal-varjabbli ?pajjiż b'tali mod li għall-predikat
member_of, huwa veru li member_of(?country,q458) u q458 hija l-ID tal-Unjoni Ewropea.

Eżempju ta' mistoqsija SPARQL reali ġewwa l-magna python:

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data

Tipikament, kelli naqra SPARQL aktar milli nikteb - f'dik is-sitwazzjoni, x'aktarx tkun ħila utli li tifhem il-lingwa għall-inqas f'livell bażiku biex tifhem eżattament kif id-data tiġi rkuprata. 

Hemm ħafna materjal biex tistudja online: pereżempju, hawn dan и dan. Ġeneralment infittex fuq Google disinji u eżempji speċifiċi u dan huwa biżżejjed għalissa.

Lingwi ta' mistoqsijiet loġiċi

Tista 'taqra aktar dwar is-suġġett fl-artiklu tiegħi hawn. U hawnhekk, se neżaminaw fil-qosor biss għaliex il-lingwi loġiċi huma adattati tajjeb għall-kitba ta 'mistoqsijiet. Essenzjalment, RDF huwa biss sett ta 'dikjarazzjonijiet loġiċi tal-forma p(X) u h(X,Y), u mistoqsija loġika għandha l-forma li ġejja:

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

Hawnhekk qed nitkellmu dwar il-ħolqien ta 'predikat ġdid output/1 (/1 tfisser unary), sakemm għal X huwa veru li country(X) - jiġifieri, X huwa pajjiż u wkoll membru_of(X,"EU ").

Jiġifieri, f'dan il-każ, kemm id-dejta kif ukoll ir-regoli huma ppreżentati bl-istess mod, li jippermettilna nimudellaw il-problemi faċilment u tajjeb ħafna.

Fejn iltqajt fl-industrija?: proġett kbir sħiħ ma 'kumpanija li tikteb mistoqsijiet b'tali lingwa, kif ukoll fuq il-proġett attwali fil-qalba tas-sistema - jidher li din hija ħaġa pjuttost eżotika, iżda xi drabi jiġri.

Eżempju ta' framment ta' kodiċi f'lingwa loġika li tipproċessa wikidata:

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data

Materjali: Hawnhekk nagħti ftit links għal-lingwa ta' programmar loġika moderna Answer Set Programming - nirrakkomanda li tistudjaha:

Noti tax-Xjentist tad-Data: Reviżjoni Personalizzata tal-Lingwi tal-Mistoqsija tad-Data

Sors: www.habr.com

Żid kumment