Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

Vyhľadaním R alebo Pythonu na internete nájdete milióny článkov a kilometre diskusií na tému, ktorý z nich je lepší, rýchlejší a pohodlnejší na prácu s dátami. Ale bohužiaľ, všetky tieto články a spory nie sú obzvlášť užitočné.

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

Účelom tohto článku je porovnať základné techniky spracovania údajov v najpopulárnejších balíkoch oboch jazykov. A pomôžte čitateľom rýchlo zvládnuť niečo, čo ešte nepoznajú. Pre tých, ktorí píšu v Pythone, zistite, ako urobiť to isté v R a naopak.

Počas článku budeme analyzovať syntax najpopulárnejších balíkov v R. Toto sú balíky zahrnuté v knižnici tidyversea tiež balík data.table. A porovnajte ich syntax s pandas, najpopulárnejší balík na analýzu údajov v Pythone.

Prejdeme krok za krokom celú cestu analýzy údajov od ich načítania až po vykonávanie analytických funkcií okna pomocou Pythonu a R.

Obsah

Tento článok môžete použiť ako cheat, ak ste zabudli, ako vykonať niektoré operácie spracovania údajov v jednom z uvažovaných balíkov.

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

  1. Hlavné syntaktické rozdiely medzi R a Pythonom
    1.1. Prístup k funkciám balíka
    1.2. Pridelenie
    1.3. indexovanie
    1.4. Metódy a OOP
    1.5. Potrubia
    1.6. Dátové štruktúry
  2. Pár slov o balíčkoch, ktoré použijeme
    2.1. poriadok
    2.2. údajová tabuľka
    2.3. pandy
  3. Inštalácia balíkov
  4. Načítavajú sa údaje
  5. Vytváranie dátových rámcov
  6. Výber stĺpcov, ktoré potrebujete
  7. Filtrovanie riadkov
  8. Zoskupovanie a agregácia
  9. Vertikálne spojenie tabuliek (UNION)
  10. Horizontálne spojenie tabuliek (JOIN)
  11. Základné funkcie okna a vypočítané stĺpce
  12. Tabuľka korešpondencie medzi metódami spracovania údajov v R a Pythone
  13. Záver
  14. Krátky prieskum o tom, ktorý balík používate

Ak máte záujem o analýzu údajov, môžete nájsť moje telegram и youtube kanálov. Väčšina obsahu je venovaná jazyku R.

Hlavné syntaktické rozdiely medzi R a Pythonom

Aby som vám uľahčil prechod z Pythonu na R alebo naopak, uvediem niekoľko hlavných bodov, ktorým musíte venovať pozornosť.

Prístup k funkciám balíka

Po načítaní balíka do R nemusíte zadať názov balíka, aby ste získali prístup k jeho funkciám. Vo väčšine prípadov to nie je bežné v R, ale je to prijateľné. Ak potrebujete jednu z jeho funkcií vo svojom kóde, balík vôbec nemusíte importovať, ale jednoducho ho zavolajte zadaním názvu balíka a názvu funkcie. Oddeľovač medzi názvami balíkov a funkcií v R je dvojitá dvojbodka. package_name::function_name().

V Pythone sa naopak považuje za klasické volanie funkcií balíka explicitným uvedením jeho názvu. Pri sťahovaní balíka sa mu zvyčajne pridelí skrátený názov, napr. pandas zvyčajne sa používa pseudonym pd. K funkcii balíka sa pristupuje cez bodku package_name.function_name().

Pridelenie

V R je bežné používať šípku na priradenie hodnoty objektu. obj_name <- value, aj keď je povolené jediné znamienko rovnosti, jediné znamienko rovnosti v R sa používa hlavne na odovzdávanie hodnôt argumentom funkcií.

V Pythone sa priradenie vykonáva výlučne pomocou jediného znamienka rovnosti obj_name = value.

indexovanie

Aj tu sú dosť výrazné rozdiely. V R začína indexovanie na jednotke a zahŕňa všetky špecifikované prvky vo výslednom rozsahu,

