ProHoster > Blog > Administrácia > Aký jazyk zvoliť na prácu s údajmi – R alebo Python? Obaja! Migrácia z pandy na tidyverse a data.table a späť
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é.
Úč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 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:
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:
В data.table reťaze sa používajú podobným spôsobom.
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
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.
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.
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.
V tomto článku budeme používať niekoľko súborov údajov:
Dve prevzatia zo služby Google Analytics.
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ť.
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:
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().
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.
В 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.
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
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.
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íkladdf['col_name']), alebo bez úvodzoviek za bodkou (príkladdf.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.
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.
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.
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).
Existuje niekoľko typov spojení:
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).
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.
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.
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.
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.