Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо
Ман ба шумо аз таҷрибаи шахсии худ мегӯям, ки чӣ дар куҷо ва кай муфид буд. Ин як шарҳ ва рисола аст, то маълум шавад, ки чӣ ва дар куҷо шумо минбаъд кофта метавонед - аммо дар ин ҷо ман таҷрибаи шахсии истисноӣ дорам, шояд ҳама чиз барои шумо комилан дигар бошад.

Чаро донистан ва истифода бурдани забонҳои дархост муҳим аст? Дар асл, Data Science дорои якчанд марҳилаҳои муҳими кор аст ва аввалин ва муҳимтарин (бе он, албатта ҳеҷ чиз кор намекунад!) гирифтани маълумот ё истихроҷи маълумот аст. Аксар вақт, маълумот дар ягон шакл дар ҷое нишастааст ва бояд аз он ҷо "ҷамъоварӣ" карда шавад. 

Забонҳои дархост ба шумо имкон медиҳанд, ки ин маълумотро истихроҷ кунед! Ва имрӯз ман ба шумо дар бораи он забонҳои пурсиш, ки барои ман муфид буданд, нақл мекунам ва ман ба шумо мегӯям ва ба шумо нишон медиҳам, ки дар куҷо ва чӣ гуна дақиқ - барои чӣ омӯхтан лозим аст.

Се блоки асосии намудҳои дархости додаҳо мавҷуданд, ки мо дар ин мақола муҳокима хоҳем кард:

  • Забонҳои дархости "стандартӣ" он чизест, ки одатан ҳангоми сухан дар бораи забони дархост, ба монанди алгебраи релятсионӣ ё SQL фаҳмида мешавад.
  • Забонҳои дархости скрипт: масалан, Python чизҳои панда, скрипти numpy ё shell.
  • Забонҳоро барои графикҳои дониш ва пойгоҳи додаҳои графикӣ дархост кунед.

Ҳама чизе, ки дар ин ҷо навишта шудааст, танҳо як таҷрибаи шахсӣ аст, он чизе ки муфид буд, бо тавсифи вазъиятҳо ва "чаро он лозим буд" - ҳама метавонанд бисанҷанд, ки чӣ гуна вазъиятҳои шабеҳ ба шумо меоянд ва бо фаҳмидани ин забонҳо кӯшиш мекунанд, ки ба онҳо пешакӣ омода шаванд пеш аз он ки шумо бояд ба лоиҳа муроҷиат кунед (фавран) ё ҳатто ба лоиҳае, ки онҳо лозиманд, дастрас шавед.

Забонҳои дархости "стандартӣ"

Забонҳои стандартии дархост маҳз ба он маъноанд, ки мо одатан ҳангоми сӯҳбат дар бораи дархостҳо дар бораи онҳо фикр мекунем.

Алгебраи реляционӣ

Чаро имрӯз алгебраи релятсионӣ лозим аст? Барои он ки дарки хубе дошта бошед, ки чаро забонҳои пурсиш ба таври муайян сохта шудаанд ва онҳоро огоҳона истифода баред, шумо бояд асли онҳоро фаҳмед.

Алгебраи релятсионӣ чист?

Таърифи расмӣ чунин аст: алгебраи релятсионӣ системаи пӯшидаи амалҳо оид ба муносибатҳо дар модели додаҳои релятсионӣ мебошад. Агар каме ба таври инсонӣ гӯем, ин як системаи амалиётҳо дар ҷадвалҳоест, ки натиҷа ҳамеша ҷадвал аст.

Ҳамаи амалиётҳои марбутро дар ин мақола аз Habr - дар ин ҷо мо тавсиф мекунем, ки чаро шумо бояд бидонед ва дар куҷо он муфид аст.

Чаро?

Оғози фаҳмидани он, ки забонҳои дархост дар бораи кадом забонҳо ҳастанд ва дар паси ифодаҳо дар забонҳои мушаххас кадом амалиётҳо истодаанд, аксар вақт фаҳмиши амиқтареро дар бораи он, ки дар забонҳои дархост чӣ кор мекунад ва чӣ гуна кор мекунад, медиҳад.

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо
Аз ин мақолаҳо. Намунаи амалиёт: ҳамроҳшавӣ, ки ҷадвалҳоро мепайвандад.

