ProHoster > Blog > Adminisztráció > 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
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.
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.
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:
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:
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.
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
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.
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.
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.
A cikkben több adatkészletet fogunk használni:
Két letöltés a Google Analytics szolgáltatásból.
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.
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:
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().
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.
В 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.
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
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.
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éldadf['col_name']), vagy idézőjelek nélkül az időszak után (példadf.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.
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.
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.
Ez a Google Analytics novemberi és decemberi feltöltése, ebben a részben ezeket az adatokat egy táblázatba fogjuk összevonni.
В 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.
Többféle csatlakozás létezik:
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.
В 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"))
В 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).
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.
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.
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.
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()
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)