Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

Ha rákeresünk az interneten az R-re vagy a Python-ra, cikkek millióit és több kilométernyi vitát találunk abban a témában, hogy melyik a jobb, gyorsabb és kényelmesebb az adatokkal való munkavégzéshez. De sajnos ezek a cikkek és viták nem különösebben hasznosak.

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

Ennek a cikknek az a célja, hogy összehasonlítsa az alapvető adatfeldolgozási technikákat a két nyelv legnépszerűbb csomagjaiban. És segítsen az olvasóknak gyorsan elsajátítani valamit, amit még nem tudnak. Azok számára, akik Pythonban írnak, megtudják, hogyan tehetik meg ugyanezt R-ben, és fordítva.

A cikk során elemezzük az R legnépszerűbb csomagjainak szintaxisát. Ezeket a csomagokat tartalmazza a könyvtár tidyverseés a csomagot is data.table. És hasonlítsa össze a szintaxisukat pandas, a Python legnépszerűbb adatelemző csomagja.

Lépésről lépésre végigjárjuk az adatelemzés teljes útját a betöltéstől az analitikus ablakfunkciók Python és R használatával történő végrehajtásáig.

Tartalom

Ez a cikk csalólapként használható, ha elfelejtette, hogyan kell elvégezni néhány adatfeldolgozási műveletet az egyik vizsgált csomagban.

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

  1. Fő szintaktikai különbségek az R és a Python között
    1.1. Hozzáférés a csomagfunkciókhoz
    1.2. Feladat
    1.3. indexelés
    1.4. Módszerek és OOP
    1.5. Csővezetékek
    1.6. Adatstruktúrák
  2. Néhány szó az általunk használt csomagokról
    2.1. rendezett változat
    2.2. adattábla
    2.3. pandák
  3. Csomagok telepítése
  4. adatok betöltése
  5. Adatkeretek létrehozása
  6. A szükséges oszlopok kiválasztása
  7. Sorok szűrése
  8. Csoportosítás és összesítés
  9. A táblázatok függőleges egyesítése (UNION)
  10. Táblázatok vízszintes összekapcsolása (JOIN)
  11. Alapvető ablakfüggvények és számított oszlopok
  12. Megfelelőségi táblázat az R és a Python adatfeldolgozási módszerei között
  13. Következtetés
  14. Egy rövid felmérés arról, hogy melyik csomagot használja

Ha érdekli az adatelemzés, megtalálhatja az én távirat и youtube csatornák. A tartalom nagy része az R nyelvnek szól.

Fő szintaktikai különbségek az R és a Python között

A Pythonról R-re vagy fordítva való váltás megkönnyítése érdekében elmondok néhány fő szempontot, amelyekre figyelni kell.

Hozzáférés a csomagfunkciókhoz

Miután egy csomagot betöltött az R-be, nem kell megadnia a csomag nevét a funkcióinak eléréséhez. A legtöbb esetben ez nem gyakori az R-ben, de elfogadható. Egyáltalán nem kell csomagot importálnod, ha valamelyik funkcióját a kódodban szeretnéd, hanem egyszerűen hívd meg a csomag és a függvény nevének megadásával. A csomag- és függvénynevek elválasztója az R-ben kettős kettőspont. package_name::function_name().

Ezzel szemben a Pythonban klasszikusnak számít, ha egy csomag függvényeit a nevének kifejezett megadásával hívják meg. Egy csomag letöltésekor általában rövidített nevet kap, pl. pandas általában álnevet használnak pd. Egy csomagfunkció egy ponton keresztül érhető el package_name.function_name().

Feladat

Az R-ben gyakori a nyíl használata az objektum értékének hozzárendelésére. obj_name <- value, bár egyetlen egyenlőségjel megengedett, az R-ben lévő egyetlen egyenlőségjelet elsősorban az értékek függvényargumentumoknak való átadására használják.

A Pythonban a hozzárendelés kizárólag egyetlen egyenlőségjellel történik obj_name = value.

indexelés

Itt is elég jelentős különbségek vannak. Az R-ben az indexelés egytől kezdődik, és az eredményül kapott tartomány összes megadott elemét tartalmazza,

