Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data
Aku pitutur marang kowe saka pengalaman pribadi apa migunani ing ngendi lan nalika. Ringkesan lan tesis, supaya jelas apa lan ing ngendi sampeyan bisa digali luwih lanjut - nanging ing kene aku duwe pengalaman pribadi subyektif, bisa uga kabeh beda kanggo sampeyan.

Apa sebabe pentinge ngerti lan bisa nggunakake basa pitakon? Ing inti, Ilmu Data duwe sawetara tahapan kerja sing penting, lan sing pertama lan paling penting (tanpa, mesthi ora ana sing bisa digunakake!) yaiku entuk utawa ngekstrak data. Paling asring, data kasebut ana ing endi wae lan kudu "digawa metu" saka kono. 

Basa pitakon ngidini sampeyan ngekstrak data iki! Lan dina iki aku bakal ngandhani sampeyan babagan basa pitakon sing migunani kanggo aku lan aku bakal ngandhani sampeyan lan nuduhake sampeyan ing endi lan kepiye persis - kenapa kudu sinau.

Bakal ana telung blok utama jinis pitakon data, sing bakal kita bahas ing artikel iki:

  • Basa pitakon "Standar" yaiku sing umum dimangerteni nalika ngomong babagan basa pitakon, kayata aljabar relasional utawa SQL.
  • Basa pitakon skrip: contone, Python bab pandas, numpy utawa skrip shell.
  • Basa pitakon kanggo grafik kawruh lan database grafik.

Kabeh sing ditulis ing kene mung pengalaman pribadi, apa sing migunani, kanthi katrangan babagan kahanan lan "kenapa dibutuhake" - kabeh wong bisa nyoba kepiye kahanan sing padha bisa kedadeyan lan nyoba nyiapake sadurunge kanthi ngerti basa kasebut. sadurunge sampeyan kudu nglamar (urgent) ing proyek utawa malah menyang proyek sing dibutuhake.

Basa pitakon "Standar".

Basa pitakon standar persis ing pangertene sing biasane kita pikirake nalika kita ngomong babagan pitakon.

Aljabar relasional

Apa sebabe aljabar relasional dibutuhake saiki? Supaya ngerti sebabe basa pitakon disusun kanthi cara tartamtu lan digunakake kanthi sadar, sampeyan kudu ngerti inti sing ndasari.

Apa aljabar relasional?

Dhéfinisi formal minangka nderek: aljabar relasional minangka sistem operasi tertutup babagan hubungan ing model data relasional. Kanggo sijine iku sethitik liyane manungsa, iki sistem operasi ing tabel supaya asil tansah Tabel.

Waca kabeh operasi hubungan ing iki artikel saka Habr - kene kita njlèntrèhaké apa sampeyan kudu ngerti lan ngendi iku migunani.

Kenapa?

Miwiti ngerti apa basa pitakon lan apa operasi ing mburi ekspresi ing basa pitakon tartamtu asring menehi pangerten sing luwih jero babagan apa sing dianggo ing basa pitakon lan kepiye carane.

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data
Dijupuk saka iki artikel. Conto operasi: gabung, sing nggabungake tabel.

Bahan kanggo sinau:

Kursus pambuka sing apik saka Stanford. Umumé, ana akeh materi babagan aljabar relasional lan teori - Coursera, Udacity. Ana uga jumlah ageng materi online, kalebu apik kursus akademik. Saran pribadiku: sampeyan kudu ngerti aljabar relasional kanthi apik - iki minangka dhasar dhasar.

SQL

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data
Dijupuk saka iki artikel.

SQL iku ateges implementasine saka aljabar relasional - karo caveat penting, SQL deklaratif! Yaiku, nalika nulis pitakon ing basa aljabar relasional, sampeyan bener-bener ngomong carane ngetung - nanging nganggo SQL, sampeyan nemtokake apa sing pengin diekstrak, banjur DBMS wis ngasilake ekspresi (efektif) ing basa aljabar relasional ( padha karo kita dikenal minangka Teorema Codd).

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data
Dijupuk saka iki artikel.

Kenapa?

DBMS Relasional: Oracle, Postgres, SQL Server, lan liya-liyane isih ana ing endi wae lan ana kemungkinan gedhe yen sampeyan kudu sesambungan karo dheweke, tegese sampeyan kudu maca SQL (sing kemungkinan banget) utawa nulis ( ora mungkin uga).

