Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query
Sinasabi ko sa iyo mula sa personal na karanasan kung ano ang kapaki-pakinabang kung saan at kailan. Ito ay pangkalahatang-ideya at tesis, upang malinaw kung ano at kung saan maaari kang maghukay pa - ngunit narito mayroon akong eksklusibong subjective na personal na karanasan, marahil ang lahat ay ganap na naiiba para sa iyo.

Bakit mahalagang malaman at magamit ang mga wika ng query? Sa kaibuturan nito, ang Data Science ay may ilang mahahalagang yugto ng trabaho, at ang pinakauna at pinakamahalaga (kung wala ito, tiyak na walang gagana!) ay ang pagkuha o pagkuha ng data. Kadalasan, ang data ay nakaupo sa isang lugar sa ilang anyo at kailangang "bawiin" mula doon. 

Binibigyang-daan ka ng mga query na wika na kunin ang mismong data na ito! At ngayon sasabihin ko sa iyo ang tungkol sa mga query na wika na naging kapaki-pakinabang sa akin at sasabihin ko sa iyo at ipapakita sa iyo kung saan at kung paano eksakto - kung bakit kailangan itong mag-aral.

Magkakaroon ng tatlong pangunahing bloke ng mga uri ng query ng data, na tatalakayin natin sa artikulong ito:

  • Ang "Standard" na mga wika ng query ay ang karaniwang nauunawaan kapag pinag-uusapan ang isang wika ng query, gaya ng relational algebra o SQL.
  • Mga wika ng query sa scripting: halimbawa, Python things pandas, numpy o shell scripting.
  • Mga wika ng query para sa mga graph ng kaalaman at mga database ng graph.

Ang lahat ng nakasulat dito ay isang personal na karanasan lamang, kung ano ang kapaki-pakinabang, na may isang paglalarawan ng mga sitwasyon at "bakit ito kinakailangan" - lahat ay maaaring subukan kung paano ang mga katulad na sitwasyon ay maaaring dumating sa iyo at subukang maghanda para sa kanila nang maaga sa pamamagitan ng pag-unawa sa mga wikang ito ​Bago ka mag-apply (maagap) sa isang proyekto o kahit na makarating sa isang proyekto kung saan kinakailangan ang mga ito.

"Karaniwan" na mga wika ng query

Ang mga karaniwang wika ng query ay tiyak sa kahulugan na karaniwan nating iniisip ang mga ito kapag pinag-uusapan natin ang mga query.

Relational algebra

Bakit kailangan ang relational algebra ngayon? Upang magkaroon ng isang mahusay na pag-unawa kung bakit nakaayos ang mga wika ng query sa isang tiyak na paraan at sinasadyang gamitin ang mga ito, kailangan mong maunawaan ang pangunahing pinagbabatayan ng mga ito.

Ano ang relational algebra?

Ang pormal na kahulugan ay ang mga sumusunod: ang relational algebra ay isang saradong sistema ng mga operasyon sa mga relasyon sa isang relational na modelo ng data. Upang ilagay ito nang mas makatao, ito ay isang sistema ng mga operasyon sa mga talahanayan na ang resulta ay palaging isang talahanayan.

Tingnan ang lahat ng relational na operasyon sa ito artikulo mula sa Habr - dito namin inilalarawan kung bakit kailangan mong malaman at kung saan ito ay madaling gamitin.

Bakit?

Ang simulang maunawaan kung tungkol saan ang mga wika ng query at kung anong mga operasyon ang nasa likod ng mga expression sa mga partikular na wika ng query ay kadalasang nagbibigay ng mas malalim na pag-unawa sa kung ano ang gumagana sa mga wika ng query at kung paano.

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query
Kinuha mula sa ito mga artikulo. Isang halimbawa ng isang operasyon: sumali, na nagsasama ng mga talahanayan.

Mga materyales para sa pag-aaral:

