Data Scientist's Notes: Personalized Review of Data Scientist Languages

Data Scientist's Notes: Personalized Review of Data Scientist Languages
Kerron sinulle henkilökohtaisesta kokemuksesta, mikä oli hyödyllistä missä ja milloin. Se on yleiskatsaus ja opinnäytetyö, jotta on selvää, mitä ja missä voit kaivaa edelleen - mutta tässä minulla on yksinomaan subjektiivinen henkilökohtainen kokemus, ehkä kaikki on sinulle täysin erilaista.

Miksi on tärkeää osata ja osata käyttää kyselykieliä? Datatieteen ytimessä on useita tärkeitä työvaiheita, ja ensimmäinen ja tärkein (ilman sitä mikään ei varmasti toimi!) on tiedon hankkiminen tai poimiminen. Useimmiten tiedot ovat jossain jossain muodossa ja ne on "haettava" sieltä. 

Kyselykielet antavat sinun poimia juuri nämä tiedot! Ja tänään kerron sinulle niistä kyselykielistä, jotka ovat olleet minulle hyödyllisiä, ja kerron sinulle ja näytän sinulle missä ja miten tarkalleen - miksi sitä tarvitaan opiskelemaan.

Tietokyselytyypeissä on kolme päälohkoa, joista keskustelemme tässä artikkelissa:

  • "Vakio"-kyselykielet ovat mitä yleisesti ymmärretään, kun puhutaan kyselykielestä, kuten relaatioalgebra tai SQL.
  • Komentosarjakyselykielet: esimerkiksi Python-asioita pandat, numpy tai shell scripting.
  • Kyselykielet tietokaavioita ja kaaviotietokantoja varten.

Kaikki täällä kirjoitettu on vain henkilökohtaista kokemusta, mikä oli hyödyllistä, tilanteiden kuvauksella ja "miksi sitä tarvittiin" - jokainen voi kokeilla kuinka samanlaisia ​​tilanteita voi tulla eteen ja yrittää valmistautua niihin etukäteen ymmärtämällä näitä kieliä ​​ennen kuin joudut hakemaan (kiireellisesti) projektiin tai edes pääsemään projektiin, jossa niitä tarvitaan.

"Vakio" kyselykielet

Vakiokyselykielet ovat juuri siinä mielessä, että yleensä ajattelemme niitä, kun puhumme kyselyistä.

Relaatioalgebra

Miksi relaatioalgebraa tarvitaan nykyään? Jotta ymmärrät hyvin, miksi kyselykielet on rakenteeltaan tietyllä tavalla, ja käytät niitä tietoisesti, sinun on ymmärrettävä niiden taustalla oleva ydin.

Mikä on relaatioalgebra?

Muodollinen määritelmä on seuraava: relaatioalgebra on suljettu operaatiojärjestelmä relaatioille relaatiotietomallissa. Hieman inhimillisemmin sanottuna tämä on taulukkojen operaatiojärjestelmä siten, että tuloksena on aina taulukko.

Katso kaikki relaatiooperaatiot tämä artikkeli Habrilta - tässä kuvailemme, miksi sinun on tiedettävä ja missä se on hyödyllistä.

Miksi?

Alkaa ymmärtää, mitä kyselykielissä on kyse ja mitkä toiminnot ovat tiettyjen kyselykielten lausekkeiden takana, antaa usein syvemmän käsityksen siitä, mikä kyselykielillä toimii ja miten.

Data Scientist's Notes: Personalized Review of Data Scientist Languages
Otettu tämä artikkeleita. Esimerkki operaatiosta: join, joka yhdistää taulukoita.

Materiaalit opiskeluun:

Hyvä johdantokurssi Stanfordista. Yleensä relaatioalgebrasta ja -teoriasta on paljon materiaalia - Coursera, Udacity. Netistä löytyy myös valtava määrä materiaalia, myös hyvää akateemiset kurssit. Henkilökohtainen neuvoni: sinun on ymmärrettävä relaatioalgebra erittäin hyvin - tämä on perusasioiden perusta.