V Pythone indexovanie začína od nuly a vybraný rozsah nezahŕňa posledný prvok špecifikovaný v indexe. Takže dizajn x[i:j] v Pythone nebude obsahovať prvok j.

Rozdiely sú aj v negatívnom indexovaní v zápise R x[-1] vráti všetky prvky vektora okrem posledného. V Pythone podobný zápis vráti iba posledný prvok.

Metódy a OOP

R implementuje OOP po svojom, o tom som písal v článku "OOP v jazyku R (časť 1): triedy S3". Vo všeobecnosti je R funkčný jazyk a všetko v ňom je postavené na funkciách. Preto napríklad pre používateľov Excelu prejdite na tydiverse bude to jednoduchšie ako pandas. Aj keď to môže byť môj subjektívny názor.

Stručne povedané, objekty v R nemajú metódy (ak hovoríme o triedach S3, ale existujú aj iné implementácie OOP, ktoré sú oveľa menej bežné). Existujú iba zovšeobecnené funkcie, ktoré ich spracovávajú odlišne v závislosti od triedy objektu.

Potrubia

Možno je to názov pre pandas Nebude to úplne správne, ale pokúsim sa vysvetliť význam.

Aby ste nešetrili medzivýpočty a nevyrábali zbytočné objekty v pracovnom prostredí, môžete použiť druh potrubia. Tie. odovzdať výsledok výpočtu z jednej funkcie do ďalšej a neukladať medzivýsledky.

Zoberme si nasledujúci príklad kódu, v ktorom ukladáme medzivýpočty do samostatných objektov:

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

Postupne sme vykonali 3 operácie a výsledok každej bol uložený v samostatnom objekte. Ale v skutočnosti tieto medziobjekty nepotrebujeme.

Alebo ešte horšie, no pre používateľov Excelu známejšie.

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

V tomto prípade sme neuložili medzivýsledky výpočtov, ale čítanie kódu s vnorenými funkciami je mimoriadne nepohodlné.

Pozrieme sa na niekoľko prístupov k spracovaniu údajov v R a tie vykonávajú podobné operácie rôznymi spôsobmi.

Potrubia v knižnici tidyverse vykonáva prevádzkovateľ %>%.

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

Takto berieme výsledok práce func1() a odovzdať ho ako prvý argument func2(), potom výsledok tohto výpočtu odovzdáme ako prvý argument func3(). A nakoniec všetky vykonané výpočty zapíšeme do objektu obj <-.

Všetko vyššie uvedené lepšie ako slová ilustruje tento meme:
Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

В data.table reťaze sa používajú podobným spôsobom.

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

V každej z hranatých zátvoriek môžete použiť výsledok predchádzajúcej operácie.

В pandas takéto operácie sú oddelené bodkou.

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

Tie. berieme náš stôl df a použiť jej metódu fun1(), potom metódu aplikujeme na získaný výsledok fun2()po fun3(). Výsledný výsledok sa uloží do objektu obj .

Dátové štruktúry

Dátové štruktúry v R a Pythone sú podobné, ale majú odlišné názvy.

Popis
Meno v R
Názov v Pythone/pandy

Štruktúra tabuľky
data.frame, data.table, tibble
DataFrame

Jednorozmerný zoznam hodnôt
Vektor
Séria v pandách alebo zoznam v čistom Pythone

Viacúrovňová netabuľková štruktúra
Zoznam
slovník (diktát)

Nižšie sa pozrieme na niektoré ďalšie funkcie a rozdiely v syntaxi.

Pár slov o balíčkoch, ktoré použijeme

Najprv vám poviem niečo o balíkoch, s ktorými sa zoznámite v tomto článku.

poriadok

Oficiálna webová stránka: tidyverse.org
Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť
knižnica tidyverse napísal Hedley Wickham, hlavný vedecký pracovník v RStudio. tidyverse pozostáva z pôsobivej sady balíkov, ktoré zjednodušujú spracovanie údajov, z ktorých 5 je zaradených medzi 10 najlepších stiahnutí z úložiska CRAN.

