Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

Z iskanjem R ali Python na internetu boste našli na milijone člankov in kilometre razprav na temo, kateri je boljši, hitrejši in priročnejši za delo s podatki. Toda na žalost vsi ti članki in spori niso posebej uporabni.

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

Namen tega članka je primerjati osnovne tehnike obdelave podatkov v najbolj priljubljenih paketih obeh jezikov. In bralcem pomagajte hitro obvladati nekaj, česar še ne vedo. Za tiste, ki pišete v Pythonu, ugotovite, kako narediti isto stvar v R in obratno.

V članku bomo analizirali sintakso najbolj priljubljenih paketov v R. To so paketi, vključeni v knjižnico tidyversein tudi paket data.table. In primerjajte njihovo sintakso z pandas, najbolj priljubljen paket za analizo podatkov v Pythonu.

Korak za korakom bomo šli skozi celotno pot analize podatkov od njihovega nalaganja do izvajanja analitičnih okenskih funkcij z uporabo Pythona in R.

Vsebina

Ta članek lahko uporabite kot goljufijo, če ste pozabili, kako izvesti neko operacijo obdelave podatkov v enem od obravnavanih paketov.

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

  1. Glavne sintaksne razlike med R in Pythonom
    1.1. Dostop do funkcij paketa
    1.2. Dodelitev
    1.3. Indeksiranje
    1.4. Metode in OOP
    1.5. Cevovodi
    1.6. Podatkovne strukture
  2. Nekaj ​​besed o paketih, ki jih bomo uporabljali
    2.1. tidyverse
    2.2. podatki.tabela
    2.3. pand
  3. Namestitev paketov
  4. Nalaganje podatkov
  5. Ustvarjanje podatkovnih okvirjev
  6. Izbira stolpcev, ki jih potrebujete
  7. Filtriranje vrstic
  8. Združevanje in združevanje
  9. Navpična združitev tabel (UNION)
  10. Horizontalno združevanje tabel (JOIN)
  11. Osnovne okenske funkcije in izračunani stolpci
  12. Tabela ujemanja med metodami obdelave podatkov v R in Python
  13. Zaključek
  14. Kratka anketa o tem, kateri paket uporabljate

Če vas zanima analiza podatkov, boste morda našli mojo telegram и youtube kanalov. Večina vsebine je posvečena jeziku R.

Glavne sintaksne razlike med R in Pythonom

Da bi vam olajšali prehod s Pythona na R ali obratno, bom navedel nekaj glavnih točk, na katere morate biti pozorni.

Dostop do funkcij paketa

Ko je paket naložen v R, vam za dostop do njegovih funkcij ni treba podati imena paketa. V večini primerov to ni običajno v R, vendar je sprejemljivo. Paketa vam sploh ni treba uvoziti, če potrebujete eno od njegovih funkcij v kodi, ampak ga preprosto pokličite tako, da podate ime paketa in ime funkcije. Ločilo med imeni paketov in funkcij v R je dvojno dvopičje. package_name::function_name().

V Pythonu, nasprotno, velja za klasično klicanje funkcij paketa z izrecno navedbo njegovega imena. Ko je paket prenesen, dobi običajno skrajšano ime, npr. pandas običajno se uporablja psevdonim pd. Do funkcije paketa dostopate s piko package_name.function_name().

Dodelitev

V R je običajna uporaba puščice za dodelitev vrednosti predmetu. obj_name <- value, čeprav je dovoljen en sam znak enakosti, se en sam znak enakosti v R uporablja predvsem za posredovanje vrednosti argumentom funkcije.

V Pythonu se dodelitev izvede izključno z enim znakom enačaja obj_name = value.

Indeksiranje

Tudi tu so precejšnje razlike. V R se indeksiranje začne pri eni in vključuje vse navedene elemente v nastalem obsegu,

v Pythonu se indeksiranje začne od nič in izbrani obseg ne vključuje zadnjega elementa, podanega v indeksiranju. Torej oblikovanje x[i:j] v Pythonu ne bo vključeval elementa j.

