Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna
Ég er að segja þér af eigin reynslu hvað var gagnlegt hvar og hvenær. Það er yfirlit og ritgerð, svo að það sé ljóst hvað og hvar þú getur grafið lengra - en hér hef ég eingöngu huglæga persónulega reynslu, kannski er allt öðruvísi fyrir þig.

Hvers vegna er mikilvægt að kunna og geta notað fyrirspurnarmál? Í kjarna sínum hefur Data Science nokkur mikilvæg vinnustig og það allra fyrsta og mikilvægasta (án þeirra mun örugglega ekkert virka!) er að afla eða draga út gögn. Oftast eru gögnin einhvers staðar í einhverri mynd og þarf að „sækja“ þaðan. 

Fyrirspurnartungumál gera þér kleift að vinna þessi gögn! Og í dag mun ég segja þér frá þessum fyrirspurnartungumálum sem hafa nýst mér og ég mun segja þér og sýna þér hvar og hvernig nákvæmlega - hvers vegna það er nauðsynlegt til að læra.

Það verða þrjár aðalblokkir af gerðum gagnafyrirspurna, sem við munum ræða í þessari grein:

  • „Staðlað“ fyrirspurnarmál eru það sem almennt er skilið þegar talað er um fyrirspurnartungumál, svo sem tengslalgebru eða SQL.
  • Forskriftarfyrirspurnartungumál: til dæmis Python hlutir pandas, numpy eða skelja forskriftir.
  • Fyrirspurnartungumál fyrir þekkingargraf og grafgagnagrunna.

Allt sem skrifað er hér er bara persónuleg reynsla, það sem var gagnlegt, með lýsingu á aðstæðum og „af hverju það var þörf“ - allir geta prófað hvernig svipaðar aðstæður geta komið upp og reynt að búa sig undir þær fyrirfram með því að skilja þessi tungumál Áður en þú þarft að sækja (brýnt) um verkefni eða jafnvel komast að verkefni þar sem þeirra er þörf.

„Staðlað“ fyrirspurnartungumál

Stöðluð fyrirspurnarmál eru einmitt í þeim skilningi að við hugsum venjulega um þau þegar við tölum um fyrirspurnir.

Vensla algebra

Hvers vegna er þörf á tengslalgebru í dag? Til þess að hafa góðan skilning á því hvers vegna fyrirspurnarmál eru byggð upp á ákveðinn hátt og nota þau meðvitað þarftu að skilja kjarnann sem liggur að baki þeim.

Hvað er tengslalgebra?

Formlega skilgreiningin er sem hér segir: Vensla algebra er lokað kerfi aðgerða á venslum í venslagagnalíkani. Til að orða það aðeins mannlegra, þá er þetta rekstrarkerfi á borðum þannig að niðurstaðan er alltaf tafla.

Sjá allar venslaaðgerðir í þetta grein frá Habr - hér lýsum við hvers vegna þú þarft að vita og hvar það kemur sér vel.

Hvers vegna?

Að byrja að skilja hvað fyrirspurnarmál snúast um og hvaða aðgerðir eru á bak við tjáningu á sérstökum fyrirspurnarmálum gefur oft dýpri skilning á því hvað virkar í fyrirspurnarmálum og hvernig.

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna
Tekið frá þetta greinar. Dæmi um aðgerð: join, sem sameinar töflur.

Námsefni:

Gott kynningarnámskeið frá Stanford. Almennt séð er mikið af efni um tengslalgebru og kenningu - Coursera, Udacity. Það er líka mikið magn af efni á netinu, þar á meðal gott akademískum námskeiðum. Persónuleg ráð mín: þú þarft að skilja tengslalgebru mjög vel - þetta er grunnurinn að grunnatriðum.

SQL

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna
Tekið frá þetta greinar.

SQL er í meginatriðum útfærsla á tengslalgebru - með mikilvægum fyrirvara, SQL er lýsandi! Það er að segja þegar þú skrifar fyrirspurn á tungumáli venslaalgebru segirðu í raun hvernig á að reikna - en með SQL tilgreinirðu hvað þú vilt draga út og þá býr DBMS þegar til (virkar) tjáningar á tungumáli venslaalgebru (þeirra jafngildi er þekkt fyrir okkur sem setning Codds).

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna
Tekið frá þetta greinar.

Hvers vegna?

Relational DBMSs: Oracle, Postgres, SQL Server, etc eru enn nánast alls staðar og það eru ótrúlega miklar líkur á að þú þurfir að hafa samskipti við þá, sem þýðir að þú verður annað hvort að lesa SQL (sem er mjög líklegt) eða skrifa það ( ekki ólíklegt heldur).