Маводҳо барои омӯзиш:

Курси хуби шиносоӣ аз Стэнфорд. Умуман, дар бораи алгебра ва назарияи реляционй материалхои зиёде мавчуданд — Coursera, Udacity. Инчунин миқдори зиёди мавод дар интернет мавҷуд аст, аз ҷумла хуб курсҳои академӣ. Маслиҳати шахсии ман: шумо бояд алгебраи реляциониро хеле хуб фаҳмед - ин асоси асосҳост.

SQL

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо
Аз ин мақолаҳо.

SQL аслан татбиқи алгебраи релятсионӣ мебошад - бо огоҳии муҳим, SQL декларативист! Яъне ҳангоми навиштани пурсиш бо забони алгебраи релясиалӣ, шумо воқеан чӣ тавр ҳисоб карданро мегӯед - аммо бо SQL шумо он чизеро, ки мехоҳед истихроҷ кунед, муайян кунед ва пас DBMS аллакай ифодаҳои (самаранок) дар забони алгебраи релятсионӣ тавлид мекунад (онҳо). баробарй ба мо маълум аст Теоремаи Кодд).

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо
Аз ин мақолаҳо.

Чаро?

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 дар маҷмӯъ бо он чӣ иртибот дорад - ин забони барномасозӣ аст, на дар бораи дархостҳо.

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо

  • Pandas аслан як корди артиши Швейтсария оид ба Data Science мебошад; дар он миқдори зиёди табдили додаҳо, ҷамъоварӣ ва ғайра рух медиҳад.
  • Numpy - ҳисобҳои векторӣ, матритсаҳо ва алгебраи хатӣ.
  • Scipy - дар ин баста математика бисёр аст, махсусан омор.
  • Лабораторияи Jupyter - бисёр таҳлили маълумотҳои иктишофӣ ба ноутбукҳо мувофиқат мекунад - донистан муфид аст.
  • Дархостҳо - кор бо шабака.
  • Pyspark дар байни муҳандисони маълумот хеле маъмул аст, эҳтимоли зиёд ба шумо лозим меояд, ки бо ин ё Spark муошират кунед, танҳо аз сабаби маъруфияти онҳо.
  • *Selenium - барои ҷамъоварии маълумот аз сайтҳо ва захираҳо хеле муфид аст, баъзан роҳи дигари гирифтани маълумот вуҷуд надорад.

Маслиҳати асосии ман: 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). Дар маҷмӯъ, мундариҷаи ин ҷо барои googling олиҷаноб аст ва агар ман бояд як бастаеро интихоб кунам, ки ба он тамаркуз кунам, он албатта пандаҳо хоҳад буд. Дар бораи омезиши маводи DS + Python низ хеле зиёд.

Shell ҳамчун забони дархост

Якчанд лоиҳаҳои коркард ва таҳлили додаҳо, ки ман бо онҳо кор кардам, воқеан скриптҳои ҷилди ҳастанд, ки кодро дар Python, Java даъват мекунанд ва худи фармонҳои shell. Аз ин рӯ, дар маҷмӯъ, шумо метавонед қубурҳоро дар bash/zsh/etc ҳамчун як навъ дархости сатҳи баланд баррасӣ кунед (шумо метавонед, албатта, дар он ҷо ҳалқаҳо эҷод кунед, аммо ин барои рамзи DS дар забонҳои shell хос нест), биёед бидиҳем. як мисоли оддӣ - ба ман лозим буд, ки харитаи 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 filepath - сатри пешрафтро дар асоси андозаи файл медиҳад ва мундариҷаи онро минбаъд интиқол медиҳад
  • unpigz -c як кисми архивро хонда ба jq дод
  • jq бо калид - ҷараён дарҳол натиҷаро ба даст овард ва онро ба постпротсессор интиқол дод (ба монанди мисоли аввалин) дар Python
  • дар дохили он, постпроцессор як мошини оддии давлатӣ буд, ки баромадро формат мекард 

Дар маҷмӯъ, лӯлаи мураккабе, ки дар реҷаи ҷараён дар маълумоти калон кор мекунад (0.5 ТБ), бе захираҳои назаррас ва аз қубури оддӣ ва якчанд асбоб сохта шудааст.

