Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data
Ninakuambia kutoka kwa uzoefu wa kibinafsi ni nini kilikuwa muhimu wapi na wakati gani. Ni muhtasari na nadharia, ili iwe wazi ni nini na wapi unaweza kuchimba zaidi - lakini hapa nina uzoefu wa kibinafsi wa kibinafsi, labda kila kitu ni tofauti kabisa kwako.

Kwa nini ni muhimu kujua na kuweza kutumia lugha za maswali? Katika msingi wake, Sayansi ya Data ina hatua kadhaa muhimu za kazi, na ya kwanza kabisa na muhimu zaidi (bila hiyo, hakika hakuna kitu kitakachofanya kazi!) ni kupata au kuchimba data. Mara nyingi, data inakaa mahali fulani kwa namna fulani na inahitaji "kutolewa" kutoka hapo. 

Lugha za maswali hukuruhusu kutoa data hii! Na leo nitakuambia juu ya lugha hizo za swala ambazo zimekuwa muhimu kwangu na nitakuambia na kukuonyesha wapi na jinsi gani haswa - kwa nini inahitajika kusoma.

Kutakuwa na vizuizi vitatu kuu vya aina za swala za data, ambazo tutajadili katika nakala hii:

  • Lugha za maswali "kawaida" ndizo zinazoeleweka kwa kawaida wakati wa kuzungumza juu ya lugha ya swali, kama vile aljebra ya uhusiano au SQL.
  • Lugha za hoja za uandishi: kwa mfano, Python things pandas, numpy au shell scripting.
  • Lugha za maswali kwa grafu za maarifa na hifadhidata za grafu.

Kila kitu kilichoandikwa hapa ni uzoefu wa kibinafsi tu, ni nini kilikuwa muhimu, na maelezo ya hali na "kwa nini ilihitajika" - kila mtu anaweza kujaribu jinsi hali kama hizo zinaweza kuja kwako na kujaribu kuzitayarisha mapema kwa kuelewa lugha hizi. kabla ya kuomba (haraka) kwenye mradi au hata kufikia mradi ambapo zinahitajika.

Lugha za swali "Kawaida".

Lugha za kawaida za kuuliza ziko kwa maana kwamba kawaida huwa tunazifikiria tunapozungumza juu ya maswali.

algebra ya uhusiano

Kwa nini aljebra ya uhusiano inahitajika leo? Ili kuwa na ufahamu mzuri wa kwa nini lugha za swala zimeundwa kwa njia fulani na kuzitumia kwa uangalifu, unahitaji kuelewa msingi wao.

aljebra ya uhusiano ni nini?

Ufafanuzi rasmi ni kama ifuatavyo: aljebra ya uhusiano ni mfumo funge wa uendeshaji wa mahusiano katika modeli ya data ya uhusiano. Ili kuiweka kwa kibinadamu zaidi, huu ni mfumo wa uendeshaji kwenye meza ili matokeo yake daima ni meza.

Tazama shughuli zote za uhusiano ndani hii makala kutoka kwa Habr - hapa tunaelezea kwa nini unahitaji kujua na inapofaa.

Kwa nini?

Kuanza kuelewa ni lugha gani za maswali zinahusu na ni shughuli gani ziko nyuma ya misemo katika lugha maalum za swali mara nyingi hutoa uelewa wa kina wa kile kinachofanya kazi katika lugha za maswali na jinsi gani.

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data
Imechukuliwa kutoka hii makala. Mfano wa operesheni: jiunge, ambayo inaunganisha meza.

Nyenzo za masomo:

Kozi nzuri ya utangulizi kutoka Stanford. Kwa ujumla, kuna vifaa vingi kwenye algebra ya uhusiano na nadharia - Coursera, Udacity. Pia kuna kiasi kikubwa cha nyenzo mtandaoni, ikiwa ni pamoja na nzuri kozi za kitaaluma. Ushauri wangu wa kibinafsi: unahitaji kuelewa algebra ya uhusiano vizuri sana - hii ndiyo msingi wa misingi.

