ProHoster > Блог > Administracija > Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad
Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad
Pretražujući R ili Python na Internetu, pronaći ćete milione članaka i kilometre rasprava na temu koji je bolji, brži i pogodniji za rad s podacima. Ali, nažalost, svi ovi članci i sporovi nisu posebno korisni.
Svrha ovog članka je uporediti osnovne tehnike obrade podataka u najpopularnijim paketima oba jezika. I pomozite čitaocima da brzo savladaju nešto što još ne znaju. Za one koji pišu u Pythonu, saznajte kako to isto učiniti u R-u i obrnuto.
U članku ćemo analizirati sintaksu najpopularnijih paketa u R. Ovo su paketi uključeni u biblioteku tidyversea takođe i paket data.table. I uporedite njihovu sintaksu sa pandas, najpopularniji paket za analizu podataka u Pythonu.
Proći ćemo korak po korak kroz cijeli put analize podataka od učitavanja do izvođenja analitičkih funkcija prozora koristeći Python i R.
Sadržaj
Ovaj članak se može koristiti kao cheat sheet ako ste zaboravili kako izvršiti neku operaciju obrade podataka u jednom od paketa koji se razmatraju.
Ako ste zainteresovani za analizu podataka, možete pronaći moje telegram и youtube kanala. Većina sadržaja je posvećena R jeziku.
Glavne sintaksičke razlike između R i Pythona
Da bih vam olakšao prelazak sa Pythona na R, ili obrnuto, dat ću vam nekoliko glavnih tačaka na koje morate obratiti pažnju.
Pristup funkcijama paketa
Jednom kada se paket učita u R, ne morate specificirati ime paketa da biste pristupili njegovim funkcijama. U većini slučajeva to nije uobičajeno u R, ali je prihvatljivo. Ne morate uopće uvoziti paket ako vam je potrebna neka od njegovih funkcija u vašem kodu, već ga jednostavno pozovite navodeći naziv paketa i naziv funkcije. Razdjelnik između imena paketa i funkcija u R je dvostruka dvotočka. package_name::function_name().
U Pythonu se, naprotiv, smatra klasičnim pozivanje funkcija paketa eksplicitnim navođenjem njegovog imena. Kada se paket preuzme, obično mu se daje skraćeno ime, npr. pandas obično se koristi pseudonim pd. Funkciji paketa se pristupa preko tačke package_name.function_name().
Zadatak
U R-u je uobičajeno koristiti strelicu za dodjelu vrijednosti objektu. obj_name <- value, iako je dozvoljen jedan znak jednakosti, jedan znak jednakosti u R se uglavnom koristi za prosljeđivanje vrijednosti argumentima funkcije.
U Pythonu se dodjela vrši isključivo sa jednim znakom jednakosti obj_name = value.
Indeksiranje
Ovdje također postoje prilično značajne razlike. U R, indeksiranje počinje od jedan i uključuje sve navedene elemente u rezultirajućem rasponu,
U Pythonu indeksiranje počinje od nule i odabrani raspon ne uključuje posljednji element naveden u indeksu. Dakle dizajn x[i:j] u Pythonu neće uključivati j element.
Postoje i razlike u negativnom indeksiranju, u R notaciji x[-1] će vratiti sve elemente vektora osim posljednjeg. U Pythonu, slična notacija će vratiti samo posljednji element.
Metode i OOP
R implementira OOP na svoj način, o tome sam pisao u članku "OOP na jeziku R (1. dio): S3 klase". Općenito, R je funkcionalni jezik i sve je u njemu izgrađeno na funkcijama. Stoga, na primjer, za korisnike programa Excel idite na tydiverse biće lakše nego pandas. Iako je ovo možda moje subjektivno mišljenje.
Ukratko, objekti u R-u nemaju metode (ako govorimo o S3 klasama, ali postoje druge OOP implementacije koje su mnogo manje uobičajene). Postoje samo generalizirane funkcije koje ih različito obrađuju ovisno o klasi objekta.
Cjevovodi
Možda je ovo ime za pandas Neće biti sasvim tačno, ali pokušaću da objasnim značenje.
Kako ne biste spremali posredne proračune i ne proizvodili nepotrebne objekte u radnom okruženju, možete koristiti neku vrstu cjevovoda. One. prenijeti rezultat izračuna s jedne funkcije na drugu i ne pohranjivati međurezultate.
Uzmimo sljedeći primjer koda, gdje pohranjujemo međukalkulacije u odvojenim objektima:
Izveli smo 3 operacije uzastopno, a rezultat svake je sačuvan u zasebnom objektu. Ali u stvari, ovi međuobjekti nam nisu potrebni.
Ili još gore, ali poznatije korisnicima Excel-a.
obj <- func3(func2(func1()))
U ovom slučaju nismo sačuvali međurezultate proračuna, ali je čitanje koda sa ugniježđenim funkcijama izuzetno nezgodno.
Pogledat ćemo nekoliko pristupa obradi podataka u R-u, a oni izvode slične operacije na različite načine.
Cevovodi u biblioteci tidyverse implementiran od strane operatera %>%.
obj <- func1() %>%
func2() %>%
func3()
Tako uzimamo rezultat rada func1() i proslijediti ga kao prvi argument func2(), tada rezultat ovog izračunavanja prosljeđujemo kao prvi argument func3(). I na kraju sve izvršene proračune upisujemo u objekat obj <-.
Sve gore navedeno je bolje od riječi ilustrovano ovim memom:
U svakoj od uglastih zagrada možete koristiti rezultat prethodne operacije.
В pandas takve operacije su odvojene tačkom.
obj = df.fun1().fun2().fun3()
One. uzimamo naš sto df i koristiti njen metod fun1(), zatim primjenjujemo metodu na dobiveni rezultat fun2()posle fun3(). Rezultirajući rezultat se pohranjuje u objekt obj .
Strukture podataka
Strukture podataka u R i Pythonu su slične, ali imaju različita imena.
Opis
Ime u R
Ime u Python/pandas
Struktura tabele
data.frame, data.table, tibble
DataFrame
Jednodimenzionalna lista vrijednosti
Vektor
Serija u pandama ili lista u čistom Pythonu
Višeslojna netabelarna struktura
Lista
Rječnik (dict)
U nastavku ćemo pogledati neke druge karakteristike i razlike u sintaksi.
Nekoliko riječi o paketima koje ćemo koristiti
Prvo ću vam reći nešto o paketima s kojima ćete se upoznati tokom ovog članka.
tidyverse
Službena web stranica: tidyverse.org
biblioteka tidyverse napisao Hedley Wickham, viši istraživač na RStudiu. tidyverse sastoji se od impresivnog skupa paketa koji pojednostavljuju obradu podataka, od kojih je 5 uključeno u prvih 10 preuzimanja iz CRAN repozitorija.
Jezgro biblioteke sastoji se od sljedećih paketa: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Svaki od ovih paketa je usmjeren na rješavanje određenog problema. Na primjer dplyr kreiran za manipulaciju podacima, tidyr da dovede podatke u uredan oblik, stringr pojednostavljuje rad sa stringovima, i ggplot2 je jedan od najpopularnijih alata za vizualizaciju podataka.
Prednost tidyverse je jednostavnost i sintaksa laka za čitanje, koja je na mnogo načina slična SQL jeziku upita.
Sintaksa paketa nije tako zgodna kao u tidyverse i više podsjeća na klasične okvire podataka u R-u, ali je u isto vrijeme značajno proširen u funkcionalnosti.
Sve manipulacije s tablicom u ovom paketu su opisane u uglastim zagradama, a ako prevedete sintaksu data.table u SQL-u dobijate nešto ovako: data.table[ WHERE, SELECT, GROUP BY ]
Prednost ovog paketa je brzina obrade velike količine podataka.
Naziv biblioteke dolazi od ekonometrijskog termina „panel data“, koji se koristi za opisivanje višedimenzionalnih strukturiranih skupova informacija.
By pandas je Amerikanac Wes McKinney.
Kada je u pitanju analiza podataka u Pythonu, jednako pandas br. Vrlo multifunkcionalni paket visokog nivoa koji vam omogućava da izvršite bilo kakvu manipulaciju podacima, od učitavanja podataka iz bilo kojeg izvora do vizualizacije.
Instaliranje dodatnih paketa
Paketi o kojima se govori u ovom članku nisu uključeni u osnovne R i Python distribucije. Iako postoji malo upozorenje, ako ste instalirali distribuciju Anaconda, instalirajte dodatno pandas nije potrebno.
Instaliranje paketa u R
Ako ste barem jednom otvorili razvojno okruženje RStudio, vjerovatno već znate kako da instalirate potreban paket u R. Za instaliranje paketa koristite standardnu naredbu install.packages() pokretanjem direktno u samom R.
# установка пакетов
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")
Nakon instalacije potrebno je povezati pakete, za šta se u većini slučajeva koristi naredba library().
# подключение или импорт пакетов в рабочее окружение
library(vroom)
library(readr)
library(dplyr)
library(data.table)
Instaliranje paketa u Python-u
Dakle, ako imate instaliran čisti Python pandas morate ga ručno instalirati. Otvorite komandnu liniju ili terminal, ovisno o vašem operativnom sistemu i unesite sljedeću naredbu.
pip install pandas
Zatim se vraćamo na Python i naredbom uvozimo instalirani paket import.
import pandas as pd
Učitavanje podataka
Data mining je jedan od najvažnijih koraka u analizi podataka. I Python i R, ako želite, pružaju vam široke mogućnosti za dobivanje podataka iz bilo kojeg izvora: lokalnih datoteka, datoteka s Interneta, web stranica, svih vrsta baza podataka.
U članku ćemo koristiti nekoliko skupova podataka:
Dva preuzimanja sa Google Analytics.
Titanic Passenger Dataset.
Svi podaci su kod mene GitHub u obliku csv i tsv datoteka. Odakle ćemo ih tražiti?
Učitavanje podataka u R: tidyverse, vroom, readr
Za učitavanje podataka u biblioteku tidyverse Postoje dva paketa: vroom, readr. vroom moderniji, ali u budućnosti se paketi mogu kombinovati.
vroom vs reader
Šta znači oslobađanje vroom znači za readr? Za sada planiramo pustiti da se ova dva paketa razvijaju odvojeno, ali vjerovatno ćemo ih ujediniti u budućnosti. Jedna mana vroomovog lijenog čitanja je da se određeni problemi s podacima ne mogu prijaviti unaprijed, pa je potrebno razmisliti o tome kako ih najbolje ujediniti.
vroom vs readr
Šta znači oslobađanje? vroom do readr? Trenutno planiramo da razvijamo oba paketa odvojeno, ali ćemo ih vjerovatno kombinovati u budućnosti. Jedan od nedostataka lijenog čitanja vroom je da se neki problemi s podacima ne mogu unaprijed prijaviti, pa morate razmisliti kako ih najbolje kombinirati.
U ovom članku ćemo pogledati oba paketa za učitavanje podataka:
U paketu vroom, bez obzira na format podataka csv / tsv, učitavanje se vrši pomoću istoimene funkcije vroom(), u paketu readr koristimo drugu funkciju za svaki format read_tsv() и read_csv().
Učitavanje podataka u R: data.table
В data.table postoji funkcija za učitavanje podataka fread().
Ako uporedimo sa R paketima, onda je u ovom slučaju sintaksa najbliža pandas će biti readr, jer pandas može tražiti podatke s bilo kojeg mjesta, a u ovom paketu postoji čitava porodica funkcija read_*().
read_csv()
read_excel()
read_sql()
read_json()
read_html()
I mnoge druge funkcije dizajnirane za čitanje podataka iz različitih formata. Ali za naše potrebe to je dovoljno read_table() ili read_csv() koristeći argument septembar da navedete separator stupaca.
В pandas Kreiranje okvira se odvija u nekoliko faza, prvo kreiramo rječnik, a zatim pretvaramo rječnik u okvir podataka.
Kreiranje okvira podataka u Pythonu: pandas
# создаём дата фрейм
gender_dict = {'id': [1, 2],
'gender': ["female", "male"]}
# преобразуем словарь в датафрейм
gender = pd.DataFrame.from_dict(gender_dict)
Odabir kolone
Tabele s kojima radite mogu sadržavati desetine ili čak stotine stupaca podataka. Ali da biste izvršili analizu, po pravilu, nisu vam potrebne sve kolone koje su dostupne u izvornoj tabeli.
Stoga je jedna od prvih operacija koju ćete izvesti s izvornom tablicom da je očistite od nepotrebnih informacija i oslobodite memoriju koju ove informacije zauzimaju.
Odabir stupaca u R: tidyverse, dplyr
sintaksa dplyr je vrlo sličan SQL jeziku upita, ako ste upoznati s njim, brzo ćete savladati ovaj paket.
Za odabir stupaca koristite funkciju select().
Ispod su primjeri koda pomoću kojih možete odabrati stupce na sljedeće načine:
Navođenje imena potrebnih kolona
Pogledajte nazive kolona koristeći regularne izraze
Po tipu podataka ili bilo kojem drugom svojstvu podataka sadržanih u stupcu
Odabir stupaca u 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)
Odabir stupaca u R: data.table
Iste operacije u data.table se izvode malo drugačije, na početku članka sam dao opis koji su argumenti u uglastim zagradama data.table.
DT[i,j,by]
Gde:
i - gdje, tj. filtriranje po redovima
j - odaberite|ažuriraj|uradi, tj. odabir kolona i njihovo pretvaranje
po - grupisanje podataka
Promjenjivo .SD omogućava vam pristup svim kolonama, i .SDcols filtrirajte potrebne kolone koristeći regularne izraze ili druge funkcije za filtriranje imena kolona koje su vam potrebne.
Odabir kolona u Pythonu, pande
Za odabir stupaca po imenu u pandas dovoljno je dati spisak njihovih imena. A da biste odabrali ili isključili stupce po imenu pomoću regularnih izraza, trebate koristiti funkcije drop() и filter(), i argument axis=1, čime označavate da je potrebno obraditi kolone, a ne redove.
Da biste odabrali polje prema vrsti podataka, koristite funkciju select_dtypes(), i u argumente uključiti ili isključi proslijediti listu tipova podataka koji odgovaraju poljima koja trebate odabrati.
Odabir stupaca u Pythonu: 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'])
Filtriranje redova
Na primjer, izvorna tabela može sadržavati nekoliko godina podataka, ali trebate analizirati samo prošli mjesec. Opet, dodatne linije će usporiti proces obrade podataka i začepiti memoriju računara.
Filtriranje redova u R: tydyverse, dplyr
В dplyr funkcija se koristi za filtriranje redova filter(). Uzima okvir podataka kao prvi argument, a zatim navodite uslove filtriranja.
Prilikom pisanja logičkih izraza za filtriranje tablice, u ovom slučaju navedite nazive stupaca bez navodnika i bez deklariranja imena tablice.
Kada koristite više logičkih izraza za filtriranje, koristite sljedeće operatore:
& ili zarez - logičko I
| - logičko ILI
Filtriranje redova u R: dplyr
# фильтрация строк
## dplyr
### фильтрация строк по одному условию
filter(ga_nov, source == "google")
### фильтр по двум условиям соединённым логическим и
filter(ga_nov, source == "google" & sessions >= 10)
### фильтр по двум условиям соединённым логическим или
filter(ga_nov, source == "google" | sessions >= 10)
Filtriranje redova u R: data.table
Kao što sam već napisao gore, u data.table sintaksa konverzije podataka je zatvorena u uglastim zagradama.
DT[i,j,by]
Gde:
i - gdje, tj. filtriranje po redovima
j - odaberite|ažuriraj|uradi, tj. odabir kolona i njihovo pretvaranje
po - grupisanje podataka
Argument se koristi za filtriranje redova i, koji ima prvu poziciju u uglastim zagradama.
Stupcima se pristupa u logičkim izrazima bez navodnika i bez navođenja imena tabele.
Logički izrazi su međusobno povezani na isti način kao u dplyr preko & i | operatora.
Filtriranje redova u R: data.table
## data.table
### фильтрация строк по одному условию
ga_nov[source == "google"]
### фильтр по двум условиям соединённым логическим и
ga_nov[source == "google" & sessions >= 10]
### фильтр по двум условиям соединённым логическим или
ga_nov[source == "google" | sessions >= 10]
Filtriranje stringova u Pythonu: pandas
Filtrirajte po redovima pandas slično filtriranju data.table, a radi se u uglastim zagradama.
U ovom slučaju, pristup stupcima se vrši obavezno navođenjem naziva okvira podataka; tada se naziv kolone može navesti i pod navodnicima u uglastim zagradama (primerdf['col_name']), ili bez navodnika nakon tačke (primerdf.col_name).
Ako treba da filtrirate okvir podataka prema nekoliko uslova, svaki uslov mora biti stavljen u zagrade. Logički uslovi su međusobno povezani preko operatora & и |.
Filtriranje stringova u Pythonu: 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)]
Grupisanje i agregacija podataka
Jedna od najčešće korišćenih operacija u analizi podataka je grupisanje i agregacija.
Sintaksa za izvođenje ovih operacija je raštrkana po svim paketima koje pregledavamo.
U ovom slučaju, uzet ćemo okvir podataka kao primjer Titanik, te izračunati broj i prosječnu cijenu karata u zavisnosti od klase kabine.
Grupiranje i agregacija podataka u R: tidyverse, dplyr
В dplyr funkcija se koristi za grupisanje group_by(), i za agregaciju summarise(). Zapravo, dplyr postoji čitava porodica funkcija summarise_*(), ali svrha ovog članka je uporediti osnovnu sintaksu, tako da nećemo ulaziti u takvu džunglu.
Da funkcioniše group_by() proslijedili smo tabelu kao prvi argument Titanik, a zatim označio polje Pclass, po kojem ćemo grupisati našu tabelu. Rezultat ove operacije pomoću operatora %>% proslijeđen kao prvi argument funkciji summarise(), i dodala još 2 polja: putnika и avg_price. U prvom, koristeći funkciju length() izračunati broj ulaznica, au drugom koristeći funkciju mean() dobio prosječnu cijenu karte.
Grupiranje i agregiranje podataka u R: data.table
В data.table argument se koristi za agregaciju j koji ima drugu poziciju u uglastim zagradama, a za grupisanje by ili keyby, koji zauzimaju treću poziciju.
Lista funkcija agregacije u ovom slučaju je identična onoj opisanoj u dplyr, jer ovo su funkcije iz osnovne R sintakse.
Grupisanje i agregacija u R: data.table
## data.table
### фильтрация строк по одному условию
titanic[, .(passangers = length(PassengerId),
avg_price = mean(Fare)),
by = Pclass]
Grupisanje i agregacija podataka u Pythonu: pande
Grupisanje u pandas slicno dplyr, ali združivanje nije slično dplyr nije uključeno data.table.
Za grupisanje koristite metodu groupby(), u koji treba da prosledite listu kolona po kojima će okvir podataka biti grupisan.
Za agregaciju možete koristiti metodu agg()koji prihvata rečnik. Ključevi rječnika su stupci na koje ćete primijeniti funkcije agregacije, a vrijednosti su nazivi funkcija agregacije.
Funkcije agregacije:
sum() — sumiranje
min() / max() – minimalna i maksimalna vrijednost
mean() - prosek
median() — medijana
count() - količina
funkcija reset_index() u primjeru ispod koristi se za resetiranje ugniježđenih indeksa koji pandas zadana vrijednost nakon agregiranja podataka.
Simbol omogućava vam da pređete na sledeći red.
Grupisanje i agregacija u Pythonu: pande
# группировка и агрегация данных
titanic.groupby(["Pclass"]).
agg({'PassengerId': 'count', 'Fare': 'mean'}).
reset_index()
Vertikalni spoj stolova
Operacija u kojoj spajate dvije ili više tablica iste strukture. Podaci koje smo učitali sadrže tabele ga_nov и ga_dec. Ove tabele su identične strukture, tj. imaju iste kolone i tipove podataka u tim kolonama.
Ovo je otpremanje iz Google analitike za mjesec novembar i decembar, u ovom dijelu ćemo ove podatke kombinovati u jednu tabelu.
Vertikalno spajanje tablica u R: tidyverse, dplyr
В dplyr Pomoću funkcije možete kombinirati 2 tablice u jednu bind_rows(), prenoseći tabele kao svoje argumente.
Filtriranje redova u R: dplyr
# Вертикальное объединение таблиц
## dplyr
bind_rows(ga_nov, ga_dec)
Vertikalno spajanje tablica u R: data.table
Takođe nije ništa komplikovano, hajde da koristimo rbind().
Filtriranje redova u R: data.table
## data.table
rbind(ga_nov, ga_dec)
Vertikalno spajanje tablica u Pythonu: pande
В pandas funkcija se koristi za spajanje tabela concat(), u koji trebate proći listu okvira da biste ih kombinirali.
Filtriranje stringova u Pythonu: pandas
# вертикальное объединение таблиц
pd.concat([ga_nov, ga_dec])
Horizontalno spajanje stolova
Operacija u kojoj se stupci iz druge dodaju prvoj tablici pomoću ključa. Često se koristi kada se obogaćuje tabela činjenica (na primjer, tabela s podacima o prodaji) nekim referentnim podacima (na primjer, trošak proizvoda).
Postoji nekoliko vrsta spojeva:
U prethodno učitanoj tabeli Titanik imamo kolonu seks, što odgovara kodu spola putnika:
1 - žensko
2 - muško
Takođe, kreirali smo tabelu – priručnik pol. Za što praktičniji prikaz podataka o spolu putnika, potrebno je dodati naziv spola iz imenika pol do stola Titanik.
Horizontalno spajanje tablice u R: tidyverse, dplyr
В dplyr Postoji čitava porodica funkcija za horizontalno spajanje:
inner_join()
left_join()
right_join()
full_join()
semi_join()
nest_join()
anti_join()
Najčešći u mojoj praksi je left_join().
Kao prva dva argumenta, gore navedene funkcije uzimaju dvije tablice za spajanje i kao treći argument by morate navesti kolone za spajanje.
Horizontalno spajanje tablice u R: dplyr
# объединяем таблицы
left_join(titanic, gender,
by = c("Sex" = "id"))
Horizontalno spajanje tabela u R: data.table
В data.table Trebate spojiti stolove po ključu koristeći funkciju merge().
Argumenti funkcije merge() u data.table
x, y — Tabele za spajanje
by — Kolona koja je ključ za spajanje ako ima isto ime u obje tabele
by.x, by.y — Imena kolona koje treba spojiti, ako imaju različite nazive u tabelama
all, all.x, all.y — Tip spajanja, all će vratiti sve redove iz obe tabele, all.x odgovara operaciji LEFT JOIN (ostaviće sve redove prve tabele), all.y — odgovara RIGHT JOIN operacija (napustiće sve redove druge tabele).
Kao i u data.table, in pandas funkcija se koristi za spajanje tabela merge().
Argumenti funkcije merge() u pandama
kako — Vrsta veze: lijevo, desno, vanjsko, unutrašnje
on — Kolona koja je ključ ako ima isto ime u obje tabele
left_on, right_on — Imena ključnih kolona, ako imaju različita imena u tabelama
Horizontalno spajanje tablice u Pythonu: pandas
# объединяем по ключу
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")
Osnovne funkcije prozora i izračunate kolone
Funkcije prozora slične su po značenju funkcijama agregacije, a također se često koriste u analizi podataka. Ali za razliku od funkcija agregacije, funkcije prozora ne mijenjaju broj redova odlaznog okvira podataka.
U suštini, koristeći funkciju prozora, dolazni okvir podataka dijelimo na dijelove prema nekom kriteriju, tj. po vrijednosti polja ili nekoliko polja. I izvodimo aritmetičke operacije na svakom prozoru. Rezultat ovih operacija će biti vraćen u svakom redu, tj. bez promjene ukupnog broja redova u tabeli.
Na primjer, uzmimo sto Titanik. Možemo izračunati koliki je postotak cijena svake karte bila unutar klase kabine.
Da bismo to uradili, trebamo u svakoj liniji dobiti ukupnu cijenu karte za trenutnu klasu kabina kojoj pripada karta u ovoj liniji, a zatim podijeliti cijenu svake karte sa ukupnim troškom svih karata iste klase kabine .
Funkcije prozora u R: tidyverse, dplyr
Da biste dodali nove kolone, bez korištenja grupiranja redova, u dplyr služi funkciji mutate().
Gore opisani problem možete riješiti grupiranjem podataka po polju Pclass i zbrajanje polja u novu kolonu Fare. Zatim razgrupišite tabelu i podijelite vrijednosti polja Fare na ono što se dogodilo u prethodnom koraku.
Algoritam rješenja ostaje isti kao u dplyr, trebamo podijeliti tabelu na prozore po polju Pclass. Iznesite u novu kolonu iznos za grupu koja odgovara svakom redu i dodajte kolonu u kojoj izračunavamo udio cijene svake karte u njenoj grupi.
Za dodavanje novih kolona u data.table operater prisutan :=. Ispod je primjer rješavanja problema pomoću paketa data.table
Funkcije prozora u R: data.table
titanic[,c("Pclass_cost","ticket_fare_rate") := .(sum(Fare), Fare / Pclass_cost),
by = Pclass]
Funkcije prozora u Pythonu: pandas
Jedan od načina da dodate novu kolonu pandas - koristite funkciju assign(). Za sumiranje cijene karata po klasama kabina, bez grupiranja redova, koristit ćemo funkciju transform().
Ispod je primjer rješenja u kojem dodajemo u tabelu Titanik iste 2 kolone.
Osnovne funkcije prozora i dodavanje izračunatih kolona group_by() + mutate()
argument j koristeći operatera := + argument by transform() + assign()
zaključak
Možda sam u članku opisao ne najoptimalnije implementacije obrade podataka, pa će mi biti drago ako ispravite moje greške u komentarima ili jednostavno dopunite informacije date u članku drugim tehnikama za rad s podacima u R / Python-u.
Kao što sam gore napisao, svrha članka nije bila nametanje nečijeg mišljenja o tome koji je jezik bolji, već da se pojednostavi mogućnost učenja oba jezika ili, ako je potrebno, migriranja između njih.
Ako vam se svidio članak, bit će mi drago da imam nove pretplatnike na moj youtube и telegram kanala.
Anketa
Koje od sljedećih paketa koristite u svom radu?
U komentarima možete napisati razlog svog izbora.
Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.
Koji paket za obradu podataka koristite (možete odabrati nekoliko opcija)
45,2%tidyverse19
33,3%podaci.tabela14
54,8%pandas23
Glasalo je 42 korisnika. Uzdržano je bilo 9 korisnika.