Pythonban az indexelés nulláról indul, és a kiválasztott tartomány nem tartalmazza az indexben megadott utolsó elemet. Szóval design x[i:j] Pythonban nem fogja tartalmazni a j elemet.

Különbségek vannak a negatív indexelésben is, az R jelölésben x[-1] visszaadja a vektor összes elemét, kivéve az utolsót. A Pythonban egy hasonló jelölés csak az utolsó elemet adja vissza.

Módszerek és OOP

R az OOP-t a maga módján valósítja meg, erről írtam a cikkben "OOP az R nyelven (1. rész): S3 osztályok". Általánosságban elmondható, hogy az R funkcionális nyelv, és benne minden függvényekre épül. Ezért például az Excel-felhasználók számára nyissa meg a tydiverse könnyebb lesz mint pandas. Bár ez lehet az én szubjektív véleményem.

Röviden, az R-beli objektumok nem rendelkeznek metódusokkal (ha S3 osztályokról beszélünk, de vannak más OOP implementációk, amelyek sokkal ritkábban fordulnak elő). Csak általánosított függvények vannak, amelyek az objektum osztályától függően eltérően dolgozzák fel őket.

Csővezetékek

Talán ez a neve pandas Nem lesz teljesen helyes, de megpróbálom elmagyarázni a jelentését.

Annak érdekében, hogy ne mentse el a közbenső számításokat, és ne hozzon létre szükségtelen objektumokat a munkakörnyezetben, használhat egyfajta csővezetéket. Azok. átadja a számítás eredményét egyik függvényről a másikra, és ne mentse el a közbenső eredményeket.

Vegyük a következő kódpéldát, ahol a közbenső számításokat külön objektumokban tároljuk:

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

3 műveletet hajtottunk végre egymás után, és mindegyik eredményét külön objektumba mentettük. De valójában nincs szükségünk ezekre a köztes objektumokra.

Vagy még rosszabb, de ismerősebb az Excel felhasználók számára.

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

Ebben az esetben nem mentettük el a közbenső számítási eredményeket, de a beágyazott függvényekkel kódolvasás rendkívül kényelmetlen.

Az R-ben az adatfeldolgozás több megközelítését fogjuk megvizsgálni, és ezek különböző módon hajtanak végre hasonló műveleteket.

Csővezetékek a könyvtárban tidyverse az üzemeltető hajtja végre %>%.

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

Így vesszük a munka eredményét func1() és adja át első érvként func2(), akkor ennek a számításnak az eredményét adjuk át első argumentumként func3(). És a végén az összes elvégzett számítást beírjuk az objektumba obj <-.

A fentieket a szavaknál jobban szemlélteti ez a mém:
Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

В data.table a láncokat hasonló módon használják.

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

Mindegyik szögletes zárójelben használhatja az előző művelet eredményét.

В pandas az ilyen műveleteket pont választja el.

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

Azok. elfoglaljuk az asztalunkat df és használja a módszerét fun1(), akkor a módszert alkalmazzuk a kapott eredményre fun2(), után fun3(). Az eredmény egy objektumba kerül obj .

Adatstruktúrák

Az R és a Python adatstruktúrái hasonlóak, de eltérő nevük.

Leírás
Név R-ben
Név Python/pandas nyelven

Táblázat szerkezete
data.frame, data.table, tibble
DataFrame

Egydimenziós értéklista
vektor
Pandás sorozatok vagy tiszta Python listák

Többszintű, nem táblázatos szerkezet
Lista
szótár (dikt)

Az alábbiakban megvizsgálunk néhány további jellemzőt és szintaxis különbséget.

Néhány szó az általunk használt csomagokról

Először is mesélek egy kicsit azokról a csomagokról, amelyekkel megismerkedhet ebben a cikkben.

rendezett változat

Nyelvismeret: tidyverse.org
Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza
könyvtár tidyverse írta Hedley Wickham, az RStudio vezető kutatója. tidyverse lenyűgöző csomagkészletből áll, amelyek leegyszerűsítik az adatfeldolgozást, amelyek közül 5 szerepel a CRAN tárolóból a legjobb 10 letöltés között.