Obstajajo tudi razlike v negativnem indeksiranju, v zapisu R x[-1] vrne vse elemente vektorja razen zadnjega. V Pythonu bo podoben zapis vrnil le zadnji element.

Metode in OOP

R izvaja OOP na svoj način, o tem sem pisal v članku "OOP v jeziku R (1. del): razredi S3". Na splošno je R funkcionalen jezik in vse v njem temelji na funkcijah. Zato na primer za uporabnike Excela pojdite na tydiverse bo lažje kot pandas. Čeprav je to morda moje subjektivno mnenje.

Skratka, objekti v R nimajo metod (če govorimo o razredih S3, vendar obstajajo druge izvedbe OOP, ki so veliko manj pogoste). Obstajajo le posplošene funkcije, ki jih različno obdelujejo glede na razred predmeta.

Cevovodi

Morda je to ime za pandas Ne bo povsem pravilno, vendar bom poskušal razložiti pomen.

Da ne bi shranjevali vmesnih izračunov in ne proizvajali nepotrebnih predmetov v delovnem okolju, lahko uporabite nekakšen cevovod. Tisti. prenesite rezultat izračuna iz ene funkcije v drugo in ne shranite vmesnih rezultatov.

Vzemimo naslednji primer kode, v katerem hranimo vmesne izračune v ločenih objektih:

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

Izvedli smo 3 operacije zaporedno, rezultat vsake pa smo shranili v ločen objekt. Toda v resnici teh vmesnih predmetov ne potrebujemo.

Ali še slabše, a bolj znano uporabnikom Excela.

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

V tem primeru nismo shranili vmesnih rezultatov izračuna, vendar je branje kode z ugnezdenimi funkcijami izjemno neprijetno.

Ogledali si bomo več pristopov k obdelavi podatkov v R, ki izvajajo podobne operacije na različne načine.

Cevovodi v knjižnici tidyverse izvaja operater %>%.

obj <- func1() %>% 
            func2() %>%
            func3()

Tako vzamemo rezultat dela func1() in ga posredujte kot prvi argument func2(), potem posredujemo rezultat tega izračuna kot prvi argument func3(). In na koncu vse opravljene izračune zapišemo v objekt obj <-.

Vse zgoraj navedeno bolje kot besede ponazarja ta meme:
Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

В data.table verige se uporabljajo na podoben način.

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

V vsakem od oglatih oklepajev lahko uporabite rezultat prejšnje operacije.

В pandas takšne operacije so ločene s piko.

obj = df.fun1().fun2().fun3()

Tisti. vzamemo svojo mizo df in uporabi njeno metodo fun1(), nato metodo uporabimo za dobljeni rezultat fun2()po fun3(). Nastali rezultat se shrani v objekt obj .

Podatkovne strukture

Podatkovne strukture v R in Python so podobne, vendar imajo različna imena.

Opis
Ime v R
Ime v Python/pandas

Struktura tabele
data.frame, data.table, tibble
DataFrame

Enodimenzionalni seznam vrednosti
Vektor
Serija v pandah ali seznam v čistem Pythonu

Večnivojska netabelarna struktura
Seznam
Slovar (dict)

Spodaj si bomo ogledali nekatere druge značilnosti in razlike v sintaksi.

Nekaj ​​besed o paketih, ki jih bomo uporabljali

Najprej vam bom povedal nekaj o paketih, s katerimi se boste seznanili v tem članku.

tidyverse

Uradna spletna stran: tidyverse.org
Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj
Knjižnica tidyverse napisal Hedley Wickham, višji raziskovalec pri RStudio. tidyverse je sestavljen iz impresivnega nabora paketov, ki poenostavljajo obdelavo podatkov, od katerih jih je 5 vključenih v 10 najboljših prenosov iz repozitorija CRAN.

Jedro knjižnice sestavljajo naslednji paketi: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Vsak od teh paketov je namenjen reševanju določenega problema. Na primer dplyr ustvarjen za manipulacijo podatkov, tidyr spraviti podatke v lično obliko, stringr poenostavlja delo z nizi in ggplot2 je eno najbolj priljubljenih orodij za vizualizacijo podatkov.

