Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data
Gisultihan ko ikaw gikan sa personal nga kasinatian kung unsa ang mapuslanon kung asa ug kanus-a. Kini usa ka kinatibuk-ang panan-aw ug tesis, aron kini klaro kung unsa ug asa nimo mahimo nga magkalot pa - apan ania ako adunay eksklusibo nga suhetibo nga personal nga kasinatian, tingali ang tanan hingpit nga lahi alang kanimo.

Ngano nga importante nga makahibalo ug makagamit sa pangutana nga mga pinulongan? Sa kinauyokan niini, ang Data Science adunay ubay-ubay nga importanteng mga ang-ang sa trabaho, ug ang pinakauna ug pinakaimportante (kon wala niini, siguradong walay molihok!) mao ang pagkuha o pagkuha sa datos. Kasagaran, ang datos naglingkod sa usa ka lugar sa usa ka porma ug kinahanglan nga "makuha" gikan didto. 

Gitugotan ka sa mga pinulongan sa pangutana nga makuha kini nga datos! Ug karon isulti ko kanimo ang bahin sa mga pangutana nga mga pinulongan nga mapuslanon kanako ug isulti ko kanimo ug ipakita kanimo kung diin ug kung giunsa eksakto - kung ngano nga kinahanglan nga magtuon.

Adunay tulo ka mga nag-unang bloke sa mga tipo sa pangutana sa datos, nga atong hisgutan sa kini nga artikulo:

  • Ang "Standard" nga mga lengguwahe sa pangutana mao ang kasagarang masabtan kung maghisgot bahin sa usa ka pangutana nga lengguwahe, sama sa relational algebra o SQL.
  • Mga lengguwahe sa pagpangutana sa script: pananglitan, mga butang sa Python nga pandas, numpy o shell scripting.
  • Pangutana nga mga pinulongan alang sa mga graph sa kahibalo ug mga database sa graph.

Ang tanan nga gisulat dinhi usa lamang ka personal nga kasinatian, kung unsa ang mapuslanon, nga adunay usa ka paghulagway sa mga sitwasyon ug "ngano nga kini gikinahanglan" - ang tanan makasulay sa unsa nga paagi nga ang susama nga mga sitwasyon mahimong moabut sa imong dalan ug pagsulay sa pag-andam niini nga daan pinaagi sa pagsabut niini nga mga pinulongan ​sa dili pa nimo kinahanglan nga mag-aplay (dinalian) sa usa ka proyekto o bisan sa usa ka proyekto kung diin sila gikinahanglan.

"Standard" nga pangutana sa mga pinulongan

Ang mga standard nga pangutana sa mga pinulongan tukma sa diwa nga kasagaran natong gihunahuna kini kung maghisgot kita bahin sa mga pangutana.

Relasyonal nga algebra

Ngano nga gikinahanglan ang relational algebra karon? Aron adunay usa ka maayo nga pagsabut kung ngano nga ang mga pangutana sa mga pinulongan gi-istruktura sa usa ka piho nga paagi ug gigamit kini nga mahunahunaon, kinahanglan nimo nga masabtan ang kinauyokan nga nagpahiping kanila.

Unsa ang relational algebra?

Ang pormal nga kahulugan mao ang mosunod: ang relational algebra usa ka sirado nga sistema sa mga operasyon sa mga relasyon sa usa ka relational data model. Sa pagbutang niini nga mas tawhanon, kini usa ka sistema sa mga operasyon sa mga lamesa nga ang resulta kanunay usa ka lamesa.

Tan-awa ang tanang relational nga operasyon sa kini artikulo gikan sa Habr - dinhi among gihulagway kung ngano nga kinahanglan nimo mahibal-an ug kung diin kini magamit.

Ngano?

Ang pagsugod sa pagsabut kung unsa ang tanan nga mga pinulongan sa pangutana ug kung unsa ang mga operasyon sa luyo sa mga ekspresyon sa piho nga mga sinultian nga pangutana kanunay naghatag usa ka labi ka lawom nga pagsabut kung unsa ang molihok sa mga sinultian nga pangutana ug kung giunsa.

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data
Gikuha gikan sa kini mga artikulo. Usa ka pananglitan sa usa ka operasyon: pag-apil, nga nagdugtong sa mga lamesa.

Mga materyales para sa pagtuon:

