Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish
Men sizga qayerda va qachon foydali bo'lganini shaxsiy tajribamdan aytib beraman. Bu umumiy ko'rinish va tezis, shunda siz nimani va qayerda qazishingiz mumkinligi aniq bo'ladi - lekin bu erda menda faqat sub'ektiv shaxsiy tajribam bor, ehtimol siz uchun hamma narsa butunlay boshqacha.

Nima uchun so'rov tillarini bilish va ulardan foydalana olish muhim? Asosiysi, Data Science ishning bir nechta muhim bosqichlariga ega va eng birinchi va eng muhimi (busiz, albatta, hech narsa ishlamaydi!) ma'lumotlarni olish yoki olishdir. Ko'pincha, ma'lumotlar biron bir shaklda bir joyda o'tiradi va u erdan "olish" kerak. 

So'rov tillari sizga aynan shu ma'lumotlarni olish imkonini beradi! Va bugun men sizga men uchun foydali bo'lgan so'rov tillari haqida gapirib beraman va sizga aytaman va qaerda va qanday aniq - nima uchun o'rganish kerakligini ko'rsataman.

Ma'lumotlar so'rovi turlarining uchta asosiy bloklari mavjud bo'lib, biz ushbu maqolada muhokama qilamiz:

  • "Standart" so'rovlar tillari - bu relyatsion algebra yoki SQL kabi so'rovlar tili haqida gapirganda odatda tushuniladigan tildir.
  • Skript so'rovlari tillari: masalan, Python narsalar pandas, numpy yoki qobiq skripti.
  • Bilim grafiklari va grafik ma'lumotlar bazalari uchun tillarni so'rang.

Bu erda yozilgan hamma narsa shunchaki shaxsiy tajriba, foydali bo'lgan, vaziyatlarning tavsifi va "nima uchun kerak edi" - har bir kishi shunga o'xshash vaziyatlar sizga qanday kelishi mumkinligini sinab ko'rishi va ushbu tillarni tushunib, ularga oldindan tayyorgarlik ko'rishi mumkin. loyihaga (shoshilinch) murojaat qilishingiz yoki hatto ular kerak bo'lgan loyihaga kirishingiz kerak.

"Standart" so'rov tillari

Standart so'rovlar tillari so'rovlar haqida gapirganda, biz odatda ular haqida o'ylaymiz degan ma'noda.

Relyatsion algebra

Nima uchun relyatsion algebra bugungi kunda kerak? So'rov tillari nima uchun ma'lum bir tarzda tuzilganligini va ulardan ongli ravishda foydalanishni yaxshi tushunish uchun siz ularning asosiy mohiyatini tushunishingiz kerak.

Relyatsion algebra nima?

Rasmiy ta'rif quyidagicha: relyatsion algebra - relyatsion ma'lumotlar modelidagi munosabatlar bo'yicha operatsiyalarning yopiq tizimi. Buni biroz insoniyroq qilib aytadigan bo'lsak, bu jadvallar ustidagi operatsiyalar tizimi bo'lib, natija har doim jadval bo'ladi.

Barcha aloqador operatsiyalarni ko'ring bu Xabr maqolasi - bu erda nima uchun bilishingiz kerakligini va bu qayerda foydali ekanligini tasvirlaymiz.

Nima uchun?

So'rovlar tillari nima ekanligini va muayyan so'rovlar tillaridagi ifodalar ortida qanday operatsiyalar mavjudligini tushunishni boshlash ko'pincha so'rov tillarida nima va qanday ishlashini chuqurroq tushunish imkonini beradi.

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish
dan olingan bu maqolalar. Amalga misol: jadvallarni birlashtiruvchi qo'shilish.

O'qish uchun materiallar:

Stenforddan yaxshi kirish kursi. Umuman olganda, relyatsion algebra va nazariya bo'yicha juda ko'p materiallar mavjud - Coursera, Udacity. Internetda juda ko'p miqdordagi materiallar, shu jumladan yaxshi akademik kurslar. Mening shaxsiy maslahatim: siz relyatsion algebrani juda yaxshi tushunishingiz kerak - bu asoslarning asosidir.

SQL

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish
dan olingan bu maqolalar.

