Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци
Од лично искуство ти кажувам што беше корисно каде и кога. Тоа е преглед и теза, за да ви биде јасно што и каде можете да копате понатаму - но овде имам исклучиво субјективно лично искуство, можеби сè е сосема поинаку за вас.

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

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

Ќе има три главни блокови на типови на барања за податоци, за кои ќе разговараме во оваа статија:

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

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

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

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

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

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

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

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

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

Зошто?

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

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

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

Добар воведен курс од Стенфорд. Во принцип, има многу материјали за релациона алгебра и теорија - Coursera, Udacity. Има и огромна количина на материјали на интернет, вклучително и добри академски курсеви. Мој личен совет: треба многу добро да ја разберете релациската алгебра - ова е основата на основите.

SQL

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци
Земено од ова статии.

SQL во суштина е имплементација на релациска алгебра - со важно предупредување, SQL е декларативен! Односно, кога пишувате барање на јазикот на релационата алгебра, вие всушност кажувате како да пресметате - но со SQL одредувате што сакате да извлечете, а потоа DBMS веќе генерира (ефективни) изрази на јазикот на релационата алгебра (нивните еквивалентноста ни е позната како Кодова теорема).

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци
Земено од ова статии.

Зошто?

Релациони DBMS: Oracle, Postgres, SQL Server, итн сè уште се буквално насекаде и постои неверојатно голема шанса дека ќе мора да комуницирате со нив, што значи дека или ќе треба да читате SQL (што е многу веројатно) или да го напишете ( исто така не е малку веројатно).

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

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

Патем, што е NoSQL?

„Вреди да се нагласи уште еднаш дека терминот „NoSQL“ има апсолутно спонтано потекло и нема општо прифатена дефиниција или научна институција зад него“. Соодветни Член на Хабр.

Всушност, луѓето сфатија дека не е потребен целосен релациски модел за да се решат многу проблеми, особено за оние каде што, на пример, перформансите се критични и доминираат одредени едноставни прашања со агрегација - каде што е од клучно значење брзо да се пресметаат метриката и да се запишат на база на податоци, а повеќето карактеристики се релациски испадна дека не само што се непотребни, туку и штетни - зошто да нормализираме нешто ако тоа ќе ни ја расипе најважната работа (за некоја конкретна задача) - продуктивноста?

Исто така, често се потребни флексибилни шеми наместо фиксните математички шеми на класичниот релациски модел - и ова неверојатно го поедноставува развојот на апликацијата кога е критично да се распореди системот и да почне да работи брзо, обработувајќи ги резултатите - или шемата и типовите на зачувани податоци не се толку важни.

На пример, создаваме експертски систем и сакаме да складираме информации на одреден домен заедно со некои мета информации - можеби не ги знаеме сите полиња и едноставно складираме JSON за секој запис - ова ни дава многу флексибилна средина за проширување на податоците модел и брзо повторување - така што во овој случај, NoSQL ќе биде уште попосакуван и почитлив. Пример запис (од еден од моите проекти каде NoSQL беше токму онаму каде што беше потребно).

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

Можете да прочитате повеќе тука за NoSQL.

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

Тука, напротив, треба само темелно да ја анализирате вашата задача, какви својства има и кои NoSQL системи се достапни што би одговарале на овој опис - и потоа започнете да го проучувате овој систем.

Јазици за прашања за скриптирање

На почетокот, се чини, каква врска има Python со него воопшто - тоа е програмски јазик, а не за прашања воопшто.

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци

  • Pandas е буквално швајцарски армиски нож на Data Science; во него се случува огромна количина на трансформација на податоци, агрегација итн.
  • Numpy - векторски пресметки, матрици и линеарна алгебра таму.
  • Scipy - има многу математика во овој пакет, особено статистика.
  • Јупитер лабораторија - многу истражувачки анализи на податоци добро се вклопуваат во лаптопите - корисно е да се знае.
  • Барања - работа со мрежата.
  • Pyspark е многу популарен меѓу инженерите за податоци, најверојатно ќе мора да комуницирате со ова или Spark, едноставно поради нивната популарност.
  • *Селен - многу корисен за собирање податоци од сајтови и ресурси, понекогаш едноставно нема друг начин да се добијат податоците.

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

Панди

Да го земеме следниот код како пример:

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

Во суштина, гледаме дека кодот се вклопува во класичната 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

Но, важниот дел е дека овој код е дел од скриптата и цевководот; всушност, ние вградуваме прашања во нафтоводот на Python. Во оваа ситуација, јазикот за пребарување ни доаѓа од библиотеки како што се Pandas или pySpark.

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

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

Каде и што да прочитате