Maayong pasiuna nga kurso gikan sa Stanford. Sa kinatibuk-an, adunay daghang mga materyal sa relational algebra ug teorya - Coursera, Udacity. Adunay usab usa ka dako nga kantidad sa materyal sa online, lakip ang maayo akademikong mga kurso. Ang akong personal nga tambag: kinahanglan nimo nga masabtan pag-ayo ang relational algebra - kini ang sukaranan sa mga sukaranan.

SQL

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data
Gikuha gikan sa kini mga artikulo.

Ang SQL usa ka pagpatuman sa relational algebra - nga adunay usa ka importante nga caveat, ang SQL usa ka deklaratibo! Sa ato pa, kung nagsulat usa ka pangutana sa lengguwahe sa relational algebra, giingon nimo kung giunsa ang pagkalkulo - apan sa SQL imong gitino kung unsa ang gusto nimo makuha, ug dayon ang DBMS nakamugna na (epektibo) nga mga ekspresyon sa lengguwahe sa relational algebra (ilang pagkaparehas nailhan kanato ingon nga Ang teorama ni Codd).

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data
Gikuha gikan sa kini mga artikulo.

Ngano?

Relational DBMSs: Oracle, Postgres, SQL Server, ug uban pa halos bisan asa ug adunay usa ka talagsaon nga taas nga kahigayunan nga kinahanglan ka nga makig-uban kanila, nga nagpasabut nga kinahanglan nimo nga basahon ang SQL (nga lagmit kaayo) o isulat kini ( dili usab posible).

Unsa ang basahon ug tun-an

Sumala sa parehas nga mga link sa ibabaw (mahitungod sa relational algebra), adunay usa ka dili katuohan nga kantidad sa materyal, pananglitan, kini.

By the way, unsa ang NoSQL?

"Kinahanglan nga hatagan og gibug-aton sa makausa pa nga ang termino nga "NoSQL" adunay usa ka hingpit nga natural nga gigikanan ug wala’y gidawat sa kadaghanan nga kahulugan o institusyon sa siyensya sa luyo niini." Katugbang nga artikulo sa Habr.

Sa tinuud, nahibal-an sa mga tawo nga ang usa ka hingpit nga modelo sa relasyon dili kinahanglan aron masulbad ang daghang mga problema, labi na alang sa mga diin, pananglitan, ang pasundayag kritikal ug pipila ka yano nga mga pangutana nga adunay panagsama nga naghari - diin hinungdanon nga dali nga makalkula ang mga sukatan ug isulat kini sa database, ug kadaghanan sa mga bahin sa mga relational nahimo nga dili lamang dili kinahanglan, apan makadaot usab - ngano nga i-normalize ang usa ka butang kung kini makadaot sa labing hinungdanon nga butang alang kanamo (alang sa pipila nga piho nga buluhaton) - pagka-produktibo?

Usab, ang mga flexible schemas kasagarang gikinahanglan imbes sa fixed mathematical schemas sa classical relational model - ug kini makapasayon ​​kaayo sa pag-develop sa aplikasyon kung importante nga i-deploy ang sistema ug magsugod dayon sa pagtrabaho, pagproseso sa mga resulta - o ang schema ug mga tipo sa gitipigan nga datos dili kaayo importante.

Pananglitan, naghimo kami usa ka eksperto nga sistema ug gusto nga magtipig kasayuran sa usa ka piho nga domain kauban ang pipila nga impormasyon sa meta - mahimo nga wala kami nahibal-an ang tanan nga mga natad ug yano nga nagtipig sa JSON alang sa matag rekord - naghatag kini kanamo usa ka labi ka dali nga palibot alang sa pagpalapad sa datos modelo ug dali nga pag-uli - busa sa niini nga kaso, ang NoSQL mahimong mas maayo ug mas mabasa. Pananglitan nga entry (gikan sa usa sa akong mga proyekto diin ang NoSQL husto kung diin kini gikinahanglan).

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

Makabasa ka ug dugang dinhi mahitungod sa NoSQL.

Unsa ang tun-an?

Dinhi, hinoon, kinahanglan nimo nga hingpit nga analisahon ang imong buluhaton, kung unsang mga kabtangan ang naa niini ug kung unsang mga sistema sa NoSQL ang magamit nga mohaum niini nga paghulagway - ug dayon magsugod sa pagtuon niini nga sistema.

Mga Pinulongan sa Pangutana sa Pagsulat