Prednost tidyverse je preprostost in lahko berljiva sintaksa, ki je v mnogih pogledih podobna poizvedovalnemu jeziku SQL.

podatki.tabela

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazajUradna spletna stran: r-datatable.com

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

Prva izdaja knjižnice je bila leta 2006.

Sintaksa paketa ni tako priročna kot v tidyverse in bolj spominja na klasične podatkovne okvire v R, a hkrati bistveno razširjen v funkcionalnosti.

Vse manipulacije s tabelo v tem paketu so opisane v oglatih oklepajih in če prevedete sintakso data.table v SQL dobite nekaj takega: data.table[ WHERE, SELECT, GROUP BY ]

Prednost tega paketa je hitrost obdelave velike količine podatkov.

pand

Uradna spletna stran: pandas.pydata.org Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

Ime knjižnice izhaja iz ekonometričnega izraza »panel data«, ki se uporablja za opis večdimenzionalnih strukturiranih nizov informacij.

Avtor pandas je Američan Wes McKinney.

Ko gre za analizo podatkov v Pythonu, enako pandas št. Zelo večnamenski paket na visoki ravni, ki vam omogoča izvajanje kakršne koli manipulacije s podatki, od nalaganja podatkov iz katerega koli vira do njihove vizualizacije.

Namestitev dodatnih paketov

Paketi, obravnavani v tem članku, niso vključeni v osnovne distribucije R in Python. Čeprav obstaja majhno opozorilo, če ste namestili distribucijo Anaconda, potem namestite dodatno pandas ni potrebno.

Namestitev paketov v R

Če ste vsaj enkrat odprli razvojno okolje RStudio, verjetno že veste, kako namestiti zahtevani paket v R. Za namestitev paketov uporabite standardni ukaz install.packages() tako da ga zaženete neposredno v samem R.

# установка пакетов
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")

Po namestitvi je treba pakete povezati, za kar se v večini primerov uporabi ukaz library().

# подключение или импорт пакетов в рабочее окружение
library(vroom)
library(readr)
library(dplyr)
library(data.table)

Namestitev paketov v Python

Torej, če imate nameščen čisti Python, potem pandas morate ga namestiti ročno. Odprite ukazno vrstico ali terminal, odvisno od vašega operacijskega sistema, in vnesite naslednji ukaz.

pip install pandas

Nato se vrnemo v Python in z ukazom uvozimo nameščen paket import.

import pandas as pd

Nalaganje podatkov

Podatkovno rudarjenje je eden najpomembnejših korakov pri analizi podatkov. Tako Python kot R vam po želji ponujata obsežne možnosti za pridobivanje podatkov iz vseh virov: lokalnih datotek, datotek iz interneta, spletnih mest, vseh vrst baz podatkov.

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

V članku bomo uporabili več naborov podatkov:

  1. Dva prenosa iz Google Analytics.
  2. Nabor podatkov o potnikih s Titanika.

Vsi podatki so pri meni GitHub v obliki datotek csv in tsv. Od kod jih bomo zahtevali?

Nalaganje podatkov v R: tidyverse, vroom, readr

Za nalaganje podatkov v knjižnico tidyverse Obstajata dva paketa: vroom, readr. vroom sodobnejši, v prihodnje pa se bodo paketi morda združevali.

Citat iz uradna dokumentacija vroom.

vroom vs bralec
Kaj pomeni sprostitev vroom pomeni za readr? Za zdaj nameravamo pustiti, da se oba paketa razvijata ločeno, verjetno pa bomo pakete v prihodnosti združili. Ena pomanjkljivost lenega branja vroom je ta, da o določenih težavah s podatki ni mogoče poročati vnaprej, zato je treba razmisliti, kako jih najbolje poenotiti.