Hvað á að lesa og læra

Samkvæmt sömu krækjum hér að ofan (um vensla algebru) er ótrúlega mikið af efni, td. þetta.

Við the vegur, hvað er NoSQL?

„Það er þess virði að undirstrika enn og aftur að hugtakið „NoSQL“ hefur algerlega sjálfsprottinn uppruna og hefur enga almennt viðurkennda skilgreiningu eða vísindastofnun á bak við það. Samsvarandi grein á Habr.

Reyndar áttaði fólk sig á því að fullkomið venslalíkan er ekki nauðsynlegt til að leysa mörg vandamál, sérstaklega fyrir þau þar sem til dæmis frammistaða er mikilvæg og ákveðnar einfaldar fyrirspurnir með samansafn ráða - þar sem mikilvægt er að reikna hratt út mælikvarða og skrifa þær til gagnagrunnur, og flestir eiginleikar eru tengdir, reyndust ekki aðeins óþarfir, heldur einnig skaðlegir - af hverju að staðla eitthvað ef það spillir það mikilvægasta fyrir okkur (fyrir tiltekið verkefni) - framleiðni?

Einnig þarf oft sveigjanleg skema í stað fastra stærðfræðilegra skemas klassíska venslalíkanssins - og þetta einfaldar þróun forrita ótrúlega þegar mikilvægt er að koma kerfinu í notkun og byrja að vinna hratt, vinna úr niðurstöðunum - eða skema og gerðir geymdra gagna eru ekki svo mikilvægar.

Til dæmis erum við að búa til sérfræðikerfi og viljum geyma upplýsingar á tilteknu léni ásamt smá metaupplýsingum - við kunnum kannski ekki alla reiti og geymum einfaldlega JSON fyrir hverja færslu - þetta gefur okkur mjög sveigjanlegt umhverfi til að stækka gögnin líkan og fljótt endurtekið - þannig að í þessu tilfelli verður NoSQL jafnvel æskilegt og læsilegra. Dæmi um færslu (úr einu af verkefnum mínum þar sem NoSQL var rétt þar sem þess var þörf).

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

Þú getur lesið meira hér um NoSQL.

Hvað á að læra?

Hér, frekar, þú þarft bara að greina vandlega verkefnið þitt, hvaða eiginleika það hefur og hvaða NoSQL kerfi eru í boði sem myndu passa við þessa lýsingu - og byrja síðan að rannsaka þetta kerfi.

Forskriftarfyrirspurnartungumál

Í fyrstu, það virðist, hvað hefur Python með það að gera almennt - þetta er forritunarmál og alls ekki um fyrirspurnir.

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna

  • Pandas er bókstaflega svissneskur herhnífur gagnavísinda; gríðarlegt magn af umbreytingu gagna, samansöfnun o.s.frv. á sér stað í henni.
  • Numpy - vektorútreikningar, fylki og línuleg algebru þar.
  • Scipy - það er mikið af stærðfræði í þessum pakka, sérstaklega tölfræði.
  • Jupyter lab - mikið af könnunargagnagreiningu passar vel inn í fartölvur - gagnlegt að vita.
  • Beiðnir - vinna með netið.
  • Pyspark er mjög vinsælt meðal gagnaverkfræðinga, líklega verður þú að hafa samskipti við þetta eða Spark, einfaldlega vegna vinsælda þeirra.
  • *Selen - mjög gagnlegt til að safna gögnum frá síðum og auðlindum, stundum er einfaldlega engin önnur leið til að fá gögnin.

Helsta ráð mitt: lærðu Python!

Pandas

Tökum eftirfarandi kóða sem dæmi:

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

Í meginatriðum sjáum við að kóðinn passar inn í klassíska SQL mynstrið.

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

En mikilvægi hlutinn er að þessi kóði er hluti af handritinu og leiðslunni; í raun erum við að fella fyrirspurnir inn í Python leiðsluna. Í þessum aðstæðum kemur fyrirspurnarmálið til okkar frá bókasöfnum eins og Pandas eða pySpark.

Almennt séð sjáum við í pySpark svipaða tegund gagnaumbreytingar í gegnum fyrirspurnarmál í anda:

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

Hvar og hvað á að lesa

Á Python sjálfum almennt ekki vandamál finna efni til að læra. Það er gríðarlegur fjöldi námskeiða á netinu pöndur, pySpark og námskeið um Spark (og líka út af fyrir sig DS). Á heildina litið er efnið hér frábært til að googla og ef ég þyrfti að velja einn pakka til að einbeita mér að væri það auðvitað pöndur. Varðandi samsetningu DS+Python efna líka mikið af.