Apa sing kudu diwaca lan sinau

Miturut pranala sing padha ing ndhuwur (babagan aljabar relasional), ana jumlah materi sing luar biasa, contone, iki.

Miturut cara, apa NoSQL?

"Sampeyan kudu nandheske maneh yen istilah" NoSQL "tegese asale spontan lan ora ana definisi utawa institusi ilmiah sing ditampa sacara umum." cocog artikel ing Habr.

Nyatane, wong nyadari yen model relasional lengkap ora dibutuhake kanggo ngatasi akeh masalah, utamane kanggo wong-wong sing, contone, kinerja kritis lan pitakon prasaja tartamtu kanthi agregasi dominasi - ing ngendi iku penting kanggo ngitung metrik kanthi cepet lan nulis menyang database, lan paling fitur sing hubungan diaktifake metu ora mung rasah, nanging uga mbebayani - kok normalake soko yen bakal ngrusak bab paling penting kanggo kita (kanggo sawetara tugas tartamtu) - produktivitas?

Uga, skema fleksibel asring dibutuhake tinimbang skema matematika tetep saka model relasional klasik - lan iki pancen nyederhanakake pangembangan aplikasi nalika penting banget kanggo nyebarake sistem lan miwiti kerja kanthi cepet, ngolah asil - utawa skema lan jinis data sing disimpen. ora penting banget.

Contone, kita nggawe sistem pakar lan pengin nyimpen informasi ing domain tartamtu bebarengan karo sawetara informasi meta - kita bisa uga ora ngerti kabeh lapangan lan mung nyimpen JSON kanggo saben rekaman - iki menehi kita lingkungan sing fleksibel banget kanggo ngembangaken data. model lan cepet iterating - supaya ing kasus iki, NoSQL bakal malah luwih lan luwih bisa diwaca. Conto entri (saka salah sawijining proyekku ing ngendi NoSQL ana ing ngendi sing dibutuhake).

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

Sampeyan bisa maca liyane kene babagan NoSQL.

Apa kanggo sinau?

Ing kene, sampeyan mung kudu nganalisa tugas sampeyan kanthi lengkap, properti apa sing diduweni lan sistem NoSQL sing kasedhiya sing cocog karo katrangan iki - banjur miwiti sinau sistem iki.

Scripting Query Language

Kaping pisanan, misale jek, apa sing kudu ditindakake Python ing umum - iku basa pamrograman, lan dudu babagan pitakon.

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data

  • Pandas secara harfiah minangka pisau Angkatan Darat Swiss kanggo Ilmu Data; akeh transformasi data, agregasi, lan liya-liyane.
  • Numpy - petungan vektor, matriks lan aljabar linear ana.
  • Scipy - ana akeh matematika ing paket iki, utamane statistik.
  • Lab Jupyter - akeh analisis data eksplorasi pas karo laptop - migunani kanggo ngerti.
  • Panjaluk - nggarap jaringan.
  • Pyspark misuwur banget ing antarane insinyur data, kemungkinan sampeyan kudu sesambungan karo iki utawa Spark, mung amarga popularitase.
  • *Selenium - migunani banget kanggo ngumpulake data saka situs lan sumber daya, kadhangkala ora ana cara liya kanggo entuk data kasebut.

Saran utamaku: sinau Python!

Pandas

Ayo njupuk kode ing ngisor iki minangka conto:

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

Ateges, kita weruh manawa kode kasebut cocog karo pola SQL klasik.

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

Nanging sing paling penting yaiku kode iki minangka bagean saka skrip lan saluran pipa; nyatane, kita nglebokake pitakon menyang pipa Python. Ing kahanan iki, basa pitakon teka saka perpustakaan kayata Pandas utawa pySpark.

Umumé, ing pySpark kita ndeleng jinis transformasi data sing padha liwat basa pitakon kanthi semangat:

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

Where lan apa maca

On Python dhewe ing umum mboten masalah golek bahan kanggo sinau. Ana akeh tutorial online panda, pySpark lan kursus ing Spark (lan uga dhewe DS). Sakabèhé, isi ing kene apik kanggo googling, lan yen aku kudu milih siji paket kanggo fokus, mesthine bakal dadi panda. Babagan kombinasi bahan DS+Python uga akèh.