vroom vs readr
Kaj pomeni sprostitev? vroom za readr? Trenutno nameravamo razvijati oba paketa ločeno, verjetno pa ju bomo v prihodnosti združili. Ena od slabosti lenega branja vroom je, da o nekaterih težavah s podatki ni mogoče poročati vnaprej, zato morate razmisliti, kako jih najbolje združiti.

V tem članku si bomo ogledali oba paketa za nalaganje podatkov:

Nalaganje podatkov v 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")

Nalaganje podatkov v 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")

V paketu vroom, ne glede na format podatkov csv / tsv, nalaganje izvede istoimenska funkcija vroom(), v paketu readr za vsak format uporabljamo drugačno funkcijo read_tsv() и read_csv().

Nalaganje podatkov v R: data.table

В data.table obstaja funkcija za nalaganje podatkov fread().

Nalaganje podatkov v 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")

Nalaganje podatkov v Python: pande

Če primerjamo s paketi R, potem je v tem primeru sintaksa najbližja pandas bo readr, Ker pandas lahko zahteva podatke od kjerkoli in v tem paketu je cela družina funkcij read_*().

  • read_csv()
  • read_excel()
  • read_sql()
  • read_json()
  • read_html()

In številne druge funkcije, namenjene branju podatkov iz različnih formatov. Toda za naše namene je dovolj read_table() ali read_csv() z uporabo argumenta september da določite ločilo stolpcev.

Nalaganje podatkov v 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")

Ustvarjanje podatkovnih okvirjev

Tabela Titanic, ki smo ga naložili, je polje Seks, ki hrani potnikov identifikator spola.

Toda za bolj priročno predstavitev podatkov po spolu potnika raje uporabite ime kot kodo spola.

Da bi to naredili, bomo ustvarili majhen imenik, tabelo, v kateri bosta samo 2 stolpca (koda in ime spola) oziroma 2 vrstici.

Ustvarjanje podatkovnega okvira v R: tidyverse, dplyr

V spodnjem primeru kode ustvarimo želeni podatkovni okvir s funkcijo tibble() .

Ustvarjanje podatkovnega okvira v R: dplyr

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

Ustvarjanje podatkovnega okvira v R: data.table

Ustvarjanje podatkovnega okvira v R: data.table

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

Ustvarjanje podatkovnega okvira v Pythonu: pande

В pandas Izdelava okvirjev poteka v več fazah, najprej izdelamo slovar, nato pa slovar pretvorimo v podatkovni okvir.

Ustvarjanje podatkovnega okvira v Pythonu: pande

# создаём дата фрейм
gender_dict = {'id': [1, 2],
               'gender': ["female", "male"]}
# преобразуем словарь в датафрейм
gender = pd.DataFrame.from_dict(gender_dict)

Izbiranje stolpcev

Tabele, s katerimi delate, lahko vsebujejo na desetine ali celo stotine stolpcev podatkov. Toda za izvedbo analize praviloma ne potrebujete vseh stolpcev, ki so na voljo v izvorni tabeli.

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

Zato je ena od prvih operacij, ki jih boste izvedli z izvorno tabelo, ta, da iz nje počistite nepotrebne informacije in sprostite pomnilnik, ki ga te informacije zasedajo.

Izbira stolpcev v R: tidyverse, dplyr

sintaksa dplyr je zelo podoben poizvedovalnemu jeziku SQL, če ga poznate, boste hitro osvojili ta paket.

Če želite izbrati stolpce, uporabite funkcijo select().

Spodaj so primeri kode, s katero lahko izberete stolpce na naslednje načine:

  • Navedba imen zahtevanih stolpcev
  • Sklicujte se na imena stolpcev z uporabo regularnih izrazov
  • Po vrsti podatkov ali kateri koli drugi lastnosti podatkov v stolpcu

Izbiranje stolpcev v 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)

Izbiranje stolpcev v R: data.table

Enake operacije v data.table izvajajo nekoliko drugače, na začetku članka sem podal opis, kateri argumenti so v oglatih oklepajih data.table.

DT[i,j,by]

