ProHoster > Blog > uprava > Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag
Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag
Pretragom R ili Pythona na internetu ćete pronaći milijune članaka i kilometre rasprava na temu koji je bolji, brži i praktičniji za rad s podacima. Ali, nažalost, svi ti članci i sporovi nisu osobito korisni.
Svrha ovog članka je usporediti osnovne tehnike obrade podataka u najpopularnijim paketima obaju jezika. I pomoći čitateljima da brzo svladaju nešto što još ne znaju. Za one koji pišu u Pythonu, saznajte kako napraviti istu stvar u R-u i obrnuto.
Tijekom članka analizirat ćemo sintaksu najpopularnijih paketa u R. Ovo su paketi uključeni u biblioteku tidyversea također i paket data.table. I usporedi njihovu sintaksu s 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 pomoću Pythona i R-a.
sadržaj
Ovaj članak može poslužiti kao varalica ako ste zaboravili kako izvršiti neku operaciju obrade podataka u jednom od paketa koji se razmatraju.
Ako ste zainteresirani za analizu podataka, možda ćete pronaći moje telegram и youtube kanala. Većina sadržaja posvećena je jeziku R.
Glavne razlike u sintaksi između R-a i Pythona
Kako bih vam olakšao prelazak s Pythona na R ili obrnuto, navest ću nekoliko glavnih točaka na koje trebate obratiti pozornost.
Pristup funkcijama paketa
Nakon što se paket učita u R, ne morate navesti naziv paketa da biste pristupili njegovim funkcijama. U većini slučajeva to nije uobičajeno u R-u, ali je prihvatljivo. Ne morate uopće uvoziti paket ako trebate neku od njegovih funkcija u svom kodu, već ga jednostavno pozovite navodeći naziv paketa i naziv funkcije. Razdjelnik između imena paketa i funkcija u R je dvotočka. package_name::function_name().
U Pythonu se, naprotiv, smatra klasičnim pozivanje funkcija paketa eksplicitnim navođenjem njegovog imena. Kada se paket preuzima, obično mu se daje skraćeni naziv, npr. pandas obično se koristi pseudonim pd. Funkciji paketa pristupa se kroz točku package_name.function_name().
Zadatak
U R-u je uobičajeno koristiti strelicu za dodjelu vrijednosti objektu. obj_name <- value, iako je dopušten jedan znak jednakosti, jedan znak jednakosti u R koristi se prvenstveno za prosljeđivanje vrijednosti argumentima funkcije.
U Pythonu se dodjela vrši isključivo 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 zadnji element naveden u indeksu. Dakle dizajn x[i:j] u Pythonu neće uključivati element j.
Također postoje razlike u negativnom indeksiranju, u R notaciji x[-1] će vratiti sve elemente vektora osim posljednjeg. U Pythonu će slična notacija vratiti samo posljednji element.
Metode i OOP
R implementira OOP na svoj način, o tome sam pisao u članku "OOP u jeziku R (1. dio): S3 klase". Općenito, R je funkcionalni jezik i sve u njemu izgrađeno je na funkcijama. Stoga, na primjer, za korisnike Excela, idite na tydiverse bit ć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 puno rjeđe). Postoje samo generalizirane funkcije koje ih različito obrađuju ovisno o klasi objekta.
Cjevovodi
Možda je ovo naziv za pandas Neće biti sasvim točno, ali pokušat ću objasniti značenje.
Kako ne biste spremali međuizračune i ne proizvodili nepotrebne objekte u radnom okruženju, možete koristiti neku vrstu cjevovoda. Oni. proslijediti rezultat izračuna iz jedne funkcije u drugu i ne spremati međurezultate.
Uzmimo sljedeći primjer koda, gdje spremamo međuizračune u zasebne objekte:
Izveli smo 3 operacije uzastopno, a rezultat svake je bio spremljen u zasebnom objektu. Ali zapravo, ne trebaju nam ti posredni objekti.
Ili još gore, ali poznatije korisnicima Excela.
obj <- func3(func2(func1()))
U ovom slučaju nismo spremili međurezultate izračuna, ali čitanje koda s ugniježđenim funkcijama izuzetno je nezgodno.
Pogledat ćemo nekoliko pristupa obradi podataka u R-u, a oni izvode slične operacije na različite načine.
Cjevovodi u knjižnici tidyverse implementiran od strane operatera %>%.
obj <- func1() %>%
func2() %>%
func3()
Tako uzimamo rezultat rada func1() i proslijedite ga kao prvi argument func2(), tada prosljeđujemo rezultat ovog izračuna kao prvi argument func3(). I na kraju upisujemo sve izvedene izračune u objekt obj <-.
Sve gore navedeno bolje od riječi ilustrira ovaj meme:
U svakoj od uglatih zagrada možete koristiti rezultat prethodne operacije.
В pandas takve operacije su odvojene točkom.
obj = df.fun1().fun2().fun3()
Oni. zauzimamo svoj stol df i koristiti njezinu metodu fun1(), tada metodu primjenjujemo na dobiveni rezultat fun2()nakon fun3(). Rezultirajući rezultat sprema se u objekt obj .
Strukture podataka
Strukture podataka u R-u i Pythonu slične su, ali imaju različita imena.
Opis
Ime u R
Naziv u Python/pandas
Struktura tablice
data.frame, data.table, tibble
DataFrame
Jednodimenzionalni popis vrijednosti
Vektor
Serija u pandama ili lista u čistom Pythonu
Višerazinska netabelarna struktura
Popis
rječnik (dict)
U nastavku ćemo pogledati neke druge značajke 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 tijekom ovog članka.
tidyverse
Официальный сайт: tidyverse.org
knjižnica tidyverse napisao Hedley Wickham, viši znanstveni znanstvenik u RStudiju. tidyverse sastoji se od impresivnog skupa paketa koji pojednostavljuju obradu podataka, od kojih je 5 uključeno u 10 najboljih preuzimanja iz CRAN repozitorija.
Jezgru biblioteke čine sljedeći paketi: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Svaki od ovih paketa je usmjeren na rješavanje određenog problema. Na primjer dplyr stvoren za manipulaciju podacima, tidyr dovesti podatke u uredan oblik, stringr pojednostavljuje rad sa nizovima, i ggplot2 je jedan od najpopularnijih alata za vizualizaciju podataka.
Prednost tidyverse je jednostavnost i lako čitljiva sintaksa, koja je na mnogo načina slična SQL upitnom jeziku.
Od strane autora data.table je Matt Dole iz H2O.ai.
Prvo izdanje knjižnice dogodilo se 2006. godine.
Sintaksa paketa nije tako zgodna kao u tidyverse i više podsjeća na klasične podatkovne okvire u R-u, ali je istovremeno značajno proširen u funkcionalnosti.
Sve manipulacije s tablicom u ovom paketu opisane su u uglatim zagradama, a ako prevedete sintaksu data.table u SQL-u dobivate nešto poput ovoga: data.table[ WHERE, SELECT, GROUP BY ]
Snaga ovog paketa je brzina obrade velikih količina podataka.
Naziv knjižnice dolazi od ekonometrijskog izraza "panel data", koji se koristi za opisivanje višedimenzionalnih strukturiranih skupova informacija.
Od strane autora pandas je Amerikanac Wes McKinney.
Kada je riječ o analizi podataka u Pythonu, jednako pandas Ne. Vrlo višenamjenski paket visoke razine koji vam omogućuje izvođenje bilo kakve manipulacije podacima, od učitavanja podataka iz bilo kojeg izvora do vizualizacije.
Instalacija dodatnih paketa
Paketi o kojima se govori u ovom članku nisu uključeni u osnovne R i Python distribucije. Iako postoji mala zamjerka, ako ste instalirali Anaconda distribuciju, onda instalirajte dodatno pandas nije potrebno.
Instaliranje paketa u R
Ako ste otvorili razvojno okruženje RStudio barem jednom, vjerojatno već znate kako instalirati potrebni paket u R. Za instalaciju paketa koristite standardnu naredbu install.packages() pokretanjem izravno u samom R-u.
# установка пакетов
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")
Nakon instalacije pakete je potrebno povezati, za što se u većini slučajeva koristi naredba library().
# подключение или импорт пакетов в рабочее окружение
library(vroom)
library(readr)
library(dplyr)
library(data.table)
Instaliranje paketa u Pythonu
Dakle, ako imate instaliran čisti Python, onda pandas morate ga instalirati ručno. Otvorite naredbeni redak ili terminal, ovisno o vašem operativnom sustavu i unesite sljedeću naredbu.
pip install pandas
Zatim se vraćamo u Python i naredbom uvozimo instalirani paket import.
import pandas as pd
Učitavanje podataka
Data mining jedan je od najvažnijih koraka u analizi podataka. I Python i R, ako želite, pružaju vam opsežne mogućnosti za dobivanje podataka iz bilo kojeg izvora: lokalne datoteke, datoteke s Interneta, web stranice, sve vrste baza podataka.
U članku ćemo koristiti nekoliko skupova podataka:
Dva preuzimanja s Google Analyticsa.
Skup podataka o putnicima s Titanica.
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 knjižnicu tidyverse Postoje dva paketa: vroom, readr. vroom moderniji, ali u budućnosti bi se paketi mogli kombinirati.
vroom vs čitatelj
Što znači oslobađanje vroom znači za readr? Za sada planiramo dopustiti da se dva paketa razvijaju odvojeno, ali vjerojatno ćemo u budućnosti ujediniti pakete. Jedan nedostatak vroom-ovog lijenog čitanja je to što se određeni problemi s podacima ne mogu unaprijed prijaviti, pa treba razmisliti o tome kako ih najbolje objediniti.
vroom vs readr
Što znači oslobađanje? vroom za readr? Trenutno planiramo razvijati oba paketa zasebno, no vjerojatno ćemo ih u budućnosti kombinirati. 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 ćemo članku pogledati oba paketa za učitavanje podataka:
U paketu vroom, bez obzira na format podataka csv / tsv, učitavanje se vrši istoimenom funkcijom 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 usporedimo s R paketima, tada je u ovom slučaju sintaksa najbliža pandas volja readr, jer pandas može tražiti podatke s bilo kojeg mjesta, a u ovom paketu postoji cijela obitelj 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 rujna za određivanje razdjelnika stupaca.
В pandas Izrada okvira odvija se u nekoliko faza, prvo kreiramo rječnik, a zatim rječnik pretvaramo u podatkovni okvir.
Stvaranje podatkovnog okvira u Pythonu: pande
# создаём дата фрейм
gender_dict = {'id': [1, 2],
'gender': ["female", "male"]}
# преобразуем словарь в датафрейм
gender = pd.DataFrame.from_dict(gender_dict)
Odabir stupaca
Tablice s kojima radite mogu sadržavati desetke ili čak stotine stupaca podataka. Ali da biste izvršili analizu, u pravilu vam nisu potrebni svi stupci koji su dostupni u izvornoj tablici.
Stoga je jedna od prvih operacija koju ćete izvesti s izvornom tablicom očistiti je od nepotrebnih informacija i osloboditi memoriju koju te 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 upotrijebite funkciju select().
Ispod su primjeri koda pomoću kojih možete odabrati stupce na sljedeće načine:
Navođenje naziva potrebnih stupaca
Referirajte se na nazive stupaca koristeći regularne izraze
Prema vrsti 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 izvode malo drugačije, na početku članka dao sam opis koji se argumenti nalaze unutar uglatih zagrada data.table.
DT[i,j,by]
Gdje:
i - gdje, tj. filtriranje po redovima
j - odaberite|update|do, tj. odabir stupaca i njihovo pretvaranje
po - grupiranje podataka
Promjenjiva .SD omogućuje vam pristup svim stupcima i .SDcols filtrirajte tražene stupce koristeći regularne izraze ili druge funkcije za filtriranje naziva stupaca koji su vam potrebni.
Odabir stupaca u Pythonu, pande
Za odabir stupaca po imenu u pandas dovoljno je navesti popis njihovih imena. A da biste odabrali ili izuzeli stupce po nazivu pomoću regularnih izraza, morate koristiti funkcije drop() и filter(), i argument os=1, čime pokazujete da je potrebno obraditi stupce, a ne retke.
Za odabir polja prema vrsti podataka koristite funkciju select_dtypes(), i u argumente uključiti ili isključiti proslijedite popis tipova podataka koji odgovaraju poljima koja trebate odabrati.
Odabir stupaca u Pythonu: pande
# Выбор полей по названию
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 redaka
Na primjer, izvorna tablica može sadržavati podatke za nekoliko godina, ali trebate analizirati samo prošli mjesec. Opet, dodatni redovi će usporiti proces obrade podataka i začepiti memoriju računala.
Filtriranje redaka u R: tydyverse, dplyr
В dplyr funkcija se koristi za filtriranje redaka filter(). Kao prvi argument uzima podatkovni okvir, a zatim navodite uvjete filtriranja.
Kada pišete logičke izraze za filtriranje tablice, u ovom slučaju navedite nazive stupaca bez navodnika i bez deklariranja naziva tablice.
Kada koristite više logičkih izraza za filtriranje, koristite sljedeće operatore:
& ili zarez - logično I
| - logički ILI
Filtriranje redaka u R: dplyr
# фильтрация строк
## dplyr
### фильтрация строк по одному условию
filter(ga_nov, source == "google")
### фильтр по двум условиям соединённым логическим и
filter(ga_nov, source == "google" & sessions >= 10)
### фильтр по двум условиям соединённым логическим или
filter(ga_nov, source == "google" | sessions >= 10)
Filtriranje redaka u R: data.table
Kao što sam već gore napisao, u data.table sintaksa pretvorbe podataka je u uglatim zagradama.
DT[i,j,by]
Gdje:
i - gdje, tj. filtriranje po redovima
j - odaberite|update|do, tj. odabir stupaca i njihovo pretvaranje
po - grupiranje podataka
Argument se koristi za filtriranje redaka i, koji ima prvo mjesto u uglatim zagradama.
Stupcima se pristupa u logičkim izrazima bez navodnika i bez navođenja naziva tablice.
Logički izrazi međusobno su povezani na isti način kao u dplyr preko & i | operatora.
Filtriranje redaka u R: data.table
## data.table
### фильтрация строк по одному условию
ga_nov[source == "google"]
### фильтр по двум условиям соединённым логическим и
ga_nov[source == "google" & sessions >= 10]
### фильтр по двум условиям соединённым логическим или
ga_nov[source == "google" | sessions >= 10]
Filtriranje nizova u Pythonu: pande
Filtriraj po redovima u pandas slično filtriranju data.table, a unosi se u uglate zagrade.
U ovom slučaju, pristup stupcima nužno se provodi navođenjem naziva podatkovnog okvira; tada se naziv stupca također može navesti u navodnicima u uglatim zagradama (primjerdf['col_name']), ili bez navodnika iza točke (primjerdf.col_name).
Ako trebate filtrirati podatkovni okvir prema nekoliko uvjeta, svaki uvjet mora biti stavljen u zagrade. Logički uvjeti međusobno su povezani operatorima & и |.
Filtriranje nizova u Pythonu: pande
# Фильтрация строк таблицы
### фильтрация строк по одному условию
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)]
Grupiranje i agregacija podataka
Jedna od najčešće korištenih operacija u analizi podataka je grupiranje i agregacija.
Sintaksa za izvođenje ovih operacija razbacana je po svim paketima koje pregledavamo.
U ovom slučaju uzet ćemo podatkovni okvir kao primjer titanski, te izračunajte broj i prosječnu cijenu karata ovisno o klasi kabine.
Grupiranje i agregacija podataka u R: tidyverse, dplyr
В dplyr funkcija se koristi za grupiranje group_by(), i za agregaciju summarise(). Zapravo, dplyr postoji cijela obitelj funkcija summarise_*(), ali svrha ovog članka je usporediti osnovnu sintaksu, pa nećemo ulaziti u takvu džunglu.
U funkciji group_by() proslijedili smo tablicu kao prvi argument titanski, a zatim označio polje Pclass, po kojem ćemo grupirati našu tablicu. Rezultat ove operacije pomoću operatora %>% proslijeđen kao prvi argument funkciji summarise(), i dodao još 2 polja: putnici и prosječna_cijena. U prvom, pomoću funkcije length() izračunao broj ulaznica, au drugom pomoću funkcije mean() dobio prosječnu cijenu ulaznice.
Grupiranje i agregacija podataka u R: podaci.tablica
В data.table argument se koristi za agregaciju j koji ima drugo mjesto u uglatim zagradama i za grupiranje by ili keyby, koji imaju treću poziciju.
Popis funkcija agregacije u ovom je slučaju identičan onom opisanom u dplyr, jer to su funkcije iz osnovne R sintakse.
Grupiranje i agregacija u R: podaci.tablica
## data.table
### фильтрация строк по одному условию
titanic[, .(passangers = length(PassengerId),
avg_price = mean(Fare)),
by = Pclass]
Grupiranje i agregacija podataka u Pythonu: pande
Grupiranje u pandas slično dplyr, ali agregacija nije slična dplyr ne na data.table.
Za grupiranje koristite metodu groupby(), u koji trebate proslijediti popis stupaca po kojima će podatkovni okvir biti grupiran.
Za agregaciju možete koristiti metodu agg()koji prihvaća rječnik. Ključevi rječnika su stupci na koje ćete primijeniti funkcije agregacije, a vrijednosti su nazivi funkcija agregacije.
Funkcije agregacije:
sum() — zbrajanje
min() / max() – minimalna i maksimalna vrijednost
mean() - prosječno
median() — medijan
count() - količina
Funkcija reset_index() u donjem primjeru koristi se za resetiranje ugniježđenih indeksa koji pandas zadana vrijednost nakon agregacije podataka.
simbol omogućuje prelazak na sljedeći redak.
Grupiranje i agregacija u Pythonu: pande
# группировка и агрегация данных
titanic.groupby(["Pclass"]).
agg({'PassengerId': 'count', 'Fare': 'mean'}).
reset_index()
Vertikalno spajanje tablica
Operacija u kojoj spajate dvije ili više tablica iste strukture. Podaci koje smo učitali sadrže tablice ga_nov и ga_dec. Ove su tablice identične strukture, tj. imaju iste stupce i tipove podataka u tim stupcima.
Ovo je prijenos iz Google Analyticsa za mjesec studeni i prosinac, u ovom ćemo odjeljku te podatke spojiti u jednu tablicu.
Okomito spajanje tablica u R: tidyverse, dplyr
В dplyr Pomoću funkcije možete spojiti 2 tablice u jednu bind_rows(), prosljeđujući tablice kao svoje argumente.
Filtriranje redaka u R: dplyr
# Вертикальное объединение таблиц
## dplyr
bind_rows(ga_nov, ga_dec)
Okomito spajanje tablica u R: data.table
Također nije ništa komplicirano, upotrijebimo rbind().
Filtriranje redaka u R: data.table
## data.table
rbind(ga_nov, ga_dec)
Okomito spajanje tablica u Pythonu: pande
В pandas funkcija se koristi za spajanje tablica concat(), u koji trebate proslijediti popis okvira da biste ih kombinirali.
Filtriranje nizova u Pythonu: pande
# вертикальное объединение таблиц
pd.concat([ga_nov, ga_dec])
Horizontalno spajanje tablica
Operacija u kojoj se stupci iz drugog dodaju u prvu tablicu pomoću ključa. Često se koristi kada se tablica činjenica (na primjer, tablica s podacima o prodaji) obogaćuje nekim referentnim podacima (na primjer, cijena proizvoda).
Postoji nekoliko vrsta spajanja:
U prethodno učitanoj tablici titanski imamo kolumnu Seks, što odgovara šifri spola putnika:
1 - žensko
2 - muško
Također, izradili smo tablicu - priručnik rod. Za praktičniji prikaz podataka o spolu putnika potrebno je dodati ime spola iz imenika rod do stola titanski.
Horizontalni stolni spoj u R: tidyverse, dplyr
В dplyr Postoji cijela obitelj funkcija za horizontalno spajanje:
inner_join()
left_join()
right_join()
full_join()
semi_join()
nest_join()
anti_join()
Najčešće korišten u mojoj praksi je left_join().
Kao prva dva argumenta gore navedene funkcije uzimaju dvije tablice za spajanje, a kao treći argument by morate navesti stupce za spajanje.
Horizontalni stolni spoj u R: dplyr
# объединяем таблицы
left_join(titanic, gender,
by = c("Sex" = "id"))
Horizontalno spajanje tablica u R: data.table
В data.table Morate spojiti tablice pomoću ključa pomoću funkcije merge().
Argumenti za funkciju merge() u data.table
x, y — Tablice za spajanje
po — Stupac koji je ključ za spajanje ako ima isti naziv u obje tablice
by.x, by.y — Nazivi stupaca koji će se spojiti, ako imaju različite nazive u tablicama
all, all.x, all.y — Vrsta spajanja, all će vratiti sve retke iz obje tablice, all.x odgovara LIJEVOJ JOIN operaciji (napustit će sve retke prve tablice), all.y — odgovara Operacija RIGHT JOIN (napustit će sve redove druge tablice).
Kao i u data.tableU pandas funkcija se koristi za spajanje tablica merge().
Argumenti funkcije merge() u pandama
kako — Vrsta veze: lijevo, desno, vanjsko, unutarnje
uključeno — Stupac koji je ključ ako ima isti naziv u obje tablice
left_on, right_on — Nazivi ključnih stupaca, ako imaju različite nazive u tablicama
Horizontalno spajanje tablica u Pythonu: pande
# объединяем по ключу
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")
Osnovne funkcije prozora i izračunati stupci
Prozorske funkcije slične su značenju funkcijama agregacije, a također se često koriste u analizi podataka. Ali za razliku od funkcija združivanja, prozorske funkcije ne mijenjaju broj redaka odlaznog podatkovnog okvira.
U osnovi, koristeći funkciju prozora, dijelimo dolazni podatkovni okvir na dijelove prema nekom kriteriju, tj. prema vrijednosti polja, ili nekoliko polja. I provodimo aritmetičke operacije na svakom prozoru. Rezultat ovih operacija bit će vraćen u svakom retku, tj. bez promjene ukupnog broja redaka u tablici.
Na primjer, uzmimo stol titanski. Možemo izračunati koliki je postotak koštala svaka karta unutar svoje klase kabine.
Da bismo to učinili, moramo u svakom retku dobiti ukupnu cijenu karte za trenutnu klasu kabine kojoj pripada karta u ovom retku, zatim podijeliti cijenu svake karte s ukupnom cijenom svih karata iste klase kabine .
Funkcije prozora u R: tidyverse, dplyr
Za dodavanje novih stupaca, bez korištenja grupiranja redaka, u dplyr služi funkciji mutate().
Gore opisani problem možete riješiti grupiranjem podataka po polju Pclass i zbrajanje polja u novi stupac zbivati. Zatim razgrupirajte tablicu i podijelite vrijednosti polja zbivati onome što se dogodilo u prethodnom koraku.
Algoritam rješenja ostaje isti kao u dplyr, trebamo podijeliti tablicu u prozore po polju Pclass. U novom stupcu ispišite iznos za grupu koja odgovara svakom retku i dodajte stupac u kojem izračunavamo udio troška svake karte u svojoj grupi.
Za dodavanje novih stupaca data.table prisutan operater :=. Ispod je primjer rješavanja problema korištenjem 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: pande
Jedan od načina za dodavanje novog stupca u pandas - koristite funkciju assign(). Za sumiranje troškova karata po klasi kabine, bez grupiranja redaka, koristit ćemo se funkcijom transform().
Ispod je primjer rješenja u kojem dodajemo u tablicu titanski ista 2 stupca.
Ispod je tablica korespondencije između metoda za izvođenje različitih operacija s podacima u paketima koje smo razmotrili.
Opis
tidyverse
podaci.tabela
pande
Učitavanje podataka vroom()/ readr::read_csv() / readr::read_tsv() fread() read_csv()
Stvaranje podatkovnih okvira tibble() data.table() dict() + from_dict()
Odabir stupaca select()
argument j, drugo mjesto u uglatim zagradama
prenosimo popis potrebnih stupaca u uglate zagrade / drop() / filter() / select_dtypes()
Filtriranje redaka filter()
argument i, prvo mjesto u uglatim zagradama
Navodimo uvjete filtriranja u uglatim zagradama / filter()
Grupiranje i agregacija group_by() + summarise()
argumenti j + by groupby() + agg()
Osnovne funkcije prozora i dodavanje izračunatih stupaca group_by() + mutate()
argument j pomoću operatera := + argument by transform() + assign()
Zaključak
Možda u članku nisam opisao najoptimalnije implementacije obrade podataka, pa će mi biti drago ako ispravite moje pogreške u komentarima ili jednostavno nadopunite informacije dane u članku drugim tehnikama za rad s podacima u R / Pythonu.
Kao što sam gore napisao, svrha članka nije bila nametanje mišljenja o tome koji je jezik bolji, već pojednostavljenje mogućnosti učenja oba jezika ili, ako je potrebno, migriranja s jednog na drugi.
Ako vam se svidio članak, bit će mi drago da imam nove pretplatnike na moj youtube и telegram kanala.
Intervju
Koji od sljedećih paketa koristite u svom radu?
U komentarima možete napisati razlog svog odabira.
U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.
Koji paket za obradu podataka koristite (možete odabrati nekoliko opcija)
45,2%tidyverse19
33,3%podaci.tablica14
54,8%pande23
Glasovalo je 42 korisnika. Suzdržano je bilo 9 korisnika.