Jadro knižnice tvoria nasledujúce balíky: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Každý z týchto balíkov je zameraný na riešenie konkrétneho problému. Napríklad dplyr vytvorené na manipuláciu s údajmi, tidyr aby sa údaje dostali do prehľadnej formy, stringr zjednodušuje prácu so strunami a ggplot2 je jedným z najpopulárnejších nástrojov na vizualizáciu údajov.

Výhoda tidyverse je jednoduchosť a ľahko čitateľná syntax, ktorá je v mnohom podobná dotazovaciemu jazyku SQL.

údajová tabuľka

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späťOficiálna webová stránka: r-datatable.com

Autorom data.table je Matt Dole z H2O.ai.

Prvé vydanie knižnice sa uskutočnilo v roku 2006.

Syntax balíka nie je taká pohodlná ako v tidyverse a viac pripomína klasické dátové rámce v R, no zároveň výrazne rozšírené vo funkcionalite.

Všetky manipulácie s tabuľkou v tomto balíku sú popísané v hranatých zátvorkách a ak preložíte syntax data.table v SQL získate niečo takéto: data.table[ WHERE, SELECT, GROUP BY ]

Silnou stránkou tohto balíka je rýchlosť spracovania veľkého množstva dát.

pandy

Oficiálna webová stránka: pandas.pydata.org Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

Názov knižnice pochádza z ekonometrického pojmu „panelové údaje“, ktorý sa používa na opis viacrozmerných štruktúrovaných súborov informácií.

Autorom pandas je Američan Wes McKinney.

Pokiaľ ide o analýzu údajov v Pythone, rovnaké pandas Nie Veľmi multifunkčný balík na vysokej úrovni, ktorý vám umožňuje vykonávať akúkoľvek manipuláciu s údajmi, od načítania údajov z akýchkoľvek zdrojov až po ich vizualizáciu.

Inštalácia ďalších balíkov

Balíky uvedené v tomto článku nie sú zahrnuté v základných distribúciách R a Python. Aj keď existuje malé upozornenie, ak ste nainštalovali distribúciu Anaconda, nainštalujte dodatočne pandas nevyžaduje.

Inštalácia balíkov v R

Ak ste aspoň raz otvorili vývojové prostredie RStudio, pravdepodobne už viete, ako nainštalovať požadovaný balík v R. Na inštaláciu balíkov použite štandardný príkaz install.packages() spustením priamo v R samotnom.

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

Po inštalácii je potrebné balíčky pripojiť, na čo sa vo väčšine prípadov používa príkaz library().

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

Inštalácia balíkov v Pythone

Takže, ak máte nainštalovaný čistý Python, potom pandas musíte ho nainštalovať ručne. Otvorte príkazový riadok alebo terminál v závislosti od operačného systému a zadajte nasledujúci príkaz.

pip install pandas

Potom sa vrátime do Pythonu a pomocou príkazu naimportujeme nainštalovaný balík import.

import pandas as pd

Načítavajú sa údaje

Data mining je jedným z najdôležitejších krokov pri analýze dát. Python aj R vám v prípade potreby poskytujú rozsiahle možnosti získavania údajov z akýchkoľvek zdrojov: miestnych súborov, súborov z internetu, webových stránok, všetkých druhov databáz.

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

V tomto článku budeme používať niekoľko súborov údajov:

  1. Dve prevzatia zo služby Google Analytics.
  2. Súbor údajov o pasažieroch Titanicu.

Všetky údaje sú u mňa GitHub vo forme súborov csv a tsv. Odkiaľ ich budeme žiadať?

Načítavanie údajov do R: tidyverse, vroom, čítačka

Na načítanie údajov do knižnice tidyverse Existujú dva balíčky: vroom, readr. vroom modernejšie, ale v budúcnosti sa môžu balíčky kombinovať.

Citovať z oficiálna dokumentácia vroom.

