Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua
Esperientzia pertsonaletik esaten dizut zer izan zen erabilgarria non eta noiz. Ikuspegi orokorra eta tesia da, argi egon dadin zer eta non sakon dezakezun, baina hemen esperientzia pertsonal subjektiboa daukat, agian dena guztiz ezberdina da zuretzat.

Zergatik da garrantzitsua kontsulta-lengoaiak ezagutzea eta erabiltzeko gai izatea? Bere oinarrian, Data Sciencek hainbat lan-etapa garrantzitsu ditu, eta lehenengoa eta garrantzitsuena (hori gabe, zalantzarik gabe, ezerk ez du funtzionatuko!) datuak lortzea edo ateratzea da. Gehienetan, datuak nonbait eserita daude eta hortik "berreskuratu" behar dira. 

Kontsulten lengoaiek datu hauek ateratzeko aukera ematen dute! Eta gaur baliagarriak izan zaizkidan kontsulta-hizkuntza horien berri emango dizut eta non eta nola zehazki - zergatik ikasi behar den esango dizut eta erakutsiko dizut.

Datuen kontsulta motaren hiru bloke nagusi izango dira, artikulu honetan eztabaidatuko ditugunak:

  • Kontsulta-lengoaia "estandarrak" kontsulta-lengoai bati buruz hitz egitean normalean ulertzen dena dira, hala nola erlazio-aljebra edo SQL.
  • Scripting kontsulta-lengoaiak: adibidez, Python things pandas, numpy edo shell scripting-a.
  • Ezagutza grafikoetarako eta datu-base grafikoetarako kontsulta hizkuntzak.

Hemen idatzitako guztia esperientzia pertsonal bat besterik ez da, baliagarria izan zena, egoeren deskribapena eta "zertarako behar zen" batekin; denek proba dezakete antzeko egoerak nola etor daitezkeen eta aldez aurretik haietarako prestatzen saiatu hizkuntza hauek ulertuz. ​aurretik (premiazkoa) proiektu batean eskatu behar duzu edo baita behar diren proiektu batera ere iritsi.

Kontsulta-hizkuntza "estandarrak".

Kontsulta-hizkuntza estandarrak kontsultei buruz hitz egiten dugunean horiei buruz pentsatzen dugun zentzuan dira hain zuzen ere.

Erlazio-aljebra

Zergatik behar da gaur egun erlazio aljebra? Kontsulta-lengoaiak modu jakin batean egituratzen diren ondo ulertzeko eta kontzienteki erabiltzeko, haien azpian dagoen muina ulertu behar duzu.

Zer da erlazio aljebra?

Definizio formala honako hau da: erlazio-aljebra erlazioen datu-eredu bateko erlazioei buruzko eragiketa sistema itxia da. Pixka bat gizatiarki esateko, taulen gaineko eragiketa sistema bat da, emaitza beti taula bat da.

Ikusi harreman-eragiketa guztiak hemen hau Habr-en artikulua - hemen zergatik jakin behar duzun eta non den erabilgarria deskribatzen dugu.

Zergatik?

Kontsulta-lengoaiak zertaz eta zer operazio dauden kontsulta-hizkuntza espezifikoetako esamoldeen atzean ulertzen hastea, askotan, kontsulta-lengoaietan zer funtzionatzen duen eta nola funtzionatzen duen ulertzen hastea.

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua
Handik hartua hau artikuluak. Eragiketa adibide bat: batu, taulak batzen dituena.

Ikasteko materialak:

Stanford-eko hastapen ikastaro ona. Oro har, erlazio aljebra eta teoriari buruzko material asko dago - Coursera, Udacity. Sarean ere material kopuru handia dago, ona barne ikastaro akademikoak. Nire aholku pertsonala: harreman-aljebra oso ondo ulertu behar duzu - hau da oinarrien oinarria.

SQL

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua
Handik hartua hau artikuluak.

SQL, funtsean, erlazio aljebraren inplementazioa da - ohar garrantzitsu batekin, SQL deklaratiboa da! Hau da, kontsulta bat aljebra erlazionalaren hizkuntzan idaztean, benetan esaten duzu nola kalkulatu behar den - baina SQL-rekin zer atera nahi duzun zehazten duzu, eta orduan DBMSak dagoeneko sortzen ditu adierazpen (eraginkorrak) erlazio aljebrako hizkuntzan (haien baliokidetasuna bezala ezagutzen dugu Codd-en teorema).

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua
Handik hartua hau artikuluak.

Zergatik?

