Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

Interneten R edo Python bilatuz gero, milioika artikulu eta kilometroko eztabaida topatuko dituzu gaiari buruz zein den hobea, azkarragoa eta erosoagoa datuak lantzeko. Baina, zoritxarrez, artikulu eta gatazka horiek guztiak ez dira bereziki erabilgarriak.

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

Artikulu honen helburua bi hizkuntzetako pakete ezagunenetan datuak prozesatzeko oinarrizko teknikak alderatzea da. Eta lagundu irakurleei oraindik ezagutzen ez duten zerbait azkar menderatzen. Python-en idazten dutenentzat, jakin ezazu nola egin gauza bera R-n, eta alderantziz.

Artikuluan zehar R-ko pakete ezagunenen sintaxia aztertuko dugu. Hauek dira liburutegian sartutako paketeak tidyverseeta baita paketea ere data.table. Eta alderatu haien sintaxia pandas, Python-en datuen analisi pakete ezagunena.

Pausoz pauso datuen analisiaren bide osoa zeharkatuko dugu kargatzetik Python eta R erabiliz leiho analitikoen funtzioak burutzera.

Edukia

Artikulu hau iruzur orri gisa erabil daiteke kontuan hartutako paketeetako batean datuak prozesatzeko eragiketa bat nola egin ahaztu baduzu.

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

  1. R eta Python-en arteko sintaxi-desberdintasun nagusiak
    1.1. Paketeen funtzioetara sartzea
    1.2. Esleipena
    1.3. Indexatzea
    1.4. Metodoak eta OOP
    1.5. Hodiak
    1.6. Datuen Egiturak
  2. Erabiliko ditugun paketeei buruzko hitz batzuk
    2.1. txukuna
    2.2. datuak.taula
    2.3. pandas
  3. Paketeak instalatzea
  4. Datuak kargatzen
  5. Datu-markoak sortzea
  6. Behar dituzun zutabeak hautatzea
  7. Errenkadak iragaztea
  8. Taldekatzea eta Agregazioa
  9. Mahaien batasun bertikala (UNION)
  10. Taulen elkarketa horizontala (JOIN)
  11. Leihoaren oinarrizko funtzioak eta kalkulatutako zutabeak
  12. R eta Python-en datuak prozesatzeko metodoen arteko korrespondentzia-taula
  13. Ondorioa
  14. Inkesta labur bat erabiltzen duzun paketeari buruz

Datuen analisia interesatzen bazaizu, nirea aurki dezakezu telegrama и youtube kanalak. Eduki gehienak R hizkuntzari eskainitakoak dira.

R eta Python-en arteko sintaxi-desberdintasun nagusiak

Python-etik R-ra aldatzea errazteko, edo alderantziz, arreta jarri behar dituzun puntu nagusi batzuk emango ditut.

Paketeen funtzioetara sartzea

Pakete bat R-n kargatu ondoren, ez duzu paketearen izena zehaztu behar bere funtzioetara sartzeko. Kasu gehienetan hau ez da ohikoa R-n, baina onargarria da. Ez duzu pakete bat inportatu beharrik zure kodean bere funtzioren bat behar baduzu, baizik eta deitu paketearen izena eta funtzioaren izena zehaztuz. R-n paketeen eta funtzioen izenen arteko bereizlea bi puntu bikoitza da. package_name::function_name().

Pythonen, aitzitik, pakete baten funtzioei deitzea klasikotzat jotzen da bere izena esplizituki zehaztuz. Pakete bat deskargatzen denean, normalean izen laburtua ematen zaio, adibidez. pandas normalean ezizena erabiltzen da pd. Pakete-funtzio batera puntu baten bidez sartzen da package_name.function_name().

Esleipena

R-n, ohikoa da gezi bat erabiltzea objektu bati balio bat esleitzeko. obj_name <- value, nahiz eta berdintasun zeinu bakarra onartzen den, R-ko berdintasun zeinu bakarra erabiltzen da nagusiki funtzioen argumentuei balioak pasatzeko.

Python-en, esleipena berdintasun zeinu bakar batekin egiten da soilik obj_name = value.

Indexatzea