vroom vs čitateľ
Čo znamená uvoľnenie vroom znamenať pre readr? Zatiaľ plánujeme nechať tieto dva balíky vyvíjať oddelene, ale pravdepodobne ich v budúcnosti zjednotíme. Jednou nevýhodou lenivého čítania vroom je, že určité problémy s údajmi nemožno nahlásiť vopred, takže to, ako ich najlepšie zjednotiť, si vyžaduje určité zamyslenie.

vroom vs čitateľ
Čo znamená uvoľnenie? vroom pre readr? Momentálne plánujeme vyvíjať oba balíčky samostatne, no v budúcnosti ich pravdepodobne spojíme. Jedna z nevýhod lenivého čítania vroom je, že niektoré problémy s údajmi nie je možné nahlásiť vopred, preto si treba premyslieť, ako ich najlepšie skombinovať.

V tomto článku sa pozrieme na oba balíky na načítanie dát:

Načítavanie údajov do balíka 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")

Načítavanie údajov do R: čítačky

# 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 balení vroombez ohľadu na formát údajov csv / tsv sa načítanie vykonáva pomocou funkcie s rovnakým názvom vroom(), v balení readr pre každý formát používame inú funkciu read_tsv() и read_csv().

Načítavanie údajov do R: data.table

В data.table existuje funkcia na načítanie údajov fread().

Načítavanie údajov do balíka 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")

Načítavanie údajov v Pythone: pandy

Ak porovnáme s balíkmi R, potom je v tomto prípade syntax najbližšia pandas vôle readr, pretože pandas si môže vyžiadať dáta odkiaľkoľvek a tento balík obsahuje celú rodinu funkcií read_*().

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

A mnoho ďalších funkcií určených na čítanie údajov z rôznych formátov. Ale pre naše účely to stačí read_table() alebo read_csv() pomocou argumentu septembra na určenie oddeľovača stĺpcov.

Načítavanie údajov v Pythone: pandy

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

Vytváranie dátových rámcov

Tabuľka titanský, ktorý sme naložili, je pole sex, v ktorom je uložený rodový identifikátor cestujúceho.

Ale pre pohodlnejšiu prezentáciu údajov z hľadiska pohlavia cestujúceho by ste mali používať meno a nie rodový kód.

Na to si vytvoríme malý adresár, tabuľku, v ktorej budú len 2 stĺpce (kód a meno pohlavia) a 2 riadky, resp.

Vytvorenie dátového rámca v R: tidyverse, dplyr

V nižšie uvedenom príklade kódu vytvoríme požadovaný dátový rámec pomocou funkcie tibble() .

Vytvorenie dátového rámca v R: dplyr

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

Vytvorenie dátového rámca v R: data.table

Vytvorenie dátového rámca v R: data.table

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

Vytvorenie dátového rámca v Pythone: pandas

В pandas Vytváranie rámcov prebieha v niekoľkých fázach, najskôr vytvoríme slovník a potom slovník prevedieme na dátový rámec.

Vytvorenie dátového rámca v Pythone: pandas

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

Výber stĺpcov

Tabuľky, s ktorými pracujete, môžu obsahovať desiatky alebo dokonca stovky stĺpcov údajov. Na vykonanie analýzy však spravidla nepotrebujete všetky stĺpce, ktoré sú k dispozícii v zdrojovej tabuľke.

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

Preto jednou z prvých operácií, ktoré vykonáte so zdrojovou tabuľkou, je jej vyčistenie od nepotrebných informácií a uvoľnenie pamäte, ktorú tieto informácie zaberajú.

Výber stĺpcov v R: tidyverse, dplyr

syntax dplyr je veľmi podobný dotazovaciemu jazyku SQL, ak ho poznáte, rýchlo si osvojíte tento balík.

Na výber stĺpcov použite funkciu select().

Nižšie sú uvedené príklady kódu, pomocou ktorého môžete vybrať stĺpce nasledujúcimi spôsobmi:

  • Výpis názvov požadovaných stĺpcov
  • Pozrite si názvy stĺpcov pomocou regulárnych výrazov
  • Podľa typu údajov alebo akejkoľvek inej vlastnosti údajov obsiahnutých v stĺpci