Skel sem fyrirspurnartungumál

Nokkuð af gagnavinnslu- og greiningarverkefnum sem ég hef unnið með eru í raun skelforskriftir sem kalla á kóða í Python, Java og skeljaskipanirnar sjálfar. Þess vegna geturðu almennt litið á leiðslur í bash/zsh/etc sem einhvers konar fyrirspurn á háu stigi (þú getur auðvitað sett lykkjur þar inn, en þetta er ekki dæmigert fyrir DS kóða í skel tungumálum), við skulum gefa einfalt dæmi - ég þurfti að gera QID kortlagningu af wikidata og tengla á rússnesku og ensku wikis, fyrir þetta skrifaði ég einfalda beiðni frá skipunum í bash og fyrir úttakið skrifaði ég einfalt handrit í Python, sem ég sett saman svona:

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

þar sem

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

Þetta var í raun öll leiðslan sem bjó til nauðsynlega kortlagningu; eins og við sjáum virkaði allt í straumham:

  • pv skráarslóð - gefur framvindustiku byggða á skráarstærð og sendir innihald hennar áfram
  • unpigz -c las hluta af skjalasafninu og gaf það til jq
  • jq með lyklinum - straumur bjó strax til niðurstöðuna og sendi hana til eftirvinnslunnar (sama og með fyrsta dæminu) í Python
  • innbyrðis var eftirvinnsluvélin einföld ástandsvél sem forsniði úttakið 

Alls flókin leiðsla sem vinnur í flæðisham á stórum gögnum (0.5TB), án teljandi fjármagns og gerð úr einfaldri leiðslu og nokkrum verkfærum.

Önnur mikilvæg ráð: geta unnið vel og á áhrifaríkan hátt í flugstöðinni og skrifað bash/zsh/etc.

Hvar mun það nýtast? Já, næstum alls staðar - aftur, það er MIKIÐ af efni til að læra á netinu. Einkum hér þetta fyrri grein mína.

R forskriftir

Aftur, lesandinn gæti hrópað - jæja, þetta er heilt forritunarmál! Og auðvitað mun hann hafa rétt fyrir sér. Hins vegar rakst ég venjulega á R í slíku samhengi að það var í raun mjög líkt fyrirspurnarmáli.

R er tölfræðilegt tölvuumhverfi og tungumál fyrir truflanir og sjónrænar tölvur (skv þetta).

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna
tekið þess vegna. Annars mæli ég með því, gott efni.

Af hverju þarf gagnafræðingur að vita R? Að minnsta kosti vegna þess að það er mikið lag af fólki sem ekki er í upplýsingatækni sem greinir gögn í R. Ég rakst á þau á eftirfarandi stöðum:

  • Lyfjageirinn.
  • Líffræðingar.
  • Fjármálageirinn.
  • Fólk með eingöngu stærðfræðimenntun sem fæst við tölfræði.
  • Sérhæfð tölfræðilíkön og vélanámslíkön (sem oft er aðeins hægt að finna í útgáfu höfundar sem R pakka).

Af hverju er það í raun fyrirspurnarmál? Í því formi sem það er oft að finna í, er það í raun beiðni um að búa til líkan, þar á meðal að lesa gögn og laga færibreytur fyrirspurna (líkan), auk þess að sjá gögn í pökkum eins og ggplot2 - þetta er líka mynd af því að skrifa fyrirspurnir .

Dæmi um fyrirspurnir til sjónrænnar

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

Almennt séð hafa margar hugmyndir frá R flust yfir í python-pakka eins og pandas, numpy eða scipy, eins og gagnarammar og gagnavektorvæðingu - þannig að almennt mun margt í R virðast kunnuglegt og þægilegt fyrir þig.

Það eru margar heimildir til að rannsaka, td. þetta.

Þekkingargraf

Hér hef ég dálítið óvenjulega reynslu, því ég þarf oft að vinna með þekkingargraf og fyrirspurnamál fyrir línurit. Þess vegna skulum við aðeins fara stuttlega yfir grunnatriðin, þar sem þessi hluti er aðeins framandi.

Í klassískum venslagagnagrunnum höfum við fast skema, en hér er skemað sveigjanlegt, hver forsaga er í raun „dálkur“ og jafnvel meira.

Ímyndaðu þér að þú værir að móta manneskju og vildir lýsa lykilatriðum, við skulum til dæmis taka ákveðinn mann, Douglas Adams, og nota þessa lýsingu til grundvallar.

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna
www.wikidata.org/wiki/Q42