Hemen ere alde nahiko nabarmenak daude. R-n, indexazioa batean hasten da eta ondoriozko barrutian zehaztutako elementu guztiak barne hartzen ditu,

Python-en, indexazioa zerotik hasten da eta aukeratutako barrutiak ez du barne hartzen indizean zehaztutako azken elementua. Beraz, diseinua x[i:j] Python-en ez du j elementua sartuko.

Indexazio negatiboan ere aldeak daude, R idazkeran x[-1] bektorearen elementu guztiak itzuliko ditu azkena izan ezik. Python-en, antzeko notazio batek azken elementua bakarrik itzuliko du.

Metodoak eta OOP

R-k OOP inplementatzen du bere erara, honi buruz idatzi nuen artikuluan "OOP R hizkuntzan (1. zatia): S3 klaseak". Oro har, R lengoaia funtzionala da, eta bertan dagoen guztia funtzioen gainean eraikita dago. Hori dela eta, adibidez, Excel erabiltzaileentzat, joan hona tydiverse baino errazagoa izango da pandas. Hau nire iritzi subjektiboa izan daitekeen arren.

Laburbilduz, R-ko objektuek ez dute metodorik (S3 klaseei buruz hitz egiten badugu, baina badira beste OOP inplementazio batzuk, askoz ere ez hain ohikoak). Objektuaren klasearen arabera modu ezberdinean prozesatzen dituzten funtzio orokortuak baino ez daude.

Hodiak

Agian hau da izena pandas Ez da guztiz zuzena izango, baina esanahia azaltzen saiatuko naiz.

Tarteko kalkuluak ez gordetzeko eta lan-ingurunean alferrikako objektuak ez sortzeko, kanalizazio moduko bat erabil dezakezu. Horiek. kalkulu baten emaitza funtzio batetik bestera pasa, eta ez gorde tarteko emaitzak.

Har dezagun kode-adibide hau, non tarteko kalkuluak objektu bereizietan gordetzen ditugun:

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

3 eragiketa egin genituen sekuentzialki, eta bakoitzaren emaitza objektu bereizi batean gorde zen. Baina, egia esan, ez ditugu bitarteko objektu hauek behar.

Edo are okerrago, baina ezagunagoa Excel erabiltzaileentzat.

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

Kasu honetan, ez ditugu tarteko kalkuluen emaitzak gorde, baina habiaraturiko funtzioekin kodea irakurtzea oso deserosoa da.

Datuak prozesatzeko hainbat ikuspegi aztertuko ditugu R-n, eta antzeko eragiketak egiten dituzte modu ezberdinetan.

Hodiak liburutegian tidyverse operadoreak ezarrita %>%.

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

Horrela lanaren emaitza hartzen dugu func1() eta pasa ezazu lehen argumentu gisa func2(), orduan kalkulu honen emaitza lehen argumentu gisa pasatzen dugu func3(). Eta azkenean, egindako kalkulu guztiak objektuan idazten ditugu obj <-.

Aurreko guztia hitzak baino hobeto ilustratzen du meme honek:
Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

В data.table kateak antzera erabiltzen dira.

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

Kortxete bakoitzean aurreko eragiketaren emaitza erabil dezakezu.

В pandas eragiketa horiek puntu batez bereizten dira.

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

Horiek. gure mahaia hartzen dugu df eta erabili bere metodoa fun1(), ondoren lortutako emaitzari metodoa aplikatuko diogu fun2(), ondoren fun3(). Emaitza objektu batean gordetzen da objektua .

Datuen Egiturak

R eta Python-en datu-egiturak antzekoak dira, baina izen desberdinak dituzte.

Description
Izena R-n
Izena Python/pandas-en

Taularen egitura
datu.markoa, datu.taula, tible
Datu-markoa

Balioen zerrenda dimentsio bakarrekoa
Bektorea
Serie pandatan edo zerrenda Python hutsean

Maila anitzeko egitura ez-tabularra
Zerrenda
Hiztegia (dik)

Sintaxiaren beste ezaugarri eta desberdintasun batzuk aztertuko ditugu jarraian.

Erabiliko ditugun paketeei buruzko hitz batzuk

Lehenik eta behin, artikulu honetan zehar ezagutuko dituzun paketeei buruz pixka bat kontatuko dizut.