Magandang panimulang kurso mula sa Stanford. Sa pangkalahatan, maraming materyales sa relational algebra at teorya - Coursera, Udacity. Mayroon ding isang malaking halaga ng materyal sa online, kabilang ang mabuti mga kursong akademiko. Ang aking personal na payo: kailangan mong maunawaan nang mabuti ang relational algebra - ito ang batayan ng mga pangunahing kaalaman.

SQL

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query
Kinuha mula sa ito artikulo.

Ang SQL ay mahalagang pagpapatupad ng relational algebra - na may mahalagang caveat, ang SQL ay deklaratibo! Iyon ay, kapag nagsusulat ng isang query sa wika ng relational algebra, talagang sasabihin mo kung paano magkalkula - ngunit sa SQL ay tinukoy mo kung ano ang gusto mong i-extract, at pagkatapos ay ang DBMS ay bumubuo na ng (epektibong) mga expression sa wika ng relational algebra (ang kanilang pagkakapareho ay kilala sa amin bilang Ang teorama ni Codd).

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query
Kinuha mula sa ito artikulo.

Bakit?

Mga Relational na DBMS: Oracle, Postgres, SQL Server, atbp ay nasa halos lahat ng dako at mayroong isang napakalaking pagkakataon na kailangan mong makipag-ugnayan sa kanila, na nangangahulugang kakailanganin mong basahin ang SQL (na malamang) o isulat ito ( hindi rin malamang).

Ano ang dapat basahin at pag-aralan

Ayon sa parehong mga link sa itaas (tungkol sa relational algebra), mayroong isang hindi kapani-paniwalang dami ng materyal, halimbawa, ito.

Sa pamamagitan ng paraan, ano ang NoSQL?

"Nararapat na bigyang-diin muli na ang terminong "NoSQL" ay may ganap na kusang pinagmulan at walang pangkalahatang tinatanggap na kahulugan o institusyong pang-agham sa likod nito." Naaayon artikulo sa Habr.

Sa katunayan, napagtanto ng mga tao na ang isang buong modelo ng relasyon ay hindi kailangan upang malutas ang maraming mga problema, lalo na para sa mga kung saan, halimbawa, ang pagganap ay kritikal at ang ilang mga simpleng query na may pagsasama-sama ay nangingibabaw - kung saan napakahalaga na mabilis na kalkulahin ang mga sukatan at isulat ang mga ito sa database, at karamihan sa mga tampok ay pamanggit ay naging hindi lamang hindi kailangan, ngunit nakakapinsala din - bakit gawing normal ang isang bagay kung ito ay masira ang pinakamahalagang bagay para sa amin (para sa ilang partikular na gawain) - pagiging produktibo?

Gayundin, madalas na kailangan ang mga flexible na schema sa halip na ang mga nakapirming mathematical schema ng classical relational na modelo - at ito ay hindi kapani-paniwalang pinapasimple ang pagbuo ng application kapag kritikal na i-deploy ang system at magsimulang magtrabaho nang mabilis, iproseso ang mga resulta - o ang schema at mga uri ng nakaimbak na data ay hindi gaanong mahalaga.

Halimbawa, gumagawa kami ng expert system at gusto naming mag-imbak ng impormasyon sa isang partikular na domain kasama ng ilang meta information - maaaring hindi namin alam ang lahat ng field at mag-imbak lang kami ng JSON para sa bawat record - nagbibigay ito sa amin ng napaka-flexible na kapaligiran para sa pagpapalawak ng data. modelo at mabilis na umuulit - kaya sa kasong ito, ang NoSQL ay magiging mas kanais-nais at mas nababasa. Halimbawang entry (mula sa isa sa aking mga proyekto kung saan ang NoSQL ay tama kung saan ito kinakailangan).

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

Maaari mong basahin ang higit pa dito tungkol sa NoSQL.

Ano ang dapat pag-aralan?

Dito, sa halip, kailangan mo lamang na masusing pag-aralan ang iyong gawain, kung anong mga katangian ang mayroon ito at kung anong mga sistema ng NoSQL ang magagamit na angkop sa paglalarawang ito - at pagkatapos ay simulan ang pag-aaral ng sistemang ito.

Mga Wika ng Query sa Pag-script

