Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data
Abdi nyarioskeun ka anjeun tina pangalaman pribadi naon mangpaat dimana sareng iraha. Tinjauan sareng tesis, supados jelas naon sareng dimana anjeun tiasa ngagali langkung jauh - tapi di dieu kuring gaduh pangalaman pribadi sacara éksklusif subjektif, panginten sadayana béda pikeun anjeun.

Naha penting pikeun terang sareng tiasa nganggo basa query? Dina inti na, Élmu Data ngagaduhan sababaraha tahapan padamelan anu penting, sareng anu pangheulana sareng anu paling penting (tanpa éta, pasti moal aya anu tiasa dianggo!) nyaéta kéngingkeun atanapi ékstrak data. Paling sering, data linggih wae dina sababaraha formulir sarta perlu "dipulut" ti dinya. 

Basa pamundut ngidinan Anjeun pikeun nimba data ieu pisan! Sareng dinten ayeuna kuring bakal nyarioskeun ka anjeun ngeunaan basa-basa patarosan anu mangpaat pikeun kuring sareng kuring bakal nyarioskeun ka anjeun sareng nunjukkeun ka anjeun dimana sareng kumaha persisna - naha éta diperyogikeun pikeun diajar.

Bakal aya tilu blok utama jinis query data, anu bakal urang bahas dina tulisan ieu:

  • Basa query "Standar" nyaéta naon anu ilahar dipikaharti lamun ngobrol ngeunaan basa query, kayaning aljabar relational atawa SQL.
  • Basa query Scripting: contona, Python hal pandas, numpy atawa shell scripting.
  • Patarosan basa pikeun grafik pangaweruh sareng pangkalan data grafik.

Sadayana anu ditulis di dieu ngan ukur pangalaman pribadi, naon anu kapaké, kalayan pedaran kaayaan sareng "naha éta diperyogikeun" - sadayana tiasa nyobian kumaha kaayaan anu sami tiasa datang sareng nyobian nyiapkeun sateuacanna ku ngartos basa ieu sateuacan anjeun kedah ngalamar (urgently) dina hiji proyék atawa malah meunang ka proyek dimana aranjeunna diperlukeun.

"Standar" basa query

Basa query standar persis dina harti yén urang biasana mikir ngeunaan aranjeunna nalika urang ngobrol ngeunaan queries.

aljabar relasional

Naha aljabar relasional diperyogikeun ayeuna? Pikeun gaduh pamahaman anu hadé ngeunaan naha basa query disusun ku cara anu tangtu sareng dianggo sacara sadar, anjeun kedah ngartos inti anu aya dina dasarna.

Naon ari aljabar relasional?

Definisi formal nyaéta kieu: aljabar relasional nyaéta sistem operasi katutup dina hubungan dina modél data relasional. Pikeun nempatkeun éta saeutik leuwih humanly, ieu sistem operasi dina tabel sapertos nu hasilna salawasna méja.

Tempo sadaya operasi relational di ieu artikel ti Habr - di dieu kami ngajelaskeun naha anjeun kedah terang sareng dimana mangpaatna.

Kunaon?

Ngamimitian ngartos naon bahasa query sareng naon operasi anu aya di balik ekspresi dina basa query khusus sering masihan pamahaman anu langkung jero ngeunaan naon anu dianggo dina basa query sareng kumaha.

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data
Dicokot ti ieu artikel. Conto operasi: gabung, nu ngagabung tabel.

Bahan pangajaran:

Kursus bubuka anu saé ti Stanford. Sacara umum, aya seueur bahan ngeunaan aljabar relasional sareng téori - Coursera, Udacity. Aya ogé jumlah badag bahan online, kaasup alus kursus akademik. Saran pribadi kuring: anjeun kedah ngartos aljabar relasional pisan - ieu mangrupikeun dasar dasar.

SQL

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data
Dicokot ti ieu tulisan.

SQL dasarna mangrupa palaksanaan aljabar relational - kalawan caveat penting, SQL téh déklaratif! Nyaéta, nalika nyerat patarosan dina basa aljabar relasional, anjeun leres-leres nyarios kumaha ngitung - tapi kalayan SQL anjeun netepkeun naon anu anjeun hoyong nimba, teras DBMS parantos ngahasilkeun ekspresi (éféktif) dina basa aljabar relasional (maranéhanana. equivalence dipikawanoh ku urang salaku Téoréma Codd).

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data
Dicokot ti ieu tulisan.

Kunaon?