txukuna

Официальный сайт: tidyverse.org
Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera
Liburutegia tidyverse Hedley Wickham RStudioko Ikerketa Zientzialari Nagusiak idatzia. tidyverse Datuen prozesamendua errazten duten pakete-multzo ikusgarri batek osatzen dute, eta horietako 5 CRAN biltegiko 10 deskarga nagusien artean daude.

Liburutegiaren muina honako pakete hauek ditu: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Pakete horietako bakoitza arazo zehatz bat konpontzera zuzenduta dago. Adibidez dplyr datuak manipulatzeko sortua, tidyr datuak forma txukun batera eramateko, stringr sokekin lan egitea errazten du, eta ggplot2 datuak bistaratzeko tresnarik ezagunenetako bat da.

Abantaila tidyverse sintaxia sinplea eta irakurtzeko erraza da, modu askotan SQL kontsulta-lengoaiaren antzekoa dena.

datuak.taula

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzeraОфициальный сайт: r-datatable.com

Nork data.table H2O.ai taldeko Matt Dole da.

Liburutegiaren lehen kaleratzea 2006an egin zen.

Paketearen sintaxia ez da in bezain erosoa tidyverse eta R-n datu-marko klasikoak gogorarazten ditu, baina, aldi berean, funtzionalitatean nabarmen zabaldu da.

Pakete honetako taularen manipulazio guztiak kortxete artean deskribatzen dira, eta sintaxia itzultzen baduzu data.table SQLn, honelako zerbait lortzen duzu: data.table[ WHERE, SELECT, GROUP BY ]

Pakete honen indarra datu kopuru handiak prozesatzeko abiadura da.

pandas

Официальный сайт: pandas.pydata.org Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

Liburutegiaren izena "panel datuak" termino ekonometrikotik dator, dimentsio anitzeko egituratutako informazio multzoak deskribatzeko erabiltzen dena.

Nork pandas Wes McKinney estatubatuarra da.

Python-en datuen analisiari dagokionez, berdin pandas Ez. Oso funtzio anitzeko eta maila altuko pakete bat, datuekin edozein manipulazio egiteko aukera ematen duena, edozein iturritatik datuak kargatzen hasi eta bistaratu arte.

Pakete gehigarriak instalatzea

Artikulu honetan eztabaidatutako paketeak ez daude oinarrizko R eta Python banaketetan sartzen. Ohar txiki bat dagoen arren, Anaconda banaketa instalatu baduzu, instalatu gehigarria pandas ez da beharrezkoa.

Paketeak instalatzen R-n

RStudio garapen-ingurunea gutxienez behin ireki baduzu, ziurrenik dagoeneko badakizu nola instalatu behar den paketea R-n. Paketeak instalatzeko, erabili komando estandarra. install.packages() zuzenean R-n bertan exekutatuz.

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

Instalatu ondoren, paketeak konektatuta egon behar dira, kasu gehienetan komandoa erabiltzen da library().

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

Python-en paketeak instalatzea

Beraz, Python purua instalatuta baduzu, orduan pandas eskuz instalatu behar duzu. Ireki komando-lerro bat edo terminal bat, zure sistema eragilearen arabera eta sartu komando hau.

pip install pandas

Ondoren, Pythonera itzuliko gara eta instalatutako paketea komandoarekin inportatuko dugu import.

import pandas as pd

Datuak kargatzen

Datuen meatzaritza datuen analisiaren urrats garrantzitsuenetako bat da. Bai Python-ek bai R-k, nahi izanez gero, edozein iturritatik datuak lortzeko aukera zabalak eskaintzen dizkizute: tokiko fitxategiak, Interneteko fitxategiak, webguneak, mota guztietako datu-baseak.

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

Artikuluan zehar hainbat datu multzo erabiliko ditugu:

  1. Bi deskarga Google Analytics-etik.
  2. Titanic bidaiarien datu multzoa.

Datu guztiak nirean daude GitHub csv eta tsv fitxategien forman. Nondik eskatuko ditugu?

Datuak R-n kargatzen: tidyverse, vroom, readr

Datuak liburutegi batean kargatzeko tidyverse Bi pakete daude: vroom, readr. vroom modernoagoa, baina etorkizunean paketeak konbinatu daitezke.