На самиот Python воопшто не е проблем најдете материјали за проучување. Има огромен број на упатства на интернет панди, pySpark и курсеви за Свеќи (и исто така само по себе DS). Генерално, содржината овде е одлична за гуглање, и ако треба да изберам еден пакет на кој ќе се фокусирам, тоа би биле панди, се разбира. Што се однесува до комбинацијата на DS+Python материјали исто така многу.

Шел како јазик за прашања

Доста проекти за обработка и анализа на податоци со кои сум работел се, всушност, скрипти на школка кои повикуваат код во Python, Java и самите команди на школка. Затоа, општо земено, може да ги сметате цевководите во bash/zsh/итн како некој вид барање на високо ниво (се разбира, можете да поставите јамки таму, но ова не е типично за DS кодот на јазиците на школка), ајде да дадеме едноставен пример - требаше да направам QID мапирање на википодатоци и целосни врски до руските и англиските викија, за ова напишав едноставно барање од командите во bash, а за излезот напишав едноставна скрипта во Python, која ја состави вака:

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

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

  • pv патека на датотека - дава лента за напредок врз основа на големината на датотеката и ја пренесува нејзината содржина понатаму
  • unpigz -c прочита дел од архивата и ја даде на jq
  • jq со key - stream веднаш го произведе резултатот и го предаде на постпроцесорот (исто како и со првиот пример) во Python
  • внатрешно, постпроцесорот беше едноставна државна машина која го форматираше излезот 

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

Друг важен совет: бидете способни да работите добро и ефикасно во терминалот и да пишувате bash/zsh/итн.

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

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

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

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

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци
земени оттука. Иначе го препорачувам, добар материјал.

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

  • Фармацевтскиот сектор.
  • Биолози.
  • Финансиски сектор.
  • Луѓе со чисто математичко образование кои се занимаваат со статистика.
  • Специјализирани статистички модели и модели за машинско учење (кои често може да се најдат само во верзијата на авторот како R пакет).

Зошто всушност е јазик за пребарување? Во формата во која често се наоѓа, тоа е всушност барање за креирање модел, вклучувајќи читање податоци и фиксирање на параметрите за барање (модел), како и визуелизирање податоци во пакети како што е ggplot2 - ова е исто така форма на пишување прашања. .

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

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

Општо земено, многу идеи од R мигрирале во пакети на питон, како што се панди, numpy или scipy, како податочни рамки и векторизација на податоци - така што генерално многу работи во R ќе ви изгледаат познати и погодни.

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

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

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

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

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

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци
www.wikidata.org/wiki/Q42

Ако користевме релациона база на податоци, ќе треба да создадеме огромна табела или табели со огромен број колони, од кои повеќето би биле NULL или исполнети со некоја стандардна Лажна вредност, на пример, малку е веројатно дека многумина од нас имаат влез во корејската национална библиотека - се разбира, би можеле да ги ставиме во посебни табели, но ова на крајот ќе биде обид да се моделира флексибилно логичко коло со предикати користејќи фиксна релациона.

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци
Замислете дека сите податоци се зачувани како график или како бинарни и унарни булови изрази.

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

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

SPARQL

Вики:
SPARQL (рекурзивен акроним од Англиски SPARQL протокол и јазик за пребарување RDF) - јазик за барање податоци, претставена со моделот RDFИ протокол да ги пренесе овие барања и да одговори на нив. SPARQL е препорака Конзорциум W3C и една од технологиите семантичка мрежа.

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

Самата база RDF (Рамка за опис на ресурси), преку која се извршуваат SPARQL барањата, е тројна object, predicate, subject - и барањето ги избира потребните тројки според наведените ограничувања во духот: најдете X така што p_55(X, q_33) е точно - каде, се разбира, p_55 е некаква врска со ID 55, а q_33 е објект со ID 33 (овде и целата приказна, повторно испуштајќи секакви детали).

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

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци
Слики и примери со земји овде оттука.

Пример за основно барање

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци

Всушност, сакаме да ја најдеме вредноста на променливата ?country таква што за прирокот
член_на, точно е дека Member_of(?country,q458) и q458 е ID на Европската Унија.

Пример за вистинско барање SPARQL во python моторот:

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци

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

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

Јазици за логички прашања

Можете да прочитате повеќе за оваа тема во мојата статија тука. И овде, само накратко ќе испитаме зошто логичките јазици се добро прилагодени за пишување прашања. Во суштина, RDF е само збир на логички искази од формата p(X) и h(X,Y), а логичкото барање ја има следната форма:

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

Овде зборуваме за создавање на нов прирок излез/1 (/1 значи унарен), под услов за X да е точно дека земјата(X) - т.е.

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

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

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

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци

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

Забелешки на Data Scientist: Персонализиран преглед на јазиците за барање податоци

Извор: www.habr.com

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