Хэзээ, хаана юу хэрэгтэй байсныг би хувийн туршлагаасаа хэлж байна. Энэ бол тойм, дипломын ажил бөгөөд ингэснээр та юу, хаана цааш ухаж болох нь тодорхой болно - гэхдээ энд би зөвхөн субъектив хувийн туршлагатай, магадгүй таны хувьд бүх зүйл огт өөр байж магадгүй юм.
Асуулгын хэлийг мэдэж, ашиглах чадвартай байх нь яагаад чухал вэ? Үндсэндээ Data Science нь ажлын хэд хэдэн чухал үе шаттай бөгөөд хамгийн эхний бөгөөд хамгийн чухал (үүнгүйгээр юу ч ажиллахгүй!) нь өгөгдөл олж авах эсвэл задлах явдал юм. Ихэнх тохиолдолд өгөгдөл нь хаа нэгтээ ямар нэгэн хэлбэрээр байрладаг бөгөөд тэндээс "суран авах" шаардлагатай байдаг.
Асуулгын хэл нь яг энэ өгөгдлийг задлах боломжийг танд олгоно! Өнөөдөр би танд хэрэгтэй байсан асуултын хэлнүүдийн талаар танд хэлж, хаана, яг яаж сурах хэрэгтэйг танд хэлэх болно.
Өгөгдлийн асуулгын гурван үндсэн блок байх бөгөөд бид энэ нийтлэлд авч үзэх болно.
- "Стандарт" асуулгын хэлүүд нь харилцааны алгебр эсвэл SQL гэх мэт асуулгын хэлний тухай ярихад ихэвчлэн ойлгогддог зүйл юм.
- Скрипт асуулгын хэлүүд: жишээлбэл, Python зүйл панда, numpy эсвэл бүрхүүлийн скрипт.
- Мэдлэгийн график болон график мэдээллийн санд зориулсан хэл хайх.
Энд бичсэн бүх зүйл бол зүгээр л хувийн туршлага, хэрэгтэй зүйл, нөхцөл байдлын тодорхойлолт, "яагаад хэрэгтэй байсан" - хүн бүр ижил төстэй нөхцөл байдал танд хэрхэн тохиолдож болохыг туршиж үзэж, эдгээр хэлийг ойлгосноор тэдэнд урьдчилан бэлдэхийг хичээх боломжтой. Та төсөлд өргөдөл гаргахаас өмнө (яаралтай) эсвэл шаардлагатай төсөлд очихоос өмнө.
"Стандарт" асуулгын хэлүүд
Стандарт асуулгын хэлүүд нь бид асуулгын талаар ярихдаа тэдний тухай ихэвчлэн боддог гэсэн утгаараа яг таг байдаг.
Харилцааны алгебр
Өнөөдөр яагаад харилцааны алгебр хэрэгтэй байна вэ? Асуулгын хэлийг яагаад тодорхой байдлаар зохион байгуулж, ухамсартайгаар ашигладаг талаар сайн ойлголттой байхын тулд та тэдгээрийн үндсэн утгыг ойлгох хэрэгтэй.
Харьцааны алгебр гэж юу вэ?
Албан ёсны тодорхойлолт нь дараах байдалтай байна: харилцааны алгебр нь харилцааны өгөгдлийн загвар дахь харилцааны үйлдлүүдийн хаалттай систем юм. Үүнийг арай илүү хүнээр тайлбарлавал энэ нь хүснэгтүүд дээрх үйлдлийн систем бөгөөд үр дүн нь үргэлж хүснэгт юм.
Бүх харилцааны үйлдлүүдийг үзнэ үү
Яагаад?
Асуулгын хэлүүд гэж юу болох, тодорхой асуулгын хэл дээрх илэрхийллийн ард ямар үйлдлүүд байдгийг ойлгож эхлэх нь асуулгын хэл дээр юу, хэрхэн ажилладаг талаар илүү гүнзгий ойлголттой болгодог.
-аас авсан
Суралцах материал:
SQL
-аас авсан
SQL нь үндсэндээ харилцааны алгебрийн хэрэгжилт юм - чухал анхааруулгатай бол SQL нь тунхаглал юм! Өөрөөр хэлбэл, харилцааны алгебрын хэлээр асуулга бичихдээ та хэрхэн тооцоолохыг хэлдэг - гэхдээ SQL-ийн тусламжтайгаар та юу задлахыг хүсч байгаагаа зааж өгөөд дараа нь DBMS нь харилцааны алгебрын хэл дээр (үр дүнтэй) илэрхийлэлүүдийг аль хэдийн үүсгэдэг. эквивалент гэж бидэнд мэдэгддэг
-аас авсан
Яагаад?
Relational DBMSs: 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 системүүд байгаа эсэхийг сайтар шинжлэх хэрэгтэй бөгөөд дараа нь энэ системийг судалж эхлэх хэрэгтэй.
Скрипт асуулгын хэлүүд
Эхлээд харахад Python үүнд ямар хамаатай юм шиг санагддаг - энэ бол програмчлалын хэл бөгөөд асуулгын тухай огт биш юм.
- Панда бол шууд утгаараа Швейцарийн армийн өгөгдлийн шинжлэх ухааны хутга бөгөөд үүнд асар их хэмжээний өгөгдөл хувиргах, нэгтгэх гэх мэт зүйл тохиолддог.
- Numpy - векторын тооцоо, матриц, шугаман алгебр.
- Scipy - энэ багцад маш их математик, ялангуяа статистик байдаг.
- Бархасбадь лаборатори - олон тооны хайгуулын өгөгдөлд дүн шинжилгээ хийх нь зөөврийн компьютерт сайн тохирдог - мэдэхэд хэрэгтэй.
- Хүсэлт - сүлжээтэй ажиллах.
- 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 дээр
Shell нь асуулгын хэл юм
Миний ажиллаж байсан хэд хэдэн өгөгдөл боловсруулах, дүн шинжилгээ хийх төслүүд нь үнэндээ Python, Java болон shell командууд дээр код дууддаг бүрхүүлийн скриптүүд юм. Тиймээс, ерөнхийдөө bash/zsh/etc хэл дээрх дамжуулах хоолойг өндөр түвшний хайлт гэж үзэж болно (мэдээжийн хэрэг та тэнд гогцоо хийж болно, гэхдээ энэ нь бүрхүүлийн хэл дээрх 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 - урсгал нь үр дүнг шууд гаргаж, Python дахь дараах процессор руу (эхний жишээний адил) дамжуулсан.
- дотооддоо, дараах процессор нь гаралтыг форматласан энгийн төлөвийн машин байв
Нийтдээ их хэмжээний өгөгдөл (0.5 TB) дээр урсгалын горимд ажилладаг нарийн төвөгтэй шугам хоолой нь чухал нөөцгүй бөгөөд энгийн дамжуулах хоолой, хэд хэдэн хэрэгслээр хийгдсэн.
Өөр нэг чухал зөвлөгөө: терминал дээр сайн, үр дүнтэй ажиллаж, bash/zsh/etc бичих чадвартай байх.
Энэ нь хаана ашигтай байх вэ? Тийм ээ, бараг хаа сайгүй - дахин хэлэхэд Интернет дээр судлах маш олон материал байдаг. Ялангуяа энд
R скрипт
Уншигч дахин хэлж магадгүй - энэ бол бүхэл бүтэн програмчлалын хэл юм! Мэдээжийн хэрэг, түүний зөв байх болно. Гэсэн хэдий ч би ихэвчлэн R-тэй ийм контекст дээр тааралддаг байсан бөгөөд үнэндээ энэ нь асуулгын хэлтэй маш төстэй байсан.
R нь статистик тооцоолол, дүрслэлд зориулсан статистик тооцооллын орчин ба хэл юм (дээр
авсан
Дата судлаач яагаад R-г мэдэх шаардлагатай вэ? Наад зах нь, 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-ийн олон санаанууд панда, numpy эсвэл scipy гэх мэт дата фрейм, дата векторжуулалт гэх мэт питон багцууд руу шилжсэн - тиймээс ерөнхийдөө R дээрх олон зүйл танд танил, тохиромжтой мэт санагдах болно.
Судлах олон эх сурвалж байдаг, жишээлбэл,
Мэдлэгийн графикууд
Энд би бага зэрэг ер бусын туршлага олж авлаа, учир нь би мэдлэгийн графиктай ажиллах, график хайх хэлтэй ажиллах шаардлагатай болдог. Тиймээс, энэ хэсэг нь арай чамин зүйл тул үндсэн ойлголтуудыг товчхон авч үзье.
Сонгодог харилцааны өгөгдлийн санд бид тогтмол схемтэй байдаг, гэхдээ энд схем нь уян хатан, предикат бүр нь үнэндээ "багана" ба түүнээс ч илүү байдаг.
Та хүнийг загварчилж байсан бөгөөд гол зүйлийг тайлбарлахыг хүсч байна гэж төсөөлөөд үз дээ, жишээлбэл, тодорхой хүн болох Дуглас Адамсыг авч, энэ тайлбарыг үндэс болгон ашигла.
Хэрэв бид харилцааны өгөгдлийн санг ашигласан бол асар олон тооны багана бүхий асар том хүснэгт эсвэл хүснэгтүүдийг үүсгэх шаардлагатай болно, тэдгээрийн ихэнх нь NULL эсвэл ямар нэг өгөгдмөл Хуурамч утгаар дүүрэн байх болно, жишээлбэл, бидний олонхи нь Солонгосын үндэсний номын санд оруулах - Мэдээжийн хэрэг, бид тэдгээрийг тусад нь хүснэгтэд оруулж болох боловч энэ нь эцсийн дүндээ тогтсон хамаарлыг ашиглан предикат бүхий уян логик хэлхээг загварчлах оролдлого болно.
Тиймээс бүх өгөгдлийг график хэлбэрээр эсвэл хоёртын болон нэгдмэл логикийн илэрхийлэл хэлбэрээр хадгалдаг гэж төсөөлөөд үз дээ.
Та ийм зүйлтэй хаана таарч болох вэ? Нэгдүгээрт, хамтран ажиллах
Дараах нь миний ашиглаж, хамтран ажиллаж байсан асуулгын үндсэн хэлүүд юм.
SPARQL
Вики:
SPARQL (рекурсив товчлол ньАнгли хэл SPARQL протокол ба RDF Query хэл) -өгөгдлийн хайлтын хэл , загвараар төлөөлдөгRDF Тэгээдпротокол Эдгээр хүсэлтийг дамжуулах, хариу өгөх. SPARQL бол зөвлөмж юмW3C консорциум технологийн нэг юмсемантик вэб .
Гэвч бодит байдал дээр энэ нь логик нэгдмэл болон хоёртын предикатуудын асуулгын хэл юм. Та зүгээр л Булийн илэрхийлэлд юу нь тогтмол, юу нь биш (маш хялбаршуулсан) болохыг нөхцөлт байдлаар зааж өгч байна.
RDF (Resource Description Framework) нь SPARQL асуулгыг гүйцэтгэх суурь нь өөрөө гурвалсан юм. object, predicate, subject
- ба асуулга нь сүнсэнд заасан хязгаарлалтын дагуу шаардлагатай гурвыг сонгоно: p_55(X, q_33) үнэн байхаар X-г ол - энд мэдээжийн хэрэг, p_55 нь ID 55-тай ямар нэгэн төрлийн хамаарал, q_33 нь ID 33-тай объект (энд болон бүх түүхийг дахин бүх төрлийн дэлгэрэнгүй мэдээллийг орхигдуулсан).
Өгөгдлийн танилцуулгын жишээ:
Улс орнуудын зураг, жишээг эндээс үзнэ үү
Үндсэн асуулгын жишээ
Үнэн хэрэгтээ бид ?country хувьсагчийн утгыг предикатын хувьд олохыг хүсч байна
member_of, member_of(?country,q458) болон q458 нь Европын Холбооны ID болох нь үнэн.
Python хөдөлгүүр доторх бодит SPARQL асуулгын жишээ:
Ерөнхийдөө би SPARQL-ийг бичихийн оронд унших хэрэгтэй байсан - ийм нөхцөлд өгөгдлийг хэрхэн яаж татаж байгааг ойлгохын тулд наад зах нь анхан шатны хэлийг ойлгох нь ашигтай ур чадвар байх болно.
Онлайнаар судлах маш олон материал байдаг: жишээлбэл, энд
Логик асуулгын хэлүүд
Та миний нийтлэлээс сэдвийн талаар илүү ихийг уншиж болно
output(X) :- country(X), member_of(X,“EU”).
Энд бид шинэ предикатын гаралт/1 (/1 нь нэгдмэл гэсэн үг) үүсгэх тухай ярьж байна, хэрэв X-ийн хувьд улс(X) - өөрөөр хэлбэл, X нь улс, мөн гишүүн_(X,"ЕХ ") нь үнэн байх тохиолдолд.
Өөрөөр хэлбэл, энэ тохиолдолд өгөгдөл болон дүрмийг хоёуланг нь ижил байдлаар харуулсан бөгөөд энэ нь асуудлыг маш хялбар бөгөөд сайн загварчлах боломжийг олгодог.
Та энэ салбарт хаана танилцсан бэ?: ийм хэлээр асуулга бичдэг компанитай бүхэл бүтэн том төсөл, мөн системийн цөм дэх одоогийн төсөл дээр энэ нь нэлээд чамин зүйл мэт санагдаж болох ч заримдаа ийм зүйл тохиолддог.
Викидата боловсруулах логик хэл дээрх кодын фрагментийн жишээ:
Материал: Би энд орчин үеийн логик програмчлалын хэлний хариултын багц програмчлалын хэд хэдэн холбоосыг өгөх болно - Би үүнийг судлахыг зөвлөж байна:
http://peace.eas.asu.edu/aaai12tutorial/asp-tutorial-aaai.pdf http://ceur-ws.org/Vol-1145/tutorial1.pdf https://www.youtube.com/watch?v=gVQ0bP8zyHw https://www.youtube.com/watch?v=kdcd7Je2glc https://potassco.org/book/ http://potassco.sourceforge.net/teaching.html https://www.cs.uni-potsdam.de/~torsten/Potassco/Tutorials/fmcad12.pdf
Эх сурвалж: www.habr.com