aipamena dokumentazio ofiziala vroom.

vroom vs irakurgailua
Zer da oharra vroom esan nahi du readr? Oraingoz bi paketeak bereizita eboluzionatzeko asmoa dugu, baina ziurrenik paketeak bateratuko ditugu etorkizunean. vroom-en irakurketa alferraren desabantaila bat datu-arazo jakin batzuk ezin direla jakinarazi aurretik, beraz, horiek bateratzeko modurik onena hausnarketa bat behar da.

vroom vs readr
Zer esan nahi du askatzea? vroom egiteko readr? Momentuz bi paketeak bereizita garatzeko asmoa dugu, baina ziurrenik etorkizunean konbinatuko ditugu. Irakurketa alferraren desabantailetako bat vroom da datuekin arazo batzuk ezin direla aldez aurretik jakinarazi, beraz, horiek konbinatu ondoen pentsatu behar duzu.

Artikulu honetan bi datuak kargatzeko paketeei begiratuko diegu:

Datuak R: vroom paketean kargatzen

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

Datuak R-n kargatzen: irakurgailua

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

Paketean vroom, csv / tsv datu-formatua edozein dela ere, karga izen bereko funtzioaren bidez egiten da vroom(), paketean readr formatu bakoitzerako funtzio ezberdin bat erabiltzen dugu read_tsv() и read_csv().

Datuak R-n kargatzea: datuak.taula

В data.table datuak kargatzeko funtzio bat dago fread().

Datuak R-n kargatzen: data.table paketea

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

Datuak kargatzen Python-en: pandas

R paketeekin alderatzen badugu, kasu honetan sintaxia hurbilen dago pandas izango da readr, zeren pandas edonondik eska ditzake datuak, eta pakete honetan funtzio familia oso bat dago read_*().

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

Eta hainbat formatutako datuak irakurtzeko diseinatutako beste funtzio asko. Baina gure helburuetarako nahikoa da read_table() edo read_csv() argumentua erabiliz sep zutabe-bereizlea zehazteko.

Datuak kargatzen Python-en: pandas

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

Datu-markoak sortzea

Taula titanikoa, kargatu genuena, eremu bat dago Sex, bidaiariaren genero identifikatzailea gordetzen duena.

Baina bidaiarien generoari dagokionez datuak erosoago aurkezteko, izena erabili beharko zenuke genero kodea baino.

Horretarako, direktorio txiki bat sortuko dugu, taula bat, zeinetan 2 zutabe (kodea eta genero izena) eta 2 errenkada baino ez egongo diren hurrenez hurren.

R-n datu-markoa sortzea: tidyverse, dplyr

Beheko kodearen adibidean, nahi duzun datu-markoa sortzen dugu funtzioa erabiliz tibble() .

R-n datu-markoa sortzea: dplyr

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

R-n datu-markoa sortzea: data.table

R-n datu-markoa sortzea: data.table

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

Python-en datu-markoa sortzea: pandak

В pandas Markoak sortzea hainbat fasetan egiten da, lehenik hiztegi bat sortzen dugu, eta gero hiztegia datu-marko batean bihurtzen dugu.

Python-en datu-markoa sortzea: pandak

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

Zutabeak hautatzea

Lan egiten dituzun taulek dozenaka edo ehunka datu zutabe izan ditzakete. Baina azterketa egiteko, oro har, ez dituzu iturburu-taulan eskuragarri dauden zutabe guztiak behar.

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

Hori dela eta, iturburu-taularekin egingo duzun lehenengo eragiketa bat da beharrezkoa ez den informazioa garbitzea eta informazio horrek hartzen duen memoria askatzea.

R-n zutabeak hautatzea: tidyverse, dplyr

sintaxia dplyr SQL kontsulta-lengoaiaren oso antzekoa da, ezagutzen baduzu pakete hau azkar menderatuko duzu.

Zutabeak hautatzeko, erabili funtzioa select().

Jarraian, zutabeak modu hauetan hauta ditzakezun kodeen adibideak daude:

  • Beharrezko zutabeen izenak zerrendatzea
  • Erreparatu zutabeen izenak adierazpen erregularrak erabiliz
  • Datu motaren edo zutabean jasotako datuen beste edozein propietatearen arabera