Ef við notuðum venslagagnagrunn, þyrftum við að búa til risastóra töflu eða töflur með miklum fjölda dálka, sem flestir væru NULL eða fylltir með einhverju sjálfgefnu False gildi, til dæmis er ólíklegt að mörg okkar hafi færslu í kóreska þjóðbókasafninu - auðvitað gætum við sett þær í aðskildar töflur, en þetta væri á endanum tilraun til að móta sveigjanlega rökræna hringrás með forsendum með því að nota fasta vensla.

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna
Ímyndaðu þér því að öll gögn séu geymd sem línurit eða sem tvíundar og óundarleg boolean tjáning.

Hvar getur þú jafnvel lent í þessu? Í fyrsta lagi að vinna með gagna wiki, og með hvaða línuritsgagnagrunnum sem er eða tengd gögn.

Eftirfarandi eru helstu fyrirspurnartungumálin sem ég hef notað og unnið með.

SPARQL

wiki:
SPARQL (endurkvæm skammstöfun frá Enska SPARQL bókun og RDF fyrirspurnartungumál) - tungumál gagnafyrirspurnar, táknuð með fyrirmyndinni RDFOg bókun að senda þessar beiðnir og svara þeim. SPARQL er meðmæli W3C Consortium og ein af tækninni merkingarvef.

En í raun og veru er það fyrirspurnartungumál fyrir rökrænar ein- og tvíundir forsendur. Þú ert einfaldlega að skilgreina hvað er fast í Boolean tjáningu og hvað ekki (mjög einfölduð).

RDF (Resource Description Framework) grunnurinn sjálfur, sem SPARQL fyrirspurnir eru keyrðar yfir, er þrefaldur object, predicate, subject - og fyrirspurnin velur nauðsynlegar þrefaldar í samræmi við tilgreindar takmarkanir í anda: finndu X þannig að p_55(X, q_33) sé satt - þar sem auðvitað p_55 er einhvers konar tengsl við auðkenni 55 og q_33 er hlutur með ID 33 (hér og öll sagan, aftur sleppt alls kyns smáatriðum).

Dæmi um framsetningu gagna:

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna
Myndir og dæmi með löndum hér þess vegna.

Dæmi um grunnfyrirspurn

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna

Reyndar viljum við finna gildi ?landsbreytunnar þannig að fyrir forfallið
member_of, það er satt að member_of(?country,q458) og q458 eru auðkenni Evrópusambandsins.

Dæmi um raunverulega SPARQL fyrirspurn inni í python vélinni:

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna

Venjulega hef ég þurft að lesa SPARQL frekar en að skrifa það - í þeim aðstæðum væri það líklega gagnleg færni að skilja tungumálið að minnsta kosti á grunnstigi til að skilja nákvæmlega hvernig gögn eru sótt. 

Það er mikið af efni til að læra á netinu: til dæmis hér þetta и þetta. Ég googla venjulega sérstaka hönnun og dæmi og það er nóg í bili.

Rökrétt fyrirspurnatungumál

Þú getur lesið meira um efnið í greininni minni hér. Og hér munum við aðeins skoða í stuttu máli hvers vegna rökrétt tungumál henta vel til að skrifa fyrirspurnir. Í meginatriðum er RDF bara safn af rökréttum fullyrðingum af forminu p(X) og h(X,Y), og rökrétt fyrirspurn hefur eftirfarandi form:

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

Hér erum við að tala um að búa til nýjan forboðsútgang/1 (/1 þýðir einfalt), að því tilskildu að fyrir X sé það satt að land(X) - þ.e.a.s. X er land og einnig meðlimur_af(X,"ESB ").

Það er, í þessu tilviki eru bæði gögnin og reglurnar settar fram á sama hátt, sem gerir okkur kleift að móta vandamál mjög auðveldlega og vel.

Hvar kynntist þú í greininni?: heilt stórt verkefni hjá fyrirtæki sem skrifar fyrirspurnir á slíku tungumáli, sem og um núverandi verkefni í kjarna kerfisins - það virðist sem þetta sé frekar framandi hlutur, en stundum gerist það.

Dæmi um kóðabrot í rökréttu máli sem vinnur wikidata:

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna

Efni: Ég mun gefa hér nokkra tengla á nútíma rökrétt forritunarmál Answer Set Forritun - ég mæli með að læra það:

Athugasemdir gagnafræðinga: Persónuleg endurskoðun á tungumálum gagnafyrirspurna

Heimild: www.habr.com

Bæta við athugasemd