Výber stĺpcov 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)

Výber stĺpcov v R: data.table

Rovnaké operácie v data.table sa vykonávajú trochu inak, na začiatku článku som uviedol, aké argumenty sú v hranatých zátvorkách data.table.

DT[i,j,by]

Kde:
i - kde, t.j. filtrovanie podľa riadkov
j - vybrať|aktualizovať|urobiť, t.j. výber stĺpcov a ich konverzia
podľa - zoskupenia údajov

Výber stĺpcov 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$")]

Variabilné .SD umožňuje prístup ku všetkým stĺpcom a .SDcols filtrujte požadované stĺpce pomocou regulárnych výrazov alebo iných funkcií na filtrovanie názvov stĺpcov, ktoré potrebujete.

Výber stĺpcov v Pythone, pandy

Ak chcete vybrať stĺpce podľa názvu v pandas stačí uviesť ich menný zoznam. A ak chcete vybrať alebo vylúčiť stĺpce podľa názvu pomocou regulárnych výrazov, musíte použiť funkcie drop() и filter(), a argument os = 1, ktorým naznačíte, že je potrebné spracovať skôr stĺpce ako riadky.

Ak chcete vybrať pole podľa typu údajov, použite funkciu select_dtypes()a do argumentov zahrnúť alebo vylúčiť odovzdajte zoznam typov údajov zodpovedajúcich poliam, ktoré musíte vybrať.

Výber stĺpcov v Pythone: pandy

# Выбор полей по названию
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'])

Filtrovanie riadkov

Napríklad zdrojová tabuľka môže obsahovať niekoľko rokov údajov, ale stačí analyzovať iba posledný mesiac. Ďalšie riadky opäť spomalia proces spracovania údajov a zanesú pamäť počítača.

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

Filtrovanie riadkov v R: tydyverse, dplyr

В dplyr funkcia sa používa na filtrovanie riadkov filter(). Ako prvý argument berie dátový rámec, potom vypíšete podmienky filtrovania.

Pri písaní logických výrazov na filtrovanie tabuľky v tomto prípade zadajte názvy stĺpcov bez úvodzoviek a bez deklarovania názvu tabuľky.

Pri použití viacerých logických výrazov na filtrovanie použite nasledujúce operátory:

  • & alebo čiarka - logické AND
  • | - logické ALEBO

Filtrovanie riadkov v R: dplyr

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

Filtrovanie riadkov v R: data.table

Ako som už písal vyššie, v data.table syntax konverzie údajov je uzavretá v hranatých zátvorkách.

DT[i,j,by]

Kde:
i - kde, t.j. filtrovanie podľa riadkov
j - vybrať|aktualizovať|urobiť, t.j. výber stĺpcov a ich konverzia
podľa - zoskupenia údajov

Argument sa používa na filtrovanie riadkov i, ktorá má prvú pozíciu v hranatých zátvorkách.

Stĺpce sú prístupné v logických výrazoch bez úvodzoviek a bez zadania názvu tabuľky.

Logické výrazy spolu súvisia rovnako ako v dplyr prostredníctvom operátorov & a |.

Filtrovanie riadkov v R: data.table

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

Filtrovanie reťazcov v Pythone: pandy

Filtrovať podľa riadkov v pandas podobne ako pri filtrovaní data.tablea je uvedený v hranatých zátvorkách.

V tomto prípade sa prístup k stĺpcom vykonáva nevyhnutne uvedením názvu dátového rámca; potom môže byť názov stĺpca uvedený aj v úvodzovkách v hranatých zátvorkách (príklad df['col_name']), alebo bez úvodzoviek za bodkou (príklad df.col_name).

Ak potrebujete filtrovať dátový rámec podľa niekoľkých podmienok, každá podmienka musí byť umiestnená v zátvorkách. Logické podmienky sú navzájom prepojené operátormi & и |.

Filtrovanie reťazcov v Pythone: pandy