Erlazional DBMSak: Oracle, Postgres, SQL Server, etab. ia nonahi daude oraindik eta haiekin elkarreragiteko aukera izugarri handia dago, hau da, SQL irakurri beharko duzula (oso litekeena da) edo idatzi beharko duzu ( ez da nekez ere).

Zer irakurri eta ikasi

Goiko esteka berdinen arabera (erlazio-aljebrari buruz), material kopuru izugarria dago, adibidez, hau.

Bide batez, zer da NoSQL?

"Beste behin azpimarratzekoa da "NoSQL" terminoak jatorri guztiz espontaneoa duela eta ez duela orokorrean onartutako definiziorik edo erakunde zientifikorik atzean". Dagokiona artikuluan on Habr.

Izan ere, jendea konturatu zen ez dela beharrezkoa erlazio-eredu osoa arazo asko konpontzeko, batez ere, adibidez, errendimendua kritikoa den eta agregazioarekin egindako zenbait kontsulta sinple nagusi direnentzat, non funtsezkoa den metrikak azkar kalkulatzea eta horiek idaztea. datu-basea, eta ezaugarri gehienak erlazionalak dira beharrezkoak ez ezik, kaltegarriak ere izan direla - zergatik normalizatu zerbait garrantzitsuena hondatuko badigu (zeregin zehatz batzuetarako) - produktibitatea?

Gainera, sarritan eskema malguak behar dira eredu erlazional klasikoaren eskema matematiko finkoen ordez - eta horrek izugarri errazten du aplikazioen garapena sistema zabaltzea eta azkar lanean hastea funtsezkoa denean, emaitzak prozesatzen - edo gordetako datuen eskema eta motak. ez dira hain garrantzitsuak.

Adibidez, sistema aditu bat sortzen ari gara eta domeinu jakin bateko informazioa meta informazio batzuekin batera gorde nahi dugu - baliteke eremu guztiak ez ezagutzea eta erregistro bakoitzeko JSON besterik gabe gordetzea - ​​honek datuak zabaltzeko oso ingurune malgua ematen digu. eredua eta azkar errepikatzea - ​​beraz, kasu honetan, NoSQL are hobe eta irakurgarriagoa izango da. Sarrera adibidea (noSQL behar zen tokian zegoen nire proiektuetako batetik).

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

Gehiago irakur dezakezu Hemen NoSQLri buruz.

Zer ikasi?

Hemen, hobeto esanda, zure zeregina, zer propietate dituen eta deskribapen honetara egokituko diren NoSQL sistemak zeintzuk diren aztertzea besterik ez duzu behar, eta gero sistema hau aztertzen hasi.

Scripting Kontsulta Lengoaiak

Hasieran, badirudi, Python-ek zer zerikusi duen horrekin orokorrean: programazio-lengoaia bat da, eta ez batere kontsultei buruz.

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua

  • Pandas, literalki, Data Scienceren Suitzako aiztoa da; datuen eraldaketa, agregazio eta abar asko gertatzen dira bertan.
  • Numpy - kalkulu bektorialak, matrizeak eta aljebra lineala bertan.
  • Scipy - pakete honetan matematika asko dago, batez ere estatistikak.
  • Jupyter lab - esplorazio-datuen analisi asko ondo sartzen dira ordenagailu eramangarrietan - jakiteko erabilgarria.
  • Eskaerak - sarearekin lan egitea.
  • Pyspark oso ezaguna da datu-ingeniarien artean, ziurrenik honekin edo Spark-ekin elkarreragin beharko duzu, haien ospea dela eta.
  • *Selenioa - oso erabilgarria guneetatik eta baliabideetatik datuak biltzeko, batzuetan ez dago datuak lortzeko beste modurik.

Nire aholku nagusia: ikasi Python!

pandas

Har dezagun kode hau adibide gisa:

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

Funtsean, kodea SQL eredu klasikoan sartzen dela ikusten dugu.

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

Baina garrantzitsuena da kode hau script-aren eta kanalizazioaren parte dela; Izan ere, kontsultak Python kanalizazioan txertatzen ari gara. Egoera honetan, Pandas edo pySpark bezalako liburutegietatik datorkigu kontsulta-lengoaia.

Oro har, pySpark-en antzeko datuen eraldaketa mota bat ikusten dugu kontsulta-lengoaia baten bidez:

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

Non eta zer irakurri

Pythonen bertan, oro har ez da arazoa ikasteko materialak aurkitu. Tutorial ugari daude sarean pandas, pySpark eta ikastaroak Txinparta (eta berez ere bai DS). Orokorrean, hemengo edukia oso ona da google-rako, eta bideratzeko pakete bat aukeratu beharko banu, pandak izango lirateke, noski. DS+Python materialen konbinazioari dagokionez ere asko.