A könyvtár magja a következő csomagokból áll: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Ezen csomagok mindegyike egy adott probléma megoldására irányul. Például dplyr adatkezelésre készült, tidyr az adatok tiszta formába hozása, stringr leegyszerűsíti a húrokkal való munkát, és ggplot2 az egyik legnépszerűbb adatvizualizációs eszköz.

előny tidyverse az egyszerűség és könnyen olvasható szintaxis, amely sok tekintetben hasonlít az SQL lekérdező nyelvhez.

adattábla

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és visszaNyelvismeret: r-datatable.com

Szerző data.table Matt Dole a H2O.ai-tól.

A könyvtár első kiadására 2006-ban került sor.

A csomag szintaxisa nem olyan kényelmes, mint a benn tidyverse és inkább a klasszikus R-beli dataframe-ekre emlékeztet, ugyanakkor jelentősen kibővült a funkcionalitás.

Ebben a csomagban a táblázattal végzett összes manipulációt szögletes zárójelben írjuk le, és ha lefordítja a szintaxist data.table SQL-ben valami ilyesmit kapsz: data.table[ WHERE, SELECT, GROUP BY ]

Ennek a csomagnak az erőssége a nagy mennyiségű adat feldolgozásának sebessége.

pandák

Nyelvismeret: pandas.pydata.org Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

A könyvtár elnevezése a „panel data” ökonometriai kifejezésből származik, amelyet többdimenziós strukturált információhalmazok leírására használnak.

Szerző pandas az amerikai Wes McKinney.

Amikor Pythonban adatelemzésről van szó, egyenlő pandas Nem. Nagyon multifunkcionális, magas szintű csomag, amely lehetővé teszi az adatok bármilyen manipulálását, az adatok tetszőleges forrásból történő betöltésétől a megjelenítésig.

További csomagok telepítése

A cikkben tárgyalt csomagok nem szerepelnek az alapvető R és Python disztribúciókban. Bár van egy kis figyelmeztetés, ha telepítette az Anaconda disztribúciót, akkor telepítse azt is pandas nem szükséges.

Csomagok telepítése R-ben

Ha legalább egyszer megnyitotta az RStudio fejlesztői környezetet, valószínűleg már tudja, hogyan kell telepíteni a szükséges csomagot az R-ben. A csomagok telepítéséhez használja a szabványos parancsot install.packages() közvetlenül az R-ben futtatva.

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

Telepítés után a csomagokat össze kell kötni, amihez a legtöbb esetben a parancsot használják library().

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

Csomagok telepítése Pythonban

Tehát, ha tiszta Python van telepítve, akkor pandas manuálisan kell telepítenie. Nyisson meg egy parancssort vagy terminált az operációs rendszertől függően, és írja be a következő parancsot.

pip install pandas

Ezután visszatérünk a Pythonba, és a paranccsal importáljuk a telepített csomagot import.

import pandas as pd

adatok betöltése

Az adatbányászat az adatelemzés egyik legfontosabb lépése. Mind a Python, mind az R, ha kívánja, széles körű lehetőségeket kínál az adatok bármilyen forrásból való beszerzésére: helyi fájlokból, fájlokból az internetről, webhelyekről, mindenféle adatbázisból.

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

A cikkben több adatkészletet fogunk használni:

  1. Két letöltés a Google Analytics szolgáltatásból.
  2. Titanic utasadatkészlet.

Minden adat rajtam van GitHub csv és tsv fájlok formájában. Honnan kérjük őket?

Adatok betöltése R-be: tidyverse, vroom, readr

Adatok betöltése a könyvtárba tidyverse Két csomag van: vroom, readr. vroom modernebb, de a jövőben a csomagok kombinálhatók is lehetnek.

Idézet tőle hivatalos dokumentáció vroom.