Sa una, tila, ano ang kinalaman ng Python dito sa pangkalahatan - ito ay isang programming language, at hindi tungkol sa mga query.

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query

  • Ang Pandas ay literal na isang Swiss Army na kutsilyo ng Data Science; isang malaking halaga ng pagbabago ng data, pagsasama-sama, atbp. ang nangyayari dito.
  • Numpy - mga kalkulasyon ng vector, matrice at linear algebra doon.
  • Scipy - mayroong maraming matematika sa paketeng ito, lalo na ang mga istatistika.
  • Jupyter lab - maraming pagsusuri sa data ng eksplorasyon ang akma sa mga laptop - kapaki-pakinabang na malaman.
  • Mga Kahilingan - nagtatrabaho sa network.
  • Ang Pyspark ay napakapopular sa mga inhinyero ng data, malamang na kailangan mong makipag-ugnayan dito o Spark, dahil lamang sa kanilang kasikatan.
  • *Selenium - lubhang kapaki-pakinabang para sa pagkolekta ng data mula sa mga site at mapagkukunan, kung minsan ay walang ibang paraan upang makuha ang data.

Ang aking pangunahing payo: matuto ng Python!

Pandas

Kunin natin ang sumusunod na code bilang isang halimbawa:

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

Mahalaga, nakikita namin na ang code ay umaangkop sa klasikong pattern ng 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

Ngunit ang mahalagang bahagi ay ang code na ito ay bahagi ng script at pipeline; sa katunayan, kami ay naglalagay ng mga query sa Python pipeline. Sa sitwasyong ito, ang wika ng query ay dumarating sa amin mula sa mga aklatan tulad ng Pandas o pySpark.

Sa pangkalahatan, sa pySpark nakikita namin ang isang katulad na uri ng pagbabago ng data sa pamamagitan ng isang wika ng query sa diwa ng:

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

Saan at ano ang mababasa

Sa Python mismo sa pangkalahatan walang problema maghanap ng mga materyales na pag-aaralan. Mayroong isang malaking bilang ng mga tutorial online pandas, pySpark at mga kurso sa Dagitab (at din sa sarili DS). Sa pangkalahatan, ang nilalaman dito ay mahusay para sa pag-googling, at kung kailangan kong pumili ng isang pakete na pagtutuunan ng pansin, ito ay mga pandas, siyempre. Tungkol din sa kumbinasyon ng mga materyales ng DS+Python magkano.

Shell bilang isang wika ng query

Ang ilang mga proyekto sa pagproseso at pagsusuri ng data na nakatrabaho ko ay, sa katunayan, mga script ng shell na tumatawag sa code sa Python, Java, at ang mga utos ng shell mismo. Samakatuwid, sa pangkalahatan, maaari mong isaalang-alang ang mga pipeline sa bash/zsh/etc bilang isang uri ng mataas na antas ng query (maaari mo, siyempre, ang mga bagay na loops doon, ngunit hindi ito tipikal para sa DS code sa mga wika ng shell), bigyan natin isang simpleng halimbawa - Kailangan kong gumawa ng QID mapping ng wikidata at mga buong link sa Russian at English na wiki, para dito nagsulat ako ng isang simpleng kahilingan mula sa mga command sa bash at para sa output ay nagsulat ako ng isang simpleng script sa Python, na kung saan ako pagsama-samahin tulad nito:

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

saan

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

Ito ay, sa katunayan, ang buong pipeline na lumikha ng kinakailangang pagmamapa; tulad ng nakikita natin, lahat ay gumana sa stream mode:

  • pv filepath - nagbibigay ng progress bar batay sa laki ng file at ipinapasa ang mga nilalaman nito
  • unpigz -c basahin ang bahagi ng archive at ibinigay ito sa jq
  • jq na may susi - agad na ginawa ng stream ang resulta at ipinasa ito sa postprocessor (katulad ng sa pinakaunang halimbawa) sa Python
  • sa loob, ang postprocessor ay isang simpleng state machine na nag-format ng output 

