Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке
Из личног искуства говорим шта је било корисно где и када. То је преглед и теза, да буде јасно шта и где можете даље да копате - али овде имам искључиво субјективно лично искуство, можда је код вас све сасвим другачије.

Зашто је важно знати и умети да користиш језике упита? У својој основи, Дата Сциенце има неколико важних фаза рада, а прва и најважнија (без ње сигурно ништа неће функционисати!) је добијање или издвајање података. Најчешће, подаци се налазе негде у неком облику и одатле их треба „преузети“. 

Језици упита вам омогућавају да издвојите ове податке! И данас ћу вам рећи о оним језицима упита који су ми били корисни и рећи ћу вам и показати вам где и како тачно - зашто је потребно учити.

Постојаће три главна блока типова упита података о којима ћемо разговарати у овом чланку:

  • „Стандардни“ језици упита су оно што се обично разуме када се говори о језику упита, као што је релациона алгебра или СКЛ.
  • Језици за скриптовање упита: на пример, Питхон ствари пандас, нумпи или схелл скрипте.
  • Питајте језике за графиконе знања и базе података графова.

Све што је овде написано је само лично искуство, оно што је било корисно, са описом ситуација и „зашто је то било потребно“ – свако може да испроба како сличне ситуације могу да вам дођу и покушајте да се за њих унапред припремите тако што ћете разумети ове језике ​пре него што морате да се пријавите (хитно) на пројекат или чак дођете до пројекта где су они потребни.

„Стандардни“ језици упита

Стандардни језици упита су управо у смислу да о њима обично размишљамо када говоримо о упитима.

Релациона алгебра

Зашто је данас потребна релациона алгебра? Да бисте добро разумели зашто су језици упита структуирани на одређени начин и да их свесно користите, морате да разумете језгро које је у њиховој основи.

Шта је релациона алгебра?

Формална дефиниција је следећа: релациона алгебра је затворени систем операција над релацијама у релационом моделу података. Да кажем мало људскије, ово је систем операција над табелама такав да је резултат увек табела.

Погледајте све релационе операције у ово чланак са Хабра - овде описујемо зашто треба да знате и где вам то добро дође.

Зашто?

Почињање да разумете о чему се ради у језицима упита и које операције стоје иза израза у одређеним језицима упита често даје дубље разумевање шта и како функционише у језицима упита.

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке
Преузет из ово чланци. Пример операције: спајање, која спаја табеле.

Материјали за учење:

Добар уводни курс са Станфорда. Генерално, постоји много материјала о релационој алгебри и теорији - Цоурсера, Удацити. Такође постоји огромна количина материјала на интернету, укључујући и добар академски курсеви. Мој лични савет: морате веома добро да разумете релациону алгебру - ово је основа основа.

СКЛ

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке
Преузет из ово чланци.

СКЛ је у суштини имплементација релационе алгебре - уз важно упозорење, СКЛ је декларативан! То јест, када пишете упит на језику релационе алгебре, ви заправо кажете како да израчунате – али код СКЛ-а наведете шта желите да издвојите, а онда ДБМС већ генерише (ефикасне) изразе на језику релационе алгебре (њихов еквиваленција нам је позната као Кодова теорема).

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке
Преузет из ово чланци.

Зашто?

Релациони ДБМС-ови: Орацле, Постгрес, СКЛ Сервер, итд. су још увек практично свуда и постоји невероватно велика шанса да ћете морати да комуницирате са њима, што значи да ћете или морати да читате СКЛ (што је врло вероватно) или да га пишете ( такође није мало вероватно).

Шта читати и проучавати

Према истим линковима изнад (о релационој алгебри), постоји невероватна количина материјала, нпр. ово.

Узгред, шта је НоСКЛ?

„Вреди још једном нагласити да термин „НоСКЛ“ има апсолутно спонтано порекло и да иза себе нема општеприхваћену дефиницију или научну институцију.“ дописивање чланак на Һабру.

У ствари, људи су схватили да потпуни релациони модел није потребан да би се решили многи проблеми, посебно за оне у којима је, на пример, перформанса критична и где доминирају одређени једноставни упити са агрегацијом – где је кључно брзо израчунати метрику и записати их у база података, а већина карактеристика су релационе испоставило се не само да су непотребне, већ и штетне - чему нормализовати нешто ако ће нам покварити оно најважније (за неки специфичан задатак) - продуктивност?

Такође, често су потребне флексибилне шеме уместо фиксних математичких шема класичног релационог модела – и то невероватно поједностављује развој апликација када је кључно да се систем примени и почне брзо да ради, обрађујући резултате – или шему и типове ускладиштених података нису толико важни.