DBMS Relational: Oracle, Postgres, SQL Server, jsb masih ampir di mana waé sareng aya kasempetan anu luar biasa anu anjeun kedah berinteraksi sareng aranjeunna, anu hartosna anjeun kedah maca SQL (anu kamungkinan pisan) atanapi nyeratna ( teu mungkin ogé).

Naon maca jeung diajar

Numutkeun tumbu anu sami di luhur (ngeunaan aljabar relasional), aya jumlah bahan anu luar biasa, contona, ieu.

Ku jalan kitu, naon NoSQL?

"Perlu ditekenkeun sakali deui yén istilah "NoSQL" ngagaduhan asal-usul anu leres-leres spontan sareng henteu ngagaduhan definisi anu ditarima sacara umum atanapi lembaga ilmiah di tukangeunana. Sasuai artikel dina Habr.

Nyatana, jalma sadar yén modél relasional lengkep henteu diperyogikeun pikeun ngarengsekeun seueur masalah, khususna pikeun anu, contona, kinerja kritis sareng patarosan saderhana anu didominasi ku aggregation - dimana penting pikeun gancang ngitung métrik sareng nyeratna ka database, sarta paling fitur anu relational tétéla henteu ngan teu perlu, tapi ogé ngabahayakeun - naha normalize hal lamun eta bakal ngaruksak hal pangpentingna pikeun urang (pikeun sababaraha tugas husus) - produktivitas?

Ogé, skéma fléksibel sering diperyogikeun tibatan skéma matematis tetep tina modél relasional klasik - sareng ieu luar biasa nyederhanakeun pamekaran aplikasi nalika penting pikeun nyebarkeun sistem sareng ngamimitian damel gancang, ngolah hasil - atanapi skéma sareng jinis data anu disimpen. henteu penting pisan.

Salaku conto, urang nyiptakeun sistem ahli sareng hoyong nyimpen inpormasi dina domain khusus sareng sababaraha inpormasi meta - urang panginten henteu terang sadaya widang sareng ngan saukur nyimpen JSON pikeun unggal catetan - ieu masihan kami lingkungan anu fleksibel pikeun ngalegaan data. model jeung gancang iterating - jadi dina hal ieu, NoSQL bakal malah leuwih hade jeung leuwih dibaca. Éntri conto (tina salah sahiji proyék kuring dimana NoSQL leres dimana diperyogikeun).

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

Anjeun tiasa maca deui di dieu ngeunaan NoSQL.

Naon diajar?

Di dieu, rada, Anjeun ngan perlu tuntas nganalisis tugas anjeun, naon sipat sarta naon sistem NoSQL sadia nu bakal cocog pedaran ieu - lajeng ngawitan diajar sistem ieu.

Scripting Query Basa

Awalna, sigana, naon hubungan Python sareng éta sacara umum - éta mangrupikeun basa pamrograman, sareng sanés ngeunaan patarosan.

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data

  • Pandas sacara harfiah mangrupikeun péso Angkatan Darat Swiss ngeunaan Élmu Data; sajumlah ageung transformasi data, agrégasi, jsb.
  • Numpy - itungan vektor, matrices jeung aljabar linier aya.
  • Scipy - aya seueur matematika dina pakét ieu, khususna statistik.
  • Lab Jupyter - seueur analisis data éksplorasi pas kana laptop - mangpaat pikeun terang.
  • Requests - gawé bareng jaringan.
  • Pyspark populer pisan di kalangan insinyur data, paling dipikaresep anjeun kedah berinteraksi sareng ieu atanapi Spark, ngan kusabab popularitasna.
  • *Selenium - mangpaat pisan pikeun ngumpulkeun data tina situs sareng sumber, sakapeung teu aya cara sanés pikeun nyandak data.

Saran utama kuring: diajar Python!

pandas

Hayu urang nyandak kode di handap sabagé 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'}))

Intina, urang tingali yén kode pas kana 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

Tapi bagian anu penting nyaéta yén kode ieu mangrupikeun bagian tina naskah sareng jalur pipa; kanyataanna, kami nampilkeun patarosan kana pipa Python. Dina kaayaan ieu, basa query datang ka kami ti perpustakaan kayaning Pandas atanapi pySpark.

Sacara umum, dina pySpark urang ningali tipe sarupa transformasi data ngaliwatan basa query dina sumanget:

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

Dimana jeung naon maca

Dina Python sorangan sacara umum teu masalah manggihan bahan pikeun diajar. Aya sajumlah ageung tutorial online panda, pySpark jeung kursus on silalatu (sareng ogé sorangan DS). Gemblengna, eusi di dieu saé pikeun googling, sareng upami kuring kedah milih hiji pakét pikeun difokuskeun, éta bakal janten pandas, tangtosna. Ngeunaan kombinasi bahan DS + Python ogé seueur.