Shell kontsulta-hizkuntza gisa

Lan egin ditudan datuen prozesatzeko eta aztertzeko proiektu gutxi batzuk dira, hain zuzen ere, Python-en, Java-n eta shell-eko komandoetan kodea deitzen duten shell script-ak. Hori dela eta, oro har, bash/zsh/etc-en kanalizazioak goi-mailako kontsulta modukotzat har ditzakezu (noski, bertan begiztak bete ditzakezu, baina hori ez da ohikoa DS kodea shell lengoaietan), eman dezagun adibide sinple bat - wikidatuen QID mapaketa bat eta errusiar eta ingelesezko wikietarako esteka osoak egin behar nituen, horretarako bash-eko komandoetatik eskaera sinple bat idatzi nuen eta irteerarako script soil bat idatzi nuen Python-en, eta honela elkartu:

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

non

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

Hau izan zen, hain zuzen ere, beharrezko mapak sortu zituen kanalizazio osoa; ikusten dugunez, dena fluxu moduan funtzionatzen zuen:

  • pv filepath - fitxategiaren tamainaren araberako aurrerapen-barra ematen du eta bere edukia aurrera eramaten du
  • unpigz -c artxiboaren zati bat irakurri eta jq-i eman zion
  • jq gakoarekin - korronteak berehala emaitza sortu zuen eta postprozesadorera pasatu zuen (lehen adibidearekin bezala) Python-en
  • barnean, postprozesadorea irteera formateatzen zuen egoera makina sinple bat zen 

Guztira, datu handietan fluxu moduan lan egiten duen kanalizazio konplexu bat (0.5 TB), baliabide esanguratsurik gabe eta kanalizazio sinple batetik eta tresna pare batekin egina.

Beste aholku garrantzitsu bat: terminalean ondo eta eraginkortasunez lan egin eta bash/zsh/etc idatzi.

Non izango da erabilgarria? Bai, ia nonahi - berriro ere, Interneten ikasteko material ASKO dago. Bereziki, hemen hau nire aurreko artikulua.

R gidoia

Berriz ere, irakurleak oihu egin dezake - tira, hau programazio-lengoaia oso bat da! Eta noski, arrazoia izango du. Hala ere, normalean R-a topatzen nuen testuinguru batean, non, egia esan, kontsulta-lengoaia baten oso antzekoa baitzen.

R konputazio estatikorako eta bistaratzeko ingurune eta lengoaia estatistiko bat da (haren arabera hau).

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua
hartua beraz,. Bide batez, gomendatzen dut, material ona.

Zergatik jakin behar du datuen zientzialari batek R? Gutxienez, R-n datuak aztertzen dituen informatika ez den jende geruza handi bat dagoelako. Toki hauetan topatu dut:

  • Farmazia sektorea.
  • Biologoak.
  • Finantza sektorea.
  • Heziketa matematiko hutsa duten pertsonak, estatistikak lantzen dituztenak.
  • Eredu estatistiko espezializatuak eta ikaskuntza automatikoko ereduak (sarritan egilearen bertsioan soilik aurki daitezke R pakete gisa).

Zergatik da benetan kontsulta-lengoaia? Sarritan aurkitu ohi den moduan, eredu bat sortzeko eskaera da, datuak irakurtzea eta kontsulta (eredua) parametroak konpontzea barne, baita ggplot2 bezalako paketeetan datuak bistaratzea ere; hau ere kontsultak idazteko modu bat da. .

Bistaratzeko kontsulta adibide

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

Orokorrean, R-ren ideia asko python paketeetara migratu dira, hala nola panda, numpy edo scipy, datu-markoak eta datuen bektoreizazioa bezalakoak; beraz, orokorrean, R-n gauza asko ezagunak eta erosoak irudituko zaizkizu.

Iturri asko daude aztertzeko, adibidez, hau.

Ezagutza grafikoak

Hemen esperientzia apur bat ezohikoa daukat, sarritan ezagutza grafikoekin eta grafikoetarako kontsulta lengoaiekin lan egin behar izaten baitut. Horregatik, labur ditzagun oinarriak, zati hau apur bat exotikoagoa baita.

Datu-base erlazional klasikoetan eskema finkoa dugu, baina hemen eskema malgua da, predikatu bakoitza benetan "zutabe" bat da eta are gehiago.

Imajinatu pertsona bat modelatzen ari zinela eta funtsezko gauzak deskribatu nahi dituzula, adibidez, har dezagun pertsona zehatz bat, Douglas Adams, eta erabil dezagun deskribapen hau oinarri gisa.

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua
www.wikidata.org/wiki/Q42