SQL

Data Scientist's Notes: Personalized Review of Data Scientist Languages
Otettu tämä artikkeli.

SQL on pohjimmiltaan relaatioalgebran toteutus - tärkeällä varoituksella SQL on deklaratiivinen! Eli kun kirjoitat kyselyä relaatioalgebran kielellä, sanot itse asiassa kuinka laskea - mutta SQL:llä määrität mitä haluat purkaa, ja sitten DBMS luo jo (tehokkaita) lausekkeita relaatioalgebran kielellä (niiden vastaavuus tunnetaan meille nimellä Coddin lause).

Data Scientist's Notes: Personalized Review of Data Scientist Languages
Otettu tämä artikkeli.

Miksi?

Relaatiotietokantajärjestelmät: Oracle, Postgres, SQL Server jne. ovat edelleen lähes kaikkialla, ja on uskomattoman suuri mahdollisuus, että joudut olemaan vuorovaikutuksessa niiden kanssa, mikä tarkoittaa, että sinun on joko luettava SQL (mikä on hyvin todennäköistä) tai kirjoitettava se ( ei myöskään epätodennäköistä).

Mitä lukea ja opiskella

Yllä olevien samojen linkkien mukaan (relaatioalgebrasta) materiaalia on uskomattoman paljon mm. tämä.

Muuten, mikä on NoSQL?

"On syytä vielä kerran korostaa, että termi "NoSQL" on täysin spontaani alkuperä ja sen takana ei ole yleisesti hyväksyttyä määritelmää tai tieteellistä instituutiota." Vastaava artikkeli osoitteessa Habr.

Itse asiassa ihmiset ymmärsivät, että täyttä relaatiomallia ei tarvita monien ongelmien ratkaisemiseen, etenkään niissä, joissa esimerkiksi suorituskyky on kriittinen ja tietyt yksinkertaiset kyselyt, joissa on aggregointi, hallitsevat - missä on kriittistä laskea nopeasti mittareita ja kirjoittaa ne tietokanta, ja useimmat ominaisuudet ovat suhteellisia, osoittautuivat paitsi tarpeettomiksi myös haitallisiksi - miksi normalisoida jotain, jos se pilaa meille tärkeimmän asian (johonkin tiettyyn tehtävään) - tuottavuuden?

Myös joustavia skeemoja tarvitaan usein klassisen relaatiomallin kiinteiden matemaattisten skeemojen sijasta - ja tämä yksinkertaistaa uskomattoman sovelluskehitystä, kun on kriittistä ottaa järjestelmä käyttöön ja aloittaa työ nopeasti, prosessoida tuloksia - tai skeemaa ja tallennettujen tietojen tyyppejä. eivät ole niin tärkeitä.

Olemme esimerkiksi luomassa asiantuntijajärjestelmää ja haluamme tallentaa tietyn verkkotunnuksen tietoja metatietojen kanssa - emme ehkä tunne kaikkia kenttiä ja tallennamme vain JSON:n jokaiselle tietueelle - tämä antaa meille erittäin joustavan ympäristön tietojen laajentamiseen. malli ja nopeasti iteroituva - joten tässä Tässä tapauksessa NoSQL on jopa parempi ja luettavampi. Esimerkkimerkintä (yhdestä projektistani, jossa NoSQL oli juuri siellä, missä sitä tarvittiin).

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

Voit lukea lisää täällä NoSQL:stä.

Mitä opiskella?

Tässä sinun on pikemminkin analysoitava perusteellisesti tehtäväsi, mitä ominaisuuksia sillä on ja mitä NoSQL-järjestelmiä on saatavilla, jotka sopivat tähän kuvaukseen - ja sitten alkaa tutkia tätä järjestelmää.

Komentosarjakyselykielet

Aluksi näyttää siltä, ​​että mitä tekemistä Pythonilla on sen kanssa yleensä - se on ohjelmointikieli, eikä kyse ole ollenkaan kyselyistä.