Shell salaku basa query

Sababaraha proyék ngolah data sareng analisa anu ku kuring digarap nyaéta, kanyataanna, skrip cangkang anu nelepon kode dina Python, Java, sareng paréntah cangkang sorangan. Ku alatan éta, sacara umum, anjeun tiasa nganggap pipelines di bash / zsh / jsb salaku sababaraha jenis query tingkat tinggi (anjeun tiasa, tangtosna, barang puteran di dinya, tapi ieu teu has pikeun kode DS dina basa cangkang), hayu urang masihan. conto basajan - Kuring diperlukeun pikeun ngalakukeun pemetaan QID of wikidata sarta Tumbu pinuh ka wiki Rusia jeung Inggris, pikeun ieu kuring nulis pamundut basajan tina paréntah di bash jeung kaluaran kuring nulis Aksara basajan dina Python, nu kuring kumpulkeun saperti kieu:

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

di mana

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

Ieu, kanyataanna, sakabéh pipa nu nyieun pemetaan diperlukeun; sakumaha urang tingali, sagalana digawé dina modeu stream:

  • pv filepath - masihan bar kamajuan dumasar kana ukuran file sareng ngalangkungan eusina
  • unpigz -c maca bagian tina arsip sarta masihan ka jq
  • jq kalayan konci - stream langsung ngahasilkeun hasilna sareng dikirimkeun ka postprocessor (sarua sareng conto anu munggaran) dina Python
  • internal, postprocessor ieu mesin kaayaan basajan nu formatna kaluaran 

Dina total, pipa kompléks anu dianggo dina modeu aliran dina data ageung (0.5TB), tanpa sumberdaya anu penting sareng didamel tina pipa anu sederhana sareng sababaraha alat.

Tip penting anu sanés: tiasa damel saé sareng épéktip dina terminal sareng nyerat bash/zsh/etc.

Dimana éta bakal mangpaat? Leres, ampir di mana waé - deui, aya LOBA bahan pikeun diajar dina Internét. Khususna, di dieu эта artikel abdi saméméhna.

Aksara Sunda

Sakali deui, pamaca tiasa ngagero - nya, ieu mangrupikeun basa pamrograman sadayana! Sareng tangtosna, anjeunna bakal leres. Nanging, kuring biasana mendakan basa Sunda dina kontéks sapertos kitu, kanyataanna, éta mirip pisan sareng basa query.

R nyaéta lingkungan komputasi statistik sareng basa pikeun komputasi statik sareng visualisasi (nurutkeun ieu).

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data
dicandak di dieu. Ku jalan kitu, kuring nyarankeun éta, bahan anu saé.

Naha data scientist kudu nyaho basa Sunda? Sahenteuna, sabab aya lapisan badag jalma non-IT anu nganalisis data dina basa Sunda Kuring datang di sakuliah eta di tempat handap:

  • Sektor farmasi.
  • Ahli biologi.
  • Sektor kauangan.
  • Jalma anu ngagaduhan pendidikan matematika murni anu ngurus statistik.
  • Modél statistik khusus sareng modél pembelajaran mesin (anu sering ngan ukur tiasa dipendakan dina versi pangarang salaku pakét basa Sunda).

Naha éta sabenerna basa query? Dina bentuk nu mindeng kapanggih, sabenerna mangrupa pamundut pikeun nyieun model, kaasup maca data jeung ngalereskeun parameter query (model), kitu ogé visualizing data dina bungkusan kayaning ggplot2 - ieu ogé mangrupa wangun query nulis. .

Conto queries pikeun visualisasi

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

Sacara umum, loba gagasan ti Sunda geus hijrah kana bungkusan python kayaning panda, numpy atawa scipy, kawas dataframes na vectorization data - jadi sacara umum loba hal dina basa Sunda bakal sigana wawuh jeung merenah pikeun anjeun.

Aya seueur sumber pikeun diajar, contona, ieu.

Grafik pangaweruh

Di dieu kuring gaduh pangalaman anu rada teu biasa, sabab kuring sering kedah damel sareng grafik pangaweruh sareng basa pamundut pikeun grafik. Ku alatan éta, hayu urang sakeudeung balik leuwih dasar, sabab bagian ieu saeutik leuwih aheng.

Dina database relational klasik urang boga schema tetep, tapi di dieu skéma fléksibel, unggal predikat sabenerna ngarupakeun "kolom" komo deui.