# Фильтрация строк таблицы
### фильтрация строк по одному условию
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)]

Zoskupovanie a agregácia údajov

Jednou z najčastejšie používaných operácií pri analýze údajov je zoskupovanie a agregácia.

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

Syntax na vykonávanie týchto operácií je rozptýlená vo všetkých balíkoch, ktoré kontrolujeme.

V tomto prípade si ako príklad vezmeme dátový rámec titanskýa vypočítajte počet a priemernú cenu lístkov v závislosti od triedy kabíny.

Zoskupovanie a agregácia údajov v R: tidyverse, dplyr

В dplyr funkcia sa používa na zoskupovanie group_by()a pre agregáciu summarise(). V skutočnosti, dplyr existuje celá rodina funkcií summarise_*(), ale účelom tohto článku je porovnať základnú syntax, takže do takejto džungle zachádzať nebudeme.

Základné agregačné funkcie:

  • sum() — zhrnutie
  • min() / max() – minimálna a maximálna hodnota
  • mean() - priemerný
  • median() — medián
  • length() - množstvo

Zoskupovanie a agregácia v R: dplyr

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

Vo funkcii group_by() prešli sme stôl ako prvý argument titanskýa potom označili pole Pclass, podľa ktorých zoskupíme náš stôl. Výsledok tejto operácie pomocou operátora %>% odovzdaný ako prvý argument do funkcie summarise()a pridal 2 ďalšie polia: pasažierov и priemerná_cena. V prvom pomocou funkcie length() vypočítal počet lístkov av druhom pomocou funkcie mean() dostali priemernú cenu lístka.

Zoskupovanie a agregácia údajov v R: data.table

В data.table argument sa používa na agregáciu j ktorá má druhú pozíciu v hranatých zátvorkách a na zoskupovanie by alebo keyby, ktoré majú tretiu pozíciu.

Zoznam agregačných funkcií je v tomto prípade identický so zoznamom popísaným v dplyr, pretože sú to funkcie zo základnej syntaxe R.

Zoskupovanie a agregácia v R: data.table

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

Zoskupovanie a agregácia údajov v Pythone: pandy

Zoskupovanie pandas podobný dplyr, ale agregácia nie je podobná ako dplyr nie zapnuté data.table.

Ak chcete zoskupiť, použite metódu groupby(), do ktorého je potrebné odovzdať zoznam stĺpcov, podľa ktorých bude dátový rámec zoskupený.

Na agregáciu môžete použiť metódu agg()ktorý akceptuje slovník. Kľúče slovníka sú stĺpce, na ktoré použijete agregačné funkcie, a hodnoty sú názvy agregačných funkcií.

Agregačné funkcie:

  • sum() — zhrnutie
  • min() / max() – minimálna a maximálna hodnota
  • mean() - priemerný
  • median() — medián
  • count() - množstvo

Funkcia reset_index() v nižšie uvedenom príklade sa používa na resetovanie vnorených indexov, ktoré pandas predvolená hodnota po agregácii údajov.

symbol umožňuje prejsť na ďalší riadok.

Zoskupovanie a agregácia v Pythone: pandy

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

Vertikálne spojenie stolov

Operácia, v ktorej spájate dve alebo viac tabuliek rovnakej štruktúry. Údaje, ktoré sme načítali, obsahujú tabuľky ga_nov и ga_dec. Tieto tabuľky sú štruktúrou identické, t.j. majú rovnaké stĺpce a typy údajov v týchto stĺpcoch.

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

Toto je nahranie zo služby Google Analytics za mesiac november a december, v tejto časti tieto údaje spojíme do jednej tabuľky.

Vertikálne spájanie stolov v R: tidyverse, dplyr

В dplyr Pomocou funkcie môžete spojiť 2 tabuľky do jednej bind_rows(), odovzdávanie tabuliek ako svojich argumentov.

Filtrovanie riadkov v R: dplyr

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

Vertikálne spájanie tabuliek v R: data.table

Tiež to nie je nič zložité, poďme použiť rbind().

