Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data
Rwy'n dweud wrthych o brofiad personol beth oedd yn ddefnyddiol ble a phryd. Mae'n drosolwg a thesis, fel ei bod hi'n glir beth a ble y gallwch chi gloddio ymhellach - ond yma mae gen i brofiad personol goddrychol yn unig, efallai bod popeth yn hollol wahanol i chi.

Pam mae'n bwysig gwybod a gallu defnyddio ieithoedd ymholiad? Yn greiddiol iddo, mae gan Wyddor Data sawl cam pwysig o waith, a'r cyntaf a'r pwysicaf (hebddo, yn sicr ni fydd dim yn gweithio!) yw cael neu dynnu data. Yn fwyaf aml, mae'r data yn eistedd yn rhywle mewn rhyw ffurf ac mae angen ei “adfer” oddi yno. 

Mae ieithoedd ymholiad yn caniatáu ichi dynnu'r union ddata hwn! A heddiw byddaf yn dweud wrthych am yr ieithoedd ymholiad hynny sydd wedi bod yn ddefnyddiol i mi a byddaf yn dweud wrthych ac yn dangos ichi ble a sut yn union - pam mae ei angen i astudio.

Bydd tri phrif floc o fathau o ymholiad data, y byddwn yn eu trafod yn yr erthygl hon:

  • Ieithoedd ymholiad "safonol" yw'r hyn a ddeellir yn gyffredin wrth siarad am iaith ymholiad, megis algebra perthynol neu SQL.
  • Ieithoedd ymholiad sgriptio: er enghraifft, pandas pethau Python, sgriptio numpy neu cragen.
  • Ymholiad ieithoedd ar gyfer graffiau gwybodaeth a chronfeydd data graff.

Profiad personol yn unig yw popeth sy’n cael ei ysgrifennu yma, beth oedd yn ddefnyddiol, gyda disgrifiad o sefyllfaoedd a “pam roedd ei angen” - gall pawb roi cynnig ar sut y gall sefyllfaoedd tebyg ddod i chi a cheisio paratoi ar eu cyfer ymlaen llaw trwy ddeall yr ieithoedd hyn ​​cyn bod yn rhaid i chi wneud cais (ar frys) ar brosiect neu hyd yn oed gyrraedd prosiect lle mae eu hangen.

Ieithoedd ymholiad "Safonol".

Mae ieithoedd ymholiad safonol yn union yn yr ystyr yr ydym fel arfer yn meddwl amdanynt pan fyddwn yn siarad am ymholiadau.

Algebra perthynol

Pam mae angen algebra perthynol heddiw? Er mwyn cael dealltwriaeth dda o pam mae ieithoedd ymholiad wedi'u strwythuro mewn ffordd arbennig a'u defnyddio'n ymwybodol, mae angen i chi ddeall y craidd sy'n sail iddynt.

Beth yw algebra perthynol?

Mae'r diffiniad ffurfiol fel a ganlyn: mae algebra perthynol yn system gaeedig o weithrediadau ar gysylltiadau mewn model data perthynol. I'w roi ychydig yn fwy dynol, mae hon yn system o weithrediadau ar fyrddau fel bod y canlyniad bob amser yn dabl.

Gwel yr holl weithrediadau perthynol yn hwn erthygl o Habr - dyma ni'n disgrifio pam mae angen i chi wybod a ble mae'n ddefnyddiol.

Pam?

Mae dechrau deall beth yw hanfod ieithoedd ymholiad a pha weithrediadau sydd y tu ôl i ymadroddion mewn ieithoedd ymholiad penodol yn aml yn rhoi dealltwriaeth ddyfnach o'r hyn sy'n gweithio mewn ieithoedd ymholiad a sut.

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data
Cymerwyd o hwn erthyglau. Enghraifft o weithrediad: ymuno, sy'n uno byrddau.

Deunyddiau ar gyfer astudio:

Cwrs rhagarweiniol da o Stanford. Yn gyffredinol, mae yna lawer o ddeunyddiau ar algebra a theori perthynol - Coursera, Udacity. Mae yna hefyd lawer iawn o ddeunydd ar-lein, gan gynnwys deunydd da cyrsiau academaidd. Fy nghyngor personol: mae angen i chi ddeall algebra perthynol yn dda iawn - dyma sail y pethau sylfaenol.