SQL

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data
Imechukuliwa kutoka hii nakala.

SQL kimsingi ni utekelezaji wa aljebra ya uhusiano - kwa pango muhimu, SQL ni ya kutangaza! Hiyo ni, wakati wa kuandika swali katika lugha ya algebra ya uhusiano, kwa kweli unasema jinsi ya kuhesabu - lakini kwa SQL unataja kile unachotaka kutoa, na kisha DBMS tayari hutoa misemo (yenye ufanisi) katika lugha ya algebra ya uhusiano (yao). usawa unajulikana kwetu kama Nadharia ya Codd).

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data
Imechukuliwa kutoka hii nakala.

Kwa nini?

DBMS za Uhusiano: Oracle, Postgres, SQL Server, n.k bado ziko kila mahali na kuna nafasi kubwa sana kwamba itabidi kuingiliana nazo, ambayo inamaanisha itabidi usome SQL (ambayo inawezekana sana) au kuiandika ( sio uwezekano pia).

Nini cha kusoma na kujifunza

Kulingana na viungo sawa hapo juu (kuhusu algebra ya uhusiano), kuna kiasi cha ajabu cha nyenzo, kwa mfano, hii.

Kwa njia, NoSQL ni nini?

"Inafaa kusisitiza tena kwamba neno "NoSQL" lina asili ya hiari na halina ufafanuzi unaokubalika kwa jumla au taasisi ya kisayansi nyuma yake." Sambamba makala juu ya Habr.

Kwa kweli, watu waligundua kuwa mfano kamili wa uhusiano hauhitajiki kusuluhisha shida nyingi, haswa kwa zile ambazo, kwa mfano, utendaji ni muhimu na maswali fulani rahisi na mkusanyiko hutawala - ambapo ni muhimu kuhesabu haraka metriki na kuiandikia. hifadhidata, na huduma nyingi ni za uhusiano ziligeuka kuwa sio lazima tu, lakini pia ni hatari - kwa nini kurekebisha kitu ikiwa kitaharibu jambo muhimu zaidi kwetu (kwa kazi fulani) - tija?

Pia, schema zinazonyumbulika mara nyingi zinahitajika badala ya schema za hesabu zisizobadilika za modeli ya uhusiano wa zamani - na hii hurahisisha sana ukuzaji wa programu wakati ni muhimu kupeleka mfumo na kuanza kufanya kazi haraka, kuchakata matokeo - au schema na aina za data iliyohifadhiwa. sio muhimu sana.

Kwa mfano, tunaunda mfumo wa kitaalamu na tunataka kuhifadhi maelezo kwenye kikoa mahususi pamoja na baadhi ya taarifa za meta - huenda tusijue nyuga zote na tuhifadhi JSON kwa kila rekodi - hii inatupa mazingira rahisi sana ya kupanua data. mfano na kurudia haraka - kwa hivyo katika kesi hii, NoSQL itakuwa bora zaidi na isomeke zaidi. Kuingia kwa mfano (kutoka kwa moja ya miradi yangu ambapo NoSQL ilikuwa sawa pale ilipohitajika).

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

Unaweza kusoma zaidi hapa kuhusu NoSQL.

Nini cha kujifunza?

Hapa, badala yake, unahitaji tu kuchambua kazi yako kikamilifu, ni mali gani inayo na ni mifumo gani ya NoSQL inapatikana ambayo ingefaa maelezo haya - na kisha kuanza kusoma mfumo huu.

Lugha za Maswali ya Maandishi