SQL aslida relyatsion algebrani amalga oshirishdir - muhim ogohlantirish bilan SQL deklarativdir! Ya'ni, so'rovni relyatsion algebra tilida yozayotganda, siz aslida qanday hisoblashni aytasiz - lekin SQL bilan siz nimani chiqarishni xohlayotganingizni ko'rsatasiz va keyin DBMS allaqachon relyatsion algebra tilida (samarali) ifodalarni hosil qiladi ( ularning ekvivalentligi bizga ma'lum Kodd teoremasi).

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish
dan olingan bu maqolalar.

Nima uchun?

Aloqaviy DBMSlar: Oracle, Postgres, SQL Server va boshqalar hali ham deyarli hamma joyda mavjud va ular bilan o'zaro aloqada bo'lish ehtimoli juda yuqori, ya'ni siz SQLni o'qishingiz kerak (bu juda katta ehtimol) yoki uni yozishingiz kerak ( ham ehtimoldan yiroq emas).

Nima o'qish va o'rganish kerak

Yuqoridagi bir xil havolalarga ko'ra (relyatsion algebra haqida) aql bovar qilmaydigan miqdordagi materiallar mavjud, masalan, bu.

Aytgancha, NoSQL nima?

"Yana bir bor ta'kidlash joizki, "NoSQL" atamasi mutlaqo o'z-o'zidan paydo bo'lgan va uning ortida umumiy qabul qilingan ta'rif yoki ilmiy muassasa yo'q." Tegishli maqola Habrda.

Darhaqiqat, odamlar ko'p muammolarni hal qilish uchun to'liq relyatsion model kerak emasligini tushunishdi, ayniqsa, masalan, ishlash muhim bo'lgan va yig'ish bilan ma'lum oddiy so'rovlar ustunlik qiladiganlar uchun - bu erda ko'rsatkichlarni tezda hisoblash va ularni yozish uchun juda muhimdir. ma'lumotlar bazasi va aksariyat xususiyatlar o'zaro bog'liq bo'lib, nafaqat keraksiz, balki zararli ham bo'lib chiqdi - agar u biz uchun eng muhim narsani (ba'zi bir aniq vazifa uchun) buzadigan bo'lsa, nima uchun uni normallashtirish kerak - unumdorlik?

Bundan tashqari, ko'pincha klassik relyatsion modelning sobit matematik sxemalari o'rniga moslashuvchan sxemalar kerak bo'ladi - va bu tizimni joylashtirish va tezkor ishlashni boshlash, natijalarni qayta ishlash - yoki saqlangan ma'lumotlarning sxemasi va turlarini yaratish juda muhim bo'lsa, ilovalarni ishlab chiqishni nihoyatda osonlashtiradi. unchalik muhim emas.

Misol uchun, biz ekspert tizimini yaratmoqdamiz va ma'lumotni ma'lum bir domenda ba'zi meta-ma'lumotlar bilan birga saqlashni xohlaymiz - biz barcha maydonlarni bilmasligimiz va har bir yozuv uchun JSONni saqlashimiz mumkin - bu bizga ma'lumotlarni kengaytirish uchun juda moslashuvchan muhitni beradi. model va tez takrorlanadigan - shuning uchun bu holda, NoSQL yanada afzalroq va o'qilishi mumkin bo'ladi. Misol kiritish (NoSQL kerakli joyda bo'lgan loyihalarimdan biridan).

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

Siz ko'proq o'qishingiz mumkin shu yerda NoSQL haqida.

Nimani o'rganish kerak?

Bu erda, aksincha, siz o'zingizning vazifangizni, uning qanday xususiyatlarga ega ekanligini va ushbu tavsifga mos keladigan NoSQL tizimlari mavjudligini sinchkovlik bilan tahlil qilishingiz kerak va keyin ushbu tizimni o'rganishni boshlashingiz kerak.

Skript so'rovlari tillari