Kje:
i - kje, tj. filtriranje po vrsticah
j - izberite|posodobi|do, tj. izbiranje stolpcev in njihovo pretvorbo
po - razvrščanje podatkov v skupine

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

Spremenljivka .SD omogoča dostop do vseh stolpcev in .SDcols filtrirajte zahtevane stolpce z uporabo regularnih izrazov ali drugih funkcij za filtriranje imen stolpcev, ki jih potrebujete.

Izbiranje stolpcev v Pythonu, pande

Za izbiro stolpcev po imenu v pandas dovolj je, da navedete seznam njihovih imen. Če želite izbrati ali izključiti stolpce po imenu z uporabo regularnih izrazov, morate uporabiti funkcije drop() и filter(), in argument os = 1, s katerim označite, da je treba obdelati stolpce in ne vrstice.

Če želite izbrati polje glede na vrsto podatkov, uporabite funkcijo select_dtypes(), in v argumente vključujejo ali izključujejo posreduje seznam tipov podatkov, ki ustrezajo poljem, ki jih morate izbrati.

Izbiranje stolpcev v 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 vrstic

Na primer, izvorna tabela lahko vsebuje podatke za več let, vendar morate analizirati le zadnji mesec. Ponovno bodo dodatne vrstice upočasnile proces obdelave podatkov in zamašile pomnilnik računalnika.

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

Filtriranje vrstic v R: tydyverse, dplyr

В dplyr funkcija se uporablja za filtriranje vrstic filter(). Kot prvi argument vzame podatkovni okvir, nato navedete pogoje filtriranja.

Ko pišete logične izraze za filtriranje tabele, v tem primeru določite imena stolpcev brez narekovajev in brez navedbe imena tabele.

Ko za filtriranje uporabljate več logičnih izrazov, uporabite naslednje operatorje:

  • & ali vejica - logični IN
  • | - logični ALI

Filtriranje vrstic v R: dplyr

# фильтрация строк
## dplyr
### фильтрация строк по одному условию
filter(ga_nov, source == "google")
### фильтр по двум условиям соединённым логическим и
filter(ga_nov, source == "google" & sessions >= 10)
### фильтр по двум условиям соединённым логическим или
filter(ga_nov, source == "google" | sessions >= 10)

Filtriranje vrstic v R: data.table

Kot sem že napisal zgoraj, v data.table sintaksa pretvorbe podatkov je v oglatih oklepajih.

DT[i,j,by]

Kje:
i - kje, tj. filtriranje po vrsticah
j - izberite|posodobi|do, tj. izbiranje stolpcev in njihovo pretvorbo
po - razvrščanje podatkov v skupine

Argument se uporablja za filtriranje vrstic i, ki ima prvo mesto v oglatih oklepajih.

Do stolpcev dostopamo v logičnih izrazih brez narekovajev in brez podajanja imena tabele.

Logični izrazi so med seboj povezani na enak način kot v dplyr prek operatorjev & in |.

Filtriranje vrstic v R: data.table

## data.table
### фильтрация строк по одному условию
ga_nov[source == "google"]
### фильтр по двум условиям соединённым логическим и
ga_nov[source == "google" & sessions >= 10]
### фильтр по двум условиям соединённым логическим или
ga_nov[source == "google" | sessions >= 10]

Filtriranje nizov v Pythonu: pande

Filtriraj po vrsticah v pandas podobno kot pri filtriranju data.table, in je narejeno v oglatih oklepajih.

V tem primeru se dostop do stolpcev izvede nujno z navedbo imena podatkovnega okvira; potem je lahko ime stolpca navedeno tudi v narekovajih v oglatih oklepajih (Primer df['col_name']) ali brez narekovajev za piko (Primer df.col_name).

Če morate podatkovni okvir filtrirati po več pogojih, mora biti vsak pogoj postavljen v oklepaj. Logični pogoji so med seboj povezani z operatorji & и |.

Filtriranje nizov v 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)]

Združevanje in združevanje podatkov

Ena najpogosteje uporabljenih operacij pri analizi podatkov je združevanje in združevanje.

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