Mwanzoni, inaonekana, Python ina uhusiano gani nayo kwa ujumla - ni lugha ya programu, na sio juu ya maswali hata kidogo.

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data

  • Panda ni kisu cha Jeshi la Uswizi la Sayansi ya Data; kiasi kikubwa cha mabadiliko ya data, ujumlishaji, n.k. hutokea ndani yake.
  • Numpy - mahesabu ya vekta, matrices na algebra linear huko.
  • Scipy - kuna hisabati nyingi kwenye kifurushi hiki, haswa takwimu.
  • Maabara ya Jupyter - uchanganuzi mwingi wa data ya uchunguzi unafaa kwenye kompyuta za mkononi - muhimu kujua.
  • Maombi - kufanya kazi na mtandao.
  • Pyspark ni maarufu sana kati ya wahandisi wa data, uwezekano mkubwa utalazimika kuingiliana na hii au Spark, kwa sababu tu ya umaarufu wao.
  • *Seleniamu - ni muhimu sana kwa kukusanya data kutoka kwa tovuti na rasilimali, wakati mwingine hakuna njia nyingine ya kupata data.

Ushauri wangu kuu: jifunze Python!

Panda

Wacha tuchukue nambari ifuatayo kama mfano:

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

Kimsingi, tunaona kwamba kanuni inafaa katika muundo classic 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

Lakini sehemu muhimu ni kwamba nambari hii ni sehemu ya hati na bomba; kwa kweli, tunapachika maswali kwenye bomba la Python. Katika hali hii, lugha ya hoja hutujia kutoka kwa maktaba kama vile Pandas au pySpark.

Kwa ujumla, katika pySpark tunaona aina sawa ya mabadiliko ya data kupitia lugha ya hoja katika roho ya:

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

Wapi na nini cha kusoma

Kwenye Python yenyewe kwa ujumla si tatizo kupata nyenzo za kusoma. Kuna idadi kubwa ya mafunzo kwenye mtandao pandas, pySpark na kozi zinaendelea Cheche (na pia peke yake DS) Kwa jumla, yaliyomo hapa ni bora kwa googling, na ikiwa ningelazimika kuchagua kifurushi kimoja cha kuzingatia, itakuwa panda, bila shaka. Kuhusu mchanganyiko wa vifaa vya DS+Python pia mengi ya.

Shell kama lugha ya swali

Miradi michache ya usindikaji na uchambuzi wa data ambayo nimefanya kazi nayo, kwa kweli, hati za ganda ambazo huita nambari huko Python, Java, na ganda linajiamuru. Kwa hivyo, kwa ujumla, unaweza kuzingatia bomba katika bash/zsh/etc kama aina fulani ya swala ya kiwango cha juu (unaweza, kwa kweli, kuweka matanzi huko, lakini hii sio kawaida kwa nambari ya DS katika lugha za ganda), wacha tupeane. mfano rahisi - nilihitaji kufanya ramani ya QID ya wikidata na viungo kamili kwa wiki za Kirusi na Kiingereza, kwa hili niliandika ombi rahisi kutoka kwa amri kwenye bash na kwa matokeo niliandika hati rahisi katika Python, ambayo niliandika. weka pamoja kama hii:

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

ambapo

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

Hii ilikuwa, kwa kweli, bomba zima ambalo liliunda ramani inayohitajika; kama tunavyoona, kila kitu kilifanya kazi katika hali ya mtiririko:

  • pv filepath - inatoa upau wa maendeleo kulingana na saizi ya faili na hupitisha yaliyomo mbele
  • unpigz -c kusoma sehemu ya kumbukumbu na kuipatia jq
  • jq na ufunguo - mkondo mara moja ulitoa matokeo na kuipitisha kwa kichakata (sawa na mfano wa kwanza) huko Python
  • ndani, kichakataji cha posta kilikuwa mashine rahisi ya hali iliyofomati matokeo 

Kwa jumla, bomba ngumu linalofanya kazi katika hali ya mtiririko kwenye data kubwa (0.5TB), bila rasilimali muhimu na iliyotengenezwa kutoka kwa bomba rahisi na zana kadhaa.

Kidokezo kingine muhimu: kuwa na uwezo wa kufanya kazi vizuri na kwa ufanisi katika terminal na kuandika bash/zsh/etc.