SQL

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data
Cymerwyd o hwn erthyglau.

Mae SQL yn ei hanfod yn weithrediad o algebra perthynol - gyda chafeat pwysig, mae SQL yn ddatganiadol! Hynny yw, wrth ysgrifennu ymholiad yn iaith algebra perthynol, rydych chi'n dweud sut i gyfrifo - ond gyda SQL rydych chi'n nodi'r hyn rydych chi am ei dynnu, ac yna mae'r DBMS eisoes yn cynhyrchu mynegiadau (effeithiol) yn iaith algebra perthynol (eu mae cywerthedd yn hysbys i ni fel Theorem Codd).

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data
Cymerwyd o hwn erthyglau.

Pam?

DBMSs perthynol: Mae Oracle, Postgres, SQL Server, ac ati yn dal i fod bron ym mhobman ac mae siawns anhygoel o uchel y bydd yn rhaid i chi ryngweithio â nhw, sy'n golygu y bydd yn rhaid i chi naill ai ddarllen SQL (sy'n debygol iawn) neu ei ysgrifennu ( ddim yn annhebygol chwaith).

Beth i'w ddarllen a'i astudio

Yn ôl yr un dolenni uchod (am algebra perthynol), mae yna lawer iawn o ddeunydd, er enghraifft, hyn.

Gyda llaw, beth yw NoSQL?

“Mae’n werth pwysleisio unwaith eto bod gan y term “NoSQL” darddiad cwbl ddigymell ac nad oes ganddo ddiffiniad na sefydliad gwyddonol a dderbynnir yn gyffredinol y tu ôl iddo.” Cyfatebol erthygl ar Habr.

Mewn gwirionedd, sylweddolodd pobl nad oes angen model perthynol llawn i ddatrys llawer o broblemau, yn enwedig ar gyfer y rhai lle, er enghraifft, mae perfformiad yn hollbwysig a rhai ymholiadau syml gyda chydgrynhoi yn dominyddu - lle mae'n hanfodol cyfrifo metrigau yn gyflym a'u hysgrifennu at y cronfa ddata, ac mae'r rhan fwyaf o nodweddion yn perthynol drodd allan i fod nid yn unig yn ddiangen, ond hefyd yn niweidiol - pam normaleiddio rhywbeth os bydd yn difetha'r peth pwysicaf i ni (ar gyfer rhai tasg benodol) - cynhyrchiant?

Hefyd, mae angen sgemâu hyblyg yn aml yn lle sgemâu mathemategol sefydlog y model perthynol clasurol - ac mae hyn yn symleiddio datblygiad cymhwysiad yn anhygoel pan mae'n hollbwysig defnyddio'r system a dechrau gweithio'n gyflym, gan brosesu'r canlyniadau - neu'r sgema a'r mathau o ddata sydd wedi'i storio ddim mor bwysig.

Er enghraifft, rydym yn creu system arbenigol ac rydym am storio gwybodaeth ar barth penodol ynghyd â rhywfaint o wybodaeth meta - efallai na fyddwn yn gwybod yr holl feysydd ac yn syml storio JSON ar gyfer pob cofnod - mae hyn yn rhoi amgylchedd hyblyg iawn i ni ar gyfer ehangu'r data model ac yn ailadrodd yn gyflym - felly yn yr achos hwn Yn yr achos hwn, bydd NoSQL hyd yn oed yn well ac yn fwy darllenadwy. Cofnod enghreifftiol (o un o fy mhrosiectau lle roedd NoSQL yn iawn lle roedd ei angen).

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

Gallwch ddarllen mwy yma am NoSQL.

Beth i'w astudio?

Yma, yn hytrach, does ond angen i chi ddadansoddi'ch tasg yn drylwyr, pa briodweddau sydd ganddi a pha systemau NoSQL sydd ar gael a fyddai'n cyd-fynd â'r disgrifiad hwn - ac yna dechrau astudio'r system hon.

Ieithoedd Ymholiad Sgriptio