Sintaksa za izvajanje teh operacij je razpršena po vseh paketih, ki jih pregledujemo.

V tem primeru bomo za primer vzeli podatkovni okvir Titanic, ter izračunajte število in povprečne stroške vozovnic glede na razred kabine.

Združevanje in združevanje podatkov v R: tidyverse, dplyr

В dplyr funkcija se uporablja za združevanje group_by(), in za združevanje summarise(). Pravzaprav, dplyr obstaja cela družina funkcij summarise_*(), vendar je namen tega članka primerjava osnovne sintakse, zato se ne bomo spuščali v takšno džunglo.

Osnovne funkcije združevanja:

  • sum() — seštevanje
  • min() / max() – najmanjša in največja vrednost
  • mean() - povprečno
  • median() — mediana
  • length() - količina

Združevanje in združevanje v R: dplyr

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

V funkciji group_by() tabelo smo posredovali kot prvi argument Titanic, in nato označil polje Pclass, po katerem bomo združili našo tabelo. Rezultat te operacije z uporabo operatorja %>% posredovan kot prvi argument funkciji summarise()in dodal še 2 polji: potniki и povprečna_cena. V prvem z uporabo funkcije length() izračunali število vstopnic, v drugem pa s funkcijo mean() prejel povprečno ceno vstopnice.

Združevanje in združevanje podatkov v R: data.table

В data.table argument se uporablja za združevanje j ki ima drugo mesto v oglatih oklepajih, in za združevanje by ali keyby, ki imata tretje mesto.

Seznam funkcij združevanja je v tem primeru enak tistemu, ki je opisan v dplyr, Ker to so funkcije iz osnovne sintakse R.

Združevanje in združevanje v R: data.table

## data.table
### фильтрация строк по одному условию
titanic[, .(passangers = length(PassengerId),
            avg_price  = mean(Fare)),
        by = Pclass]

Združevanje in združevanje podatkov v Pythonu: pande

Združevanje v pandas podoben dplyr, vendar združevanje ni podobno dplyr sploh ne data.table.

Za združevanje uporabite metodo groupby(), v katerega morate posredovati seznam stolpcev, po katerih bo združen podatkovni okvir.

Za združevanje lahko uporabite metodo agg()ki sprejme slovar. Slovarski ključi so stolpci, na katere boste uporabili funkcije združevanja, vrednosti pa so imena funkcij združevanja.

Funkcije združevanja:

  • sum() — seštevanje
  • min() / max() – najmanjša in največja vrednost
  • mean() - povprečno
  • median() — mediana
  • count() - količina

Funkcija reset_index() v spodnjem primeru se uporablja za ponastavitev ugnezdenih indeksov, ki pandas privzeto po združevanju podatkov.

Simbol omogoča premik v naslednjo vrstico.

Združevanje in združevanje v Pythonu: pande

# группировка и агрегация данных
titanic.groupby(["Pclass"]).
    agg({'PassengerId': 'count', 'Fare': 'mean'}).
        reset_index()

Vertikalno spajanje tabel

Operacija, pri kateri združite dve ali več tabel iste strukture. Podatki, ki smo jih naložili, vsebujejo tabele ga_nov и ga_dec. Te tabele so po strukturi enake, tj. imajo iste stolpce in vrste podatkov v teh stolpcih.

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

To je nalaganje iz Google Analytics za mesec november in december, v tem razdelku bomo te podatke združili v eno tabelo.

Navpično spajanje tabel v R: tidyverse, dplyr

В dplyr S funkcijo lahko združite 2 tabeli v eno bind_rows(), ki posreduje tabele kot svoje argumente.

Filtriranje vrstic v R: dplyr

# Вертикальное объединение таблиц
## dplyr
bind_rows(ga_nov, ga_dec)

Navpično povezovanje tabel v R: data.table

Prav tako ni nič zapletenega, uporabimo rbind().

Filtriranje vrstic v R: data.table

## data.table
rbind(ga_nov, ga_dec)