vroom vs olvasó
Mit jelent a kiadás vroom érti readr? Egyelőre azt tervezzük, hogy a két csomagot külön-külön fejlesztjük, de valószínűleg a jövőben egyesíteni fogjuk a csomagokat. A vroom lusta olvasásának egyik hátránya, hogy bizonyos adatproblémákat nem lehet előre jelenteni, ezért átgondolást igényel, hogyan lehet őket a legjobban egységesíteni.

vroom vs olvasó
Mit jelent a kiadás? vroom a readr? Jelenleg mindkét csomag külön-külön történő fejlesztését tervezzük, de valószínűleg a jövőben kombinálni fogjuk őket. A lusta olvasás egyik hátránya vroom az, hogy az adatokkal kapcsolatos egyes problémákat nem lehet előre jelenteni, ezért át kell gondolni, hogyan lehet ezeket a legjobban kombinálni.

Ebben a cikkben mindkét adatbetöltő csomagot megvizsgáljuk:

Adatok betöltése az R: vroom csomagba

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

Adatok betöltése az R: readr-be

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

A csomagban vroom, csv / tsv adatformátumtól függetlenül a betöltés az azonos nevű funkcióval történik vroom(), a csomagban readr minden formátumhoz más függvényt használunk read_tsv() и read_csv().

Adatok betöltése R-be: data.table

В data.table van egy funkció az adatok betöltésére fread().

Adatok betöltése R: data.table csomagba

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

Adatok betöltése Pythonban: pandák

Ha összehasonlítjuk az R csomagokkal, akkor ebben az esetben a szintaxis áll legközelebb a pandas akarat readr, mert pandas bárhonnan kérhet adatokat, és ebben a csomagban egy egész funkciócsalád található read_*().

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

És sok más funkció, amelyek különféle formátumú adatok olvasására szolgálnak. De a mi céljainknak ez is elég read_table() vagy read_csv() argumentum segítségével szeptember az oszlopelválasztó megadásához.

Adatok betöltése Pythonban: pandák

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

Adatkeretek létrehozása

asztal óriási, amit betöltöttünk, van egy mező Szex, amely az utas nemi azonosítóját tárolja.

De az adatok kényelmesebb bemutatása érdekében az utasok nemével kapcsolatban a nemi kód helyett a nevet kell használni.

Ehhez létrehozunk egy kis könyvtárat, egy táblázatot, amelyben csak 2 oszlop (kód és nem neve) és 2 sor lesz.

Adatkeret létrehozása R-ben: tidyverse, dplyr

Az alábbi kódpéldában a függvény segítségével létrehozzuk a kívánt adatkeretet tibble() .

Adatkeret létrehozása R: dplyr-ben

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

Dataframe létrehozása R: data.table-ban

Dataframe létrehozása R: data.table-ban

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

Adatkeret létrehozása Pythonban: pandas

В pandas A keretek létrehozása több lépésben történik, először szótárt készítünk, majd a szótárt dataframe-vé alakítjuk.

Adatkeret létrehozása Pythonban: pandas

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

Oszlopok kiválasztása

A táblák, amelyekkel dolgozik, több tucat vagy akár több száz oszlopot is tartalmazhatnak. De az elemzés elvégzéséhez általában nincs szükség a forrástáblázatban elérhető összes oszlopra.

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

Ezért az egyik első művelet, amelyet a forrástáblázattal végrehajt, az, hogy megtisztítja a felesleges információkat, és felszabadítja az információ által elfoglalt memóriát.

Oszlopok kiválasztása R-ben: tidyverse, dplyr

szintaxis dplyr nagyon hasonlít az SQL lekérdező nyelvhez, ha ismeri, gyorsan elsajátítja ezt a csomagot.

Az oszlopok kiválasztásához használja a függvényt select().

Az alábbiakban példákat találunk arra a kódra, amellyel a következő módokon választhat ki oszlopokat:

  • A szükséges oszlopok nevének felsorolása
  • Tekintse meg az oszlopneveket reguláris kifejezésekkel
  • Adattípus vagy az oszlopban szereplő adatok bármely más tulajdonsága szerint

Oszlopok kiválasztása az R-ben: 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)

Oszlopok kiválasztása R: adat.tábla