R-n zutabeak hautatzea: 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)

R-n zutabeak hautatzea: datuak.taula

urtean eragiketa berdinak data.table zertxobait ezberdin egiten dira, artikuluaren hasieran kortxeteen artean zer argumentu dauden deskribatu nuen. data.table.

DT[i,j,by]

Non:
i - non, alegia. errenkaden arabera iragaztea
j - hautatu|eguneratu|egin, hau da. zutabeak hautatzea eta bihurtzea
arabera - datuen multzokatzea

R-n zutabeak hautatzea: datuak.taula

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

Aldakorra .SD zutabe guztietara sartzeko aukera ematen du, eta .SDcols iragazi behar dituzun zutabeak adierazpen erregularrak erabiliz edo behar dituzun zutabeen izenak iragazteko beste funtzio batzuk erabiliz.

Python-en zutabeak hautatzea, pandak

Zutabeak izenaren arabera hautatzeko pandas nahikoa da haien izenen zerrenda ematea. Eta esamolde erregularrak erabiliz zutabeak izenaren arabera aukeratzeko edo baztertzeko, funtzioak erabili behar dituzu drop() и filter(), eta argumentua ardatza=1, eta horrekin errenkadak baino zutabeak prozesatzea beharrezkoa dela adierazten duzu.

Eremu bat datu-motaren arabera hautatzeko, erabili funtzioa select_dtypes(), eta argudioetan besteak beste, edo baztertzeko pasa ezazu hautatu behar dituzun eremuei dagozkien datu-moten zerrenda.

Python-en zutabeak hautatzea: pandak

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

Errenkadak iragaztea

Adibidez, iturburu-taulak hainbat urtetako datuak izan ditzake, baina azken hilabetea soilik aztertu behar duzu. Berriz ere, lerro gehigarriek datuak prozesatzeko prozesua motelduko dute eta ordenagailuaren memoria blokeatzen dute.

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

R-ko errenkadak iragaztea: tydyverse, dplyr

В dplyr funtzioa errenkadak iragazteko erabiltzen da filter(). Datu-marko bat hartzen du lehen argumentu gisa, gero iragazketa-baldintzak zerrendatzen dituzu.

Taula bat iragazteko adierazpen logikoak idaztean, kasu honetan, zehaztu zutabe-izenak komatxorik gabe eta taularen izena deklaratu gabe.

Iragazteko hainbat adierazpen logiko erabiltzen dituzunean, erabili operadore hauek:

  • & edo koma - ETA logikoa
  • | - EDO logikoa

R-ko errenkadak iragaztea: dplyr

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

R-ko errenkadak iragaztea: datuak.taula

Goian idatzi dudan bezala, urtean data.table datuen bihurketa sintaxia kortxete artean sartuta dago.

DT[i,j,by]

Non:
i - non, alegia. errenkaden arabera iragaztea
j - hautatu|eguneratu|egin, hau da. zutabeak hautatzea eta bihurtzea
arabera - datuen multzokatzea

Argumentua errenkadak iragazteko erabiltzen da i, kortxete artean lehen posizioa duena.

Zutabeetara adierazpen logikoetan sartzen da komatxorik gabe eta taularen izena zehaztu gabe.

Adierazpen logikoak elkarren artean erlazionatuta daude dplyr & eta | operadoreen bidez.

R-ko errenkadak iragaztea: datuak.taula

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

Python-en kateak iragaztea: pandak

Iragazi errenkadaren arabera pandas iragaztearen antzekoa data.table, eta kortxete artean egiten da.

Kasu honetan, zutabeetarako sarbidea nahitaez datu-markoaren izena adieraziz egiten da; orduan, zutabearen izena ere adierazi daiteke kortxete artean komatxoen artean (Adibidez df['col_name']), edo komatxorik gabe puntuaren ondoren (Adibidez df.col_name).

Datu-markoa hainbat baldintzaren arabera iragazi behar baduzu, baldintza bakoitza parentesi artean jarri behar da. Baldintza logikoak elkarren artean lotzen dituzte operadoreek & и |.

Python-en kateak iragaztea: pandak

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