Avvaliga, Pythonning umuman unga nima aloqasi borga o'xshaydi - bu dasturlash tili va umuman so'rovlar haqida emas.

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish

  • Pandalar tom ma'noda Shveytsariya armiyasining Data Science pichog'i bo'lib, unda katta hajmdagi ma'lumotlarni o'zgartirish, yig'ish va hokazolar sodir bo'ladi.
  • Numpy - vektor hisoblari, matritsalar va chiziqli algebra mavjud.
  • Scipy - bu to'plamda juda ko'p matematika, ayniqsa statistika mavjud.
  • Jupyter laboratoriyasi - ko'plab tadqiqot ma'lumotlarini tahlil qilish noutbuklarga yaxshi mos keladi - bilish foydalidir.
  • So'rovlar - tarmoq bilan ishlash.
  • Pyspark ma'lumotlar muhandislari orasida juda mashhur, ehtimol siz bu yoki Spark bilan ularning mashhurligi tufayli o'zaro aloqada bo'lishingiz kerak bo'ladi.
  • *Selen - saytlar va resurslardan ma'lumotlarni to'plash uchun juda foydali, ba'zida ma'lumotlarni olishning boshqa usuli yo'q.

Mening asosiy maslahatim: Python-ni o'rganing!

Pandas

Misol tariqasida quyidagi kodni olaylik:

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

Aslida, biz kod klassik SQL naqshiga mos kelishini ko'ramiz.

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

Ammo muhim tomoni shundaki, bu kod skript va quvur liniyasining bir qismidir; aslida biz so'rovlarni Python quvur liniyasiga joylashtirmoqdamiz. Bunday vaziyatda so'rovlar tili bizga Pandas yoki pySpark kabi kutubxonalardan keladi.

Umuman olganda, pySpark-da biz quyidagi ruhda so'rovlar tili orqali ma'lumotlarni o'zgartirishning o'xshash turini ko'ramiz:

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

Qayerda va nimani o'qish kerak

Umuman olganda, Python-ning o'zida muammo emas o'rganish uchun materiallarni toping. Internetda juda ko'p darsliklar mavjud pandalar, pySpark va kurslar uchqun (shuningdek, o'z-o'zidan DS). Umuman olganda, bu erda kontent googling uchun juda yaxshi va agar men diqqatni qaratish uchun bitta paketni tanlashim kerak bo'lsa, bu pandalar bo'lar edi. DS + Python materiallarining kombinatsiyasi haqida ham juda ko'p.

Shell so'rovlar tili sifatida

Men ishlagan bir nechta ma'lumotlarni qayta ishlash va tahlil qilish loyihalari, aslida, Python, Java va qobiq buyruqlarini chaqiradigan qobiq skriptlari. Shuning uchun, umuman olganda, siz bash/zsh/etc-dagi quvurlarni yuqori darajadagi so'rovlar sifatida ko'rib chiqishingiz mumkin (siz, albatta, u erda looplar qilishingiz mumkin, lekin bu qobiq tillaridagi DS kodiga xos emas), keling, beraylik. oddiy misol - men vikidatalarning QID xaritasini va rus va ingliz vikilariga to'liq havolalarni bajarishim kerak edi, buning uchun men bash-dagi buyruqlardan oddiy so'rov yozdim va chiqish uchun Python-da oddiy skript yozdim. shunday birlashtiring:

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

qayerda

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

