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.

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

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.

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

  1. Glavne sintaksičke razlike između R 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. data.table
    2.3. pande
  3. Instaliranje paketa
  4. Učitavanje podataka
  5. Kreiranje okvira podataka
  6. Odabir kolona koje su vam potrebne
  7. Filtriranje redova
  8. Grupisanje i agregacija
  9. Vertikalni spoj tablica (UNION)
  10. Horizontalno spajanje tablica (JOIN)
  11. Osnovne funkcije prozora i izračunate kolone
  12. Tabela korespondencije između metoda obrade podataka u R i Python-u
  13. zaključak
  14. Kratka anketa o tome koji paket koristite

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:

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

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:
Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

В 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 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
Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad
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.

data.table

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazadSlužbena web stranica: r-datatable.com

By data.table je Matt Dole iz H2O.ai.

Prvo izdanje biblioteke održano je 2006. godine.

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.

pande

Službena web stranica: pandas.pydata.org Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

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.

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

U članku ćemo koristiti nekoliko skupova podataka:

  1. Dva preuzimanja sa Google Analytics.
  2. 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.

Citat iz službena dokumentacija vroom.

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

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-u: pandas

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.

Učitavanje podataka u Python-u: pandas

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

Kreiranje okvira podataka

Table Titanik, koji smo učitali, postoji polje seks, koji pohranjuje identifikator spola putnika.

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

Da bismo to učinili, kreirat ćemo mali direktorij, tablicu u kojoj će biti samo 2 stupca (šifra i naziv spola) i 2 reda, respektivno.

Kreiranje okvira podataka u R: tidyverse, dplyr

U primjeru koda ispod, kreiramo željeni okvir podataka pomoću funkcije tibble() .

Kreiranje okvira podataka u R: dplyr

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

Kreiranje okvira podataka u R: data.table

Kreiranje okvira podataka u R: data.table

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

Kreiranje okvira podataka u Pythonu: pandas

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

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

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

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$")]

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.

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

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 (primer df['col_name']), ili bez navodnika nakon tačke (primer df.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.

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

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.

Osnovne funkcije agregacije:

  • sum() — sumiranje
  • min() / max() – minimalna i maksimalna vrijednost
  • mean() - prosek
  • median() — medijana
  • length() - količina

Grupiranje i agregacija u R: dplyr

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

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.

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

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

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

Postoji nekoliko vrsta spojeva:

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

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

Horizontalno spajanje tabela u R: data.table

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

Horizontalno spajanje tablice u Pythonu: pandas

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.

Koji jezik odabrati za rad sa podacima - R ili Python? Oba! Prelazak sa pandi na tidyverse i data.table i nazad

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.

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

Funkcije prozora u Pythonu: pandas

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

Tabela korespondencije funkcija i metoda

Ispod je tabela korespondencije između metoda za izvođenje različitih operacija s podacima u paketima koje smo razmatrali.

Opis
tidyverse
data.table
pande

Učitavanje podataka
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Kreiranje okvira podataka
tibble()
data.table()
dict() + from_dict()

Odabir kolone
select()
argument j, druga pozicija u uglastim zagradama
listu potrebnih kolona prenosimo u uglaste zagrade / drop() / filter() / select_dtypes()

Filtriranje redova
filter()
argument i, prva pozicija u uglastim zagradama
Uslove filtriranja navodimo u uglastim zagradama / filter()

Grupisanje i agregacija
group_by() + summarise()
argumenti j + by
groupby() + agg()

Vertikalni spoj tablica (UNION)
bind_rows()
rbind()
concat()

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

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.

izvor: www.habr.com

Dodajte komentar