Боз як маслиҳати муҳим: қодир будан дар терминал хуб ва самаранок кор карда, bash/zsh/etc нависед.

Дар куҷо муфид хоҳад буд? Бале, қариб дар ҳама ҷо - боз, дар Интернет маводи зиёде барои омӯхтан мавҷуданд. Аз чумла, дар ин чо ин мақолаи қаблии ман.

R скрипт

Боз, хонанда метавонад хитоб кунад - хуб, ин як забони барномасозӣ аст! Ва албатта, ӯ ҳақ хоҳад буд. Аммо, ман одатан бо R дар чунин контекст дучор мешудам, ки дар асл он ба забони пурсиш хеле монанд буд.

R як муҳити ҳисоббарории оморӣ ва забон барои ҳисоббарории статикӣ ва визуализатсия мебошад (мувофиқи ин).

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо
Гирифта шудааст аз ин ҷо. Дар омади гап, ман тавсия медиҳам, маводи хуб.

Чаро олими маълумот бояд R донад? Ҳадди ақал, зеро як қабати бузурги одамони ғайри IT вуҷуд дорад, ки маълумотро дар R таҳлил мекунанд. Ман онро дар ҷойҳои зерин дучор омадам:

  • Соҳаи фармасевтӣ.
  • Биологхо.
  • Бахши молия.
  • Одамоне, ки маълумоти соф риёзӣ доранд, ки бо омор сарукор доранд.
  • Моделҳои махсуси оморӣ ва моделҳои омӯзиши мошинҳо (ки онҳоро аксар вақт танҳо дар версияи муаллиф ҳамчун бастаи 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 ба бастаҳои python ба монанди pandas, numpy ё scipy, ба монанди датафрамҳо ва векторизатсияи додаҳо интиқол ёфтанд - бинобар ин дар маҷмӯъ бисёр чизҳо дар R барои шумо шинос ва қулай хоҳанд буд.

Манбаъҳои зиёде барои омӯзиш вуҷуд доранд, масалан, ин.

Графикаи дониш

Дар ин ҷо ман як таҷрибаи каме ғайриоддӣ дорам, зеро ман бисёр вақт бояд бо графикҳои дониш кор кунам ва барои графикҳо забонҳои дархост кунам. Аз ин рӯ, биёед ба таври мухтасар дар бораи асосҳо гузарем, зеро ин қисм каме экзотиктар аст.

Дар пойгоҳи додаҳои классикии релятсионӣ мо схемаи собит дорем, аммо дар ин ҷо схема чандир аст, ҳар як предикат воқеан як “сутун” ва ҳатто бештар аст.

Тасаввур кунед, ки шумо шахсеро моделсозӣ мекардед ва мехостед чизҳои асосиро тавсиф кунед, масалан, биёед шахси мушаххас Дуглас Адамсро гирем ва ин тавсифро ҳамчун асос истифода барем.

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо
www.wikidata.org/wiki/Q42

Агар мо пойгоҳи додаҳои релятсионӣ истифода барем, мо бояд ҷадвал ё ҷадвалҳои азимеро бо шумораи зиёди сутунҳо созем, ки аксари онҳо NULL хоҳанд буд ё бо арзиши пешфарз False пур карда мешаванд, масалан, аз эҳтимол дур нест, ки бисёре аз мо вуруд ба китобхонаи миллии Корея - албатта, мо метавонем онҳоро дар ҷадвалҳои алоҳида ҷойгир кунем, аммо ин дар ниҳоят кӯшиши моделсозии схемаи мантиқии чандир бо предикатҳо бо истифода аз реляционии собит хоҳад буд.

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо
Пас, тасаввур кунед, ки ҳама маълумотҳо ҳамчун график ё ифодаҳои бинарӣ ва унарии булӣ нигоҳ дошта мешаванд.

Дар куҷо шумо ҳатто бо ин дучор шуда метавонед? Аввалан, кор бо маълумот вики, ва бо ҳама гуна пойгоҳи додаҳои графикӣ ё маълумоти пайвастшуда.

Инҳоянд забонҳои асосии дархост, ки ман бо онҳо истифода ва кор кардам.

SPARQL

Вики:
SPARQL (мухтасари рекурсивӣ аз он Eng. Протоколи SPARQL ва забони дархости RDF) - забони дархости маълумот, бо модели нишон дода шудааст РДФ, инчунин протокол ки ин дархостхоро фиристад ва ба онхо чавоб дихад. SPARQL як тавсия аст Консорсиуми W3C ва яке аз технологияҳо шабакаи семантикӣ.

Аммо дар асл он забони пурсиш барои предикатҳои мантиқии унарӣ ва бинарӣ мебошад. Шумо танҳо шартан нишон медиҳед, ки чӣ дар ифодаи булӣ муқаррар шудааст ва чӣ не (хеле соддакардашуда).

Худи пойгоҳи RDF (Чорчӯбаи тавсифи захираҳо), ки дар он дархостҳои SPARQL иҷро мешаванд, сегона аст. object, predicate, subject - ва дархост сегонаҳои заруриро мувофиқи маҳдудиятҳои муайяншуда дар рӯҳ интихоб мекунад: X-ро ёбед, ки p_55(X, q_33) дуруст бошад - дар он ҷо, албатта, p_55 як навъ робита бо ID 55 аст ва q_33 як аст. объект бо ID 33 (дар ин ҷо ва тамоми ҳикоя, боз ҳама гуна тафсилотро сарфи назар кунед).

Намунаи пешниҳоди маълумот:

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо
Суратҳо ва мисол бо кишварҳо дар ин ҷо аз ин ҷо.

Намунаи дархости асосӣ

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо

Дар асл, мо мехоҳем арзиши тағирёбандаи ?country-ро пайдо кунем, ки барои предикат
member_of, дуруст аст, ки member_of(?country,q458) ва q458 ID-и Иттиҳоди Аврупо мебошанд.

Намунаи дархости воқеии SPARQL дар дохили муҳаррики python:

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо

Одатан, ман маҷбур будам, ки SPARQL-ро бихонам, на навиштани он - дар ин ҳолат, эҳтимол аст, ки фаҳмидани забон ҳадди аққал дар сатҳи асосӣ барои фаҳмидани маҳз чӣ гуна маълумот гирифта мешавад, як маҳорати муфид хоҳад буд. 

Барои омӯзиши онлайн маводҳои зиёде мавҷуданд: масалан, дар ин ҷо ин и ин. Ман одатан тарҳҳо ва мисолҳои мушаххасро дар Google меомӯзам ва ин ҳоло кофӣ аст.

Забонҳои дархости мантиқӣ

Шумо метавонед бештар дар бораи мавзӯъ дар мақолаи ман хонед дар ин ҷо. Ва дар ин ҷо, мо танҳо ба таври мухтасар дида мебароем, ки чаро забонҳои мантиқӣ барои навиштани дархостҳо мувофиқанд. Аслан, RDF танҳо маҷмӯи изҳороти мантиқии шакли p(X) ва h(X,Y) мебошад ва дархости мантиқӣ шакли зерин дорад:

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

Дар ин ҷо сухан дар бораи эҷоди баромади нави предикати/1 меравад (/1 маънои ягонаро дорад), ба шарте ки барои X ин дуруст аст, ки кишвар(X) - яъне X кишвар ва инчунин узви_аз(X,"EU") аст.

Яъне, дар ин ҳолат ҳам маълумот ва ҳам қоидаҳо ба як тарз пешниҳод карда мешаванд, ки ба мо имкон медиҳад, ки мушкилотро хеле осон ва хуб модел кунем.

Шумо дар куҷо дар саноат вохӯрдед?: як лоиҳаи бузург бо ширкате, ки дархостҳоро бо чунин забон менависад, инчунин дар лоиҳаи ҷорӣ дар маркази система - ба назар чунин мерасад, ки ин як чизи хеле экзотикӣ аст, аммо баъзан чунин мешавад.

Намунаи порчаи код дар викидата коркарди забони мантиқӣ:

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо

Маводҳо: Ман дар ин ҷо якчанд истинодҳоро ба забони муосири барномасозии мантиқӣ медиҳам - Answer Set Programming - Ман тавсия медиҳам, ки онро омӯзед:

Қайдҳои донишманди маълумот: Шарҳи фардии забонҳои дархости додаҳо

Манбаъ: will.com

Илова Эзоҳ