Datu-base erlazional bat erabiliko bagenu, zutabe kopuru handiarekin taula edo taula erraldoi bat sortu beharko genuke, gehienak NULL izango lirateke edo lehenetsitako balio faltsu batekin beteta, adibidez, nekez dugu gutako askok Koreako liburutegi nazionalean sarrera - noski, taula bereizietan jar genitzake, baina azken finean, zirkuitu logiko malgu bat predikatuekin erlazional finko bat erabiliz modelatzeko saiakera izango litzateke.

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua
Beraz, imajinatu datu guztiak grafiko gisa edo adierazpen boolear bitar eta unario gisa gordetzen direla.

Non topa dezakezu hau? Lehenik eta behin, lanean datuen wikia, eta edozein datu-base grafikoekin edo konektatutako datuekin.

Honako hauek dira erabili eta lan egin ditudan kontsulta-hizkuntza nagusiak.

SPARQL

Wiki:
SPARQL (sigla errekurtsiboa tik Ing. SPARQL Protokoloa eta RDF Kontsulta Lengoaia) - datuak kontsultatzeko hizkuntza, ereduak irudikatuta RDFEta protokoloa eskaera horiek transmititu eta haiei erantzuteko. SPARQL gomendio bat da W3C Partzuergoa eta teknologietako bat web semantikoa.

Baina errealitatean predikatu unario eta bitar logikoentzako kontsulta-lengoaia da. Baldintzapean zehazten ari zara espresio boolear batean zer finkatuta dagoen eta zer ez (oso sinplifikatua).

RDF (Resource Description Framework) oinarria bera, zeinaren gainean SPARQL kontsultak exekutatzen diren, hirukoitza da. object, predicate, subject - eta kontsultak eskatzen dituen hirukoteak aukeratzen ditu izpirituan zehaztutako murrizketen arabera: aurkitu X bat, hala nola p_55(X, q_33) egiazkoa den - non, noski, p_55 ID 55-rekin nolabaiteko erlazioa den eta q_33 bat den. 33 ID duen objektua (hemen eta istorio osoa, berriro ere xehetasun guztiak baztertuz).

Datuen aurkezpenaren adibidea:

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua
Herrialdeekin argazkiak eta adibidea hemen beraz,.

Oinarrizko Kontsulta Adibidea

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua

Izan ere, ?herrialde aldagaiaren balioa bilatu nahi dugu predikaturako
member_of, egia da member_of(?country,q458) eta q458 Europar Batasunaren IDa dela.

Python motorren barruan benetako SPARQL kontsulta baten adibidea:

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua

Normalean, idatzi beharrean SPARQL irakurri behar izan dut; egoera horretan, litekeena da hizkuntza oinarrizko mailan ulertzea trebetasun erabilgarria izango litzateke datuak nola lortzen diren zehazki ulertzeko. 

Sarean ikasteko material asko dago: adibidez, hemen hau и hau. Diseinu eta adibide zehatzak Googlen bilatzen ditut normalean eta nahikoa da oraingoz.

Kontsulta-lengoaia logikoak

Gaiari buruz gehiago irakur dezakezu nire artikuluan Hemen. Eta hemen, labur-labur aztertuko dugu zergatik hizkuntza logikoak egokiak diren kontsultak idazteko. Funtsean, RDF p(X) eta h(X,Y) formako adierazpen logikoen multzo bat besterik ez da, eta kontsulta logiko batek forma hau du:

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

Hemen predikatu berri bat output/1 sortzeaz ari gara (/1 unarioa esan nahi du), baldin eta X-rentzat egia bada herrialdea (X) dela - hau da, X herrialde bat da eta (X, "EU ") kidea ere bada.

Hau da, kasu honetan, bai datuak bai arauak modu berean aurkezten dira, eta horrek arazoak oso erraz eta ondo modelatzeko aukera ematen digu.

Non ezagutu zinen industrian?: proiektu handi oso bat horrelako hizkuntza batean kontsultak idazten dituen enpresa batekin, baita sistemaren muinean dagoen proiektuaren gainean ere - badirudi gauza nahiko exotikoa dela, baina batzuetan gertatzen da.

Lengoaia logikoko prozesatzeko wikidata batean kode zati baten adibidea:

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua

Materialak: hemen programazio logiko modernorako esteka batzuk emango ditut Answer Set Programming - hori aztertzea gomendatzen dut:

Data Scientist-en oharrak: Datuen kontsulta-lengoaien berrikuspen pertsonalizatua

Iturria: www.habr.com

Gehitu iruzkin berria