Ar y dechrau, mae'n ymddangos, beth sydd gan Python i'w wneud ag ef yn gyffredinol - mae'n iaith raglennu, ac nid am ymholiadau o gwbl.

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data

  • Mae Pandas yn llythrennol yn gyllell Gwyddor Data Byddin y Swistir; mae llawer iawn o drawsnewid data, agregu, ac ati yn digwydd ynddo.
  • Numpy - cyfrifiadau fector, matricsau ac algebra llinol yno.
  • Scipy - mae llawer o fathemateg yn y pecyn hwn, yn enwedig ystadegau.
  • Labordy Jupyter - mae llawer o ddadansoddi data archwiliadol yn cyd-fynd yn dda â gliniaduron - yn ddefnyddiol gwybod.
  • Ceisiadau - gweithio gyda'r rhwydwaith.
  • Mae Pyspark yn boblogaidd iawn ymhlith peirianwyr data, yn fwyaf tebygol y bydd yn rhaid i chi ryngweithio â hwn neu Spark, yn syml oherwydd eu poblogrwydd.
  • *Seleniwm - defnyddiol iawn ar gyfer casglu data o safleoedd ac adnoddau, weithiau nid oes unrhyw ffordd arall o gael y data.

Fy mhrif gyngor: dysgwch Python!

pandas

Gadewch i ni gymryd y cod canlynol fel enghraifft:

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

Yn y bôn, gwelwn fod y cod yn cyd-fynd â'r patrwm SQL clasurol.

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

Ond y rhan bwysig yw bod y cod hwn yn rhan o'r sgript a'r biblinell; mewn gwirionedd, rydym yn gwreiddio ymholiadau yn y biblinell Python. Yn y sefyllfa hon, mae iaith yr ymholiad yn dod atom o lyfrgelloedd fel Pandas neu pySpark.

Yn gyffredinol, yn pySpark rydym yn gweld math tebyg o drawsnewid data trwy iaith ymholiad yn ysbryd:

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

Ble a beth i'w ddarllen

Ar Python ei hun yn gyffredinol ddim yn broblem dod o hyd i ddeunyddiau i'w hastudio. Mae yna nifer fawr o sesiynau tiwtorial ar-lein pandas, pySpark a chyrsiau ar Spark (a hefyd ar ei ben ei hun DS). Ar y cyfan, mae'r cynnwys yma yn wych ar gyfer googling, a phe bai'n rhaid i mi ddewis un pecyn i ganolbwyntio arno, pandas fyddai hwnnw, wrth gwrs. O ran y cyfuniad o ddeunyddiau DS + Python hefyd llawer o.

Cragen fel iaith ymholiad

Mae cryn dipyn o brosiectau prosesu a dadansoddi data yr wyf wedi gweithio gyda nhw, mewn gwirionedd, yn sgriptiau cregyn sy'n galw cod yn Python, Java, a'r gorchmynion cregyn eu hunain. Felly, yn gyffredinol, gallwch ystyried piblinellau yn bash/zsh/etc fel rhyw fath o ymholiad lefel uchel (gallwch, wrth gwrs, stwffio dolenni yno, ond nid yw hyn yn nodweddiadol ar gyfer cod DS mewn ieithoedd cregyn), gadewch i ni roi enghraifft syml - roedd angen i mi wneud map QID o wikidata a dolenni llawn i'r wikis Rwsieg a Saesneg, ar gyfer hyn ysgrifennais gais syml o'r gorchmynion yn y bash ac ar gyfer yr allbwn ysgrifennais sgript syml yn Python, a wnes i rhoi at ei gilydd fel hyn:

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

lle

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

Dyma, mewn gwirionedd, y biblinell gyfan a greodd y mapio gofynnol; fel y gwelwn, roedd popeth yn gweithio yn y modd llif:

  • pv filepath - yn rhoi bar cynnydd yn seiliedig ar faint ffeil ac yn trosglwyddo ei gynnwys ymlaen
  • darllenodd unpigz -c ran o'r archif a'i rhoi i jq
  • jq gyda'r allwedd - cynhyrchodd ffrwd y canlyniad ar unwaith a'i drosglwyddo i'r ôl-brosesydd (yr un fath â'r enghraifft gyntaf) yn Python
  • yn fewnol, roedd yr ôlbrosesydd yn beiriant cyflwr syml a oedd yn fformatio'r allbwn 

Yn gyfan gwbl, mae piblinell gymhleth yn gweithio yn y modd llif ar ddata mawr (0.5TB), heb adnoddau sylweddol ac wedi'i wneud o biblinell syml a chwpl o offer.

Awgrym pwysig arall: gallu gweithio'n dda ac yn effeithiol yn y derfynell ac ysgrifennu bash/zsh/etc.