Ugyanezek a műveletek data.table kissé eltérően hajtják végre, a cikk elején leírtam, hogy mely argumentumok vannak szögletes zárójelben data.table.

DT[i,j,by]

Hol:
én - hol, azaz. sorok szerinti szűrés
j - kiválaszt|frissítés|tesz, azaz. oszlopok kiválasztása és konvertálása
szerint - adatcsoportosítás

Oszlopok kiválasztása R: adat.tábla

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

Változó .SD lehetővé teszi az összes oszlop elérését, és .SDcols szűrje ki a szükséges oszlopokat reguláris kifejezésekkel vagy más függvényekkel a szükséges oszlopok nevének szűréséhez.

Oszlopok kiválasztása Pythonban, pandák

Oszlopok név szerinti kiválasztásához pandas elég megadni egy listát a nevükről. Az oszlopok név szerinti kiválasztásához vagy kizárásához pedig reguláris kifejezések használatával a függvényeket kell használni drop() и filter(), és érvelés tengely=1, amellyel azt jelzi, hogy sorok helyett oszlopokat kell feldolgozni.

Egy mező adattípus szerinti kiválasztásához használja a függvényt select_dtypes(), és az érvekbe tartalmaz vagy kizár átadja az adattípusok listáját annak megfelelően, hogy mely mezőket kell kiválasztania.

Oszlopok kiválasztása Pythonban: pandák

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

Sorok szűrése

Például a forrástábla több év adatait is tartalmazhatja, de csak az elmúlt hónapot kell elemeznie. Az extra sorok ismét lelassítják az adatfeldolgozási folyamatot, és eltömítik a számítógép memóriáját.

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

Sorok szűrése R-ben: tydyverse, dplyr

В dplyr a függvény a sorok szűrésére szolgál filter(). Első argumentumként egy adatkeretet vesz fel, majd felsorolja a szűrési feltételeket.

Amikor logikai kifejezéseket ír egy táblázat szűrésére, ebben az esetben adja meg az oszlopneveket idézőjelek nélkül és a tábla nevének megadása nélkül.

Ha több logikai kifejezést használ a szűréshez, használja a következő operátorokat:

  • & vagy vessző – logikai ÉS
  • | - logikai VAGY

Sorok szűrése R-ben: dplyr

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

Sorok szűrése R-ben: adat.tábla

Ahogy fentebb már írtam, be data.table az adatkonverziós szintaxis szögletes zárójelben van.

DT[i,j,by]

Hol:
én - hol, azaz. sorok szerinti szűrés
j - kiválaszt|frissítés|tesz, azaz. oszlopok kiválasztása és konvertálása
szerint - adatcsoportosítás

Az argumentum a sorok szűrésére szolgál i, amelynek az első pozíciója van szögletes zárójelben.

Az oszlopok logikai kifejezésekkel érhetők el idézőjelek és a táblanév megadása nélkül.

A logikai kifejezések ugyanúgy kapcsolódnak egymáshoz, mint a dplyr a & és | operátorokon keresztül.

Sorok szűrése R-ben: adat.tábla

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

Karakterláncok szűrése Pythonban: pandák

Szűrés sorok szerint pandas hasonló a beszűréshez data.table, és szögletes zárójelben történik.

Ebben az esetben az oszlopokhoz való hozzáférés szükségszerűen az adatkeret nevének megadásával történik, majd az oszlop nevét idézőjelben is megadhatjuk szögletes zárójelben (példa df['col_name']), vagy idézőjelek nélkül az időszak után (példa df.col_name).

Ha egy adatkeretet több feltétel alapján kell szűrnie, minden feltételt zárójelben kell elhelyezni. A logikai feltételeket operátorok kapcsolják össze egymással & и |.

Karakterláncok szűrése Pythonban: pandák

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

Az adatok csoportosítása és összesítése

Az adatelemzésben az egyik leggyakrabban használt művelet a csoportosítás és az összesítés.

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

A műveletek végrehajtásának szintaxisa szétszórva van az összes általunk áttekintett csomagban.