Navpično spajanje tabel v Pythonu: pande

В pandas funkcija se uporablja za združevanje tabel concat(), v katerega morate posredovati seznam okvirjev, da jih združite.

Filtriranje nizov v Pythonu: pande

# вертикальное объединение таблиц
pd.concat([ga_nov, ga_dec])

Horizontalno spajanje tabel

Operacija, pri kateri se stolpci iz druge dodajo prvi tabeli s ključem. Pogosto se uporablja pri obogatitvi tabele dejstev (na primer tabele s podatki o prodaji) z nekaterimi referenčnimi podatki (na primer stroški izdelka).

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

Obstaja več vrst združevanj:

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

V predhodno naloženi tabeli Titanic imamo kolumno Seks, ki ustreza kodi spola potnika:

1 - ženska
2 - moški

Izdelali smo tudi tabelo – priročnik spol. Za udobnejši prikaz podatkov o spolu potnikov moramo dodati ime spola iz imenika spol na mizo Titanic.

Horizontalni spoj mize v R: tidyverse, dplyr

В dplyr Za vodoravno spajanje obstaja cela družina funkcij:

  • inner_join()
  • left_join()
  • right_join()
  • full_join()
  • semi_join()
  • nest_join()
  • anti_join()

Najpogosteje uporabljena v moji praksi je left_join().

Kot prva dva argumenta zgoraj navedene funkcije sprejmejo dve tabeli, ki se ju združijo, in kot tretji argument by določiti morate stolpce, ki jih želite združiti.

Horizontalni spoj mize v R: dplyr

# объединяем таблицы
left_join(titanic, gender,
          by = c("Sex" = "id"))

Horizontalno združevanje tabel v R: data.table

В data.table Tabele morate združiti po ključu s funkcijo merge().

Argumenti za funkcijo merge() v data.table

  • x, y — tabele za spajanje
  • by — Stolpec, ki je ključ za združevanje, če ima isto ime v obeh tabelah
  • by.x, by.y — Imena stolpcev, ki jih je treba združiti, če imajo v tabelah različna imena
  • all, all.x, all.y — Vrsta združevanja, all vrne vse vrstice iz obeh tabel, all.x ustreza operaciji LEFT JOIN (zapusti vse vrstice prve tabele), all.y — ustreza Operacija RIGHT JOIN (zapustila bo vse vrstice druge tabele).

Horizontalno združevanje tabel v R: data.table

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

Vodoravno združevanje tabel v Pythonu: pande

Pa tudi v data.tableV pandas funkcija se uporablja za združevanje tabel merge().

Argumenti funkcije merge() v pandah

  • kako — Vrsta povezave: levo, desno, zunanjo, notranjo
  • vklopljeno — stolpec, ki je ključ, če ima isto ime v obeh tabelah
  • left_on, right_on — Imena ključnih stolpcev, če imajo v tabelah različna imena

Vodoravno združevanje tabel v Pythonu: pande

# объединяем по ключу
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")

Osnovne okenske funkcije in izračunani stolpci

Okenske funkcije so po pomenu podobne funkcijam združevanja in se pogosto uporabljajo tudi pri analizi podatkov. Toda za razliko od funkcij združevanja okenske funkcije ne spremenijo števila vrstic izhodnega podatkovnega okvira.

Kateri jezik izbrati za delo s podatki - R ali Python? Oboje! Selitev s pand na tidyverse in data.table ter nazaj

V bistvu z uporabo okenske funkcije razdelimo dohodni podatkovni okvir na dele po nekem kriteriju, tj. po vrednosti polja ali več polj. In na vsakem oknu izvajamo aritmetične operacije. Rezultat teh operacij bo vrnjen v vsaki vrstici, tj. brez spreminjanja skupnega števila vrstic v tabeli.

Na primer, vzemimo mizo Titanic. Izračunamo lahko, kolikšen odstotek je znašal strošek posamezne vozovnice v svojem razredu kabine.