Datuen multzokatzea eta batuketa

Datuen analisian gehien erabiltzen den eragiketa bat taldekatzea eta agregatzea da.

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

Eragiketa hauek egiteko sintaxia berrikusten ditugun pakete guztietan sakabanatuta dago.

Kasu honetan, datu-marko bat hartuko dugu adibide gisa titanikoa, eta kalkulatu txartelen kopurua eta batez besteko kostua kabina klasearen arabera.

Datuen multzokatzea eta batuketa R-n: tidyverse, dplyr

В dplyr funtzioa taldekatzeko erabiltzen da group_by(), eta agregaziorako summarise(). Izan ere, dplyr funtzio familia oso bat dago summarise_*(), baina artikulu honen helburua oinarrizko sintaxia alderatzea da, beraz, ez gara halako oihanean sartuko.

Oinarrizko agregazio-funtzioak:

  • sum() - batuketa
  • min() / max() – Balio minimoa eta maximoa
  • mean() - batez bestekoa
  • median() - mediana
  • length() - kantitatea

Taldekatzea eta batuketa R-n: dplyr

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

Funtzionatzeko group_by() taula pasa genuen lehen argumentu gisa titanikoa, eta gero eremua adierazi Pclass, horren bidez gure mahaia taldekatuko dugu. Eragiketa honen emaitza operadorea erabiliz %>% funtzioari lehen argumentu gisa pasatu da summarise(), eta beste 2 eremu gehitu ditu: bidaiariak и batez besteko_prezioa. Lehenengoan, funtzioa erabiliz length() txartel kopurua kalkulatu, eta bigarrenean funtzioa erabiliz mean() sarreraren batez besteko prezioa jaso zuen.

Datuen multzokatzea eta batuketa R-n: datuak.taula

В data.table argumentua agregaziorako erabiltzen da j kortxete artean bigarren posizioa duena, eta taldekatzeko by edo keyby, hirugarren postua dutenak.

Kasu honetan agregazio-funtzioen zerrenda atalean deskribatutakoaren berdina da dplyr, zeren oinarrizko R sintaxiko funtzioak dira.

Taldekatzea eta batuketa R-n: datuak.taula

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

Python-en datuen multzokatzea eta batuketa: pandak

Taldekatzea pandas antzekoak dplyr, baina agregazioa ez da antzekoa dplyr ez piztuta data.table.

Taldekatzeko, erabili metodoa groupby(), eta bertan datu-markoa taldekatuko den zutabeen zerrenda pasa behar duzu.

Agregaziorako metodoa erabil dezakezu agg()hiztegi bat onartzen duena. Hiztegiko teklak agregazio-funtzioak aplikatuko dituzun zutabeak dira, eta balioak agregazio-funtzioen izenak dira.

Agregazio funtzioak:

  • sum() - batuketa
  • min() / max() – Balio minimoa eta maximoa
  • mean() - batez bestekoa
  • median() - mediana
  • count() - kantitatea

Funtzioa reset_index() beheko adibidean habiaraturiko indizeak berrezartzeko erabiltzen da pandas lehenetsitako datuak batu ondoren.

Sinboloa hurrengo lerrora joateko aukera ematen du.

Python-en multzokatzea eta agregatzea: pandak

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

Taulen elkarketa bertikala

Egitura bereko bi taula edo gehiago batzen dituen eragiketa. Kargatu ditugun datuek taulak dituzte ga_nov и ga_dec. Taula hauek egituraz berdinak dira, hau da. zutabe berdinak dituzte, eta zutabe horietako datu motak.

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

Hau Google Analytics-en igoera bat da azaroa eta abendua, atal honetan datu hauek taula batean konbinatuko ditugu.

Taulak R-n bertikalki elkartzea: tidyverse, dplyr

В dplyr 2 taula batean konbina ditzakezu funtzioa erabiliz bind_rows(), taulak bere argumentu gisa pasatuz.

R-ko errenkadak iragaztea: dplyr

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

Taulak bertikalean elkartzea R-n: datuak.taula

Gainera ez da ezer konplikatua, erabil dezagun rbind().

R-ko errenkadak iragaztea: datuak.taula

## data.table
rbind(ga_nov, ga_dec)