Ble bydd yn ddefnyddiol? Oes, bron ym mhobman - eto, mae yna LLAWER o ddeunyddiau i'w hastudio ar y Rhyngrwyd. Yn arbennig, yma hwn fy erthygl flaenorol.

R sgriptio

Eto, efallai y bydd y darllenydd yn exclaim - wel, mae hon yn iaith raglennu gyfan! Ac wrth gwrs, bydd yn iawn. Fodd bynnag, fel arfer deuthum ar draws R yn y fath gyd-destun fel ei fod, mewn gwirionedd, yn debyg iawn i iaith ymholiad.

Mae R yn amgylchedd cyfrifiadurol ystadegol ac yn iaith ar gyfer cyfrifiadura statig a delweddu (yn ôl hwn).

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data
cymryd felly. Gyda llaw, rwy'n ei argymell, deunydd da.

Pam mae angen i wyddonydd data wybod R? O leiaf, oherwydd bod yna haenen enfawr o bobl nad ydynt yn TG sy'n dadansoddi data yn R. Deuthum ar ei draws yn y mannau canlynol:

  • Sector fferyllol.
  • Biolegwyr.
  • Sector ariannol.
  • Pobl ag addysg fathemategol yn unig sy'n delio ag ystadegau.
  • Modelau ystadegol arbenigol a modelau dysgu peirianyddol (sydd ond i'w cael yn aml yn fersiwn yr awdur fel pecyn R).

Pam ei fod yn iaith ymholiad mewn gwirionedd? Yn y ffurf y mae i'w gael yn aml, mewn gwirionedd mae'n gais i greu model, gan gynnwys darllen data a gosod paramedrau ymholiad (model), yn ogystal â delweddu data mewn pecynnau fel ggplot2 - mae hwn hefyd yn fath o ysgrifennu ymholiadau .

Ymholiadau enghreifftiol ar gyfer delweddu

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

Yn gyffredinol, mae llawer o syniadau gan R wedi ymfudo i becynnau python fel pandas, numpy neu scipy, fel fframiau data a fectoreiddio data - felly yn gyffredinol bydd llawer o bethau yn R yn ymddangos yn gyfarwydd ac yn gyfleus i chi.

Mae llawer o ffynonellau i'w hastudio, er enghraifft, hyn.

Graffiau gwybodaeth

Yma mae gen i brofiad ychydig yn anarferol, oherwydd yn eithaf aml mae'n rhaid i mi weithio gyda graffiau gwybodaeth ac ieithoedd ymholi ar gyfer graffiau. Felly, gadewch i ni fynd dros y pethau sylfaenol yn fyr, gan fod y rhan hon ychydig yn fwy egsotig.

Mewn cronfeydd data perthynol clasurol mae gennym sgema sefydlog, ond yma mae'r sgema yn hyblyg, mae pob rhagfynegiad mewn gwirionedd yn “golofn” a hyd yn oed mwy.

Dychmygwch eich bod yn modelu person ac eisiau disgrifio pethau allweddol, er enghraifft, gadewch i ni gymryd person penodol, Douglas Adams, a defnyddio'r disgrifiad hwn fel sail.

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data
www.wikidata.org/wiki/Q42

Pe baem yn defnyddio cronfa ddata berthynol, byddai'n rhaid i ni greu tabl neu dablau enfawr gyda nifer enfawr o golofnau, y rhan fwyaf ohonynt yn NULL neu wedi'u llenwi â rhywfaint o werth Ffug rhagosodedig, er enghraifft, mae'n annhebygol bod gan lawer ohonom ni mynediad yn llyfrgell genedlaethol Corea - wrth gwrs, gallem eu rhoi mewn tablau ar wahân, ond yn y pen draw byddai hyn yn ymgais i fodelu cylched rhesymegol hyblyg gyda rhagfynegiadau gan ddefnyddio un berthynol sefydlog.

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data
Felly dychmygwch fod yr holl ddata yn cael ei storio fel graff neu fel ymadroddion boolaidd deuaidd ac unariaidd.

Ble allwch chi hyd yn oed ddod ar draws hyn? Yn gyntaf, gweithio gyda wiki data, a chydag unrhyw gronfeydd data graff neu ddata cysylltiedig.

Y canlynol yw'r prif ieithoedd ymholiad yr wyf wedi'u defnyddio ac wedi gweithio gyda nhw.

SPARQL

Wiki:
SPARQL (acronym ailadroddus o Eng. Protocol SPARQL ac Iaith Ymholiad RDF) - iaith ymholiad data, a gynrychiolir gan y model RDFAc protocol i drosglwyddo'r ceisiadau hyn ac ymateb iddynt. Mae SPARQL yn argymhelliad Consortiwm W3C ac un o'r technolegau gwe semantig.

Ond mewn gwirionedd mae'n iaith ymholiad ar gyfer rhagfynegiadau unary a deuaidd rhesymegol. Yn syml, rydych chi'n nodi'n amodol yr hyn sydd wedi'i osod mewn mynegiant Boole a'r hyn nad yw (syml iawn).

Mae sylfaen yr RDF (Fframwaith Disgrifiad Adnoddau) ei hun, y mae ymholiadau SPARQL yn cael eu gweithredu drosto, yn driphlyg object, predicate, subject - ac mae'r ymholiad yn dewis y triphlyg gofynnol yn ôl y cyfyngiadau penodedig yn yr ysbryd: darganfyddwch X fel bod p_55(X, q_33) yn wir - lle, wrth gwrs, mae p_55 yn rhyw fath o berthynas ag ID 55, ac mae q_33 yn gwrthrych gydag ID 33 (yma a'r stori gyfan, eto'n hepgor pob math o fanylion).

Enghraifft o gyflwyniad data:

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data
Lluniau ac esiampl gyda gwledydd yma felly.

Enghraifft Ymholiad Sylfaenol

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data

Mewn gwirionedd, rydym am ddarganfod gwerth y newidyn ? gwlad fel yr un ar gyfer y rhagfynegiad
aelod_of, mae'n wir mai member_of(?country,q458) a q458 yw ID yr Undeb Ewropeaidd.

Enghraifft o ymholiad SPARQL go iawn y tu mewn i'r injan python:

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data

Yn nodweddiadol, rydw i wedi gorfod darllen SPARQL yn hytrach na'i ysgrifennu - yn y sefyllfa honno, mae'n debyg y byddai'n sgil ddefnyddiol deall yr iaith ar lefel sylfaenol o leiaf i ddeall yn union sut mae data'n cael ei adalw. 

Mae llawer o ddeunydd i'w astudio ar-lein: er enghraifft, yma hyn и hyn. Rwyf fel arfer yn google dyluniadau ac enghreifftiau penodol ac mae hynny'n ddigon am y tro.

Ieithoedd ymholiad rhesymegol

Gallwch ddarllen mwy ar y pwnc yn fy erthygl yma. Ac yma, ni fyddwn ond yn archwilio'n fyr pam mae ieithoedd rhesymegol yn addas iawn ar gyfer ysgrifennu ymholiadau. Yn y bôn, dim ond set o ddatganiadau rhesymegol o'r ffurf p(X) a h(X,Y) yw RDF, ac mae gan ymholiad rhesymegol y ffurf ganlynol:

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

Yma rydyn ni'n sôn am greu allbwn rhagfynegiad newydd / 1 (/1 yn golygu unary), ar yr amod ei bod yn wir ar gyfer X bod gwlad (X) - hy, mae X yn wlad a hefyd yn aelod_o (X, "EU").

Hynny yw, yn yr achos hwn, cyflwynir y data a'r rheolau yn yr un modd, sy'n ein galluogi i fodelu problemau yn hawdd ac yn dda iawn.

Ble wnaethoch chi gwrdd yn y diwydiant?: prosiect mawr cyfan gyda chwmni sy'n ysgrifennu ymholiadau mewn iaith o'r fath, yn ogystal ag ar y prosiect presennol yng nghraidd y system - mae'n ymddangos bod hwn yn beth eithaf egsotig, ond weithiau mae'n digwydd.

Enghraifft o ddarn cod mewn iaith resymegol yn prosesu wikidata:

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data

Deunyddiau: Rhoddaf yma ychydig o ddolenni i'r iaith raglennu resymegol fodern Rhaglennu Set Ateb - rwy'n argymell ei hastudio:

Nodiadau Gwyddonydd Data: Adolygiad Personol o Ieithoedd Ymholiad Data

Ffynhonnell: hab.com

Ychwanegu sylw