Sa kabuuan, isang kumplikadong pipeline na gumagana sa flow mode sa malaking data (0.5TB), na walang makabuluhang mapagkukunan at ginawa mula sa isang simpleng pipeline at ilang tool.

Isa pang mahalagang tip: makapagtrabaho nang maayos at epektibo sa terminal at magsulat ng bash/zsh/etc.

Saan ito magiging kapaki-pakinabang? Oo, halos lahat ng dako - muli, mayroong MARAMING materyal na pag-aaralan sa Internet. Sa partikular, dito ito ang aking nakaraang artikulo.

R scripting

Muli, ang mambabasa ay maaaring sumigaw - mabuti, ito ay isang buong programming language! At siyempre, magiging tama siya. Gayunpaman, karaniwan kong nakatagpo ang R sa ganitong konteksto na, sa katunayan, ito ay halos kapareho sa isang wika ng query.

Ang R ay isang statistical computing environment at wika para sa static computing at visualization (ayon sa ito).

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query
kinuha kaya. Sa pamamagitan ng paraan, inirerekumenda ko ito, magandang materyal.

Bakit kailangang malaman ng data scientist ang R? Hindi bababa sa, dahil mayroong isang malaking layer ng mga taong hindi IT na nagsusuri ng data sa R. Nakita ko ito sa mga sumusunod na lugar:

  • Sektor ng parmasyutiko.
  • Mga biologist.
  • Sektor ng pananalapi.
  • Mga taong may puro matematika na edukasyon na nakikitungo sa mga istatistika.
  • Mga espesyal na modelo ng istatistika at mga modelo ng machine learning (na kadalasang makikita lamang sa bersyon ng may-akda bilang isang R package).

Bakit ito talaga ay isang query language? Sa anyo kung saan madalas itong matatagpuan, ito ay talagang isang kahilingan upang lumikha ng isang modelo, kabilang ang pagbabasa ng data at pag-aayos ng mga parameter ng query (modelo), pati na rin ang pag-visualize ng data sa mga pakete tulad ng ggplot2 - isa rin itong anyo ng pagsulat ng mga query .

Mga halimbawang query para sa visualization

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

Sa pangkalahatan, maraming mga ideya mula sa R ​​ang lumipat sa mga pakete ng python tulad ng mga pandas, numpy o scipy, tulad ng mga dataframe at data vectorization - kaya sa pangkalahatan maraming bagay sa R ​​ang mukhang pamilyar at maginhawa sa iyo.

Mayroong maraming mga mapagkukunan upang pag-aralan, halimbawa, ito.

Mga graph ng kaalaman

Narito mayroon akong isang bahagyang hindi pangkaraniwang karanasan, dahil madalas akong kailangang magtrabaho sa mga graph ng kaalaman at mga wika ng query para sa mga graph. Samakatuwid, saglit lang nating talakayin ang mga pangunahing kaalaman, dahil ang bahaging ito ay medyo mas kakaiba.

Sa mga klasikal na relational database mayroon kaming isang nakapirming schema, ngunit dito ang schema ay flexible, ang bawat panaguri ay talagang isang "column" at higit pa.

Isipin na nagmomodelo ka ng isang tao at gusto mong ilarawan ang mga mahahalagang bagay, halimbawa, kunin natin ang isang partikular na tao, si Douglas Adams, at gamitin ang paglalarawang ito bilang batayan.

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query
www.wikidata.org/wiki/Q42

Kung gumamit kami ng relational database, kailangan naming gumawa ng malaking table o table na may malaking bilang ng mga column, karamihan sa mga ito ay NULL o puno ng ilang default na False value, halimbawa, malamang na marami sa atin ay may entry sa Korean national library - siyempre, maaari naming ilagay ang mga ito sa magkahiwalay na mga talahanayan, ngunit ito ay sa huli ay isang pagtatangka na magmodelo ng isang flexible logical circuit na may mga predicate gamit ang isang fixed relational one.

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query
Kaya isipin na ang lahat ng data ay naka-imbak bilang isang graph o bilang binary at unary boolean expression.

Saan ka makakatagpo ng ganito? Una, nagtatrabaho sa data wiki, at sa anumang mga database ng graph o konektadong data.

