ProHoster > Dienoraštis > Administravimas > Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal
Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal
Internete ieškodami R ar Python, rasite milijonus straipsnių ir kilometrų diskusijų tema, kuris geresnis, greitesnis ir patogesnis darbui su duomenimis. Deja, visi šie straipsniai ir ginčai nėra ypač naudingi.
Šio straipsnio tikslas – palyginti pagrindinius duomenų apdorojimo būdus populiariausiuose abiejų kalbų paketuose. Ir padėti skaitytojams greitai įsisavinti tai, ko jie dar nežino. Tie, kurie rašo Python, sužinokite, kaip tą patį padaryti R ir atvirkščiai.
Straipsnio metu analizuosime populiariausių R paketų sintaksę. Tai yra bibliotekoje esantys paketai tidyverseir taip pat pakuotė data.table. Ir palyginkite jų sintaksę su pandas, populiariausias Python duomenų analizės paketas.
Žingsnis po žingsnio eisime per visą duomenų analizės kelią nuo jų įkėlimo iki analitinio lango funkcijų atlikimo naudojant Python ir R.
Turinys
Šis straipsnis gali būti naudojamas kaip sukčiavimo lapas, jei pamiršote, kaip viename iš nagrinėjamų paketų atlikti tam tikrą duomenų apdorojimo operaciją.
Jei jus domina duomenų analizė, galite rasti mano telegrama и "YouTube" kanalai. Didžioji dalis turinio skirta R kalbai.
Pagrindiniai sintaksės skirtumai tarp R ir Python
Kad jums būtų lengviau pereiti iš Python į R arba atvirkščiai, pateiksiu keletą pagrindinių dalykų, į kuriuos turite atkreipti dėmesį.
Prieiga prie paketo funkcijų
Kai paketas įkeliamas į R, jums nereikia nurodyti paketo pavadinimo, kad galėtumėte pasiekti jo funkcijas. Daugeliu atvejų tai nėra įprasta R, bet tai priimtina. Jums visai nereikia importuoti paketo, jei kode reikia vienos iš jo funkcijų, o tiesiog ją iškviesti nurodant paketo pavadinimą ir funkcijos pavadinimą. Skirtiklis tarp paketo ir funkcijų pavadinimų R yra dvigubas dvitaškis. package_name::function_name().
Priešingai, „Python“ yra laikoma klasika iškviesti paketo funkcijas aiškiai nurodant jo pavadinimą. Kai paketas atsisiunčiamas, jam dažniausiai suteikiamas sutrumpintas pavadinimas, pvz. pandas dažniausiai naudojamas pseudonimas pd. Paketo funkcija pasiekiama per tašką package_name.function_name().
Užduotis
R kalboje įprasta naudoti rodyklę, kad objektui priskirtumėte vertę. obj_name <- value, nors vienas lygybės ženklas yra leidžiamas, vienas lygybės ženklas R pirmiausia naudojamas reikšmėms perduoti funkcijos argumentams.
Python priskyrimas atliekamas tik naudojant vieną lygybės ženklą obj_name = value.
Indeksavimas
Čia taip pat yra gana didelių skirtumų. R indeksavimas prasideda nuo vieno ir apima visus nurodytus elementus gautame diapazone,
Python sistemoje indeksavimas prasideda nuo nulio, o pasirinktame diapazone nėra paskutinio indekse nurodyto elemento. Taigi dizainas x[i:j] Python neapims j elemento.
Taip pat skiriasi neigiamas indeksavimas, R žymėjimas x[-1] grąžins visus vektoriaus elementus, išskyrus paskutinį. Python programoje panašus žymėjimas grąžins tik paskutinį elementą.
Metodai ir OOP
R įgyvendina OOP savaip, apie tai rašiau straipsnyje "OOP R kalba (1 dalis): S3 klasės". Apskritai R yra funkcinė kalba, ir viskas joje yra pagrįsta funkcijomis. Todėl, pavyzdžiui, „Excel“ naudotojams eikite į tydiverse bus lengviau nei pandas. Nors tai gali būti mano subjektyvi nuomonė.
Trumpai tariant, R objektai neturi metodų (jei kalbame apie S3 klases, bet yra ir kitų OOP diegimų, kurie yra daug rečiau paplitę). Yra tik apibendrintos funkcijos, kurios jas apdoroja skirtingai, priklausomai nuo objekto klasės.
Vamzdynai
Galbūt tai yra pavadinimas pandas Tai nebus visiškai teisinga, bet pabandysiu paaiškinti prasmę.
Kad netaupytumėte tarpinių skaičiavimų ir darbo aplinkoje neatsirastų nereikalingų objektų, galite naudoti savotišką dujotiekį. Tie. perduoti skaičiavimo rezultatą iš vienos funkcijos į kitą ir neišsaugoti tarpinių rezultatų.
Paimkime šį kodo pavyzdį, kuriame tarpinius skaičiavimus saugome atskiruose objektuose:
Taigi mes priimame darbo rezultatą func1() ir perduokite jį kaip pirmąjį argumentą func2(), tada šio skaičiavimo rezultatą perduodame kaip pirmąjį argumentą func3(). Ir galiausiai visus atliktus skaičiavimus įrašome į objektą obj <-.
Visa tai, kas išdėstyta aukščiau, geriau nei žodžiai iliustruoja šis memas:
Kiekviename laužtiniuose skliaustuose galite naudoti ankstesnės operacijos rezultatą.
В pandas tokios operacijos atskirtos tašku.
obj = df.fun1().fun2().fun3()
Tie. paimame savo staliuką df ir naudoti jos metodą fun1(), tada gautam rezultatui taikome metodą fun2()po fun3(). Gautas rezultatas išsaugomas objekte Objektas .
Duomenų struktūros
Duomenų struktūros R ir Python yra panašios, tačiau turi skirtingus pavadinimus.
aprašymas
Vardas R
Pavadinimas Python / pandas
Lentelės struktūra
data.frame, data.table, tibble
DataFrame
Vienmatis vertybių sąrašas
Vektorius
Serija pandomis arba sąrašas grynu Python
Daugiapakopė ne lentelinė struktūra
Sąrašas
Žodynas (diktas)
Toliau apžvelgsime kai kurias kitas sintaksės ypatybes ir skirtumus.
Keletas žodžių apie pakuotes, kurias naudosime
Pirmiausia šiek tiek papasakosiu apie paketus, su kuriais susipažinsite šiame straipsnyje.
tvarkinga visata
Официальный сайт: tidyverse.org
biblioteka tidyverse parašė Hedley Wickham, RStudio vyresnioji mokslo darbuotoja. tidyverse susideda iš įspūdingo paketų rinkinio, kuris supaprastina duomenų apdorojimą, iš kurių 5 yra įtraukti į 10 geriausių atsisiuntimų iš CRAN saugyklos.
Bibliotekos branduolį sudaro šie paketai: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Kiekvienas iš šių paketų yra skirtas konkrečiai problemai išspręsti. Pavyzdžiui dplyr sukurtas duomenų apdorojimui, tidyr kad duomenys būtų tvarkingi, stringr supaprastina darbą su stygomis ir ggplot2 yra vienas iš populiariausių duomenų vizualizavimo įrankių.
Privalumas tidyverse yra paprastumas ir lengvai skaitoma sintaksė, kuri daugeliu atžvilgių panaši į SQL užklausų kalbą.
Paketo sintaksė nėra tokia patogi kaip tidyverse ir labiau primena klasikinius duomenų rėmelius R, bet tuo pačiu žymiai išplėstas funkcionalumas.
Visos manipuliacijos su lentele šiame pakete aprašytos laužtiniuose skliaustuose, o jei verčiate sintaksę data.table SQL, jūs gaunate kažką panašaus į tai: data.table[ WHERE, SELECT, GROUP BY ]
Šio paketo privalumas – didelio duomenų kiekio apdorojimo greitis.
Bibliotekos pavadinimas kilęs iš ekonometrinio termino „paneliniai duomenys“, vartojamo daugiamačiams struktūrizuotiems informacijos rinkiniams apibūdinti.
Autorius pandas yra amerikietis Wesas McKinney.
Kalbant apie duomenų analizę Python, lygi pandas Nr. Labai daugiafunkcinis, aukšto lygio paketas, leidžiantis atlikti bet kokias manipuliacijas su duomenimis – nuo duomenų įkėlimo iš bet kokių šaltinių iki jų vizualizavimo.
Papildomų paketų diegimas
Šiame straipsnyje aptariami paketai nėra įtraukti į pagrindinį R ir Python paskirstymą. Nors yra nedidelis įspėjimas, jei įdiegėte „Anaconda“ paskirstymą, įdiekite papildomai pandas nereikalaujama.
Paketų diegimas R
Jei bent kartą atidarėte RStudio kūrimo aplinką, tikriausiai jau žinote, kaip įdiegti reikiamą paketą R. Norėdami įdiegti paketus, naudokite standartinę komandą install.packages() paleisdami jį tiesiogiai pačiame R.
# установка пакетов
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")
Po įdiegimo reikia sujungti paketus, kuriems dažniausiai naudojama komanda library().
# подключение или импорт пакетов в рабочее окружение
library(vroom)
library(readr)
library(dplyr)
library(data.table)
Paketų diegimas Python
Taigi, jei turite įdiegtą gryną Python, tada pandas jį reikia įdiegti rankiniu būdu. Atidarykite komandų eilutę arba terminalą, priklausomai nuo operacinės sistemos, ir įveskite šią komandą.
pip install pandas
Tada grįžtame į Python ir importuojame įdiegtą paketą su komanda import.
import pandas as pd
Įkeliami duomenys
Duomenų gavyba yra vienas iš svarbiausių duomenų analizės žingsnių. Tiek Python, tiek R, jei pageidaujate, suteikia plačias galimybes gauti duomenis iš bet kokių šaltinių: vietinių failų, failų iš interneto, svetainių, visų rūšių duomenų bazių.
Straipsnyje naudosime kelis duomenų rinkinius:
Du atsisiuntimai iš Google Analytics.
Titaniko keleivių duomenų rinkinys.
Visi duomenys yra mano GitHub csv ir tsv failų pavidalu. Iš kur mes jų prašysime?
Duomenų įkėlimas į R: tidyverse, vroom, readr
Norėdami įkelti duomenis į biblioteką tidyverse Yra du paketai: vroom, readr. vroom modernesnis, tačiau ateityje paketai gali būti derinami.
vroom prieš skaitytoją
Ką reiškia išleidimas vroom reiškia už readr? Šiuo metu planuojame leisti abiem paketams vystytis atskirai, tačiau tikėtina, kad ateityje paketus sujungsime. Vienas iš „vroom“ tingaus skaitymo trūkumų yra tas, kad tam tikrų duomenų problemų negalima pranešti iš anksto, todėl reikia šiek tiek pagalvoti, kaip geriausiai jas suvienodinti.
vroom prieš skaitytoją
Ką reiškia paleidimas? vroom už readr? Šiuo metu abu paketus planuojame vystyti atskirai, tačiau ateityje tikriausiai juos derinsime. Vienas iš tinginio skaitymo trūkumų vroom yra tai, kad kai kurių duomenų problemų negalima pranešti iš anksto, todėl reikia pagalvoti, kaip geriausia jas sujungti.
Šiame straipsnyje apžvelgsime abu duomenų įkėlimo paketus:
Pakuotėje vroom, neatsižvelgiant į csv / tsv duomenų formatą, įkėlimas atliekamas naudojant to paties pavadinimo funkciją vroom(), pakuotėje readr kiekvienam formatui naudojame skirtingą funkciją read_tsv() и read_csv().
Duomenų įkėlimas į R: data.table
В data.table yra duomenų įkėlimo funkcija fread().
Jei palyginsime su R paketais, tai šiuo atveju sintaksė yra artimiausia pandas valia readr, nes pandas gali prašyti duomenų iš bet kurios vietos, o šiame pakete yra visa eilė funkcijų read_*().
read_csv()
read_excel()
read_sql()
read_json()
read_html()
Ir daug kitų funkcijų, skirtų duomenims iš įvairių formatų nuskaityti. Bet mūsų tikslams to pakanka read_table() arba read_csv() naudojant argumentą rugsėjis norėdami nurodyti stulpelių skyriklį.
В pandas Rėmeliai kuriami keliais etapais, pirmiausia sukuriame žodyną, o tada žodyną konvertuojame į duomenų rėmelį.
Duomenų rėmelio kūrimas Python: pandos
# создаём дата фрейм
gender_dict = {'id': [1, 2],
'gender': ["female", "male"]}
# преобразуем словарь в датафрейм
gender = pd.DataFrame.from_dict(gender_dict)
Stulpelių pasirinkimas
Lentelėse, su kuriomis dirbate, gali būti dešimtys ar net šimtai duomenų stulpelių. Tačiau norint atlikti analizę, paprastai nereikia visų šaltinio lentelėje esančių stulpelių.
Todėl viena iš pirmųjų operacijų, kurią atliksite su šaltinio lentele, yra išvalyti ją nuo nereikalingos informacijos ir atlaisvinti šios informacijos užimamą atmintį.
Stulpelių pasirinkimas R: tidyverse, dplyr
sintaksė dplyr yra labai panaši į SQL užklausų kalbą, jei esate su ja susipažinę, greitai įsisavinsite šį paketą.
Norėdami pasirinkti stulpelius, naudokite funkciją select().
Toliau pateikiami kodo, kurį naudodami galite pasirinkti stulpelius šiais būdais, pavyzdžiai:
Pagal duomenų tipą ar bet kurią kitą stulpelyje esančių duomenų savybę
Stulpelių pasirinkimas 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)
Stulpelių pasirinkimas R: data.table
Tos pačios operacijos ir data.table atliekami šiek tiek kitaip, straipsnio pradžioje pateikiau aprašymą, kokie argumentai yra laužtiniuose skliaustuose data.table.
DT[i,j,by]
Kur:
aš – kur, t.y. filtravimas pagal eilutes
j – pasirinkti|atnaujinti|daryti, t.y. stulpelių parinkimas ir jų konvertavimas
pagal – duomenų grupavimą
Kintamas .SD leidžia pasiekti visus stulpelius ir .SDcols filtruoti reikiamus stulpelius naudodami reguliariąsias išraiškas arba kitas funkcijas, kad filtruotumėte reikiamų stulpelių pavadinimus.
Stulpelių pasirinkimas Python, pandos
Norėdami pasirinkti stulpelius pagal pavadinimą pandas pakanka pateikti jų vardų sąrašą. O norėdami pasirinkti arba išskirti stulpelius pagal pavadinimą naudodami reguliariąsias išraiškas, turite naudoti funkcijas drop() и filter(), ir argumentas ašis = 1, kuriuo nurodote, kad reikia apdoroti stulpelius, o ne eilutes.
Norėdami pasirinkti lauką pagal duomenų tipą, naudokite funkciją select_dtypes(), ir į argumentus įtraukti arba išskirti perduoti duomenų tipų sąrašą, atitinkantį tuos laukus, kuriuos reikia pasirinkti.
Stulpelių pasirinkimas Python: pandos
# Выбор полей по названию
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'])
Eilučių filtravimas
Pavyzdžiui, šaltinio lentelėje gali būti kelių metų duomenys, tačiau reikia išanalizuoti tik paskutinį mėnesį. Vėlgi, papildomos eilutės sulėtins duomenų apdorojimo procesą ir užkimš kompiuterio atmintį.
Filtravimo eilutės R: tydyverse, dplyr
В dplyr funkcija naudojama eilutėms filtruoti filter(). Pirmuoju argumentu naudojamas duomenų rėmelis, tada pateikiate filtravimo sąlygas.
Rašydami logines išraiškas, kad filtruotumėte lentelę, šiuo atveju nurodykite stulpelių pavadinimus be kabučių ir nedeklaruodami lentelės pavadinimo.
Kai filtruoti naudojate kelias logines išraiškas, naudokite šiuos operatorius:
& arba kablelis – loginis AND
| - loginis ARBA
Eilučių filtravimas R: dplyr
# фильтрация строк
## dplyr
### фильтрация строк по одному условию
filter(ga_nov, source == "google")
### фильтр по двум условиям соединённым логическим и
filter(ga_nov, source == "google" & sessions >= 10)
### фильтр по двум условиям соединённым логическим или
filter(ga_nov, source == "google" | sessions >= 10)
Eilučių filtravimas R: data.table
Kaip jau rašiau aukščiau, in data.table duomenų konvertavimo sintaksė yra laužtiniuose skliaustuose.
DT[i,j,by]
Kur:
aš – kur, t.y. filtravimas pagal eilutes
j – pasirinkti|atnaujinti|daryti, t.y. stulpelių parinkimas ir jų konvertavimas
pagal – duomenų grupavimą
Argumentas naudojamas eilutėms filtruoti i, kurio pirmoji pozicija yra laužtiniuose skliaustuose.
Stulpeliai pasiekiami loginėmis išraiškomis be kabučių ir nenurodant lentelės pavadinimo.
Loginės išraiškos yra susijusios viena su kita taip pat, kaip ir dplyr per & ir | operatorius.
Eilučių filtravimas R: data.table
## data.table
### фильтрация строк по одному условию
ga_nov[source == "google"]
### фильтр по двум условиям соединённым логическим и
ga_nov[source == "google" & sessions >= 10]
### фильтр по двум условиям соединённым логическим или
ga_nov[source == "google" | sessions >= 10]
Eilučių filtravimas Python: pandos
Filtruoti pagal eilutes pandas panašus į filtravimą data.table, ir daroma laužtiniuose skliaustuose.
Tokiu atveju prieiga prie stulpelių būtinai vykdoma nurodant duomenų rėmelio pavadinimą; tada stulpelio pavadinimą taip pat galima nurodyti kabutėse laužtiniuose skliaustuose (pavyzdysdf['col_name']), arba be kabučių po taško (pavyzdysdf.col_name).
Jei reikia filtruoti duomenų rėmelį pagal kelias sąlygas, kiekviena sąlyga turi būti dedama skliausteliuose. Logines sąlygas tarpusavyje susieja operatoriai & и |.
Eilučių filtravimas Python: pandos
# Фильтрация строк таблицы
### фильтрация строк по одному условию
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)]
Duomenų grupavimas ir agregavimas
Viena iš dažniausiai duomenų analizės operacijų yra grupavimas ir agregavimas.
Šių operacijų sintaksė yra išsklaidyta visuose mūsų peržiūrimuose paketuose.
Šiuo atveju kaip pavyzdį paimsime duomenų rėmelį titaniškas, ir apskaičiuokite bilietų skaičių bei vidutinę kainą, priklausomai nuo salono klasės.
Duomenų grupavimas ir agregavimas R: tidyverse, dplyr
В dplyr funkcija naudojama grupavimui group_by(), ir agregacijai summarise(). Faktiškai, dplyr yra visa funkcijų šeima summarise_*(), tačiau šio straipsnio tikslas yra palyginti pagrindinę sintaksę, todėl į tokias džiungles nesileisime.
Funkcijoje group_by() mes praėjome lentelę kaip pirmąjį argumentą titaniškas, tada nurodė lauką Pklasė, pagal kurį sugrupuosime savo lentelę. Šios operacijos rezultatas naudojant operatorių %>% perduotas kaip pirmasis funkcijos argumentas summarise()ir pridėjo dar 2 laukus: keleiviai и vid._kaina. Pirmajame, naudojant funkciją length() apskaičiavo bilietų skaičių, o antrajame naudodamas funkciją mean() gavo vidutinę bilieto kainą.
Duomenų grupavimas ir agregavimas R: duomenys.lentelė
В data.table argumentas naudojamas agregacijai j kuri turi antrą poziciją laužtiniuose skliaustuose, ir grupavimui by arba keyby, kurie užima trečią vietą.
Sumavimo funkcijų sąrašas šiuo atveju yra identiškas aprašytajam dplyr, nes tai funkcijos iš pagrindinės R sintaksės.
Grupavimas ir agregavimas R: duomenys.lentelė
## data.table
### фильтрация строк по одному условию
titanic[, .(passangers = length(PassengerId),
avg_price = mean(Fare)),
by = Pclass]
Duomenų grupavimas ir kaupimas Python: pandos
Grupavimas pandas panašus į dplyr, bet agregacija nepanaši į dplyr Neprijungtas data.table.
Norėdami grupuoti, naudokite metodą groupby(), į kurį reikia perduoti stulpelių, pagal kuriuos bus sugrupuotas duomenų rėmelis, sąrašą.
Sumavimui galite naudoti metodą agg()kuri priima žodyną. Žodyno raktai yra stulpeliai, kuriuose taikysite agregavimo funkcijas, o reikšmės yra agregavimo funkcijų pavadinimai.
Agregavimo funkcijos:
sum() - sumavimas
min() / max() – mažiausia ir didžiausia vertė
mean() - vidutinis
median() - mediana
count() - kiekis
Funkcija reset_index() toliau pateiktame pavyzdyje jis naudojamas norint iš naujo nustatyti įdėtuosius indeksus pandas numatytasis po duomenų sujungimo.
Simbolis leidžia pereiti į kitą eilutę.
Grupavimas ir agregavimas Python: pandos
# группировка и агрегация данных
titanic.groupby(["Pclass"]).
agg({'PassengerId': 'count', 'Fare': 'mean'}).
reset_index()
Vertikalus lentelių sujungimas
Operacija, kurios metu sujungiate dvi ar daugiau tos pačios struktūros lentelių. Įkeltuose duomenyse yra lentelės ga_nov и ga_dec. Šios lentelės savo struktūra yra identiškos, t.y. turi tuos pačius stulpelius ir duomenų tipus šiuose stulpeliuose.
Tai lapkričio ir gruodžio mėnesio įkėlimas iš Google Analytics. Šioje skiltyje šiuos duomenis sujungsime į vieną lentelę.
В dplyr Naudodami funkciją galite sujungti 2 lenteles į vieną bind_rows(), pateikiant lenteles kaip argumentus.
Eilučių filtravimas R: dplyr
# Вертикальное объединение таблиц
## dplyr
bind_rows(ga_nov, ga_dec)
Vertikaliai sujungiamos lentelės R: data.table
Tai taip pat nieko sudėtinga, naudokimės rbind().
Eilučių filtravimas R: data.table
## data.table
rbind(ga_nov, ga_dec)
Vertikaliai sujungtos lentelės Python: pandos
В pandas funkcija naudojama lentelėms sujungti concat(), į kurį reikia perduoti kadrų sąrašą, kad juos sujungtumėte.
Eilučių filtravimas Python: pandos
# вертикальное объединение таблиц
pd.concat([ga_nov, ga_dec])
Horizontalus lentelių sujungimas
Operacija, kai stulpeliai iš antrojo pridedami prie pirmosios lentelės pagal raktą. Jis dažnai naudojamas papildant faktų lentelę (pavyzdžiui, lentelę su pardavimo duomenimis) kai kuriais referenciniais duomenimis (pavyzdžiui, produkto kaina).
Yra keletas sujungimų tipų:
Anksčiau įkeltoje lentelėje titaniškas turime koloną seksas, kuris atitinka keleivio lyties kodą:
1 - moteris
2 - vyras
Taip pat sukūrėme lentelę – žinyną lytis. Kad būtų patogiau pateikti duomenis apie keleivių lytį, turime įtraukti lyties pavadinimą iš katalogo lytis prie stalo titaniškas.
Horizontalus stalo sujungimas R: tidyverse, dplyr
В dplyr Horizontaliam sujungimui yra visa eilė funkcijų:
inner_join()
left_join()
right_join()
full_join()
semi_join()
nest_join()
anti_join()
Mano praktikoje dažniausiai naudojamas left_join().
Kaip pirmieji du argumentai, aukščiau išvardytos funkcijos turi sujungti dvi lenteles, o trečiasis argumentas by turite nurodyti stulpelius, kuriuos norite sujungti.
Horizontalus stalo sujungimas R: dplyr
# объединяем таблицы
left_join(titanic, gender,
by = c("Sex" = "id"))
Horizontalus lentelių sujungimas R: data.table
В data.table Lenteles reikia sujungti raktu, naudojant funkciją merge().
Argumentai merge() funkcijai data.table
x, y – sujungimo lentelės
by – stulpelis, kuris yra sujungimo raktas, jei jis turi tą patį pavadinimą abiejose lentelėse
by.x, by.y – sujungiami stulpelių pavadinimai, jei lentelėse jų pavadinimai skiriasi
all, all.x, all.y — sujungimo tipas, visi grąžins visas abiejų lentelių eilutes, all.x atitinka LEFT JOIN operaciją (paliks visas pirmosios lentelės eilutes), all.y — atitinka RIGHT JOIN operacija (liks visos antrosios lentelės eilutės).
Taip pat ir viduje data.tableĮ pandas funkcija naudojama lentelėms sujungti merge().
Funkcijos merge() argumentai pandose
kaip — Ryšio tipas: kairė, dešinė, išorinė, vidinė
on – stulpelis, kuris yra raktas, jei jis turi tą patį pavadinimą abiejose lentelėse
left_on, right_on – pagrindinių stulpelių pavadinimai, jei jie skiriasi lentelėse
Horizontalus stalo sujungimas Python: pandos
# объединяем по ключу
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")
Pagrindinės lango funkcijos ir skaičiuojami stulpeliai
Langų funkcijos yra panašios į agregavimo funkcijas, taip pat dažnai naudojamos duomenų analizei. Tačiau skirtingai nei agregavimo funkcijos, lango funkcijos nekeičia siunčiamo duomenų rėmelio eilučių skaičiaus.
Iš esmės, naudodami lango funkciją, gaunamą duomenų rėmelį skaidome į dalis pagal kažkokį kriterijų, t.y. pagal lauko ar kelių laukų vertę. Ir kiekviename lange atliekame aritmetines operacijas. Kiekvienoje eilutėje bus grąžintas šių operacijų rezultatas, t.y. nekeičiant bendro lentelės eilučių skaičiaus.
Pavyzdžiui, paimkime lentelę titaniškas. Galime apskaičiuoti, kiek procentų kainavo kiekvienas bilietas jo salono klasėje.
Norėdami tai padaryti, kiekvienoje eilutėje turime gauti bendrą bilieto kainą dabartinei kajutės klasei, kuriai priklauso šios eilutės bilietas, tada padalinti kiekvieno bilieto kainą iš visų tos pačios klasės bilietų kainos. .
Lango funkcijos R: tidyverse, dplyr
Norėdami pridėti naujų stulpelių, nenaudodami eilučių grupavimo, į dplyr atlieka funkciją mutate().
Aukščiau aprašytą problemą galite išspręsti sugrupuodami duomenis pagal laukus Pklasė ir susumuojant lauką naujame stulpelyje Bilietas. Tada išgrupuokite lentelę ir padalinkite lauko reikšmes Bilietas į tai, kas nutiko ankstesniame žingsnyje.
Sprendimo algoritmas išlieka toks pat kaip ir dplyr, turime padalinti lentelę į langus pagal laukus Pklasė. Naujame stulpelyje išveskite sumą, skirtą grupei, atitinkančią kiekvieną eilutę, ir pridėkite stulpelį, kuriame apskaičiuojame kiekvieno bilieto kainos dalį jo grupėje.
Norėdami pridėti naujų stulpelių data.table dalyvauja operatorius :=. Žemiau pateikiamas problemos sprendimo naudojant paketą pavyzdys data.table
Lango funkcijos R: data.table
titanic[,c("Pclass_cost","ticket_fare_rate") := .(sum(Fare), Fare / Pclass_cost),
by = Pclass]
Python lango funkcijos: pandos
Vienas iš būdų pridėti naują stulpelį pandas - naudokite funkciją assign(). Norėdami apibendrinti bilietų kainą pagal kajutės klases, negrupuodami eilučių, naudosime funkciją transform().
Žemiau pateikiamas sprendimo, kurį įtraukiame į lentelę, pavyzdys titaniškas tos pačios 2 stulpeliai.
Pagrindinės lango funkcijos ir apskaičiuotų stulpelių pridėjimas group_by() + mutate()
argumentas j naudojant operatorių := + argumentas by transform() + assign()
išvada
Galbūt straipsnyje aprašiau ne pačius optimaliausius duomenų apdorojimo būdus, todėl džiaugsiuosi, jei komentaruose ištaisysite mano klaidas arba tiesiog papildysite straipsnyje pateiktą informaciją kitais būdais, kaip dirbti su duomenimis R / Python.
Kaip rašiau aukščiau, straipsnio tikslas buvo ne primesti savo nuomonę, kuri kalba yra geresnė, o supaprastinti galimybę išmokti abi kalbas arba, jei reikia, migruoti tarp jų.
Jei jums patiko straipsnis, mielai turėsiu naujų mano prenumeratorių "YouTube" и telegrama kanalai.
Опрос
Kuriuos iš šių paketų naudojate savo darbe?
Komentaruose galite parašyti savo pasirinkimo priežastį.
Apklausoje gali dalyvauti tik registruoti vartotojai. Prisijungti, Prašau.
Kokį duomenų apdorojimo paketą naudojate (galite pasirinkti keletą variantų)