Python-en taulak bertikalki elkartzea: pandak

В pandas funtzioa taulak batzeko erabiltzen da concat(), zeinetan markoen zerrenda bat pasatu behar duzu horiek konbinatzeko.

Python-en kateak iragaztea: pandak

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

Taulen elkarketa horizontala

Eragiketa, bigarreneko zutabeak lehenengo taulara giltzaz gehitzen dituena. Sarritan erabiltzen da gertakari-taula bat (adibidez, salmenta-datuak dituen taula) erreferentzia-datu batzuekin (adibidez, produktu baten kostua) aberastean.

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

Hainbat lotura mota daude:

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

Aurretik kargatutako taulan titanikoa zutabe bat dugu Sex, bidaiariaren genero kodeari dagokiona:

1 - emea
2 - gizonezkoa

Gainera, taula bat sortu dugu, erreferentzia-liburu bat genero. Bidaiarien generoari buruzko datuak erosoago aurkezteko, generoaren izena gehitu behar dugu direktoriotik. genero mahaira titanikoa.

Taula horizontal bat R-n: tidyverse, dplyr

В dplyr Lotura horizontalerako funtzio familia oso bat dago:

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

Nire praktikan gehien erabiltzen dena da left_join().

Lehenengo bi argumentu gisa, goian zerrendatutako funtzioek bi taula hartzen dituzte elkartzeko, eta hirugarren argumentu gisa by batu beharreko zutabeak zehaztu behar dituzu.

Taula horizontal bat R-n: dplyr

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

R-ko taulen elkarketa horizontala: datuak.taula

В data.table Taulak teklaren bidez elkartu behar dituzu funtzioa erabiliz merge().

merge() funtziorako argudioak data.tablen

  • x, y — Elkartzeko taulak
  • by — Bi tauletan izen bera badu batzeko gakoa den zutabea
  • by.x, by.y — Batu beharreko zutabe-izenak, tauletan izen desberdinak badituzte
  • all, all.x, all.y — Elkartu mota, all.x bi tauletako errenkada guztiak itzuliko ditu, all.x LEFT JOIN eragiketari dagokio (lehen taulako errenkada guztiak utziko ditu), all.y — dagokio. RIGHT JOIN eragiketa (bigarren taulako errenkada guztiak utziko ditu).

R-ko taulen elkarketa horizontala: datuak.taula

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

Taula horizontala Python-en elkartzea: pandak

Baita in data.tablein pandas funtzioa taulak batzeko erabiltzen da merge().

merge() funtzioaren argudioak pandetan

  • nola — Konexio mota: ezkerreko, eskuineko, kanpoko, barneko
  • on — Gako bat den zutabea bi tauletan izen bera badu
  • left_on, right_on — Funtsezko zutabeen izenak, tauletan izen desberdinak badituzte

Taula horizontala Python-en elkartzea: pandak

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

Leihoaren oinarrizko funtzioak eta kalkulatutako zutabeak

Leiho-funtzioak agregazio-funtzioen esanahiaren antzekoak dira, eta datuen analisian ere erabili ohi dira. Baina agregazio funtzioek ez bezala, leiho funtzioek ez dute aldatzen irteerako datu-markoaren errenkada kopurua.

Zein hizkuntza aukeratu datuak lantzeko - R edo Python? Biak! Pandatik Tidyversera eta datuetara migratzen.taula eta atzera

Funtsean, leiho funtzioa erabiliz, sarrerako datu-markoa zatitan zatitzen dugu irizpide batzuen arabera, hau da. eremu baten edo hainbat eremuren balioaren arabera. Eta leiho bakoitzean eragiketa aritmetikoak egiten ditugu. Eragiketa horien emaitza lerro bakoitzean itzuliko da, hau da. taulako errenkada kopurua aldatu gabe.

Adibidez, har dezagun mahaia titanikoa. Txartel bakoitzaren kostua zein portzentaje zen bere kabina klasearen barruan kalkula dezakegu.

Horretarako, lerro bakoitzean txartel baten kostu osoa lortu behar dugu, linea honetako txartela dagokion kabina-klaserako, eta gero zatitu txartel bakoitzaren kostua kabina-klase bereko txartel guztien kostu osoa. .