Ang mga sumusunod ay ang mga pangunahing wika ng query na ginamit at nakatrabaho ko.

SPARQL

Wiki:
SPARQL (recursive acronym mula sa Eng. SPARQL Protocol at RDF Query Language) - wika ng query ng data, na kinakatawan ng modelo RDFAt protokol upang ipadala ang mga kahilingang ito at tumugon sa kanila. Ang SPARQL ay isang rekomendasyon W3C Consortium at isa sa mga teknolohiya semantic web.

Ngunit sa katotohanan ito ay isang wika ng query para sa mga lohikal na unary at binary na predicates. May kundisyon ka lang na tinutukoy kung ano ang naayos sa isang Boolean na expression at kung ano ang hindi (napakasimple).

Ang mismong base ng RDF (Resource Description Framework), kung saan isinasagawa ang mga query sa SPARQL, ay isang triple object, predicate, subject - at pinipili ng query ang mga kinakailangang triple ayon sa tinukoy na mga paghihigpit sa espiritu: hanapin ang isang X na ang p_55(X, q_33) ay totoo - kung saan, siyempre, ang p_55 ay isang uri ng kaugnayan sa ID 55, at ang q_33 ay isang object na may ID 33 (dito at ang buong kuwento, muling tinatanggal ang lahat ng uri ng mga detalye).

Halimbawa ng presentasyon ng datos:

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query
Mga larawan at halimbawa sa mga bansa dito kaya.

Halimbawa ng Pangunahing Query

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query

Sa katunayan, gusto naming hanapin ang halaga ng ? variable ng bansa na para sa panaguri
member_of, totoo na member_of(?country,q458) at q458 ang ID ng European Union.

Isang halimbawa ng isang tunay na query sa SPARQL sa loob ng python engine:

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query

Kadalasan, kinailangan kong basahin ang SPARQL sa halip na isulat ito - sa sitwasyong iyon, malamang na isang kapaki-pakinabang na kasanayan na maunawaan ang wika kahit man lang sa isang pangunahing antas upang maunawaan nang eksakto kung paano kinukuha ang data. 

Maraming materyal na pag-aaralan online: halimbawa, dito ito и ito. Karaniwan akong nag-google ng mga partikular na disenyo at halimbawa at sapat na iyon sa ngayon.

Mga wikang lohikal na query

Maaari kang magbasa nang higit pa sa paksa sa aking artikulo dito. At dito, susuriin lamang natin nang maikli kung bakit ang mga lohikal na wika ay angkop para sa pagsusulat ng mga query. Sa esensya, ang RDF ay isang hanay lamang ng mga lohikal na pahayag ng anyong p(X) at h(X,Y), at ang isang lohikal na query ay may sumusunod na anyo:

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

Dito pinag-uusapan natin ang paglikha ng bagong predicate na output/1 (/1 ay nangangahulugang unary), sa kondisyon na para sa X ay totoo na ang bansa(X) - ibig sabihin, ang X ay isang bansa at miyembro din ng(X,"EU ").

Ibig sabihin, sa kasong ito, ang data at ang mga panuntunan ay ipinakita sa parehong paraan, na nagbibigay-daan sa amin na magmodelo ng mga problema nang napakadali at maayos.

Saan kayo nagkakilala sa industriya?: isang buong malaking proyekto na may isang kumpanya na nagsusulat ng mga query sa naturang wika, pati na rin sa kasalukuyang proyekto sa core ng system - tila ito ay isang kakaibang bagay, ngunit kung minsan ito ay nangyayari.

Isang halimbawa ng isang fragment ng code sa isang lohikal na wika na nagpoproseso ng wikidata:

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query

Mga Materyales: Magbibigay ako dito ng ilang link sa modernong lohikal na programming language Answer Set Programming - Inirerekomenda kong pag-aralan ito:

Mga Tala ng Data Scientist: Isang Personalized na Pagsusuri ng Mga Wika ng Data Query

Pinagmulan: www.habr.com

Magdagdag ng komento