Data Scientist's Notes: Personalized Review of Data Scientist Languages

  • Pandas on kirjaimellisesti Sveitsin armeijan tietotieteen veitsi, jossa tapahtuu valtava määrä datan muuntamista, aggregaatiota jne.
  • Numpy - vektorilaskelmat, matriisit ja lineaarialgebra siellä.
  • Scipy - tässä paketissa on paljon matematiikkaa, erityisesti tilastoja.
  • Jupyter lab – paljon tutkivaa data-analyysiä sopii hyvin kannettaviin tietokoneisiin – hyödyllistä tietää.
  • Pyynnöt - työskentely verkon kanssa.
  • Pyspark on erittäin suosittu tietosuunnittelijoiden keskuudessa, todennäköisesti joudut olemaan vuorovaikutuksessa tämän tai Sparkin kanssa yksinkertaisesti niiden suosion vuoksi.
  • *Selenium - erittäin hyödyllinen tietojen keräämiseen sivustoilta ja resursseista, joskus ei yksinkertaisesti ole muuta tapaa saada tietoja.

Tärkein neuvoni: opi Python!

Panda

Otetaan esimerkkinä seuraava koodi:

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

Pohjimmiltaan näemme, että koodi sopii klassiseen SQL-malliin.

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

Mutta tärkeä osa on, että tämä koodi on osa komentosarjaa ja liukuhihnaa; itse asiassa upotamme kyselyitä Python-liukuhihnaan. Tässä tilanteessa kyselykieli tulee meille kirjastoista, kuten Pandas tai pySpark.

Yleensä pySparkissa näemme samankaltaisen datamuunnoksen kyselykielen kautta seuraavan hengessä:

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

Missä ja mitä lukea

Itse Pythonista yleensä mitään ongelmaa löytää materiaalia opiskeluun. Netistä löytyy valtava määrä opetusohjelmia pandas, pySpark ja kursseja käynnissä Kipinä (ja myös itsestään DS). Kaiken kaikkiaan täällä oleva sisältö sopii erinomaisesti googlaamiseen, ja jos minun pitäisi valita yksi paketti, johon keskittyä, se olisi tietysti panda. Myös DS+Python-materiaalien yhdistelmästä hyvin paljon.

Shell kyselykielenä

Useat tietojenkäsittely- ja analysointiprojektit, joiden kanssa olen työskennellyt, ovat itse asiassa shell-skriptejä, jotka kutsuvat koodia Pythonissa, Javassa ja itse shell-komentoja. Siksi yleisesti ottaen voit pitää putkia hakemistossa bash/zsh/etc jonkinlaisena korkean tason kyselynä (voi tietysti laittaa silmukoita sinne, mutta tämä ei ole tyypillistä DS-koodille shell-kielissä), annetaanpa yksinkertainen esimerkki - minun piti tehdä QID-kartoitus wikidatasta ja täydellisistä linkeistä venäjän ja englannin wikeihin, tätä varten kirjoitin yksinkertaisen pyynnön komennoista bashissa ja tulokseksi kirjoitin yksinkertaisen skriptin Pythonissa, jonka koota näin:

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

missä

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

Tämä oli itse asiassa koko putki, joka loi vaaditun kartoituksen; kuten näemme, kaikki toimi virtaustilassa:

  • pv filepath - antaa edistymispalkin tiedoston koon perusteella ja välittää sen sisällön eteenpäin
  • unpigz -c luki osan arkistosta ja antoi sen jq:lle
  • jq avaimella - stream tuotti heti tuloksen ja välitti sen jälkiprosessorille (sama kuin ensimmäisessä esimerkissä) Pythonissa
  • sisäisesti jälkiprosessori oli yksinkertainen tilakone, joka alustaa tulosteen 

Kaiken kaikkiaan monimutkainen putkisto, joka toimii virtaustilassa suurella datalla (0.5 Tt), ilman merkittäviä resursseja ja valmistettu yksinkertaisesta putkistosta ja parista työkalusta.