Leiho-funtzioak R-n: tidyverse, dplyr

Zutabe berriak gehitzeko, errenkadak taldekatzea erabili gabe, in dplyr funtzioa betetzen du mutate().

Goian azaldutako arazoa ebatzi dezakezu datuak eremuka taldekatuz Pclass eta eremua zutabe berri batean batuz ez. Ondoren, banandu taula eta zatitu eremuaren balioak ez aurreko urratsean gertatutakoari.

Leiho-funtzioak R-n: dplyr

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

Leiho-funtzioak R-n: datuak.taula

Soluzio algoritmoa berdina izaten jarraitzen du dplyr, taula eremuka leihoetan banatu behar dugu Pclass. Iretzi zutabe berri batean errenkada bakoitzari dagokion taldearen zenbatekoa, eta gehitu zutabe bat, non bere taldeko txartel bakoitzaren kostuaren zatia kalkulatzen dugun.

Zutabe berriak gehitzeko data.table operadorea presente :=. Jarraian, paketea erabiliz arazo bat konpontzeko adibide bat dago data.table

Leiho-funtzioak R-n: datuak.taula

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

Leiho-funtzioak Python-en: pandak

Zutabe berri bat gehitzeko modu bat pandas - funtzioa erabili assign(). Txartelen kostua kabinako klasearen arabera laburbiltzeko, errenkadak taldekatu gabe, funtzioa erabiliko dugu transform().

Jarraian, taulara gehitzen dugun soluzio baten adibidea dago titanikoa 2 zutabe berdinak.

Leiho-funtzioak Python-en: pandak

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

Funtzio eta metodoen korrespondentzia-taula

Jarraian, kontuan izan ditugun paketeetako datuekin hainbat eragiketa egiteko metodoen arteko korrespondentzia-taula dago.

Description
txukuna
datuak.taula
pandas

Datuak kargatzen
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Datu-markoak sortzea
tibble()
data.table()
dict() + from_dict()

Zutabeak hautatzea
select()
argumentua j, bigarren posizioa kortxete artean
beharrezko zutabeen zerrenda kortxete artean pasatzen dugu / drop() / filter() / select_dtypes()

Errenkadak iragaztea
filter()
argumentua i, lehen posizioa kortxete artean
Iragazteko baldintzak kortxete artean zerrendatzen ditugu / filter()

Taldekatzea eta Agregazioa
group_by() + summarise()
argudioak j + by
groupby() + agg()

Mahaien batasun bertikala (UNION)
bind_rows()
rbind()
concat()

Taulen elkarketa horizontala (JOIN)
left_join() / *_join()
merge()
merge()

Leihoaren oinarrizko funtzioak eta kalkulatutako zutabeak gehitzea
group_by() + mutate()
argumentua j operadorea erabiliz := + argumentua by
transform() + assign()

Ondorioa

Agian, artikuluan ez dira datuak prozesatzeko inplementaziorik egokienak deskribatu, beraz, poztuko naiz iruzkinetan nire akatsak zuzentzen badituzu edo, besterik gabe, artikuluan emandako informazioa R / Python-en datuak lantzeko beste teknika batzuekin osatuz gero.

Goian idatzi dudan bezala, artikuluaren helburua ez zen norberaren iritzia inposatzea zein den hobea den hizkuntza, bi hizkuntzak ikasteko aukera erraztea baizik, edo, behar izanez gero, haien artean migratzea.

Artikulua gustatu bazaizu, poztuko naiz nire harpidedun berriak izateaz youtube и telegrama kanalak.

Опрос

Hurrengo paketeetatik zein erabiltzen duzu zure lanean?

Iruzkinetan zure aukeraren arrazoia idatz dezakezu.

Erregistratutako erabiltzaileek soilik parte hartu dezakete inkestan. Hasi saioa, mesedez.

Datuak prozesatzeko zein pakete erabiltzen duzun (hainbat aukera hauta ditzakezu)

  • 45,2%txukuna19

  • 33,3%datuak.taula14

  • 54,8%pandak23

42 erabiltzailek eman dute botoa. 9 erabiltzaile abstenitu ziren.

Iturria: www.habr.com

Gehitu iruzkin berria