Da bi to naredili, moramo v vsaki vrstici dobiti skupno ceno vozovnice za trenutni razred kabine, ki mu pripada vozovnica v tej vrstici, nato pa ceno vsake vozovnice deliti s skupno ceno vseh vozovnic istega razreda kabine .

Funkcije oken v R: tidyverse, dplyr

Če želite dodati nove stolpce brez uporabe združevanja vrstic, v dplyr služi funkciji mutate().

Zgoraj opisano težavo lahko rešite z združevanjem podatkov po poljih Pclass in seštevanje polja v novem stolpcu storiti. Nato razdružite tabelo in razdelite vrednosti polj storiti na to, kar se je zgodilo v prejšnjem koraku.

Funkcije oken v R: dplyr

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

Okenske funkcije v R: data.table

Algoritem rešitve ostaja enak kot v dplyr, moramo tabelo razdeliti na okna po polju Pclass. V nov stolpec izpišite znesek za skupino, ki ustreza vsaki vrstici, in dodajte stolpec, v katerem izračunamo delež stroškov vsake karte v njeni skupini.

Če želite dodati nove stolpce v data.table prisoten operater :=. Spodaj je primer reševanja težave z uporabo paketa data.table

Okenske funkcije v R: data.table

titanic[,c("Pclass_cost","ticket_fare_rate") := .(sum(Fare), Fare / Pclass_cost), 
        by = Pclass]

Okenske funkcije v Pythonu: pande

Eden od načinov za dodajanje novega stolpca pandas - uporabite funkcijo assign(). Za povzetek stroškov vozovnic po razredu kabine, brez združevanja vrstic, bomo uporabili funkcijo transform().

Spodaj je primer rešitve, v kateri dodajamo v tabelo Titanic ista 2 stolpca.

Okenske funkcije v Pythonu: pande

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

Korespondenčna tabela funkcij in metod

Spodaj je tabela ujemanja med metodami za izvajanje različnih operacij s podatki v paketih, ki smo jih obravnavali.

Opis
tidyverse
podatki.tabela
pand

Nalaganje podatkov
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Ustvarjanje podatkovnih okvirjev
tibble()
data.table()
dict() + from_dict()

Izbiranje stolpcev
select()
argument j, drugo mesto v oglatih oklepajih
podamo seznam zahtevanih stolpcev v oglatih oklepajih / drop() / filter() / select_dtypes()

Filtriranje vrstic
filter()
argument i, prvo mesto v oglatih oklepajih
Pogoje filtriranja navajamo v oglatih oklepajih / filter()

Združevanje in združevanje
group_by() + summarise()
argumenti j + by
groupby() + agg()

Navpična združitev tabel (UNION)
bind_rows()
rbind()
concat()

Horizontalno združevanje tabel (JOIN)
left_join() / *_join()
merge()
merge()

Osnovne okenske funkcije in dodajanje izračunanih stolpcev
group_by() + mutate()
argument j z uporabo operaterja := + argument by
transform() + assign()

Zaključek

Morda v članku nisem opisal najbolj optimalnih izvedb obdelave podatkov, zato bom vesel, če boste v komentarjih popravili moje napake ali preprosto dopolnili informacije v članku z drugimi tehnikami za delo s podatki v R / Python.

Kot sem napisal zgoraj, namen članka ni bil vsiljevanje mnenja o tem, kateri jezik je boljši, temveč poenostavitev možnosti učenja obeh jezikov ali, če je potrebno, prehoda med njima.

Če vam je bil članek všeč, bom vesel novih naročnikov na moj youtube и telegram kanalov.

Опрос

Katere od naslednjih paketov uporabljate pri svojem delu?

V komentar lahko napišete razlog za vašo izbiro.

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Kateri paket za obdelavo podatkov uporabljate (lahko izberete več možnosti)

  • 45,2%tidyverse19

  • 33,3%podatki.tabela14

  • 54,8%pande23

Glasovalo je 42 uporabnikov. 9 uporabnikov se je vzdržalo.

Vir: www.habr.com

Dodaj komentar