Shell minangka basa pitakon

Sawetara proyèk pangolahan lan analisis data sing wis dakgarap, nyatane, skrip cangkang sing nelpon kode ing Python, Jawa, lan perintah cangkang dhewe. Mulane, ing umum, sampeyan bisa nimbang pipelines ing bash/zsh/etc minangka sawetara jinis pitakonan tingkat dhuwur (sampeyan bisa, mesthi, puteran ing kono, nanging iki ora khas kanggo kode DS ing basa shell), ayo menehi conto prasaja - Aku kudu nindakake pemetaan QID saka wikidata lan pranala lengkap menyang wiki Rusia lan Inggris, kanggo iki aku nulis panjalukan prasaja saka printah ing bash lan kanggo output aku nulis script prasaja ing Python, kang aku ngumpulake kaya iki:

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

ngendi

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

Iki, nyatane, kabeh pipa sing nggawe pemetaan sing dibutuhake; kaya sing kita deleng, kabeh bisa digunakake ing mode stream:

  • pv filepath - menehi garis kemajuan adhedhasar ukuran file lan terus isine
  • unpigz -c maca bagean saka arsip lan menehi menyang jq
  • jq karo tombol - stream langsung ngasilake asil lan dikirim menyang postprocessor (padha karo conto pisanan) ing Python
  • njero, postprocessor ana mesin negara prasaja sing format output 

Secara total, pipa kompleks sing digunakake ing mode aliran ing data gedhe (0.5TB), tanpa sumber daya sing signifikan lan digawe saka pipa sing prasaja lan sawetara alat.

Tip penting liyane: bisa kerja kanthi apik lan efektif ing terminal lan nulis bash/zsh/etc.

Ing endi bakal migunani? Ya, meh ing endi wae - maneh, ana LOT materi kanggo sinau ing Internet. Ing tartamtu, kene iki artikelku sadurunge.

R skrip

Maneh, sing maca bisa nguwuh - uga, iki minangka basa pamrograman kabeh! Lan mesthi, dheweke bakal bener. Nanging, aku biasane nemoni R ing konteks sing, nyatane, meh padha karo basa pitakon.

R minangka lingkungan komputasi statistik lan basa kanggo komputasi statis lan visualisasi (miturut iki).

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data
dijupuk saka kene. Miturut cara, aku nyaranake, materi sing apik.

Napa ilmuwan data kudu ngerti R? Paling ora, amarga ana lapisan ageng wong non-IT sing nganalisa data ing R. Aku ketemu ing panggonan ing ngisor iki:

  • Sektor farmasi.
  • Ahli biologi.
  • Sektor keuangan.
  • Wong sing duwe pendhidhikan matematika murni sing ngurusi statistik.
  • Model statistik khusus lan model pembelajaran mesin (sing asring mung ditemokake ing versi penulis minangka paket R).

Yagene iku sejatine basa pitakon? Ing wangun sing asring ditemokake, sejatine panyuwunan kanggo nggawe model, kalebu maca data lan ndandani parameter query (model), uga visualisasi data ing paket kayata ggplot2 - iki uga minangka wangun pitakon nulis. .

Conto pitakon kanggo visualisasi

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

Umumé, akeh gagasan saka R wis migrasi menyang paket python kayata panda, numpy utawa scipy, kaya dataframes lan data vectorization - supaya ing umum akèh iku ing R bakal katon akrab lan trep kanggo sampeyan.

Ana akeh sumber kanggo sinau, contone, iki.

Grafik kawruh

Ing kene aku duwe pengalaman sing rada ora biasa, amarga aku kerep kudu nggarap grafik pengetahuan lan basa pitakon kanggo grafik. Mulane, ayo ngrembug babagan dhasar, amarga bagean iki rada eksotis.

Ing basis data relasional klasik kita duwe skema tetep, nanging ing kene skema kasebut fleksibel, saben predikat sejatine minangka "kolom" lan luwih akeh.

Mbayangno yen sampeyan nggawe model wong lan pengin njlèntrèhaké bab-bab penting, contone, ayo njupuk wong tartamtu, Douglas Adams, lan nggunakake gambaran iki minangka basis.

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data
www.wikidata.org/wiki/Q42