Bayangkeun yén anjeun modél jalma sareng hoyong ngajelaskeun hal-hal penting, contona, hayu urang nyandak jalma khusus, Douglas Adams, sareng nganggo pedaran ieu salaku dasar.

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data
www.wikidata.org/wiki/Q42

Lamun urang ngagunakeun database relational, urang kudu nyieun tabel badag atawa tabel kalawan jumlah badag kolom, lolobana nu bakal NULL atawa ngeusi sababaraha nilai Palsu standar, contona, teu mungkin nu loba urang boga hiji. Éntri dina perpustakaan nasional Korea - tangtosna, urang tiasa nempatkeun aranjeunna dina tabel anu misah, tapi ieu pamustunganana bakal janten usaha pikeun modél sirkuit logis anu fleksibel sareng predikat anu nganggo rélasional anu tetep.

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data
Janten bayangkeun yén sadaya data disimpen salaku grafik atanapi salaku ekspresi boolean binér sareng unary.

Dimana anjeun malah bisa sapatemon ieu? Firstly, gawé bareng data wiki, sareng sareng databés grafik atanapi data anu disambungkeun.

Di handap ieu mangrupakeun basa query utama anu ku kuring dianggo sareng dianggo.

SPARQL

Wiki:
SPARQL (akronim rekursif от Inggris SPARQL Protocol sareng RDF Query Language) - basa query data, diwakilan ku modél RDFjeung protokol pikeun ngirimkeun pamundut ieu sareng ngabales aranjeunna. SPARQL mangrupakeun rekomendasi Konsorsium W3C sareng salah sahiji téknologi wéb semantik.

Tapi dina kanyataanana eta mangrupakeun basa query pikeun prédikat unary logis tur binér. Anjeun ngan saukur nangtukeun naon anu dibenerkeun dina ekspresi Boolean sareng naon anu henteu (saderhana pisan).

Dasar RDF (Resource Description Framework) sorangan, dimana query SPARQL dieksekusi, nyaéta triple object, predicate, subject - sarta query milih triples diperlukeun nurutkeun larangan dieusian dina sumanget: manggihan hiji X sapertos nu p_55(X, q_33) leres - dimana, tangtosna, p_55 sababaraha jenis hubungan jeung ID 55, sarta q_33 mangrupa objék kalawan ID 33 (di dieu jeung sakabeh carita, deui omitting sagala sorts rinci).

Conto penyajian data:

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data
Gambar sareng conto sareng nagara di dieu di dieu.

Conto Patarosan Dasar

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data

Kanyataanna, urang hayang manggihan nilai ?variabel nagara misalna pikeun predikat
member_of, leres yen member_of(?country,q458) sareng q458 mangrupikeun ID Uni Éropa.

Conto pamundut SPARQL nyata dina mesin python:

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data

Biasana, kuring kedah maca SPARQL tinimbang nyeratna - dina kaayaan éta, sigana bakal janten kaahlian anu mangpaat pikeun ngartos basa sahenteuna dina tingkat dasar pikeun ngartos persis kumaha data dicandak. 

Aya seueur bahan pikeun diajar online: contona, di dieu ieu и ieu. Kuring biasana google desain sareng conto khusus sareng éta cekap pikeun ayeuna.

Basa query logis

Anjeun tiasa maca langkung seueur ngeunaan topik dina tulisan kuring di dieu. Sareng di dieu, urang ngan ukur nalungtik sakedap naha basa logis cocog pikeun nyerat patarosan. Intina, RDF ngan ukur sakumpulan pernyataan logis tina bentuk p (X) sareng h (X, Y), sareng pamundut logis ngagaduhan bentuk ieu:

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

Di dieu urang ngobrol ngeunaan nyieun kaluaran predikat anyar / 1 (/1 hartina unary), disadiakeun yén pikeun X bener nagara (X) - i.e., X mangrupa nagara sarta ogé member_of(X,"EU ").

Hartina, dina hal ieu, duanana data jeung aturan dibere dina cara nu sarua, nu ngamungkinkeun pikeun model masalah pisan gampang jeung alus.

Dimana anjeun papanggih di industri?: proyék badag sakabeh jeung parusahaan nu nulis queries dina basa sapertos, kitu ogé dina proyék ayeuna dina inti sistem - eta bakal sigana yen ieu hal rada aheng, tapi kadang eta kajadian.

Conto fragmén kode dina wikidata ngolah basa logis:

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data

Bahan: Abdi badé masihan sababaraha tautan kana basa pamrograman logis modéren Jawaban Set Programming - Abdi nyarankeun diajar:

Catetan Data Élmuwan: Tinjauan Pribadi ngeunaan Basa Kueri Data

sumber: www.habr.com

Tambahkeun komentar