Itakuwa na manufaa wapi? Ndio, karibu kila mahali - tena, kuna vifaa vingi vya kusoma kwenye mtandao. Hasa, hapa hii makala yangu iliyopita.

R uandishi

Tena, msomaji anaweza kusema - vizuri, hii ni lugha nzima ya programu! Na bila shaka atakuwa sahihi. Walakini, kawaida nilikutana na R katika muktadha ambao, kwa kweli, ilikuwa sawa na lugha ya kuuliza.

R ni mazingira ya kompyuta ya kitakwimu na lugha ya kompyuta tuli na taswira (kulingana na hii).

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data
kuchukuliwa hivyo. Kwa njia, ninapendekeza, nyenzo nzuri.

Kwa nini mwanasayansi wa data anahitaji kujua R? Angalau, kwa sababu kuna safu kubwa ya watu wasio wa IT ambao huchanganua data katika R. Nilikutana nayo katika maeneo yafuatayo:

  • Sekta ya dawa.
  • Wanabiolojia.
  • Sekta ya fedha.
  • Watu wenye elimu ya hisabati pekee wanaoshughulika na takwimu.
  • Miundo maalum ya takwimu na miundo ya kujifunza kwa mashine (ambayo inaweza kupatikana tu katika toleo la mwandishi kama kifurushi cha R).

Kwa nini ni kweli lugha ya kuuliza? Katika fomu ambayo hupatikana mara nyingi, kwa kweli ni ombi la kuunda mfano, pamoja na kusoma data na kurekebisha vigezo vya swala (mfano), na pia kuibua data kwenye vifurushi kama vile ggplot2 - hii pia ni aina ya maswali ya uandishi. .

Maswali ya mfano kwa taswira

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

Kwa ujumla, maoni mengi kutoka kwa R yamehamia kwenye vifurushi vya python kama vile pandas, numpy au scipy, kama datafremu na uwekaji data - kwa hivyo kwa ujumla mambo mengi katika R yataonekana kuwa ya kawaida na rahisi kwako.

Kuna vyanzo vingi vya kusoma, kwa mfano, hii.

Grafu za maarifa

Hapa nina uzoefu usio wa kawaida, kwa sababu mara nyingi mimi hulazimika kufanya kazi na grafu za maarifa na lugha za kuuliza kwa grafu. Kwa hiyo, hebu tuende kwa ufupi juu ya msingi, kwani sehemu hii ni ya kigeni zaidi.

Katika hifadhidata za uhusiano wa kitamaduni tuna schema isiyobadilika, lakini hapa schema inaweza kunyumbulika, kila kiashirio ni "safu" na hata zaidi.

Fikiria kuwa ulikuwa ukimwiga mtu na ulitaka kueleza mambo muhimu, kwa mfano, hebu tumchukue mtu mahususi, Douglas Adams, na tutumie maelezo haya kama msingi.

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data
www.wikidata.org/wiki/Q42

Ikiwa tungetumia hifadhidata ya uhusiano, tungelazimika kuunda jedwali kubwa au jedwali zilizo na idadi kubwa ya safu wima, ambazo nyingi zingekuwa NULL au kujazwa na thamani ya Uongo, kwa mfano, haiwezekani kwamba wengi wetu kuingia katika maktaba ya kitaifa ya Kikorea - bila shaka, tunaweza kuziweka katika majedwali tofauti, lakini hili hatimaye lingekuwa jaribio la kuiga mzunguko wa kimantiki unaonyumbulika na viashirio kwa kutumia uhusiano uliowekwa.

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data
Kwa hivyo fikiria kuwa data yote imehifadhiwa kama grafu au kama misemo ya binary na isiyo ya kawaida.

Unaweza kukutana wapi na hii? Kwanza, kufanya kazi na data wiki, na hifadhidata zozote za grafu au data iliyounganishwa.

Zifuatazo ni lugha kuu za maswali ambazo nimetumia na kufanya kazi nazo.