Bu, aslida, kerakli xaritani yaratgan barcha quvur liniyasi edi; ko'rib turganimizdek, hamma narsa oqim rejimida ishlagan:

  • pv fayl yo'li - fayl hajmiga asoslangan taraqqiyot satrini beradi va uning mazmunini oldinga uzatadi
  • unpigz -c arxivning bir qismini o'qib, jq ga berdi
  • jq kaliti bilan - oqim darhol natijani yaratdi va uni Python-da postprotsessorga (birinchi misolda bo'lgani kabi) uzatdi.
  • ichki, postprotsessor chiqishni formatlash oddiy davlat mashinasi edi 

Umuman olganda, katta ma'lumotlarda (0.5 TB) oqim rejimida ishlaydigan murakkab quvur liniyasi, muhim resurslarsiz va oddiy quvur liniyasi va bir nechta asboblardan iborat.

Yana bir muhim maslahat: terminalda yaxshi va samarali ishlash va bash/zsh/etc yoza olish.

Qaerda foydali bo'ladi? Ha, deyarli hamma joyda - yana Internetda o'rganish uchun juda ko'p materiallar mavjud. Xususan, bu erda bu oldingi maqolam.

R skripti

Yana, o'quvchi hayajon bilan aytishi mumkin - bu butun dasturlash tili! Va, albatta, u haq bo'ladi. Biroq, men odatda R ni shunday kontekstda uchratdimki, aslida u so'rovlar tiliga juda o'xshash edi.

R - bu statistik hisoblash muhiti va statik hisoblash va vizualizatsiya uchun til (ko'ra bu).

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish
olingan shu yerda. Aytgancha, men buni tavsiya qilaman, yaxshi material.

Nima uchun ma'lumot olimi R ni bilishi kerak? Hech bo'lmaganda, R.dagi ma'lumotlarni tahlil qiladigan IT bo'lmagan odamlarning katta qatlami borligi sababli. Men uni quyidagi joylarda uchratdim:

  • Farmatsevtika sektori.
  • Biologlar.
  • Moliyaviy sektor.
  • Statistikalar bilan shug'ullanadigan sof matematik ma'lumotga ega odamlar.
  • Ixtisoslashgan statistik modellar va mashinani o'rganish modellari (ularni ko'pincha faqat mualliflik versiyasida R paketi sifatida topish mumkin).

Nima uchun bu aslida so'rovlar tili? U tez-tez uchraydigan shaklda, bu aslida ma'lumotlarni o'qish va so'rov (model) parametrlarini tuzatish, shuningdek, ggplot2 kabi paketlardagi ma'lumotlarni vizuallashtirishni o'z ichiga olgan model yaratish so'rovidir - bu ham so'rovlarni yozish shaklidir. .

Vizualizatsiya uchun namuna so'rovlari

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

Umuman olganda, R-dan ko'plab g'oyalar pandalar, numpy yoki scipy kabi ma'lumotlar ramkalari va ma'lumotlar vektorizatsiyasi kabi python paketlariga ko'chib o'tdi - shuning uchun R-dagi ko'p narsalar sizga tanish va qulay bo'lib tuyuladi.

O'rganish uchun ko'plab manbalar mavjud, masalan, bu.

Bilim grafiklari

Bu erda menda biroz g'ayrioddiy tajriba bor, chunki men ko'pincha bilim grafiklari va grafiklar uchun so'rov tillari bilan ishlashga to'g'ri keladi. Shuning uchun, keling, qisqacha asoslarni ko'rib chiqaylik, chunki bu qism biroz ekzotikdir.

Klassik relyatsion ma'lumotlar bazalarida bizda qat'iy sxema mavjud, ammo bu erda sxema moslashuvchan, har bir predikat aslida "ustun" va undan ham ko'proq.

Tasavvur qiling-a, siz bir odamni modellashtirdingiz va asosiy narsalarni tasvirlamoqchi bo'ldingiz, masalan, ma'lum bir shaxsni, Duglas Adamsni olaylik va bu tavsifdan asos sifatida foydalanamiz.

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish
www.wikidata.org/wiki/Q42

Agar biz relyatsion ma'lumotlar bazasidan foydalansak, biz juda ko'p sonli ustunli jadval yoki jadvallarni yaratishimiz kerak bo'lar edi, ularning aksariyati NULL bo'ladi yoki ba'zi bir sukut bo'yicha noto'g'ri qiymat bilan to'ldiriladi, masalan, ko'pchiligimizga ega bo'lishi dargumon. Koreya milliy kutubxonasiga kirish - albatta, biz ularni alohida jadvallarga qo'yishimiz mumkin edi, lekin bu pirovardida qat'iy relyatsiondan foydalangan holda predikatlar bilan moslashuvchan mantiqiy sxemani modellashtirishga urinish bo'ladi.

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish
Shunday qilib, barcha ma'lumotlar grafik yoki ikkilik va birlik mantiqiy ifodalar sifatida saqlanganligini tasavvur qiling.

Buni qayerda uchratish mumkin? Birinchidan, bilan ishlash ma'lumotlar wiki, va har qanday grafik ma'lumotlar bazalari yoki ulangan ma'lumotlar bilan.

Quyida men foydalangan va ishlagan asosiy so'rov tillari keltirilgan.

SPARQL

Wiki:
SPARQL (rekursiv qisqartma от Eng. SPARQL protokoli va RDF so'rovlar tili) - ma'lumotlar so'rovi tili, modeli bilan ifodalanadi RDF, shuningdek protokol ushbu so'rovlarni yuborish va ularga javob berish. SPARQL - bu tavsiya W3C konsortsiumi va texnologiyalardan biri semantik tarmoq.

Lekin aslida bu mantiqiy unar va binar predikatlar uchun so'rovlar tilidir. Siz shunchaki shartli ravishda mantiqiy ifodada nima aniqlangan va nima bo'lmasligini ko'rsatasiz (juda soddalashtirilgan).

SPARQL so'rovlari bajariladigan RDF (Resurs tavsifi ramkasi) bazasining o'zi uchlikdir. object, predicate, subject - va so'rov ruhdagi belgilangan cheklovlarga muvofiq kerakli uchlikni tanlaydi: p_55(X, q_33) to'g'ri bo'ladigan X ni toping - bu erda, albatta, p_55 ID 55 bilan qandaydir munosabatdir va q_33 - bu identifikatori 33 bo'lgan ob'ekt (bu erda va butun voqea, yana har qanday tafsilotlarni qoldirib).

Ma'lumotlar taqdimotiga misol:

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish
Bu erda mamlakatlar bilan rasmlar va misollar shu yerda.

Asosiy so'rov namunasi

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish

Aslida, biz ?country o'zgaruvchisining qiymatini predikat uchun topmoqchimiz
member_of, to'g'ri, member_of(?country,q458) va q458 Yevropa Ittifoqining identifikatori hisoblanadi.

Python dvigatelidagi haqiqiy SPARQL so'roviga misol:

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish

Odatda, men SPARQLni yozishdan ko‘ra o‘qishimga to‘g‘ri keldi – bunday vaziyatda ma’lumotlar qanday olinishini aniq tushunish uchun tilni hech bo‘lmaganda asosiy darajada tushunish foydali mahorat bo‘lishi mumkin. 

Internetda o'rganish uchun juda ko'p materiallar mavjud: masalan, bu erda bu и bu. Men odatda Google-ga maxsus dizayn va misollarni ko'raman va bu hozircha etarli.

Mantiqiy so'rovlar tillari

Mavzu bo'yicha ko'proq ma'lumotni mening maqolamda o'qishingiz mumkin shu yerda. Va bu erda biz mantiqiy tillar so'rovlarni yozish uchun nima uchun juda mos kelishini qisqacha ko'rib chiqamiz. Aslida, RDF bu p(X) va h(X,Y) shaklidagi mantiqiy bayonotlar to'plamidir va mantiqiy so'rov quyidagi shaklga ega:

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

Bu yerda gap yangi predikat chiqishi/1 (/1 birlik degan ma'noni anglatadi), agar X uchun mamlakat(X) to'g'ri bo'lsa - ya'ni X mamlakat, shuningdek, (X,"Yevropa Ittifoqi") a'zosidir.

Ya'ni, bu holda ma'lumotlar ham, qoidalar ham bir xil tarzda taqdim etiladi, bu esa muammolarni juda oson va yaxshi modellashtirish imkonini beradi.

Siz sanoatda qayerda uchrashdingiz?: so'rovlarni shunday tilda yozadigan kompaniya bilan butun katta loyiha, shuningdek, tizimning yadrosidagi joriy loyiha - bu juda ekzotik narsa bo'lib tuyuladi, lekin ba'zida shunday bo'ladi.

Mantiqiy tilni qayta ishlash vikidatasida kod fragmentiga misol:

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish

Materiallar: Men bu erda zamonaviy mantiqiy dasturlash tiliga bir nechta havolalarni beraman Answer Set Programming - Men uni o'rganishni tavsiya qilaman:

Ma'lumot olimining eslatmalari: Ma'lumotlar so'rovi tillarini shaxsiylashtirilgan ko'rib chiqish

Manba: www.habr.com

a Izoh qo'shish