Toinen tärkeä vinkki: osaa työskennellä hyvin ja tehokkaasti terminaalissa ja kirjoittaa bash/zsh/etc.

Missä siitä on hyötyä? Kyllä, melkein kaikkialla - Internetissä on jälleen PALJON materiaalia tutkittavaksi. Erityisesti täällä tämä edellinen artikkelini.

R-skripti

Jälleen lukija voi huudahtaa - no, tämä on koko ohjelmointikieli! Ja tietysti hän tulee olemaan oikeassa. Yleensä kuitenkin kohtasin R:n sellaisessa kontekstissa, että se itse asiassa oli hyvin samanlainen kuin kyselykieli.

R on tilastollinen laskentaympäristö ja kieli staattista laskentaa ja visualisointia varten (mukaan tämä).

Data Scientist's Notes: Personalized Review of Data Scientist Languages
talteen siten. Muuten suosittelen, hyvä materiaali.

Miksi datatieteilijän on tiedettävä R? Ainakin siksi, että R:ssä analysoidaan valtava määrä ei-IT-ihmisiä. Törmäsin siihen seuraavissa paikoissa:

  • Lääkeala.
  • Biologit.
  • Taloussektori.
  • Ihmiset, joilla on puhtaasti matemaattinen koulutus ja jotka käsittelevät tilastoja.
  • Erikoistilastolliset mallit ja koneoppimismallit (jotka löytyvät usein vain tekijän versiosta R-pakettina).

Miksi se itse asiassa on kyselykieli? Siinä muodossa, jossa se usein esiintyy, se on itse asiassa pyyntö luoda malli, joka sisältää tietojen lukemisen ja kyselyn (malli) parametrien korjaamisen sekä datan visualisoinnin paketeissa, kuten ggplot2 - tämä on myös kyselyjen kirjoittamisen muoto. .

Esimerkkejä visualisointikyselyistä

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

Yleisesti ottaen monet R:n ideat ovat siirtyneet python-paketteihin, kuten pandas, numpy tai scipy, kuten datakehykset ja datan vektorointi - joten yleensä monet asiat R:ssä näyttävät sinulle tutuilta ja käteviltä.

Tutkittavia lähteitä on monia, mm. tämä.

Tietokaaviot

Tässä minulla on hieman epätavallinen kokemus, koska joudun melko usein työskentelemään tietograafien ja graafien kyselykielien kanssa. Siksi käydään vain lyhyesti läpi perusasiat, koska tämä osa on hieman eksoottisempi.

Klassisissa relaatiotietokannassa meillä on kiinteä skeema, mutta tässä skeema on joustava, jokainen predikaatti on itse asiassa "sarake" ja vielä enemmän.

Kuvittele, että olet mallintamassa henkilöä ja halusit kuvailla keskeisiä asioita. Otetaan esimerkiksi tietty henkilö, Douglas Adams, ja käytä tätä kuvausta perustana.

Data Scientist's Notes: Personalized Review of Data Scientist Languages
www.wikidata.org/wiki/Q42

Jos käyttäisimme relaatiotietokantaa, meidän täytyisi luoda valtava taulukko tai taulukoita, joissa on valtava määrä sarakkeita, joista suurin osa olisi NULL-arvoa tai täytetty jollain oletusarvolla False-arvolla, esimerkiksi on epätodennäköistä, että monilla meistä on merkintä Korean kansalliskirjastossa - tietysti voisimme laittaa ne erillisiin taulukoihin, mutta tämä olisi viime kädessä yritys mallintaa joustava looginen piiri predikaatteilla käyttämällä kiinteää relaatiota.

Data Scientist's Notes: Personalized Review of Data Scientist Languages
Kuvittele siis, että kaikki tiedot tallennetaan kaaviona tai binääri- ja unaarilausekkeina.

Missä tuollaiseen voi edes törmätä? Ensinnäkin kanssa data wiki, ja minkä tahansa kaaviotietokantojen tai yhdistettyjen tietojen kanssa.