Filtrovanie riadkov v R: data.table

## data.table
rbind(ga_nov, ga_dec)

Vertikálne spájanie tabuliek v Pythone: pandy

В pandas funkcia sa používa na spájanie tabuliek concat(), do ktorého je potrebné odovzdať zoznam rámcov na ich spojenie.

Filtrovanie reťazcov v Pythone: pandy

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

Horizontálne spojenie stolov

Operácia, pri ktorej sa stĺpce z druhej pridajú do prvej tabuľky kľúčom. Často sa používa pri obohatení tabuľky faktov (napríklad tabuľky s údajmi o predaji) o niektoré referenčné údaje (napríklad náklady na produkt).

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

Existuje niekoľko typov spojení:

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

V predtým načítanej tabuľke titanský máme stĺpec sex, ktorý zodpovedá rodovému kódu cestujúceho:

1 - samica
2 - mužský

Tiež sme vytvorili tabuľku - referenčnú knihu rod. Pre pohodlnejšiu prezentáciu údajov o pohlaví cestujúcich musíme doplniť meno pohlavia z adresára rod k stolu titanský.

Horizontálne spojenie stola v R: tidyverse, dplyr

В dplyr Pre horizontálne spájanie existuje celá skupina funkcií:

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

V mojej praxi sa najčastejšie používa left_join().

Ako prvé dva argumenty, funkcie uvedené vyššie vyžadujú spojenie dvoch tabuliek a ako tretí argument by musíte zadať stĺpce, ktoré sa majú spojiť.

Horizontálne spojenie stola v R: dplyr

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

Horizontálne spojenie tabuliek v R: data.table

В data.table Pomocou funkcie musíte stoly spájať kľúčom merge().

Argumenty pre funkciu merge() v data.table

  • x, y — Tabuľky na spájanie
  • by — Stĺpec, ktorý je kľúčom na spojenie, ak má v oboch tabuľkách rovnaký názov
  • by.x, by.y — Názvy stĺpcov, ktoré sa majú zlúčiť, ak majú v tabuľkách odlišné názvy
  • all, all.x, all.y — typ spojenia, all vráti všetky riadky z oboch tabuliek, all.x zodpovedá operácii LEFT JOIN (opustí všetky riadky prvej tabuľky), all.y — zodpovedá Operácia RIGHT JOIN (opustí všetky riadky druhej tabuľky).

Horizontálne spojenie tabuliek v R: data.table

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

Horizontálne spojenie stolov v Pythone: pandy

Rovnako ako v data.tableV pandas funkcia sa používa na spájanie tabuliek merge().

Argumenty funkcie merge() v pandách

  • ako — Typ pripojenia: ľavé, pravé, vonkajšie, vnútorné
  • on — Stĺpec, ktorý je kľúčom, ak má v oboch tabuľkách rovnaký názov
  • left_on, right_on — Názvy kľúčových stĺpcov, ak majú v tabuľkách rôzne názvy

Horizontálne spojenie stolov v Pythone: pandy

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

Základné funkcie okna a vypočítané stĺpce

Funkcie okien majú podobný význam ako agregačné funkcie a často sa používajú aj pri analýze údajov. Ale na rozdiel od agregačných funkcií, funkcie okna nemenia počet riadkov odchádzajúceho dátového rámca.

Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť

V podstate pomocou funkcie okna rozdelíme prichádzajúci dátový rámec na časti podľa nejakého kritéria, t.j. hodnotou poľa alebo niekoľkých polí. A na každom okne vykonávame aritmetické operácie. Výsledok týchto operácií sa vráti v každom riadku, t.j. bez zmeny celkového počtu riadkov v tabuľke.

Napríklad, zoberme si stôl titanský. Vieme vypočítať, koľko percent stála každá letenka v rámci svojej kabínkovej triedy.

Aby sme to dosiahli, musíme v každom riadku získať celkovú cenu lístka pre aktuálnu kabínovú triedu, do ktorej lístok v tomto riadku patrí, a potom vydeliť cenu každého lístka celkovou cenou všetkých lístkov rovnakej kabínovej triedy. .

