ProHoster > Blogs > Administrācija > Kuru valodu izvēlēties darbam ar datiem - R vai Python? Abi! Migrācija no pandām uz tidyverse un data.table un atpakaļ
Kuru valodu izvēlēties darbam ar datiem - R vai Python? Abi! Migrācija no pandām uz tidyverse un data.table un atpakaļ
Internetā meklējot R vai Python, jūs atradīsiet miljoniem rakstu un kilometru diskusiju par tēmu, kurš ir labāks, ātrāks un ērtāks darbam ar datiem. Bet diemžēl visi šie raksti un strīdi nav īpaši noderīgi.
Šī raksta mērķis ir salīdzināt pamata datu apstrādes paņēmienus populārākajās abu valodu pakotnēs. Un palīdziet lasītājiem ātri apgūt kaut ko, ko viņi vēl nezina. Tiem, kas raksta Python, uzziniet, kā to pašu izdarīt ar R un otrādi.
Raksta laikā mēs analizēsim populārāko R pakotņu sintaksi. Šīs ir bibliotēkā iekļautās pakotnes. tidyverseun arī iepakojums data.table. Un salīdziniet to sintaksi ar pandas, populārākā Python datu analīzes pakotne.
Mēs soli pa solim veiksim visu datu analīzes ceļu no to ielādes līdz analītisko logu funkciju veikšanai, izmantojot Python un R.
saturs
Šo rakstu var izmantot kā apkrāptu lapu, ja esat aizmirsis, kā kādā no aplūkojamajām pakotnēm veikt kādu datu apstrādes darbību.
Ja jūs interesē datu analīze, jūs varat atrast manu telegramma и youtube kanāliem. Lielākā daļa satura ir veltīta R valodai.
Galvenās sintakses atšķirības starp R un Python
Lai jums būtu vieglāk pārslēgties no Python uz R vai otrādi, es sniegšu dažus galvenos punktus, kuriem jums jāpievērš uzmanība.
Piekļuve pakotnes funkcijām
Kad pakotne ir ielādēta R, jums nav jānorāda pakotnes nosaukums, lai piekļūtu tās funkcijām. Vairumā gadījumu tas nav izplatīts R, bet tas ir pieņemams. Jums vispār nav jāimportē pakotne, ja kodā ir nepieciešama kāda no tās funkcijām, bet vienkārši izsauciet to, norādot pakotnes nosaukumu un funkcijas nosaukumu. Atdalītājs starp pakotnes un funkciju nosaukumiem R ir dubultā kola. package_name::function_name().
Gluži pretēji, Python tiek uzskatīts par klasisku pakotnes funkciju izsaukšanu, skaidri norādot tās nosaukumu. Kad pakotne tiek lejupielādēta, tai parasti tiek dots saīsināts nosaukums, piem. pandas parasti tiek lietots pseidonīms pd. Pakotnes funkcijai var piekļūt, izmantojot punktu package_name.function_name().
Piešķiršana
R valodā parasti tiek izmantota bultiņa, lai objektam piešķirtu vērtību. obj_name <- value, lai gan ir atļauta viena vienādības zīme, viena vienādības zīme R tiek izmantota galvenokārt, lai nodotu vērtības funkcijas argumentiem.
Python programmā piešķiršana tiek veikta tikai ar vienu vienādības zīmi obj_name = value.
Indeksēšana
Šeit ir arī diezgan būtiskas atšķirības. Rā indeksēšana sākas ar vienu un ietver visus norādītos elementus iegūtajā diapazonā,
Programmā Python indeksēšana sākas no nulles, un atlasītajā diapazonā nav iekļauts pēdējais rādītājā norādītais elements. Tātad dizains x[i:j] Python neiekļaus j elementu.
Atšķirības ir arī negatīvajā indeksācijā, R apzīmējumā x[-1] atgriezīs visus vektora elementus, izņemot pēdējo. Programmā Python līdzīgs apzīmējums atgriezīs tikai pēdējo elementu.
Metodes un OOP
R ievieš OOP savā veidā, par to es rakstīju rakstā "OOP R valodā (1. daļa): S3 klases". Kopumā R ir funkcionāla valoda, un viss tajā ir balstīts uz funkcijām. Tāpēc, piemēram, Excel lietotājiem dodieties uz tydiverse tas būs vieglāk nekā pandas. Lai gan tas var būt mans subjektīvais viedoklis.
Īsāk sakot, R objektiem nav metožu (ja mēs runājam par S3 klasēm, bet ir arī citas OOP implementācijas, kas ir daudz retāk sastopamas). Ir tikai vispārinātas funkcijas, kas tās apstrādā atšķirīgi atkarībā no objekta klases.
Cauruļvadi
Varbūt tas ir nosaukums pandas Tas nebūs pilnīgi pareizi, bet es mēģināšu izskaidrot nozīmi.
Lai nesaglabātu starpaprēķinus un neradītu nevajadzīgus objektus darba vidē, varat izmantot sava veida cauruļvadu. Tie. pārsūtīt aprēķina rezultātu no vienas funkcijas uz nākamo un nesaglabājiet starprezultātus.
Ņemsim šādu koda piemēru, kur mēs saglabājam starpaprēķinus atsevišķos objektos:
Tādējādi mēs ņemam darba rezultātu func1() un nododiet to kā pirmo argumentu func2(), tad šī aprēķina rezultātu nododam kā pirmo argumentu func3(). Un beigās visus veiktos aprēķinus ierakstām objektā obj <-.
Visu iepriekš minēto labāk par vārdiem ilustrē šī mēma:
Katrā kvadrātiekavās varat izmantot iepriekšējās darbības rezultātu.
В pandas šādas darbības ir atdalītas ar punktu.
obj = df.fun1().fun2().fun3()
Tie. paņemam savu galdu df un izmantot viņas metodi fun1(), tad pielietojam metodi iegūtajam rezultātam fun2()pēc fun3(). Iegūtais rezultāts tiek saglabāts objektā objekts .
Datu struktūras
Datu struktūras R un Python ir līdzīgas, taču tām ir dažādi nosaukumi.
Apraksts
Vārds R
Vārds Python/pandas valodā
Tabulas struktūra
data.frame, data.table, tibble
DataFrame
Viendimensionāls vērtību saraksts
Vektors
Sērija pandu valodā vai saraksts tīrā Python valodā
Daudzlīmeņu netabulāra struktūra
Saraksts
Vārdnīca (dikts)
Tālāk apskatīsim dažas citas sintakses funkcijas un atšķirības.
Daži vārdi par iepakojumiem, ko izmantosim
Pirmkārt, es jums pastāstīšu nedaudz par iepakojumiem, ar kuriem jūs iepazīsities šī raksta laikā.
sakārtotība
Официальный сайт: tidyverse.org
Bibliotēka tidyverse raksta Hedlija Vikema, RStudio vecākā pētniece. tidyverse sastāv no iespaidīga pakotņu kopuma, kas vienkāršo datu apstrādi, no kurām 5 ir iekļautas 10 populārāko lejupielāžu sarakstā no CRAN repozitorija.
Bibliotēkas kodols sastāv no šādām pakotnēm: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Katra no šīm pakotnēm ir paredzēta konkrētas problēmas risināšanai. Piemēram dplyr radīts datu apstrādei, tidyr lai datus sakārtotu formātā, stringr vienkāršo darbu ar stīgām, un ggplot2 ir viens no populārākajiem datu vizualizācijas rīkiem.
Priekšrocība tidyverse ir vienkāršība un viegli lasāma sintakse, kas daudzējādā ziņā ir līdzīga SQL vaicājumu valodai.
Pakešu sintakse nav tik ērta kā iekšā tidyverse un vairāk atgādina klasiskos datu kadrus R, bet tajā pašā laikā ievērojami paplašināta funkcionalitāte.
Visas manipulācijas ar tabulu šajā pakotnē ir aprakstītas kvadrātiekavās un, ja tulkojat sintaksi data.table SQL, jūs saņemat kaut ko līdzīgu šim: data.table[ WHERE, SELECT, GROUP BY ]
Šīs pakotnes priekšrocība ir liela datu apjoma apstrādes ātrums.
Bibliotēkas nosaukums cēlies no ekonometriskā termina “paneļa dati”, ko izmanto, lai aprakstītu daudzdimensiju strukturētas informācijas kopas.
Autors pandas ir amerikānis Vess Makkinijs.
Runājot par datu analīzi Python, vienāds pandas Nē. Ļoti daudzfunkcionāla, augsta līmeņa pakotne, kas ļauj veikt jebkādas manipulācijas ar datiem, sākot no datu ielādes no jebkuriem avotiem līdz to vizualizācijai.
Papildu pakotņu instalēšana
Šajā rakstā aplūkotās pakotnes nav iekļautas pamata R un Python izplatījumos. Lai gan ir neliels brīdinājums, ja instalējāt Anaconda izplatīšanu, instalējiet papildus pandas nav nepieciešams.
Pakešu instalēšana R
Ja esat vismaz vienu reizi atvēris RStudio izstrādes vidi, iespējams, jau zināt, kā instalēt nepieciešamo pakotni R. Lai instalētu pakotnes, izmantojiet standarta komandu install.packages() palaižot to tieši pašā R.
# установка пакетов
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")
Pēc instalēšanas pakotnes ir jāsavieno, kam vairumā gadījumu tiek izmantota komanda library().
# подключение или импорт пакетов в рабочее окружение
library(vroom)
library(readr)
library(dplyr)
library(data.table)
Pakešu instalēšana programmā Python
Tātad, ja jums ir instalēts tīrs Python, tad pandas jums tas jāinstalē manuāli. Atveriet komandrindu vai termināli atkarībā no operētājsistēmas un ievadiet šo komandu.
pip install pandas
Pēc tam mēs atgriežamies pie Python un importējam instalēto pakotni ar komandu import.
import pandas as pd
Notiek datu ielāde
Datu ieguve ir viens no svarīgākajiem datu analīzes posmiem. Gan Python, gan R, ja vēlaties, sniedz jums plašas iespējas iegūt datus no jebkuriem avotiem: lokāliem failiem, failiem no interneta, vietnēm, visa veida datu bāzēm.
Visā rakstā mēs izmantosim vairākas datu kopas:
Divas lejupielādes no Google Analytics.
Titānika pasažieru datu kopa.
Visi dati ir manā GitHub csv un tsv failu veidā. No kurienes mēs tos pieprasīsim?
Datu ielāde R: tidyverse, vroom, readr
Lai ielādētu datus bibliotēkā tidyverse Ir divi iepakojumi: vroom, readr. vroom modernāks, taču nākotnē iepakojumi var tikt kombinēti.
vroom pret lasītāju
Ko nozīmē atbrīvošana no vroom nozīmē readr? Pagaidām mēs plānojam ļaut abām pakotnēm attīstīties atsevišķi, taču, visticamāk, nākotnē mēs tās apvienosim. Viens no vroom slinkās lasīšanas trūkumiem ir tas, ka par dažām datu problēmām nevar ziņot iepriekš, tāpēc ir jāapdomā, kā tās vislabāk apvienot.
vroom vs lasītājs
Ko nozīmē atbrīvošana? vroom par readr? Šobrīd plānojam abas paketes izstrādāt atsevišķi, taču, iespējams, nākotnē tās apvienosim. Viens no slinkas lasīšanas trūkumiem vroom ir tas, ka dažas problēmas ar datiem nevar ziņot iepriekš, tāpēc jums ir jādomā, kā tās vislabāk apvienot.
Šajā rakstā mēs apskatīsim abas datu ielādes pakotnes:
Iepakojumā vroom, neatkarīgi no csv / tsv datu formāta, ielāde tiek veikta ar tāda paša nosaukuma funkciju vroom(), iepakojumā readr mēs izmantojam atšķirīgu funkciju katram formātam read_tsv() и read_csv().
Ja salīdzinām ar R pakotnēm, tad šajā gadījumā sintakse ir vistuvākā pandas griba readr, jo pandas var pieprasīt datus no jebkuras vietas, un šajā pakotnē ir vesela funkciju saime read_*().
read_csv()
read_excel()
read_sql()
read_json()
read_html()
Un daudzas citas funkcijas, kas paredzētas dažādu formātu datu nolasīšanai. Bet mūsu mērķiem ar to pietiek read_table() vai read_csv() izmantojot argumentu septembris lai norādītu kolonnu atdalītāju.
В pandas rāmju izveide tiek veikta vairākos posmos, vispirms izveidojam vārdnīcu un pēc tam vārdnīcu pārvēršam par datu rāmi.
Datu rāmja izveide programmā Python: pandas
# создаём дата фрейм
gender_dict = {'id': [1, 2],
'gender': ["female", "male"]}
# преобразуем словарь в датафрейм
gender = pd.DataFrame.from_dict(gender_dict)
Kolonnu atlasīšana
Tabulās, ar kurām strādājat, var būt desmitiem vai pat simtiem datu kolonnu. Bet, lai veiktu analīzi, parasti nav vajadzīgas visas kolonnas, kas ir pieejamas avota tabulā.
Tāpēc viena no pirmajām darbībām, ko veiksit ar avota tabulu, ir notīrīt to no nevajadzīgas informācijas un atbrīvot atmiņu, ko šī informācija aizņem.
Kolonnu atlase R: tidyverse, dplyr
sintakse dplyr ir ļoti līdzīga SQL vaicājumu valodai, ja jūs to pārzināt, jūs ātri apgūsit šo pakotni.
Lai atlasītu kolonnas, izmantojiet funkciju select().
Tālāk ir sniegti koda piemēri, ar kuriem kolonnas var atlasīt šādos veidos.
Nepieciešamo kolonnu nosaukumu uzskaitīšana
Skatiet kolonnu nosaukumus, izmantojot regulārās izteiksmes
Pēc datu veida vai jebkura cita kolonnā ietverto datu rekvizīta
Kolonnu atlase R: dplyr
# Выбор нужных столбцов
## dplyr
### выбрать по названию столбцов
select(ga_nov, date, source, sessions)
### исключь по названию столбцов
select(ga_nov, -medium, -bounces)
### выбрать по регулярному выражению, стобцы имена которых заканчиваются на s
select(ga_nov, matches("s$"))
### выбрать по условию, выбираем только целочисленные столбцы
select_if(ga_nov, is.integer)
Kolonnu atlase R: data.table
Tās pašas operācijas data.table tiek izpildīti nedaudz atšķirīgi, raksta sākumā es sniedzu aprakstu par to, kādi argumenti ir ievietoti kvadrātiekavās data.table.
DT[i,j,by]
Kur:
es - kur, t.i. filtrēšana pēc rindām
j - atlasīt|atjaunināt|darīt, t.i. kolonnu atlase un konvertēšana
pēc - datu grupēšana
Mainīgs .SD ļauj piekļūt visām kolonnām un .SDcols filtrējiet vajadzīgās kolonnas, izmantojot regulāras izteiksmes vai citas funkcijas, lai filtrētu vajadzīgo kolonnu nosaukumus.
Kolonnu atlase programmā Python, pandas
Lai atlasītu kolonnas pēc nosaukuma pandas pietiek ar to vārdu sarakstu. Un, lai atlasītu vai izslēgtu kolonnas pēc nosaukuma, izmantojot regulārās izteiksmes, jums ir jāizmanto funkcijas drop() и filter(), un arguments ass=1, ar kuru jūs norādāt, ka ir nepieciešams apstrādāt kolonnas, nevis rindas.
Lai atlasītu lauku pēc datu veida, izmantojiet funkciju select_dtypes(), un argumentos ietvert vai izslēgt nododiet datu tipu sarakstu, kas atbilst tiem laukiem, kas jums jāatlasa.
Kolonnu atlase programmā Python: pandas
# Выбор полей по названию
ga_nov[['date', 'source', 'sessions']]
# Исключить по названию
ga_nov.drop(['medium', 'bounces'], axis=1)
# Выбрать по регулярному выражению
ga_nov.filter(regex="s$", axis=1)
# Выбрать числовые поля
ga_nov.select_dtypes(include=['number'])
# Выбрать текстовые поля
ga_nov.select_dtypes(include=['object'])
Rindas filtrēšana
Piemēram, avota tabulā var būt vairāku gadu dati, taču jums ir jāanalizē tikai pēdējais mēnesis. Atkal papildu līnijas palēninās datu apstrādes procesu un aizsprosto datora atmiņu.
Filtrēšanas rindas R: tydyverse, dplyr
В dplyr funkcija tiek izmantota rindu filtrēšanai filter(). Kā pirmais arguments tiek izmantots datu rāmis, pēc tam jūs uzskaitāt filtrēšanas nosacījumus.
Rakstot loģiskās izteiksmes tabulas filtrēšanai, šajā gadījumā norādiet kolonnu nosaukumus bez pēdiņām un nedeklarējot tabulas nosaukumu.
Ja filtrēšanai izmantojat vairākas loģiskās izteiksmes, izmantojiet šādus operatorus:
& vai komats — loģisks UN
| - loģisks VAI
Rindu filtrēšana R: dplyr
# фильтрация строк
## dplyr
### фильтрация строк по одному условию
filter(ga_nov, source == "google")
### фильтр по двум условиям соединённым логическим и
filter(ga_nov, source == "google" & sessions >= 10)
### фильтр по двум условиям соединённым логическим или
filter(ga_nov, source == "google" | sessions >= 10)
Rindu filtrēšana R: data.table
Kā jau rakstīju iepriekš, in data.table datu konvertēšanas sintakse ir ievietota kvadrātiekavās.
DT[i,j,by]
Kur:
es - kur, t.i. filtrēšana pēc rindām
j - atlasīt|atjaunināt|darīt, t.i. kolonnu atlase un konvertēšana
pēc - datu grupēšana
Arguments tiek izmantots rindu filtrēšanai i, kurai kvadrātiekavās ir pirmā pozīcija.
Kolonnām var piekļūt loģiskās izteiksmēs bez pēdiņām un nenorādot tabulas nosaukumu.
Loģiskās izteiksmes ir saistītas viena ar otru tādā pašā veidā kā dplyr izmantojot & un | operatorus.
Rindu filtrēšana R: data.table
## data.table
### фильтрация строк по одному условию
ga_nov[source == "google"]
### фильтр по двум условиям соединённым логическим и
ga_nov[source == "google" & sessions >= 10]
### фильтр по двум условиям соединённым логическим или
ga_nov[source == "google" | sessions >= 10]
Virkņu filtrēšana Python: pandas
Filtrēt pēc rindām pandas līdzīgi kā filtrēšana data.table, un tiek darīts kvadrātiekavās.
Šajā gadījumā piekļuve kolonnām tiek veikta obligāti, norādot datu rāmja nosaukumu; tad kolonnas nosaukumu var norādīt arī pēdiņās kvadrātiekavās (piemērsdf['col_name']), vai bez pēdiņām pēc perioda (piemērsdf.col_name).
Ja datu rāmis jāfiltrē pēc vairākiem nosacījumiem, katrs nosacījums jāievieto iekavās. Loģiskos nosacījumus savā starpā savieno operatori & и |.
Virkņu filtrēšana Python: pandas
# Фильтрация строк таблицы
### фильтрация строк по одному условию
ga_nov[ ga_nov['source'] == "google" ]
### фильтр по двум условиям соединённым логическим и
ga_nov[(ga_nov['source'] == "google") & (ga_nov['sessions'] >= 10)]
### фильтр по двум условиям соединённым логическим или
ga_nov[(ga_nov['source'] == "google") | (ga_nov['sessions'] >= 10)]
Datu grupēšana un apkopošana
Viena no visbiežāk izmantotajām operācijām datu analīzē ir grupēšana un apkopošana.
Šo darbību veikšanas sintakse ir izkaisīta visās mūsu pārskatāmajās pakotnēs.
Šajā gadījumā kā piemēru ņemsim datu rāmi titānisks, un aprēķiniet biļešu skaitu un vidējās izmaksas atkarībā no salona klases.
Datu grupēšana un apkopošana R: tidyverse, dplyr
В dplyr funkcija tiek izmantota grupēšanai group_by(), un apkopošanai summarise(). Patiesībā, dplyr ir vesela funkciju saime summarise_*(), taču šī raksta mērķis ir salīdzināt pamata sintaksi, tāpēc tādos džungļos neiedziļināsimies.
Funkcijā group_by() mēs izturējām tabulu kā pirmo argumentu titānisksun pēc tam norādīja lauku Pklase, pēc kuras mēs sagrupēsim savu tabulu. Šīs operācijas rezultāts, izmantojot operatoru %>% tika nodots kā pirmais funkcijas arguments summarise()un pievienoja vēl 2 laukus: pasažieriem и avg_price. Pirmajā, izmantojot funkciju length() aprēķināja biļešu skaitu, bet otrajā izmantojot funkciju mean() saņēma vidējo biļetes cenu.
Datu grupēšana un apkopošana R: dati.tabula
В data.table arguments tiek izmantots apkopošanai j kurai kvadrātiekavās ir otrā pozīcija, un grupēšanai by vai keyby, kuriem ir trešā pozīcija.
Apkopošanas funkciju saraksts šajā gadījumā ir identisks aprakstītajam dplyr, jo tās ir funkcijas no pamata R sintakses.
Grupēšana un apkopošana R: dati.tabula
## data.table
### фильтрация строк по одному условию
titanic[, .(passangers = length(PassengerId),
avg_price = mean(Fare)),
by = Pclass]
Datu grupēšana un apkopošana Python: pandas
Grupēšana iekšā pandas līdzīgs dplyr, bet apkopojums nav līdzīgs dplyr nav ieslēgts data.table.
Lai grupētu, izmantojiet metodi groupby(), kurā jāievada kolonnu saraksts, pēc kurām tiks grupēts datu rāmis.
Apkopošanai varat izmantot metodi agg()kas pieņem vārdnīcu. Vārdnīcas atslēgas ir kolonnas, kurās izmantosit apkopošanas funkcijas, un vērtības ir apkopošanas funkciju nosaukumi.
Apkopošanas funkcijas:
sum() — summēšana
min() / max() – minimālā un maksimālā vērtība
mean() - vidēji
median() — mediāna
count() - daudzums
Funkcija reset_index() tālāk esošajā piemērā tas tiek izmantots, lai atiestatītu ligzdotos indeksus, kas pandas noklusējuma vērtība ir pēc datu apkopošanas.
Simbols ļauj pāriet uz nākamo rindu.
Grupēšana un apkopošana Python: pandas
# группировка и агрегация данных
titanic.groupby(["Pclass"]).
agg({'PassengerId': 'count', 'Fare': 'mean'}).
reset_index()
Vertikāls tabulu savienojums
Darbība, kurā jūs savienojat divas vai vairākas vienas un tās pašas struktūras tabulas. Ielādētie dati satur tabulas ga_nov и ga_dec. Šīs tabulas pēc struktūras ir identiskas, t.i. ir vienādas kolonnas un datu tipi šajās kolonnās.
Šī ir augšupielāde no Google Analytics par novembri un decembri. Šajā sadaļā mēs apvienosim šos datus vienā tabulā.
В dplyr Izmantojot funkciju, varat apvienot 2 tabulas vienā bind_rows(), nododot tabulas kā argumentus.
Rindu filtrēšana R: dplyr
# Вертикальное объединение таблиц
## dplyr
bind_rows(ga_nov, ga_dec)
Vertikāli savienojot tabulas R: data.table
Tas arī nav nekas sarežģīts, izmantosim rbind().
Rindu filtrēšana R: data.table
## data.table
rbind(ga_nov, ga_dec)
Vertikāli savienotas tabulas Python: pandas
В pandas funkcija tiek izmantota tabulu savienošanai concat(), kurā jums ir jānodod kadru saraksts, lai tos apvienotu.
Virkņu filtrēšana Python: pandas
# вертикальное объединение таблиц
pd.concat([ga_nov, ga_dec])
Horizontāla tabulu savienošana
Darbība, kurā kolonnas no otrās tiek pievienotas pirmajai tabulai pēc atslēgas. To bieži izmanto, bagātinot faktu tabulu (piemēram, tabulu ar pārdošanas datiem) ar dažiem atsauces datiem (piemēram, produkta izmaksām).
Ir vairāki savienojumu veidi:
Iepriekš ielādētajā tabulā titānisks mums ir kolonna Dzimums, kas atbilst pasažiera dzimuma kodam:
1 - sieviete
2 - vīrietis
Tāpat esam izveidojuši tabulu – uzziņu grāmatu vecāka dzimumam. Lai ērtāk parādītu datus par pasažieru dzimumu, mums ir jāpievieno dzimuma nosaukums no direktorijas vecāka dzimumam pie galda titānisks.
В dplyr Ir visa funkciju saime horizontālai savienošanai:
inner_join()
left_join()
right_join()
full_join()
semi_join()
nest_join()
anti_join()
Manā praksē visbiežāk izmantotais ir left_join().
Kā pirmie divi argumenti, iepriekš uzskaitītajām funkcijām ir vajadzīgas divas tabulas, lai tās apvienotu, un kā trešo argumentu by jums ir jānorāda kolonnas, kurām pievienoties.
Horizontālā galda savienošana R: dplyr
# объединяем таблицы
left_join(titanic, gender,
by = c("Sex" = "id"))
Horizontālais tabulu savienojums R: data.table
В data.table Tabulas jāsavieno ar taustiņu, izmantojot funkciju merge().
Argumenti, lai apvienotu() funkciju tabulā data.table
x, y — tabulas savienošanai
by — kolonna, kas ir savienojuma atslēga, ja tai ir vienāds nosaukums abās tabulās
by.x, by.y — sapludināmo kolonnu nosaukumi, ja tiem tabulās ir dažādi nosaukumi
all, all.x, all.y — savienojuma veids, visi atgriezīs visas rindas no abām tabulām, all.x atbilst darbībai LEFT JOIN (atstās visas pirmās tabulas rindas), all.y — atbilst RIGHT JOIN darbība (atstās visas otrās tabulas rindas).
Kā arī iekšā data.tableUz pandas funkcija tiek izmantota tabulu savienošanai merge().
Funkcijas merge() argumenti pandās
kā — Savienojuma veids: kreisais, labais, ārējais, iekšējais
on — kolonna, kas ir atslēga, ja tai ir vienāds nosaukums abās tabulās
left_on, right_on — atslēgu kolonnu nosaukumi, ja tām tabulās ir dažādi nosaukumi
Horizontālā galda pievienošana Python: pandas
# объединяем по ключу
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")
Logu pamatfunkcijas un aprēķinātās kolonnas
Logu funkcijas pēc nozīmes ir līdzīgas apkopošanas funkcijām, un tās bieži izmanto arī datu analīzē. Taču atšķirībā no apkopošanas funkcijām loga funkcijas nemaina izejošā datu rāmja rindu skaitu.
Būtībā, izmantojot loga funkciju, mēs sadalām ienākošo datu rāmi daļās pēc kāda kritērija, t.i. pēc lauka vērtības vai vairākiem laukiem. Un mēs veicam aritmētiskās darbības katrā logā. Šo darbību rezultāts tiks atgriezts katrā rindā, t.i. nemainot kopējo rindu skaitu tabulā.
Piemēram, ņemsim tabulu titānisks. Mēs varam aprēķināt, cik procentu katras biļetes izmaksas bija tās salona klasē.
Lai to izdarītu, katrā rindā jāiekļauj kopējās biļetes izmaksas pašreizējai kajītes klasei, kurai pieder šīs rindas biļete, pēc tam katras biļetes izmaksas jāsadala ar visu tās pašas klases biļešu kopējām izmaksām. .
Logu funkcijas R: tidyverse, dplyr
Lai pievienotu jaunas kolonnas, neizmantojot rindu grupēšanu, in dplyr pilda funkciju mutate().
Iepriekš aprakstīto problēmu var atrisināt, grupējot datus pa laukiem Pklase un lauku summēšana jaunā kolonnā Maksa. Pēc tam atgrupējiet tabulu un sadaliet lauku vērtības Maksa uz to, kas notika iepriekšējā solī.
Risinājuma algoritms paliek tāds pats kā šeit dplyr, mums ir jāsadala tabula logos pēc lauka Pklase. Jaunā kolonnā ievadiet katrai rindai atbilstošo grupas summu un pievienojiet kolonnu, kurā mēs aprēķinām katras biļetes izmaksu daļu savā grupā.
Lai pievienotu jaunas kolonnas data.table operators klāt :=. Tālāk ir sniegts piemērs problēmas risināšanai, izmantojot paketi data.table
Logu funkcijas R: data.table
titanic[,c("Pclass_cost","ticket_fare_rate") := .(sum(Fare), Fare / Pclass_cost),
by = Pclass]
Logu funkcijas Python: pandas
Viens veids, kā pievienot jaunu kolonnu pandas - izmantojiet funkciju assign(). Lai apkopotu biļešu izmaksas pēc kajītes klasēm, negrupējot rindas, izmantosim funkciju transform().
Zemāk ir risinājuma piemērs, kuru pievienojam tabulai titānisks tās pašas 2 kolonnas.
Logu pamatfunkcijas un aprēķināto kolonnu pievienošana group_by() + mutate()
arguments j izmantojot operatoru := + arguments by transform() + assign()
Secinājums
Iespējams, rakstā es aprakstīju ne optimālākos datu apstrādes variantus, tāpēc priecāšos, ja komentāros izlabosit manas kļūdas vai vienkārši papildināsiet rakstā sniegto informāciju ar citiem paņēmieniem darbam ar datiem R / Python.
Kā jau rakstīju iepriekš, raksta mērķis nebija uzspiest savu viedokli par to, kura valoda ir labāka, bet gan vienkāršot iespēju apgūt abas valodas vai, ja nepieciešams, migrēt starp tām.
Ja jums patika raksts, es priecāšos, ja man būs jauni abonenti youtube и telegramma kanāliem.
Опрос
Kuru no tālāk norādītajām pakotnēm jūs izmantojat savā darbā?
Komentāros varat ierakstīt savas izvēles iemeslu.
Aptaujā var piedalīties tikai reģistrēti lietotāji. Ielogoties, lūdzu.
Kuru datu apstrādes pakotni izmantojat (var izvēlēties vairākas iespējas)