Ebben az esetben egy adatkeretet veszünk példaként óriási, és számítsa ki a jegyek számát és átlagos költségét a kabinosztálytól függően.

Az adatok csoportosítása és összesítése R-ben: tidyverse, dplyr

В dplyr a függvény csoportosításra szolgál group_by(), és az összesítéshez summarise(). Valójában, dplyr funkciók egész családja van summarise_*(), de ennek a cikknek az a célja, hogy összehasonlítsa az alapvető szintaxist, ezért nem megyünk bele ilyen dzsungelbe.

Alapvető aggregációs funkciók:

  • sum() — összegzés
  • min() / max() – minimális és maximális érték
  • mean() - átlagos
  • median() — medián
  • length() - Mennyiség

Csoportosítás és összesítés R-ben: dplyr

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

Funkcióban group_by() első érvként átadtuk a táblázatot óriási, majd jelezte a mezőt Pclass, amivel csoportosítjuk asztalunkat. Ennek a műveletnek az eredménye az operátor használatával %>% a függvény első argumentumaként summarise(), és hozzáadott még 2 mezőt: utasok и átlagos_ár. Az elsőben a funkció használatával length() kiszámolta a jegyek számát, a másodikban pedig a függvény segítségével mean() megkapta az átlagos jegyárat.

Az adatok csoportosítása és összesítése R-ben: adatok.tábla

В data.table az argumentumot az összesítésre használják j amelynek szögletes zárójelben van egy második pozíciója, és a csoportosításhoz by vagy keyby, amelyek a harmadik helyen állnak.

Az aggregációs függvények listája ebben az esetben megegyezik a pontban leírtakkal dplyr, mert ezek az alapvető R szintaxis függvényei.

Csoportosítás és összesítés R-ben: adatok.tábla

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

Adatok csoportosítása és összesítése Pythonban: pandák

Csoportosítás pandas hasonló dplyr, de az összesítés nem hasonlít a dplyr nincs bekapcsolva data.table.

Csoportosításhoz használja a módszert groupby(), amelybe át kell adnia azoknak az oszlopoknak a listáját, amelyek alapján az adatkeret csoportosul.

Az összesítéshez használhatja a módszert agg()amely szótárt fogad el. A szótár kulcsai azok az oszlopok, amelyeken alkalmazni fogja az összesítő függvényeket, az értékek pedig az összesítő függvények nevei.

Aggregációs funkciók:

  • sum() — összegzés
  • min() / max() – minimális és maximális érték
  • mean() - átlagos
  • median() — medián
  • count() - Mennyiség

Funkció reset_index() az alábbi példában az olyan beágyazott indexek visszaállítására szolgál, amelyek pandas alapértelmezés szerint az adatok összesítése után.

Szimbólum lehetővé teszi a következő sorra lépést.

Csoportosítás és összesítés Pythonban: pandák

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

A táblázatok függőleges összekapcsolása

Olyan művelet, amelyben két vagy több azonos szerkezetű táblát kapcsol össze. Az általunk betöltött adatok táblázatokat tartalmaznak ga_nov и ga_dec. Ezek a táblázatok szerkezetükben azonosak, pl. ugyanazok az oszlopok és az ezekben az oszlopokban lévő adattípusok.

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

Ez a Google Analytics novemberi és decemberi feltöltése, ebben a részben ezeket az adatokat egy táblázatba fogjuk összevonni.

Függőlegesen csatlakozó táblázatok R-ben: tidyverse, dplyr

В dplyr A funkció segítségével 2 táblázatot egyesíthet egybe bind_rows(), a táblázatok átadása argumentumaként.

Sorok szűrése R-ben: dplyr

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

Függőlegesen összekapcsoló táblák R-ben: adat.tábla

Ez sem bonyolult, használjuk rbind().

Sorok szűrése R-ben: adat.tábla

## data.table
rbind(ga_nov, ga_dec)

Függőlegesen összekapcsoló táblázatok Pythonban: pandák

В pandas a függvény táblák összekapcsolására szolgál concat(), amelybe át kell adnia a keretek listáját, hogy egyesítse őket.