Seuraavat ovat tärkeimmät kyselykielet, joita olen käyttänyt ja joiden kanssa olen työskennellyt.

SPARQL

Wiki:
SPARQL (rekursiivinen lyhenne alkaen Eng. SPARQL-protokolla ja RDF-kyselykieli) - datakyselyn kieli, jota malli edustaa RDFJa protokollaa lähettää nämä pyynnöt ja vastata niihin. SPARQL on suositus W3C-konsortio ja yksi teknologioista semanttinen verkko.

Mutta todellisuudessa se on kyselykieli loogisille yksi- ja binääripredikaateille. Määrität vain ehdollisesti, mikä Boolen lausekkeessa on kiinteä ja mikä ei (erittäin yksinkertaistettu).

Itse RDF (Resource Description Framework) -kanta, jonka päällä SPARQL-kyselyt suoritetaan, on kolminkertainen object, predicate, subject - ja kysely valitsee vaaditut kolmiot määriteltyjen rajoitusten mukaisesti hengessä: etsi X niin, että p_55(X, q_33) on tosi - missä tietysti p_55 on jonkinlainen relaatio ID 55:n kanssa ja q_33 on esine, jonka tunnus on 33 (tässä ja koko tarina, jälleen jättäen pois kaikenlaiset yksityiskohdat).

Esimerkki tietojen esittämisestä:

Data Scientist's Notes: Personalized Review of Data Scientist Languages
Kuvia ja esimerkki maista täällä siten.

Peruskyselyesimerkki

Data Scientist's Notes: Personalized Review of Data Scientist Languages

Itse asiassa haluamme löytää ?maa-muuttujan arvon siten, että predikaatille
Member_of, on totta, että Member_of(?country,q458) ja q458 ovat Euroopan unionin tunnus.

Esimerkki todellisesta SPARQL-kyselystä python-moottorin sisällä:

Data Scientist's Notes: Personalized Review of Data Scientist Languages

Tyypillisesti minun on täytynyt lukea SPARQL:ia kirjoittamisen sijaan - siinä tilanteessa olisi todennäköisesti hyödyllinen taito ymmärtää kieltä ainakin perustasolla ymmärtääkseni tarkalleen, kuinka tiedot haetaan. 

Verkossa on paljon tutkittavaa materiaalia: esimerkiksi täältä tämä и tämä. Yleensä googletan tiettyjä malleja ja esimerkkejä ja se riittää toistaiseksi.

Loogiset kyselykielet

Voit lukea aiheesta lisää artikkelistani täällä. Ja tässä tarkastellaan vain lyhyesti, miksi loogiset kielet sopivat hyvin kyselyjen kirjoittamiseen. Pohjimmiltaan RDF on vain joukko loogisia lauseita muodossa p(X) ja h(X,Y), ja loogisella kyselyllä on seuraava muoto:

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

Tässä puhutaan uuden predikaattitulosteen/1 luomisesta (/1 tarkoittaa unaaria), jos X:n kohdalla on totta, että maa(X) - eli X on maa ja myös jäsen_of(X,"EU ").

Eli tässä tapauksessa sekä data että säännöt esitetään samalla tavalla, jolloin voimme mallintaa ongelmia erittäin helposti ja hyvin.

Missä alalla tapasit?: kokonainen projekti yrityksen kanssa, joka kirjoittaa kyselyitä sellaisella kielellä, samoin kuin nykyiseen järjestelmän ytimessä olevaan projektiin - näyttää siltä, ​​​​että tämä on melko eksoottinen asia, mutta joskus sitä tapahtuu.

Esimerkki koodinpätkästä loogisen kielen prosessointiwikidaassa:

Data Scientist's Notes: Personalized Review of Data Scientist Languages

Materiaalit: Annan tässä pari linkkiä nykyaikaiseen loogiseen ohjelmointikieleen Answer Set Programming - suosittelen sen tutkimista:

Data Scientist's Notes: Personalized Review of Data Scientist Languages

Lähde: will.com

Lisää kommentti