SPARQL

Wiki:
SPARQL (kifupi cha kujirudia kutoka Eng. Itifaki ya SPARQL na Lugha ya Maswali ya RDF) - lugha ya swala la data, iliyowakilishwa na mfano RDFNa itifaki kuwasilisha maombi haya na kuyajibu. SPARQL ni pendekezo Muungano wa W3C na moja ya teknolojia mtandao wa kisemantiki.

Lakini kwa uhalisia ni lugha ya kuuliza maswali kwa viambishi vya kimantiki vya unary na binary. Unabainisha kwa masharti kile ambacho kimesasishwa katika msemo wa Boolean na nini hakijasahihishwa (kilichorahisishwa sana).

Msingi wa RDF (Mfumo wa Maelezo ya Rasilimali) yenyewe, ambayo hoja za SPARQL hutekelezwa, ni mara tatu. object, predicate, subject - na swala huchagua mara tatu zinazohitajika kulingana na vizuizi vilivyoainishwa katika roho: pata X kama kwamba p_55(X, q_33) ni kweli - ambapo, kwa kweli, p_55 ni aina fulani ya uhusiano na ID 55, na q_33 ni kitu kilicho na kitambulisho 33 (hapa na hadithi nzima, tena ikiacha maelezo ya kila aina).

Mfano wa uwasilishaji wa data:

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data
Picha na mfano na nchi hapa hivyo.

Mfano wa Swali la Msingi

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data

Kwa hakika, tunataka kupata thamani ya ?kigeu cha nchi ili kwa kiima
mwanachama_wa, ni kweli kwamba member_of(?country,q458) na q458 ni kitambulisho cha Umoja wa Ulaya.

Mfano wa swali halisi la SPARQL ndani ya injini ya python:

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data

Kwa kawaida, imenibidi kusoma SPARQL badala ya kuiandika - katika hali hiyo, inaweza kuwa ujuzi muhimu kuelewa lugha angalau katika kiwango cha msingi ili kuelewa jinsi data inavyorejeshwa. 

Kuna nyenzo nyingi za kusoma mkondoni: kwa mfano, hapa hii и hii. Mimi kawaida google miundo na mifano maalum na hiyo inatosha kwa sasa.

Lugha za hoja za kimantiki

Unaweza kusoma zaidi juu ya mada katika makala yangu hapa. Na hapa, tutachunguza kwa ufupi tu kwa nini lugha za kimantiki zinafaa kwa maswali ya kuandika. Kimsingi, RDF ni seti tu ya taarifa za kimantiki za fomu p(X) na h(X,Y), na hoja ya kimantiki ina fomu ifuatayo:

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

Hapa tunazungumza juu ya kuunda pato jipya la kihusishi/1 (/1 ina maana isiyo ya kawaida), mradi kwa X ni kweli kwamba nchi(X) - yaani, X ni nchi na pia mwanachama_wa(X,"EU ").

Hiyo ni, katika kesi hii, data na sheria zote zinawasilishwa kwa njia ile ile, ambayo inafanya uwezekano wa kuiga matatizo kwa urahisi sana na vizuri.

Ulikutana wapi kwenye tasnia?: mradi mkubwa kabisa na kampuni inayoandika maswali kwa lugha kama hiyo, na vile vile kwenye mradi wa sasa katika msingi wa mfumo - inaweza kuonekana kuwa hii ni jambo la kigeni, lakini wakati mwingine hufanyika.

Mfano wa kipande cha msimbo katika wikidata ya kuchakata lugha yenye mantiki:

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data

Nyenzo: Nitatoa hapa viungo kadhaa vya lugha ya kisasa ya kimantiki ya upangaji Jibu Weka Utayarishaji - Ninapendekeza uisome:

Vidokezo vya Mwanasayansi wa Data: Mapitio ya Kibinafsi ya Lugha za Maswali ya Data

Chanzo: mapenzi.com

Kuongeza maoni