Karakterláncok szűrése Pythonban: pandák

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

A táblázatok vízszintes összekapcsolása

Olyan művelet, amelyben a második oszlopai kulcsonként hozzáadódnak az első táblázathoz. Gyakran használják, amikor egy ténytáblázatot (például egy értékesítési adatokat tartalmazó táblázatot) néhány referenciaadattal (például egy termék költségével) gazdagítanak.

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

Többféle csatlakozás létezik:

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

Az előzőleg betöltött táblázatban óriási van egy oszlopunk Szex, amely megfelel az utas nemi kódjának:

1 - nőstény
2 - férfi

Ezenkívül létrehoztunk egy táblázatot - egy referenciakönyvet nemek. Az utasok nemére vonatkozó adatok kényelmesebb megjelenítéséhez hozzá kell adnunk a nem nevét a címtárból nemek az asztalhoz óriási.

Vízszintes asztalcsatlakozás R-ben: tidyverse, dplyr

В dplyr A vízszintes összekapcsoláshoz a funkciók egész családja létezik:

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

A gyakorlatomban leggyakrabban használt left_join().

Az első két argumentumként a fent felsorolt ​​függvények két táblát foglalnak össze, és harmadik argumentumként by meg kell adnia az egyesítendő oszlopokat.

Vízszintes asztalcsatlakozás R-ben: dplyr

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

Táblázatok vízszintes összekapcsolása R-ben: adat.tábla

В data.table A függvény segítségével táblákat kell egyesíteni kulcsokkal merge().

Érvek a merge() függvényhez a data.table-ban

  • x, y — Csatlakozási táblázatok
  • by — Oszlop, amely a csatlakozás kulcsa, ha mindkét táblában ugyanaz a név
  • by.x, by.y — Összevonandó oszlopnevek, ha eltérő nevük van a táblázatokban
  • all, all.x, all.y — Join type, all visszaadja az összes sort mindkét táblából, all.x a LEFT JOIN műveletnek felel meg (az első tábla összes sorát elhagyja), all.y — megfelel a RIGHT JOIN művelet (a második tábla összes sorát elhagyja).

Táblázatok vízszintes összekapcsolása R-ben: adat.tábla

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

Vízszintes asztalcsatlakozás a Pythonban: pandák

Valamint benne data.table-Ban pandas a függvény táblák összekapcsolására szolgál merge().

A merge() függvény argumentumai pandákban

  • hogyan — Csatlakozás típusa: bal, jobb, külső, belső
  • on — Oszlop, amely kulcs, ha mindkét táblában ugyanaz a neve
  • left_on, right_on — A kulcsoszlopok nevei, ha a táblázatokban eltérő nevük van

Vízszintes asztalcsatlakozás a Pythonban: pandák

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

Alapvető ablakfüggvények és számított oszlopok

Az ablakfüggvények jelentésükben hasonlóak az aggregációs függvényekhez, és gyakran használják az adatelemzésben is. Az aggregációs függvényekkel ellentétben azonban az ablakfüggvények nem változtatják meg a kimenő adatkeret sorainak számát.

Melyik nyelvet válasszuk az adatok kezeléséhez - R vagy Python? Mindkét! Vándorlás a pandákról a tidyverse-re és az adatokra.tábla és vissza

Lényegében az ablak függvény segítségével a beérkező adatkeretet valamilyen kritérium szerint részekre bontjuk, pl. egy mező vagy több mező értékével. És minden ablakon aritmetikai műveleteket hajtunk végre. Ezeknek a műveleteknek az eredménye minden sorban visszakerül, azaz. a táblázat összes sorszámának megváltoztatása nélkül.

Vegyük például a táblázatot óriási. Kiszámolhatjuk, hogy az egyes jegyek ára hány százaléka volt a kabinosztályon belül.

Ehhez minden sorba be kell számolnunk az aktuális kabinosztályhoz tartozó jegy teljes költségét, amelyhez az ebben a sorban lévő jegy tartozik, majd el kell osztani az egyes jegyek költségét az azonos kabinosztályba tartozó összes jegy összköltségével. .