Sa sinugdan, ingon og, unsa ang kalabotan sa Python sa kinatibuk-an - kini usa ka programming language, ug dili bahin sa mga pangutana.

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data

  • Ang Pandas literal nga usa ka Swiss Army nga kutsilyo sa Data Science; usa ka dako nga kantidad sa pagbag-o sa datos, panagsama, ug uban pa ang mahitabo niini.
  • Numpy - mga kalkulasyon sa vector, matrice ug linear algebra didto.
  • Scipy - adunay daghang matematika sa kini nga pakete, labi na ang mga istatistika.
  • Jupyter lab - daghang pagsusi sa datos sa eksplorasyon nga haum kaayo sa mga laptop - mapuslanon nga mahibal-an.
  • Mga hangyo - nagtrabaho kauban ang network.
  • Ang Pyspark popular kaayo sa mga inhenyero sa datos, lagmit kinahanglan nimo nga makig-uban niini o Spark, tungod lang sa ilang pagkapopular.
  • *Selenium - mapuslanon kaayo alang sa pagkolekta sa datos gikan sa mga site ug kahinguhaan, usahay wala nay laing paagi aron makuha ang datos.

Ang akong panguna nga tambag: pagkat-on sa Python!

Pandas

Atong kuhaon ang mosunod nga code isip usa ka pananglitan:

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

Sa tinuud, nakita namon nga ang code mohaum sa klasiko nga sumbanan sa 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

Apan ang importante nga bahin mao nga kini nga kodigo kabahin sa script ug sa pipeline; sa pagkatinuod, kami nag-embed sa mga pangutana ngadto sa Python pipeline. Niini nga sitwasyon, ang pangutana nga pinulongan moabut kanato gikan sa mga librarya sama sa Pandas o pySpark.

Sa kinatibuk-an, sa pySpark atong makita ang susama nga matang sa pagbag-o sa datos pinaagi sa pangutana nga pinulongan sa diwa sa:

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

Asa ug unsay basahon

Sa Python mismo sa kinatibuk-an dili problema pagpangita og mga materyales aron tun-an. Adunay usa ka dako nga gidaghanon sa mga tutorial online pandas, pySpark ug mga kurso sa Spark (ug usab sa iyang kaugalingon DS). Sa kinatibuk-an, ang sulud dinhi maayo alang sa pag-googling, ug kung kinahanglan kong mopili usa ka pakete nga ipunting, kini mga pandas, siyempre. Mahitungod sa kombinasyon sa mga materyales sa DS+Python usab daghan kaayo.

Shell isip usa ka pangutana nga pinulongan

Daghang mga proyekto sa pagproseso ug pagtuki sa datos nga akong gitrabahoan, sa tinuud, mga script sa kabhang nga nagtawag sa code sa Python, Java, ug ang kabhang nagmando sa ilang kaugalingon. Busa, sa kinatibuk-an, mahimo nimong ikonsiderar ang mga pipeline sa bash/zsh/etc isip usa ka matang sa taas nga lebel nga pangutana (mahimo nimo, siyempre, ang mga butang nga mag-loop didto, apan dili kini tipikal alang sa DS code sa shell nga mga pinulongan), ihatag nato usa ka yano nga pananglitan - Kinahanglan kong maghimo usa ka QID mapping sa wikidata ug bug-os nga mga link sa Russian ug English nga wikis, alang niini nagsulat ako usa ka yano nga hangyo gikan sa mga mando sa bash ug alang sa output nagsulat ako usa ka yano nga script sa Python, nga akong ibutang sama niini:

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

diin

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

Kini, sa tinuud, ang tibuuk nga pipeline nga nagmugna sa gikinahanglan nga pagmapa; ingon sa among nakita, ang tanan nagtrabaho sa mode sa pag-agos:

  • pv filepath - naghatag ug progress bar base sa gidak-on sa file ug gipasa ang sulod niini
  • unpigz -c gibasa ang bahin sa archive ug gihatag kini sa jq
  • jq nga adunay yawe - stream dayon nagpatunghag resulta ug gipasa kini sa postprocessor (sama sa una nga pananglitan) sa Python
  • Sa sulod, ang postprocessor usa ka yano nga makina sa estado nga nag-format sa output 

Sa kinatibuk-an, usa ka komplikadong pipeline nga nagtrabaho sa flow mode sa dako nga datos (0.5TB), nga walay mahinungdanon nga mga kapanguhaan ug gihimo gikan sa usa ka yano nga pipeline ug usa ka magtiayon nga mga himan.