Funkcie okien v R: tidyverse, dplyr

Ak chcete pridať nové stĺpce bez použitia zoskupovania riadkov, v dplyr slúži funkciu mutate().

Vyššie popísaný problém môžete vyriešiť zoskupením údajov podľa poľa Pclass a sčítanie poľa do nového stĺpca cestovné. Ďalej rozdeľte tabuľku a rozdeľte hodnoty polí cestovné k tomu, čo sa stalo v predchádzajúcom kroku.

Funkcie okna v R: dplyr

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

Funkcie okna v R: data.table

Algoritmus riešenia zostáva rovnaký ako v dplyr, musíme tabuľku rozdeliť na okná podľa poľa Pclass. Do nového stĺpca uveďte sumu za skupinu zodpovedajúcu každému riadku a pridajte stĺpec, v ktorom vypočítame podiel nákladov na každý tiket v jeho skupine.

Ak chcete pridať nové stĺpce do data.table prítomný operátor :=. Nižšie je uvedený príklad riešenia problému pomocou balíka data.table

Funkcie okna v R: data.table

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

Funkcie okien v Pythone: pandy

Jeden spôsob, ako pridať nový stĺpec do pandas - použite funkciu assign(). Na zhrnutie ceny lístkov podľa tried kabíny bez zoskupovania riadkov použijeme funkciu transform().

Nižšie je uvedený príklad riešenia, v ktorom pridáme do tabuľky titanský rovnaké 2 stĺpce.

Funkcie okien v Pythone: pandy

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

Tabuľka zhody funkcií a metód

Nižšie je uvedená tabuľka zhody medzi metódami vykonávania rôznych operácií s údajmi v balíkoch, ktoré sme zvážili.

Popis
poriadok
údajová tabuľka
pandy

Načítavajú sa údaje
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Vytváranie dátových rámcov
tibble()
data.table()
dict() + from_dict()

Výber stĺpcov
select()
argument j, druhá pozícia v hranatých zátvorkách
odovzdáme zoznam požadovaných stĺpcov v hranatých zátvorkách / drop() / filter() / select_dtypes()

Filtrovanie riadkov
filter()
argument i, prvá pozícia v hranatých zátvorkách
Podmienky filtrovania uvádzame v hranatých zátvorkách / filter()

Zoskupovanie a agregácia
group_by() + summarise()
argumenty j + by
groupby() + agg()

Vertikálne spojenie tabuliek (UNION)
bind_rows()
rbind()
concat()

Horizontálne spojenie tabuliek (JOIN)
left_join() / *_join()
merge()
merge()

Základné funkcie okna a pridávanie vypočítaných stĺpcov
group_by() + mutate()
argument j pomocou operátora := + argument by
transform() + assign()

Záver

Možno som v článku opísal nie práve najoptimálnejšie implementácie spracovania dát, preto budem rád, ak opravíte moje chyby v komentároch, alebo jednoducho doplníte informácie uvedené v článku o ďalšie techniky práce s dátami v R/Pythone.

Ako som písal vyššie, účelom článku nebolo vnútiť si názor, ktorý jazyk je lepší, ale zjednodušiť možnosť učiť sa oba jazyky, prípadne medzi nimi migrovať.

Ak sa vám článok páčil, budem rád, ak budem mať nových odberateľov youtube и telegram kanálov.

Опрос

Ktorý z nasledujúcich balíkov využívate pri svojej práci?

Do komentárov môžete napísať dôvod vášho výberu.

Do prieskumu sa môžu zapojiť iba registrovaní užívatelia. Prihlásiť saProsím.

Ktorý balík spracovania údajov používate (môžete vybrať niekoľko možností)

  • 45,2%poriadok 19

  • 33,3%údaje.tabuľka14

  • 54,8%pandy23

Hlasovalo 42 užívateľov. 9 užívateľov sa zdržalo hlasovania.

Zdroj: hab.com

Pridať komentár