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.

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

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.

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

  1. Glavne razlike u sintaksi između R-a i Pythona
    1.1. Pristup funkcijama paketa
    1.2. Zadatak
    1.3. indeksiranje
    1.4. Metode i OOP
    1.5. Cjevovodi
    1.6. Strukture podataka
  2. Nekoliko riječi o paketima koje ćemo koristiti
    2.1. tidyverse
    2.2. podaci.tabela
    2.3. pande
  3. Instaliranje paketa
  4. Učitavanje podataka
  5. Stvaranje podatkovnih okvira
  6. Odabir stupaca koji su vam potrebni
  7. Filtriranje redaka
  8. Grupiranje i agregacija
  9. Vertikalna unija tablica (UNION)
  10. Horizontalno spajanje tablica (JOIN)
  11. Osnovne funkcije prozora i izračunati stupci
  12. Tablica podudarnosti između metoda obrade podataka u R i Pythonu
  13. Zaključak
  14. Kratka anketa o tome koji paket koristite

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:

temp_object <- func1()
temp_object2 <- func2(temp_object )
obj <- func3(temp_object2 )

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:
Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

В data.table lanci se koriste na sličan način.

newDT <- DT[where, select|update|do, by][where, select|update|do, by][where, select|update|do, by]

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
Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag
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.

podaci.tabela

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natragОфициальный сайт: r-datatable.com

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.

pande

Официальный сайт: pandas.pydata.org Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

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.

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

U članku ćemo koristiti nekoliko skupova podataka:

  1. Dva preuzimanja s Google Analyticsa.
  2. 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.

Citat iz službena dokumentacija vroom.

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čitavanje podataka u paket R: vroom

# install.packages("vroom")
library(vroom)

# Чтение данных
## vroom
ga_nov  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Učitavanje podataka u R: readr

# install.packages("readr")
library(readr)

# Чтение данных
## readr
ga_nov  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

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().

Učitavanje podataka u paket R: data.table

# install.packages("data.table")
library(data.table)

## data.table
ga_nov  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Učitavanje podataka u Python: pande

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.

Učitavanje podataka u Python: pande

import pandas as pd

ga_nov  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_nowember.csv", sep = "t")
ga_dec  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_december.csv", sep = "t")
titanic = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/titanic.csv")

Stvaranje podatkovnih okvira

Stol titanski, koji smo utovarili, nalazi se polje Seks, koji pohranjuje identifikator spola putnika.

Ali za praktičniji prikaz podataka u smislu spola putnika, trebali biste koristiti ime, a ne rodnu šifru.

Da bismo to učinili, stvorit ćemo mali direktorij, tablicu u kojoj će biti samo 2 stupca (šifra i ime spola) odnosno 2 retka.

Stvaranje podatkovnog okvira u R: tidyverse, dplyr

U donjem primjeru koda stvaramo željeni podatkovni okvir pomoću funkcije tibble() .

Stvaranje podatkovnog okvira u R: dplyr

## dplyr
### создаём справочник
gender <- tibble(id = c(1, 2),
                 gender = c("female", "male"))

Stvaranje podatkovnog okvira u R: data.table

Stvaranje podatkovnog okvira u R: data.table

## data.table
### создаём справочник
gender <- data.table(id = c(1, 2),
                    gender = c("female", "male"))

Stvaranje podatkovnog okvira u Pythonu: pande

В 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.

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

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

Odabir stupaca u R: data.table

## data.table
### выбрать по названию столбцов
ga_nov[ , .(date, source, sessions) ]
### исключь по названию столбцов
ga_nov[ , .SD, .SDcols = ! names(ga_nov) %like% "medium|bounces" ]
### выбрать по регулярному выражению
ga_nov[, .SD, .SDcols = patterns("s$")]

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.

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

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 (primjer df['col_name']), ili bez navodnika iza točke (primjer df.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.

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

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.

Osnovne funkcije agregacije:

  • sum() — zbrajanje
  • min() / max() – minimalna i maksimalna vrijednost
  • mean() - prosječno
  • median() — medijan
  • length() - količina

Grupiranje i združivanje u R: dplyr

## dplyr
### группировка и агрегация строк
group_by(titanic, Pclass) %>%
  summarise(passangers = length(PassengerId),
            avg_price  = mean(Fare))

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.

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

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).

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

Postoji nekoliko vrsta spajanja:

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

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).

Horizontalno spajanje tablica u R: data.table

# объединяем таблицы
merge(titanic, gender, by.x = "Sex", by.y = "id", all.x = T)

Horizontalno spajanje tablica u Pythonu: pande

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.

Koji jezik odabrati za rad s podacima - R ili Python? Oba! Migracija s panda na tidyverse i data.table i natrag

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.

Funkcije prozora u R: dplyr

group_by(titanic, Pclass) %>%
  mutate(Pclass_cost = sum(Fare)) %>%
  ungroup() %>%
  mutate(ticket_fare_rate = Fare / Pclass_cost)

Funkcije prozora u R: data.table

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.

Funkcije prozora u Pythonu: pande

titanic.assign(Pclass_cost      =  titanic.groupby('Pclass').Fare.transform(sum),
               ticket_fare_rate = lambda x: x['Fare'] / x['Pclass_cost'])

Tablica korespondencije funkcija i metoda

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()

Vertikalna unija tablica (UNION)
bind_rows()
rbind()
concat()

Horizontalno spajanje tablica (JOIN)
left_join() / *_join()
merge()
merge()

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.

Izvor: www.habr.com

Dodajte komentar