Yen kita nggunakake basis data relasional, kita kudu nggawe tabel utawa tabel ageng kanthi jumlah kolom sing akeh, sing paling akeh bakal NULL utawa diisi karo sawetara nilai Palsu standar, umpamane, ora mungkin akeh sing duwe entri ing perpustakaan nasional Korea - mesthi, kita bisa sijine wong ing tabel kapisah, nanging iki pungkasanipun bakal nyoba kanggo model sirkuit logis fleksibel karo predikat nggunakake relasional tetep.

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data
Dadi bayangake yen kabeh data disimpen minangka grafik utawa minangka ekspresi boolean biner lan unary.

Ing endi sampeyan bisa nemoni iki? Kaping pisanan, nggarap data wiki, lan karo database grafik utawa data sing disambungake.

Ing ngisor iki minangka basa pitakon utama sing wis digunakake lan digunakake.

SPARQL

Wiki:
SPARQL (akronim rekursif saka Inggris SPARQL Protocol lan RDF Query Language) - basa pitakon data, diwakili dening model RDFLan protokol kanggo ngirim panjalukan iki lan nanggapi. SPARQL minangka rekomendasi Konsorsium W3C lan salah sawijining teknologi web semantik.

Nanging ing kasunyatan iku basa pitakon kanggo predikat unary lan biner logis. Sampeyan mung kanthi syarat nemtokake apa sing tetep ing ekspresi Boolean lan apa sing ora (sing disederhanakake).

Basis RDF (Resource Description Framework) dhewe, ing ngendi pitakon SPARQL dieksekusi, minangka telung object, predicate, subject - lan pitakon milih triple sing dibutuhake miturut watesan sing ditemtokake ing roh: golek X supaya p_55(X, q_33) bener - ing endi, mesthi, p_55 minangka sawetara jinis hubungan karo ID 55, lan q_33 minangka obyek karo ID 33 (kene lan kabeh crita, maneh ngilangi kabeh rincian).

Tuladha penyajian data:

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data
Gambar lan conto karo negara kene saka kene.

Tuladha Pitakonan Dasar

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data

Nyatane, kita pengin nemokake nilai variabel ?negara kasebut kanggo predikat
member_of, iku bener sing member_of(?country,q458) lan q458 ID Uni Eropa.

Conto pitakon SPARQL nyata ing mesin python:

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data

Biasane, aku kudu maca SPARQL tinimbang nulis - ing kahanan kasebut, mesthine bakal dadi katrampilan sing migunani kanggo ngerti basa paling ora ing tingkat dhasar kanggo ngerti persis carane data dijupuk. 

Ana akeh materi kanggo sinau online: contone, kene iki и iki. Aku biasane google desain lan conto tartamtu lan cukup kanggo saiki.

Basa pitakon logis

Sampeyan bisa maca liyane babagan topik ing artikelku kene. Lan ing kene, kita mung bakal nliti sedhela kenapa basa logis cocog kanggo nulis pitakon. Ateges, RDF mung sakumpulan pernyataan logis saka wangun p(X) lan h(X,Y), lan pitakon logis nduweni wujud ing ngisor iki:

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

Ing kene kita ngomong babagan nggawe output predikat anyar / 1 (/1 tegese unary), yen kanggo X bener negara (X) - yaiku, X minangka negara lan uga anggota_of(X,"EU ").

Yaiku, ing kasus iki, data lan aturan kasebut ditampilake kanthi cara sing padha, sing ngidini kita nggawe model masalah kanthi gampang lan apik.

Ngendi sampeyan ketemu ing industri?: kabeh proyek gedhe karo perusahaan sing nulis pitakon ing basa kasebut, uga ing proyek saiki ing inti sistem - bakal katon yen iki minangka barang sing rada endah, nanging kadhangkala kedadeyan.

Conto fragmen kode ing basa logis ngolah wikidata:

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data

Bahan: Aku bakal menehi sawetara pranala menyang basa pemrograman logis modern Jawaban Set Programming - Aku nyaranake sinau:

Cathetan Ilmuwan Data: Tinjauan Pribadi babagan Basa Kueri Data

Source: www.habr.com

Add a comment