Laing importante nga tip: makahimo sa pagtrabaho nga maayo ug epektibo sa terminal ug pagsulat bash/zsh/etc.

Asa kini mapuslanon? Oo, halos bisan asa - pag-usab, adunay daghang mga materyales nga tun-an sa Internet. Sa partikular, dinhi kini akong miaging artikulo.

R scripting

Pag-usab, ang magbabasa mahimong mosinggit - maayo, kini usa ka tibuuk nga sinultian nga programming! Ug siyempre, husto siya. Bisan pa, kasagaran akong nahibal-an ang R sa ingon nga konteksto nga, sa tinuud, parehas kini sa usa ka pangutana nga lengguwahe.

Ang R usa ka estadistika nga kompyuter nga palibot ug pinulongan alang sa static nga pagkompyuter ug paghanduraw (sumala sa kini).

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data
gikuha gikan dinhi. Pinaagi sa dalan, girekomenda ko kini, maayong materyal.

Ngano nga kinahanglan mahibal-an sa usa ka data scientist ang R? Labing menos, tungod kay adunay usa ka dako nga layer sa mga dili-IT nga mga tawo nga nag-analisar sa datos sa R. Akong nakit-an kini sa mosunod nga mga dapit:

  • Sektor sa parmasyutiko.
  • Mga biologo.
  • Sektor sa panalapi.
  • Ang mga tawo nga adunay puro nga edukasyon sa matematika nga nag-atubang sa mga istatistika.
  • Espesyalista nga mga modelo sa istatistika ug mga modelo sa pagkat-on sa makina (nga kasagaran makita lamang sa bersyon sa tagsulat isip usa ka R nga pakete).

Ngano nga kini usa ka pangutana nga lengguwahe? Sa porma diin kini kanunay nga makit-an, kini sa tinuud usa ka hangyo nga maghimo usa ka modelo, lakip ang pagbasa sa datos ug pag-ayo sa mga parameter sa pangutana (modelo), ingon man ang pagtan-aw sa datos sa mga pakete sama sa ggplot2 - kini usa usab ka porma sa pagsulat sa mga pangutana. .

Pananglitan nga mga pangutana alang sa pagtan-aw

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

Sa kinatibuk-an, daghang mga ideya gikan sa R ​​ang migrate ngadto sa python packages sama sa pandas, numpy o scipy, sama sa dataframes ug data vectorization - mao nga sa kinatibuk-an daghang mga butang sa R ​​ang daw pamilyar ug sayon ​​kanimo.

Adunay daghang mga tinubdan sa pagtuon, pananglitan, kini.

Mga graph sa kahibalo

Dinhi ako adunay usa ka gamay nga dili kasagaran nga kasinatian, tungod kay kanunay ako kinahanglan nga magtrabaho sa mga graph sa kahibalo ug mga pangutana sa mga pinulongan alang sa mga graph. Busa, atong hisgotan sa makadiyot ang mga sukaranan, tungod kay kini nga bahin usa ka gamay nga lahi.

Sa classical relational database aduna kitay fixed schema, apan dinhi ang schema flexible, ang matag predicate sa tinuod usa ka "column" ug labaw pa.

Hunahunaa nga nagmodelo ka sa usa ka tawo ug gusto nimo nga ihulagway ang hinungdanon nga mga butang, pananglitan, kuhaon naton ang usa ka piho nga tawo, si Douglas Adams, ug gamiton kini nga paghulagway ingon sukaranan.

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data
www.wikidata.org/wiki/Q42

Kung mogamit kami usa ka relational database, kinahanglan namon nga maghimo usa ka dako nga lamesa o mga lamesa nga adunay daghang mga kolum, kadaghanan niini mahimong NULL o puno sa pipila nga default nga False nga kantidad, pananglitan, dili tingali daghan sa amon ang adunay pagsulod sa Korean nasyonal nga librarya - siyempre, mahimo natong ibutang kini sa bulag nga mga lamesa, apan kini sa katapusan usa ka pagsulay sa pag-modelo sa usa ka flexible logical circuit nga adunay mga predicate gamit ang usa ka fixed relational.

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data
Busa hunahunaa nga ang tanan nga datos gitipigan isip usa ka graph o isip binary ug unary boolean nga mga ekspresyon.

Asa man ka makasugat niini? Una, pagtrabaho uban sa data wiki, ug sa bisan unsang mga database sa graph o konektado nga datos.