На пример, креирамо експертски систем и желимо да складиштимо информације на одређеном домену заједно са неким мета информацијама - можда не знамо сва поља и једноставно чувамо ЈСОН за сваки запис - ово нам даје веома флексибилно окружење за проширење података модел и брзо понављање - тако да ће у овом случају НоСКЛ бити још пожељнији и читљивији. Пример уноса (из једног од мојих пројеката где је НоСКЛ био баш тамо где је био потребан).

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

Можете прочитати више овде о НоСКЛ-у.

Шта студирати?

Овде, радије, само треба да темељно анализирате свој задатак, која својства има и који НоСКЛ системи су доступни који би одговарали овом опису – а затим да почнете да проучавате овај систем.

Скриптни језици упита

У почетку се чини, какве везе Пајтон уопште има са тим - то је програмски језик, а не уопште о упитима.

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке

  • Пандас је буквално швајцарски нож науке о подацима; у њему се дешава огромна количина трансформације података, агрегације итд.
  • Нумпи - ту су векторски прорачуни, матрице и линеарна алгебра.
  • Сципи - у овом пакету има доста математике, посебно статистике.
  • Јупитер лабораторија – много истраживачких анализа података се добро уклапа у лаптоп рачунаре – корисно је знати.
  • Захтеви - рад са мрежом.
  • Писпарк је веома популаран међу инжењерима података, највероватније ћете морати да комуницирате са овим или Спарком, једноставно због њихове популарности.
  • *Селен – веома користан за прикупљање података са сајтова и ресурса, понекад једноставно не постоји други начин да дођете до података.

Мој главни савет: научите Питхон!

панде

Узмимо следећи код као пример:

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

У суштини, видимо да се код уклапа у класични СКЛ образац.

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

Али важан део је да је овај код део скрипте и цевовода; у ствари, ми уграђујемо упите у Питхон цевовод. У овој ситуацији, језик упита долази нам из библиотека као што су Пандас или пиСпарк.

Генерално, у пиСпарк-у видимо сличан тип трансформације података кроз језик упита у духу:

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

Где и шта читати

На самом Пајтону уопште није проблем пронађите материјале за проучавање. Постоји огроман број туторијала на мрежи панде, пиСпарк и курсеви на Варница (и такође сам по себи DS). Све у свему, садржај је одличан за гуглање, а ако бих морао да изаберем један пакет на који бих се фокусирао, то би биле панде, наравно. Што се тиче комбинације ДС+Питхон материјала такође пуно.

Схелл као језик упита

Доста пројеката обраде и анализе података са којима сам радио су, у ствари, схелл скрипте које позивају код у Питхон-у, Јави и саме команде љуске. Стога, генерално, можете сматрати цевоводе у басх/зсх/етц неком врстом упита високог нивоа (можете, наравно, убацити петље унутра, али то није типично за ДС код у језицима љуске), дајмо једноставан пример – требало је да урадим КИД мапирање википодатака и пуне везе ка руским и енглеским викијима, за ово сам написао једноставан захтев из команди у басх-у и за излаз написао једноставну скрипту у Питхон-у, који сам саставити овако:

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

где

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

Ово је у ствари био цео цевовод који је креирао потребно мапирање; као што видимо, све је функционисало у режиму стрима:

  • пв филепатх - даје траку напретка на основу величине датотеке и прослеђује њен садржај даље
  • унпигз -ц је прочитао део архиве и дао га јк
  • јк са кључем - стреам је одмах произвео резултат и проследио га постпроцесору (исто као у првом примеру) у Питхон-у
  • интерно, постпроцесор је био једноставна државна машина која је форматирала излаз 

Укупно, сложен цевовод који ради у режиму протока на великим подацима (0.5 ТБ), без значајних ресурса и направљен од једноставног цевовода и неколико алата.

Још један важан савет: будите у стању да радите добро и ефикасно у терминалу и пишете басх/зсх/етц.

Где ће бити од користи? Да, скоро свуда - опет, на Интернету има ПУНО материјала за проучавање. Посебно, овде ово мој претходни чланак.

Р скриптирање

Опет, читалац може узвикнути - па, ово је читав програмски језик! И наравно, биће у праву. Међутим, обично сам наилазио на Р у таквом контексту да је, у ствари, био веома сличан језику упита.

Р је статистичко рачунарско окружење и језик за статичко рачунање и визуелизацију (према ово).

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке
узети стога. Иначе, препоручујем, добар материјал.

Зашто научник података мора да зна Р? Барем зато што постоји огроман слој људи који нису ИТ људи који анализирају податке у Р. Наишао сам на то на следећим местима:

  • Фармацеутски сектор.
  • Биолози.
  • Финансијски сектор.
  • Људи са чисто математичким образовањем који се баве статистиком.
  • Специјализовани статистички модели и модели машинског учења (који се често могу наћи само у ауторској верзији као Р пакет).