Ablakfunkciók R-ben: tidyverse, dplyr

Új oszlopok hozzáadásához sorcsoportosítás nélkül, in dplyr funkciót tölt be mutate().

A fent leírt problémát az adatok mezőnkénti csoportosításával oldhatja meg Pclass és a mező összegzése egy új oszlopban Viteldíj. Ezután bontsa ki a táblázat csoportosítását, és ossza fel a mezőértékeket Viteldíj az előző lépésben történtekre.

Ablakfunkciók R-ben: dplyr

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

Ablakfüggvények R-ben: data.table

A megoldási algoritmus ugyanaz marad, mint itt dplyr, a táblázatot mezőnként ablakokra kell felosztanunk Pclass. Írja be egy új oszlopba az egyes soroknak megfelelő csoport összegét, és adjon hozzá egy oszlopot, amelyben kiszámítjuk az egyes jegyek költségének részesedését a csoportjában.

Új oszlopok hozzáadásához data.table jelen lévő operátor :=. Az alábbiakban egy példa látható egy probléma megoldására a csomag használatával data.table

Ablakfüggvények R-ben: data.table

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

Ablakfunkciók Pythonban: pandák

Új oszlop hozzáadásának egyik módja pandas - használja a funkciót assign(). A jegyek árának kabinosztályonkénti összegzéséhez, sorok csoportosítása nélkül, a függvényt használjuk transform().

Az alábbiakban egy példa látható egy megoldásra, amelyben hozzáadjuk a táblázatot óriási ugyanaz a 2 oszlop.

Ablakfunkciók Pythonban: pandák

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

Függvények és módszerek megfelelési táblázata

Az alábbiakban egy táblázat található az általunk vizsgált csomagokban lévő adatokkal végzett különféle műveletek metódusai közötti megfelelési táblázatról.

Leírás
rendezett változat
adattábla
pandák

adatok betöltése
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Adatkeretek létrehozása
tibble()
data.table()
dict() + from_dict()

Oszlopok kiválasztása
select()
érv j, második pozíció szögletes zárójelben
szögletes zárójelben adjuk át a szükséges oszlopok listáját / drop() / filter() / select_dtypes()

Sorok szűrése
filter()
érv i, az első pozíció szögletes zárójelben
Szögletes zárójelben felsoroljuk a szűrési feltételeket / filter()

Csoportosítás és összesítés
group_by() + summarise()
érvek j + by
groupby() + agg()

A táblázatok függőleges egyesítése (UNION)
bind_rows()
rbind()
concat()

Táblázatok vízszintes összekapcsolása (JOIN)
left_join() / *_join()
merge()
merge()

Alapvető ablakfunkciók és számított oszlopok hozzáadása
group_by() + mutate()
érv j operátor segítségével := + érv by
transform() + assign()

Következtetés

Talán a cikkben leírtam az adatfeldolgozás nem legoptimálisabb megvalósításait, ezért örülök, ha kijavítja a hibáimat a megjegyzésekben, vagy egyszerűen kiegészíti a cikkben megadott információkat más technikákkal az adatokkal való munkavégzéshez az R / Pythonban.

Ahogy fentebb is írtam, a cikknek nem az volt a célja, hogy ráerőltesse az ember véleményét arról, hogy melyik nyelv a jobb, hanem hogy leegyszerűsítse mindkét nyelv tanulásának lehetőségét, vagy ha szükséges, migráljon közöttük.

Ha tetszett a cikk, örülök, ha új feliratkozóim lesznek youtube и távirat csatornák.

Опрос

Az alábbi csomagok közül melyiket használja a munkája során?

Kommentben megírhatod a választás okát.

A felmérésben csak regisztrált felhasználók vehetnek részt. Bejelentkezés, kérem.

Milyen adatfeldolgozási csomagot használ (több lehetőség közül választhat)

  • 45,2%rendezett változat19

  • 33,3%adatok.14. táblázat

  • 54,8%pandák23

42 felhasználó szavazott. 9 felhasználó tartózkodott.

Forrás: will.com

Hozzászólás