Ang mosunod mao ang mga nag-unang pangutana nga mga pinulongan nga akong gigamit ug nagtrabaho uban.

SPARQL

Wiki:
SPARQL (recursive acronym gikan sa Iningles SPARQL Protocol ug RDF Query Language) - lengguwahe sa pangutana sa datos, nga girepresentahan sa modelo Ang RDFUg protokol sa pagpadala niini nga mga hangyo ug pagtubag niini. Ang SPARQL usa ka rekomendasyon W3C Consortium ug usa sa mga teknolohiya semantiko nga web.

Apan sa pagkatinuod kini usa ka pangutana nga pinulongan alang sa lohikal nga unary ug binary predicates. Imong gikondisyon nga gipiho kung unsa ang gitakda sa usa ka ekspresyon sa Boolean ug kung unsa ang dili (pinasimple kaayo).

Ang RDF (Resource Description Framework) base mismo, diin ang mga pangutana sa SPARQL gipatuman, usa ka triple object, predicate, subject - ug ang pangutana nagpili sa gikinahanglan nga triple sumala sa gipiho nga mga pagdili sa espiritu: pangitaa ang usa ka X nga p_55(X, q_33) tinuod - diin, siyempre, ang p_55 usa ka matang sa relasyon sa ID 55, ug ang q_33 usa ka butang nga adunay ID 33 (dinhi ug ang tibuuk nga istorya, gitangtang usab ang tanan nga mga detalye).

Pananglitan sa presentasyon sa datos:

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data
Mga litrato ug pananglitan sa mga nasud dinhi gikan dinhi.

Panguna nga Ehemplo sa Pangutana

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data

Sa pagkatinuod, gusto namong pangitaon ang bili sa ?baryable sa nasud nga para sa predicate
member_of, tinuod nga member_of(?country,q458) ug q458 mao ang ID sa European Union.

Usa ka pananglitan sa usa ka tinuod nga pangutana sa SPARQL sulod sa python engine:

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data

Kasagaran, kinahanglan nako nga basahon ang SPARQL kaysa isulat kini - sa kana nga sitwasyon, lagmit usa ka mapuslanon nga kahanas aron masabtan ang sinultian bisan sa sukaranan nga lebel aron masabtan kung giunsa pagkuha ang datos. 

Adunay daghang materyal nga tun-an online: pananglitan, dinhi kini и kini. Kasagaran ako sa google sa piho nga mga laraw ug mga pananglitan ug igo na kana alang sa karon.

Logical nga pangutana nga mga pinulongan

Mahimo nimong mabasa ang dugang bahin sa hilisgutan sa akong artikulo dinhi. Ug dinhi, susihon ra naton sa makadiyot kung ngano nga ang mga lohikal nga lengguwahe haum kaayo sa pagsulat sa mga pangutana. Sa esensya, ang RDF usa lamang ka hugpong sa mga lohikal nga pahayag sa porma nga p(X) ug h(X,Y), ug ang usa ka lohikal nga pangutana adunay mosunod nga porma:

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

Dinhi naghisgot kami bahin sa pagmugna og bag-ong predicate output/1 (/1 nagpasabot nga unary), basta para sa X tinuod nga nasud(X) - i.e., X kay nasud ug member_of(X,"EU ").

Sa ato pa, sa kini nga kaso, ang datos ug ang mga lagda gipresentar sa parehas nga paagi, nga nagtugot kanamo sa pagmodelo sa mga problema nga dali ug maayo.

Asa ka nagkita sa industriya?: usa ka bug-os nga dako nga proyekto sa usa ka kompanya nga nagsulat sa mga pangutana sa ingon nga usa ka pinulongan, ingon man usab sa kasamtangan nga proyekto sa kinauyokan sa sistema - kini daw usa ka exotic nga butang, apan usahay kini mahitabo.

Usa ka pananglitan sa usa ka tipik sa code sa usa ka lohikal nga pinulongan nga nagproseso sa wikidata:

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data

Mga Materyal: Maghatag ako dinhi og usa ka magtiayon nga mga link sa modernong lohikal nga programming language Answer Set Programming - Girekomenda ko ang pagtuon niini:

Mga Nota sa Data Scientist: Usa ka Personal nga Pagrepaso sa Mga Pinulongan sa Pangutana sa Data

Source: www.habr.com

Idugang sa usa ka comment