Зашто је то заправо језик упита? У облику у којем се често налази, то је заправо захтев за креирање модела, укључујући читање података и фиксирање параметара упита (модела), као и визуелизацију података у пакетима као што је ггплот2 – ово је такође облик писања упита. .

Примери упита за визуелизацију

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

Генерално, многе идеје из Р-а су мигрирале у Питхон пакете као што су пандас, нумпи или сципи, као што су оквири података и векторизација података - тако да ће вам генерално много ствари у Р-у изгледати познато и згодно.

Постоји много извора за проучавање, нпр. ово.

Графикони знања

Овде имам мало необично искуство, јер често морам да радим са графовима знања и језицима упита за графове. Зато, хајде само укратко да пређемо на основе, јер је овај део мало егзотичнији.

У класичним релационим базама података имамо фиксну шему, али овде је шема флексибилна, сваки предикат је заправо „колона“ па чак и више.

Замислите да моделујете особу и желите да опишете кључне ствари, на пример, узмимо конкретну особу, Дагласа Адамса, и користимо овај опис као основу.

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке
ввв.викидата.орг/вики/К42

Ако бисмо користили релациону базу података, морали бисмо да креирамо огромну табелу или табеле са огромним бројем колона, од којих би већина била НУЛЛ или попуњена неком подразумеваном Фалсе вредношћу, на пример, мало је вероватно да многи од нас имају унос у Корејској националној библиотеци – наравно, могли бисмо их ставити у засебне табеле, али ово би на крају био покушај моделирања флексибилног логичког кола са предикатима користећи фиксни релациони.

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке
Дакле, замислите да се сви подаци чувају као граф или као бинарни и унарни логички изрази.

Где се уопште може срести са овим? Прво, рад са дата вики, и са било којим базама података графова или повезаним подацима.

Следе главни језици упита које сам користио и са којима сам радио.

СПАРКЛ

Вики:
СПАРКЛ (рекурзивни акроним из Инг. СПАРКЛ протокол и РДФ језик упита) - језик упита података, коју представља модел РДФИ protokola да пренесе ове захтеве и одговори на њих. СПАРКЛ је препорука В3Ц Цонсортиум и једна од технологија семантички веб.

Али у стварности то је језик упита за логичке унарне и бинарне предикате. Ви једноставно условно наводите шта је фиксно у Буловом изразу, а шта није (веома поједностављено).

Сама база РДФ (Ресоурце Десцриптион Фрамеворк), преко које се извршавају СПАРКЛ упити, је трострука object, predicate, subject - и упит бира тражене тројке у складу са наведеним ограничењима у духу: пронађите Кс такав да је п_55(Кс, к_33) тачно - где је, наравно, п_55 нека врста релације са ИД 55, а к_33 је објекат са ИД 33 (овде и цела прича, опет изостављајући свакакве детаље).

Пример презентације података:

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке
Слике и пример са земљама овде стога.

Основни пример упита

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке

У ствари, желимо да пронађемо вредност променљиве ?цоунтри тако да је за предикат
мембер_оф, тачно је да је мембер_оф(?цоунтри,к458) и к458 ИД Европске уније.

Пример правог СПАРКЛ упита унутар питхон мотора:

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке

Обично сам морао да читам СПАРКЛ уместо да га пишем – у тој ситуацији би вероватно била корисна вештина разумети језик барем на основном нивоу да бих разумео тачно како се подаци преузимају. 

Постоји много материјала за проучавање онлајн: на пример, овде ово и ово. Обично гуглам специфичне дизајне и примере и то је за сада довољно.

Логички језици упита

Више о овој теми можете прочитати у мом чланку овде. А овде ћемо само укратко испитати зашто су логички језици погодни за писање упита. У суштини, РДФ је само скуп логичких исказа облика п(Кс) и х(Кс,И), а логички упит има следећи облик:

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

Овде говоримо о креирању новог предикатног излаза/1 (/1 значи унарно), под условом да је за Кс тачно да је земља(Кс) – тј. Кс је земља и такође члан_(Кс,„ЕУ“).

Односно, у овом случају су и подаци и правила представљени на исти начин, што нам омогућава да веома лако и добро моделујемо проблеме.

Где сте се упознали у индустрији?: цео велики пројекат са компанијом која пише упите на таквом језику, као и на тренутном пројекту у језгру система - чини се да је то прилично егзотична ствар, али понекад се деси.

Пример фрагмента кода у логичком језику који обрађује википодатке:

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке

Материјали: Овде ћу дати неколико веза ка модерном логичком програмском језику Програмирање скупа одговора - препоручујем да га проучите:

Белешке дата Сциентист-а: Персонализовани преглед језика упита за податке

Извор: ввв.хабр.цом

Додај коментар