Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Haemalla R:tä tai Pythonia Internetistä löydät miljoonia artikkeleita ja kilometrejä keskusteluja aiheesta, kumpi on parempi, nopeampi ja kätevämpi työskennellä datan kanssa. Mutta valitettavasti kaikki nämä artikkelit ja kiistat eivät ole erityisen hyödyllisiä.

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Tämän artikkelin tarkoituksena on vertailla perustietojenkäsittelytekniikoita molempien kielten suosituimmissa paketeissa. Ja auta lukijoita nopeasti hallitsemaan jotain, jota he eivät vielä tiedä. Pythonilla kirjoittaville kannattaa ottaa selvää, kuinka sama asia tehdään R:llä ja päinvastoin.

Artikkelin aikana analysoimme R:n suosituimpien pakettien syntaksia. Nämä ovat kirjastoon sisältyvät paketit tidyverseja myös paketti data.table. Ja vertaa niiden syntaksia pandas, Pythonin suosituin data-analyysipaketti.

Käymme askel askeleelta läpi koko data-analyysin polun lataamisesta analyyttisten ikkunatoimintojen suorittamiseen Pythonilla ja R:llä.

Pitoisuus

Tätä artikkelia voidaan käyttää huijauslehtenä, jos olet unohtanut, kuinka jossakin tarkasteltavissa olevista paketeista suoritetaan tietojenkäsittelytoiminto.

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

  1. Tärkeimmät syntaksierot R:n ja Pythonin välillä
    1.1. Pakettitoimintojen käyttäminen
    1.2. Tehtävä
    1.3. indeksointi
    1.4. Menetelmät ja OOP
    1.5. Putket
    1.6. Tietorakenteet
  2. Muutama sana käyttämistämme paketeista
    2.1. siistiä
    2.2. data. taulukko
    2.3. pandas
  3. Pakettien asennus
  4. Ladataan tietoja
  5. Tietokehysten luominen
  6. Valitsemalla tarvitsemasi sarakkeet
  7. Rivien suodatus
  8. Ryhmittely ja yhdistäminen
  9. Pöytien pystysuuntainen liitto (UNION)
  10. Pöytien vaakasuora liitos (JOIN)
  11. Ikkunan perusfunktiot ja lasketut sarakkeet
  12. R:n ja Pythonin tietojenkäsittelymenetelmien vastaavuustaulukko
  13. Johtopäätös
  14. Lyhyt kysely siitä, mitä pakettia käytät

Jos olet kiinnostunut data-analyysistä, saatat löytää minun sähke и youtube kanavia. Suurin osa sisällöstä on omistettu R-kielelle.

Tärkeimmät syntaksierot R:n ja Pythonin välillä

Jotta voit helpommin vaihtaa Pythonista R: hen tai päinvastoin, annan muutaman pääkohdan, joihin sinun on kiinnitettävä huomiota.

Pakettitoimintojen käyttäminen

Kun paketti on ladattu R:hen, sinun ei tarvitse määrittää paketin nimeä käyttääksesi sen toimintoja. Useimmissa tapauksissa tämä ei ole yleistä R:ssä, mutta se on hyväksyttävää. Sinun ei tarvitse tuoda pakettia ollenkaan, jos tarvitset jonkin sen toiminnoista koodiisi, vaan kutsu se yksinkertaisesti määrittämällä paketin nimi ja funktion nimi. Erotin paketin ja funktion nimien välillä R:ssä on kaksoispiste. package_name::function_name().

Pythonissa sitä vastoin pidetään klassisena kutsua paketin funktioita nimenomaisesti määrittämällä sen nimi. Kun paketti ladataan, sille annetaan yleensä lyhennetty nimi, esim. pandas yleensä käytetään pseudonyymiä pd. Pakettitoimintoon pääsee pisteen kautta package_name.function_name().

Tehtävä

R:ssä on yleistä käyttää nuolta arvon määrittämiseen objektille. obj_name <- value, vaikka yksittäinen yhtäläisyysmerkki on sallittu, yhtä yhtäsuuruusmerkkiä R:ssä käytetään ensisijaisesti arvojen välittämiseen funktion argumenteille.

Pythonissa määritys tehdään yksinomaan yhdellä yhtäläisyysmerkillä obj_name = value.

indeksointi

Tässä on myös melko merkittäviä eroja. R:ssä indeksointi alkaa yhdestä ja sisältää kaikki määritetyt elementit tuloksena olevalla alueella,

Pythonissa indeksointi alkaa nollasta, eikä valittu alue sisällä viimeistä indeksissä määritettyä elementtiä. Suunnittelua siis x[i:j] Pythonissa ei sisällä j-elementtiä.

Myös negatiivisessa indeksoinnissa R-merkinnöissä on eroja x[-1] palauttaa kaikki vektorin elementit paitsi viimeinen. Pythonissa samanlainen merkintä palauttaa vain viimeisen elementin.

Menetelmät ja OOP

R toteuttaa OOP:n omalla tavallaan, kirjoitin tästä artikkelissa "OOP R-kielellä (osa 1): S3-luokat". Yleensä R on toiminnallinen kieli, ja kaikki siinä on funktioiden varassa. Siksi esimerkiksi Excelin käyttäjille siirry osoitteeseen tydiverse se on helpompaa kuin pandas. Vaikka tämä saattaa olla minun subjektiivinen mielipiteeni.

Lyhyesti sanottuna R:n objekteissa ei ole menetelmiä (jos puhumme S3-luokista, mutta on muita OOP-toteutuksia, jotka ovat paljon harvinaisempia). On olemassa vain yleisiä funktioita, jotka käsittelevät niitä eri tavalla objektin luokasta riippuen.

Putket

Ehkä tämä on nimi pandas Se ei ole täysin oikein, mutta yritän selittää merkityksen.

Voit käyttää eräänlaista putkistoa, jotta et säästäisi välilaskutoimituksia ja et tuottaisi tarpeettomia esineitä työympäristössä. Nuo. siirtää laskutoimituksen tulos funktiosta toiseen, äläkä tallenna välituloksia.

Otetaan seuraava koodiesimerkki, jossa tallennetaan välilaskelmat erillisiin objekteihin:

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

Teimme 3 toimintoa peräkkäin, ja jokaisen tulos tallennettiin erilliseen objektiin. Mutta itse asiassa emme tarvitse näitä väliobjekteja.

Tai vielä pahempaa, mutta tutumpaa Excel-käyttäjille.

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

Tässä tapauksessa emme tallentaneet välilaskutuloksia, mutta koodin lukeminen sisäkkäisillä funktioilla on erittäin hankalaa.

Tarkastelemme useita lähestymistapoja tietojen käsittelyyn R:ssä, ja ne suorittavat samanlaisia ​​​​toimintoja eri tavoin.

Putket kirjastossa tidyverse operaattorin toteuttama %>%.

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

Otamme siis työn tuloksen func1() ja anna se ensimmäisenä argumenttina func2(), välitämme tämän laskelman tuloksen ensimmäisenä argumenttina func3(). Ja lopuksi kirjoitamme kaikki suoritetut laskelmat objektiin obj <-.

Tämä meemi kuvaa kaikkea yllä olevaa sanaa paremmin:
Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

В data.table ketjuja käytetään samalla tavalla.

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

Jokaisessa hakasulkeessa voit käyttää edellisen toiminnon tulosta.

В pandas Tällaiset toiminnot on erotettu pisteellä.

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

Nuo. otamme pöytämme df ja käyttää hänen menetelmäään fun1(), sitten sovelletaan menetelmää saatuun tulokseen fun2()jälkeen fun3(). Tuloksena oleva tulos tallennetaan objektiin obj .

Tietorakenteet

Tietorakenteet R:ssä ja Pythonissa ovat samanlaisia, mutta niillä on eri nimet.

Kuvaus
Nimi kirjassa R
Nimi kielellä Python/pandas

Taulukon rakenne
data.frame, data.table, tibble
Datakehys

Yksiulotteinen arvoluettelo
vektori
Sarjat pandoina tai lista puhtaalla Pythonilla

Monitasoinen ei-taulukkorakenne
Lista
Sanakirja (dikt)

Tarkastellaan joitain muita ominaisuuksia ja syntaksin eroja alla.

Muutama sana käyttämistämme paketeista

Ensin kerron sinulle hieman paketeista, joihin tulet tutustumaan tämän artikkelin aikana.

siistiä

Официальный сайт: tidyverse.org
Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin
kirjasto tidyverse kirjoittanut Hedley Wickham, RStudion vanhempi tutkija. tidyverse koostuu vaikuttavasta paketeista, jotka yksinkertaistavat tietojenkäsittelyä, joista 5 sisältyy 10 parhaan latauksen joukkoon CRAN-arkistosta.

Kirjaston ydin koostuu seuraavista paketeista: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Jokainen näistä paketeista on tarkoitettu tietyn ongelman ratkaisemiseen. Esimerkiksi dplyr luotu tietojen käsittelyä varten, tidyr tuoda tiedot siistiin muotoon, stringr yksinkertaistaa kielten kanssa työskentelyä ja ggplot2 on yksi suosituimmista datan visualisointityökaluista.

Etu tidyverse on yksinkertaisuus ja helppolukuinen syntaksi, joka on monella tapaa samanlainen kuin SQL-kyselykieli.

data. taulukko

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisinОфициальный сайт: r-datatable.com

Tekijän toimesta data.table on Matt Dole H2O.ai:sta.

Kirjaston ensimmäinen julkaisu tapahtui vuonna 2006.

Paketin syntaksi ei ole yhtä kätevä kuin siinä tidyverse ja se muistuttaa enemmän R:n klassisia datakehyksiä, mutta samalla huomattavasti laajennettu toimintoja.

Kaikki tämän paketin taulukon käsittelyt on kuvattu hakasulkeissa, ja jos käännät syntaksin data.table SQL:ssä saat jotain tällaista: data.table[ WHERE, SELECT, GROUP BY ]

Tämän paketin vahvuus on suurten tietomäärien käsittelyn nopeus.

pandas

Официальный сайт: pandas.pydata.org Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Kirjaston nimi tulee ekonometrisesta termistä ”paneelidata”, jota käytetään kuvaamaan moniulotteisia rakenteellisia tietojoukkoja.

Tekijän toimesta pandas on amerikkalainen Wes McKinney.

Mitä tulee Pythonin data-analyysiin, sama pandas Ei. Erittäin monitoiminen, korkeatasoinen paketti, jonka avulla voit suorittaa mitä tahansa tietojen käsittelyä tietojen lataamisesta mistä tahansa lähteestä sen visualisointiin.

Lisäpakettien asentaminen

Tässä artikkelissa käsitellyt paketit eivät sisälly R- ja Python-perusjakeluihin. Vaikka on pieni varoitus, jos olet asentanut Anaconda-jakelun, asenna se lisäksi pandas ei vaadita.

Pakettien asentaminen R

Jos olet avannut RStudio-kehitysympäristön vähintään kerran, tiedät luultavasti jo kuinka asentaa tarvittava paketti R:ssä. Asenna paketit käyttämällä vakiokomentoa install.packages() suorittamalla sen suoraan R:ssä itsessään.

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

Asennuksen jälkeen paketit on yhdistettävä, mihin useimmissa tapauksissa käytetään komentoa library().

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

Pakettien asentaminen Pythonissa

Joten jos sinulla on puhdas Python asennettuna, niin pandas sinun on asennettava se manuaalisesti. Avaa komentorivi tai pääte käyttöjärjestelmästäsi riippuen ja kirjoita seuraava komento.

pip install pandas

Sitten palaamme Pythoniin ja tuomme asennetun paketin komennolla import.

import pandas as pd

Ladataan tietoja

Tiedon louhinta on yksi tärkeimmistä vaiheista data-analyysissä. Sekä Python että R tarjoavat haluttaessa laajat mahdollisuudet saada tietoja mistä tahansa lähteestä: paikallisista tiedostoista, tiedostoista Internetistä, verkkosivustoilta, kaikenlaisista tietokannoista.

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Koko artikkelin aikana käytämme useita tietojoukkoja:

  1. Kaksi latausta Google Analyticsista.
  2. Titanicin matkustajatietojoukko.

Kaikki tiedot ovat minulla GitHub csv- ja tsv-tiedostoina. Mistä aiomme pyytää niitä?

Ladataan tietoja R:ään: tidyverse, vroom, readr

Tietojen lataaminen kirjastoon tidyverse Paketteja on kaksi: vroom, readr. vroom nykyaikaisempia, mutta jatkossa paketteja voidaan yhdistää.

Lainaus virallinen dokumentaatio vroom.

vroom vs lukija
Mitä vapauttaminen tekee vroom tarkoittavat readr? Toistaiseksi aiomme antaa näiden kahden paketin kehittyä erikseen, mutta todennäköisesti yhdistämme paketit tulevaisuudessa. Yksi haittapuoli vroomin laiskalle lukemiselle on, että tiettyjä tietoongelmia ei voida ilmoittaa etukäteen, joten niiden yhdistäminen vaatii hieman pohdintaa.

vroom vs Readr
Mitä vapauttaminen tarkoittaa? vroom varten readr? Tällä hetkellä suunnittelemme molempien pakettien kehittämistä erikseen, mutta todennäköisesti yhdistämme ne jatkossa. Yksi laiskan lukemisen haitoista vroom Joitakin tiedoissa esiintyviä ongelmia ei voida raportoida etukäteen, joten sinun on mietittävä, kuinka ne parhaiten yhdistetään.

Tässä artikkelissa tarkastellaan molempia tiedonlatauspaketteja:

Ladataan tietoja R: vroom -pakettiin

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

Ladataan tietoja R: readr:iin

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

Paketissa vroom, riippumatta csv / tsv-tietomuodosta, lataus suoritetaan samannimisellä toiminnolla vroom(), paketissa readr käytämme eri toimintoa jokaiselle muodolle read_tsv() и read_csv().

Ladataan tietoja R:hen: data.table

В data.table on toiminto tietojen lataamista varten fread().

Ladataan tietoja R: data.table -pakettiin

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

Ladataan tietoja Pythonissa: pandas

Jos verrataan R-paketteihin, niin tässä tapauksessa syntaksi on lähimpänä pandas tahto readrkoska pandas voi pyytää tietoja mistä tahansa, ja tässä paketissa on koko joukko toimintoja read_*().

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

Ja monia muita toimintoja, jotka on suunniteltu lukemaan tietoja eri muodoista. Mutta meidän tarkoituksiin se riittää read_table() tai read_csv() argumentin avulla syyskuu määrittääksesi sarakkeen erottimen.

Ladataan tietoja Pythonissa: 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")

Tietokehysten luominen

Pöytä titaanimainen, jonka latasimme, siellä on kenttä sukupuoli, joka tallentaa matkustajan sukupuolen tunnisteen.

Mutta matkustajien sukupuolen mukaan tapahtuvan tietojen esittämisen helpottamiseksi sinun tulee käyttää nimeä sukupuolikoodin sijaan.

Tätä varten luomme pienen hakemiston, taulukon, jossa on vain 2 saraketta (koodi ja sukupuolen nimi) ja 2 riviä.

Tietokehyksen luominen R:ssä: tidyverse, dplyr

Alla olevassa koodiesimerkissä luomme halutun datakehyksen funktiolla tibble() .

Tietokehyksen luominen R: dplyr:ssä

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

Datakehyksen luominen R:ssä data.table

Datakehyksen luominen R:ssä data.table

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

Tietokehyksen luominen Pythonissa: pandas

В pandas Kehysten luominen tapahtuu useissa vaiheissa, ensin luodaan sanakirja ja sitten muunnetaan sanakirja tietokehykseksi.

Tietokehyksen luominen Pythonissa: pandas

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

Sarakkeiden valinta

Taulukot, joiden kanssa työskentelet, voivat sisältää kymmeniä tai jopa satoja tietosarakkeita. Mutta analyysin suorittamiseen et yleensä tarvitse kaikkia lähdetaulukossa olevia sarakkeita.

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Siksi yksi ensimmäisistä toiminnoista, jotka suoritat lähdetaulukon kanssa, on tyhjentää se tarpeettomasta tiedosta ja vapauttaa näiden tietojen varaama muisti.

Sarakkeiden valinta R:ssä: tidyverse, dplyr

syntaksi dplyr on hyvin samanlainen kuin SQL-kyselykieli, jos olet perehtynyt siihen, hallitset tämän paketin nopeasti.

Valitse sarakkeet funktiolla select().

Alla on esimerkkejä koodeista, joilla voit valita sarakkeita seuraavilla tavoilla:

  • Vaadittujen sarakkeiden nimien luettelointi
  • Katso sarakkeiden nimiä käyttämällä säännöllisiä lausekkeita
  • Tietotyypin tai minkä tahansa muun sarakkeen sisältämien tietojen ominaisuuden mukaan

Sarakkeiden valinta R: dplyr

# Выбор нужных столбцов
## dplyr
### выбрать по названию столбцов
select(ga_nov, date, source, sessions)
### исключь по названию столбцов
select(ga_nov, -medium, -bounces)
### выбрать по регулярному выражению, стобцы имена которых заканчиваются на s
select(ga_nov, matches("s$"))
### выбрать по условию, выбираем только целочисленные столбцы
select_if(ga_nov, is.integer)

R:n sarakkeiden valinta: data.table

Samat toiminnot sisään data.table suoritetaan hieman eri tavalla, artikkelin alussa annoin kuvauksen siitä, mitkä argumentit ovat hakasulkeissa data.table.

DT[i,j,by]

Missä:
minä - missä, ts. suodatus rivien mukaan
j - valitse|päivitä|tee, ts. sarakkeiden valinta ja muuntaminen
tietojen ryhmittelyn mukaan

R:n sarakkeiden valinta: data.table

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

muuttuja .SD antaa sinun käyttää kaikkia sarakkeita ja .SDcols suodata tarvittavat sarakkeet säännöllisillä lausekkeilla tai muilla funktioilla suodattaaksesi tarvitsemiesi sarakkeiden nimet.

Sarakkeiden valinta Pythonissa, pandas

Sarakkeiden valitseminen nimen mukaan pandas riittää, kun annat luettelon heidän nimistään. Ja jos haluat valita tai sulkea pois sarakkeita nimen perusteella säännöllisten lausekkeiden avulla, sinun on käytettävä funktioita drop() и filter(), ja argumentti akseli = 1, jolla osoitat, että on tarpeen käsitellä sarakkeita rivien sijaan.

Voit valita kentän tietotyypin mukaan käyttämällä toimintoa select_dtypes(), ja argumentteihin sisältää tai sulkea välittää luettelon tietotyypeistä, jotka vastaavat valittavia kenttiä.

Sarakkeiden valinta Pythonissa: pandas

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

Rivien suodatus

Esimerkiksi lähdetaulukko voi sisältää useiden vuosien tietoja, mutta sinun tarvitsee analysoida vain viimeinen kuukausi. Jälleen ylimääräiset rivit hidastavat tietojenkäsittelyprosessia ja tukkivat tietokoneen muistin.

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Rivien suodatus R:ssä: tydyverse, dplyr

В dplyr funktiota käytetään rivien suodattamiseen filter(). Se ottaa datakehyksen ensimmäisenä argumenttina, minkä jälkeen luettelet suodatusehdot.

Kun kirjoitat loogisia lausekkeita taulukon suodattamiseksi, määritä tässä tapauksessa sarakkeiden nimet ilman lainausmerkkejä ja ilmoittamatta taulukon nimeä.

Kun käytät suodattamiseen useita loogisia lausekkeita, käytä seuraavia operaattoreita:

  • & tai pilkku - looginen JA
  • | - looginen TAI

Rivien suodatus R:ssä: dplyr

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

Rivien suodatus R:ssä: data.table

Kuten jo edellä kirjoitin, sisään data.table tietojen muunnossyntaksi on suljettu hakasulkeissa.

DT[i,j,by]

Missä:
minä - missä, ts. suodatus rivien mukaan
j - valitse|päivitä|tee, ts. sarakkeiden valinta ja muuntaminen
tietojen ryhmittelyn mukaan

Argumenttia käytetään rivien suodattamiseen i, jonka ensimmäinen sijainti on hakasulkeissa.

Sarakkeisiin päästään loogisilla lausekkeilla ilman lainausmerkkejä ja määrittelemättä taulukon nimeä.

Loogiset lausekkeet liittyvät toisiinsa samalla tavalla kuin kohdassa dplyr & ja |-operaattoreiden kautta.

Rivien suodatus R:ssä: data.table

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

Merkkijonojen suodatus Pythonissa: pandat

Suodata rivien mukaan pandas samanlainen kuin suodatus data.table, ja se tehdään hakasulkeissa.

Tässä tapauksessa pääsy sarakkeisiin tapahtuu välttämättä ilmoittamalla tietokehyksen nimi, jolloin sarakkeen nimi voidaan ilmoittaa myös lainausmerkeissä hakasulkeissa (esimerkki df['col_name']), tai ilman lainausmerkkejä jakson jälkeen (esimerkki df.col_name).

Jos sinun on suodatettava tietokehys useiden ehtojen mukaan, jokainen ehto on sijoitettava sulkeisiin. Loogiset ehdot yhdistetään toisiinsa operaattorien avulla & и |.

Merkkijonojen suodatus Pythonissa: pandat

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

Tietojen ryhmittely ja yhdistäminen

Yksi yleisimmin käytetyistä operaatioista data-analyysissä on ryhmittely ja aggregointi.

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Näiden toimintojen suorittamisen syntaksi on hajallaan kaikkien tarkistamiemme pakettien kesken.

Tässä tapauksessa otamme esimerkkinä datakehyksen titaanimainenja laske lippujen lukumäärä ja keskihinta matkustamoluokan mukaan.

R:n tietojen ryhmittely ja yhdistäminen: tidyverse, dplyr

В dplyr funktiota käytetään ryhmittelyyn group_by(), ja yhdistämistä varten summarise(). Itse asiassa, dplyr toimintoja on kokonainen perhe summarise_*(), mutta tämän artikkelin tarkoituksena on verrata perussyntaksia, joten emme mene sellaiseen viidakkoon.

Aggregoinnin perustoiminnot:

  • sum() - summaus
  • min() / max() – minimi- ja maksimiarvo
  • mean() - keskiverto
  • median() - mediaani
  • length() - määrä

Ryhmittely ja aggregointi R:ssä: dplyr

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

Toiminnassa group_by() ohitimme taulukon ensimmäisenä argumenttina titaanimainenja osoitti sitten kentän Luokka, jonka mukaan ryhmittelemme pöytämme. Tämän operaation tulos käyttämällä operaattoria %>% välitettiin funktion ensimmäisenä argumenttina summarise()ja lisäsi vielä 2 kenttää: matkustajia и keskihinta. Ensimmäisessä käyttämällä toimintoa length() laski lippujen lukumäärän ja toisessa funktion avulla mean() sai keskimääräisen lipun hinnan.

R:n tietojen ryhmittely ja yhdistäminen: data.table

В data.table argumenttia käytetään yhdistämiseen j jossa on toinen paikka hakasulkeissa, ja ryhmittelyä varten by tai keyby, jotka ovat kolmannella sijalla.

Aggregointifunktioiden luettelo on tässä tapauksessa identtinen kohdassa kuvatun kanssa dplyr, koska nämä ovat toimintoja R-perussyntaksista.

Ryhmittely ja aggregointi R:ssä: data.table

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

Tietojen ryhmittely ja yhdistäminen Pythonissa: pandat

Ryhmittely sisään pandas samanlainen kuin dplyr, mutta yhdistäminen ei ole samanlainen kuin dplyr Ei lainkaan data.table.

Ryhmittele menetelmällä groupby(), johon sinun on välitettävä luettelo sarakkeista, joiden mukaan tietokehys ryhmitellään.

Aggregointiin voit käyttää menetelmää agg()joka hyväksyy sanakirjan. Sanakirjaavaimet ovat sarakkeita, joissa käytät koontifunktioita, ja arvot ovat koontifunktioiden nimiä.

Aggregointitoiminnot:

  • sum() - summaus
  • min() / max() – minimi- ja maksimiarvo
  • mean() - keskiverto
  • median() - mediaani
  • count() - määrä

Toiminto reset_index() alla olevassa esimerkissä sitä käytetään nollaamaan sisäkkäisiä indeksejä pandas oletuksena tietojen yhdistämisen jälkeen.

symboli voit siirtyä seuraavalle riville.

Ryhmittely ja aggregointi Pythonissa: pandat

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

Pöytien pystysuora liitos

Toiminto, jossa yhdistät kaksi tai useampia saman rakenteen omaavia taulukkoja. Lataamamme tiedot sisältävät taulukoita ga_nov и ga_dec. Nämä taulukot ovat rakenteeltaan identtisiä, ts. niillä on samat sarakkeet ja näiden sarakkeiden tietotyypit.

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Tämä on lataus Google Analyticsista marras- ja joulukuulta. Tässä osiossa yhdistämme nämä tiedot yhdeksi taulukoksi.

Pystysuoraan liitetyt pöydät R:ssä: tidyverse, dplyr

В dplyr Voit yhdistää 2 taulukkoa yhdeksi toiminnolla bind_rows(), ohittaa taulukot argumentteinaan.

Rivien suodatus R:ssä: dplyr

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

Pystysuoraan liitetyt taulukot R:ssä: data.table

Se ei myöskään ole mitään monimutkaista, käytetään rbind().

Rivien suodatus R:ssä: data.table

## data.table
rbind(ga_nov, ga_dec)

Python-taulukoiden pystysuoraan liittäminen: pandat

В pandas funktiota käytetään taulukoiden yhdistämiseen concat(), johon sinun on välitettävä luettelo kehyksistä yhdistääksesi ne.

Merkkijonojen suodatus Pythonissa: pandat

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

Pöytien vaakasuora liitos

Toiminto, jossa sarakkeet toisesta lisätään ensimmäiseen taulukkoon avaimella. Sitä käytetään usein rikastattaessa faktataulukkoa (esimerkiksi myyntitietoja sisältävää taulukkoa) jollain viitetiedolla (esimerkiksi tuotteen hinnalla).

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Liitoksia on useita tyyppejä:

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Aiemmin ladatussa taulukossa titaanimainen meillä on kolumni sukupuoli, joka vastaa matkustajan sukupuolikoodia:

1 - naaras
2 - uros

Olemme myös luoneet taulukon - hakuteoksen sukupuoli. Matkustajien sukupuolta koskevien tietojen esittämisen helpottamiseksi meidän on lisättävä sukupuolen nimi hakemistosta sukupuoli pöytään titaanimainen.

Vaakasuora pöytäliitos R:ssä: tidyverse, dplyr

В dplyr Vaakasuoraan liittämiseen on olemassa koko joukko toimintoja:

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

Käytännössäni yleisimmin käytetty on left_join().

Ensimmäisenä kahtena argumenttina yllä luetellut funktiot yhdistävät kaksi taulukkoa ja kolmantena argumenttina by sinun on määritettävä liitetyt sarakkeet.

Vaakasuora pöytäliitos R:ssä: dplyr

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

Taulukoiden vaakasuora liitos R:ssä: data.table

В data.table Taulukot on yhdistettävä avaimella funktion avulla merge().

Argumentit merge()-funktiolle data.taulukossa

  • x, y — Liitostaulukot
  • by — Sarake, joka on liittämisen avain, jos sillä on sama nimi molemmissa taulukoissa
  • by.x, by.y — Yhdistettävät sarakkeiden nimet, jos niillä on eri nimet taulukoissa
  • all, all.x, all.y — Liitostyyppi, kaikki palauttaa kaikki rivit molemmista taulukoista, all.x vastaa LEFT JOIN -toimintoa (jättää kaikki ensimmäisen taulukon rivit), all.y — vastaa RIGHT JOIN -toiminto (jättää kaikki toisen taulukon rivit).

Taulukoiden vaakasuora liitos R:ssä: data.table

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

Vaakasuora pöytäliitos Pythonissa: pandat

Kuten myös sisällä data.tableSisään pandas funktiota käytetään taulukoiden yhdistämiseen merge().

Merge()-funktion argumentit pandoissa

  • miten — Liitäntätyyppi: vasen, oikea, ulompi, sisempi
  • päällä — Sarake, joka on avain, jos sillä on sama nimi molemmissa taulukoissa
  • left_on, right_on — Avainsarakkeiden nimet, jos niillä on eri nimet taulukoissa

Vaakasuora pöytäliitos Pythonissa: pandat

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

Ikkunan perusfunktiot ja lasketut sarakkeet

Ikkunafunktiot ovat merkitykseltään samanlaisia ​​kuin aggregointifunktiot, ja niitä käytetään usein myös data-analyysissä. Mutta toisin kuin aggregointifunktiot, ikkunafunktiot eivät muuta lähtevän tietokehyksen rivien määrää.

Mikä kieli valitaan tietojen käsittelyyn - R vai Python? Molemmat! Muutto pandasta tidyverseen ja data.tablein ja takaisin

Pohjimmiltaan ikkuna-funktiota käyttämällä jaamme saapuvan datakehyksen osiin jonkin kriteerin mukaan, ts. kentän tai useamman kentän arvon perusteella. Ja teemme aritmeettisia operaatioita jokaiselle ikkunalle. Näiden operaatioiden tulos palautetaan jokaiselle riville, ts. muuttamatta taulukon rivien kokonaismäärää.

Otetaan esimerkiksi pöytä titaanimainen. Voimme laskea, kuinka monta prosenttia kunkin lipun hinta oli sen hyttiluokassa.

Tätä varten meidän on hankittava jokaiselle riville sen nykyisen hyttiluokan lipun kokonaishinta, johon tämän rivin lippu kuuluu, ja jaettava sitten kunkin lipun hinta saman hyttiluokan kaikkien lippujen kokonaishinnalla. .

Ikkunatoiminnot R:ssä: tidyverse, dplyr

Voit lisätä uusia sarakkeita käyttämättä rivien ryhmittelyä dplyr palvelee toimintoa mutate().

Voit ratkaista yllä kuvatun ongelman ryhmittelemällä tiedot kenttien mukaan Luokka ja summaamalla kentän uuteen sarakkeeseen hinta. Pura seuraavaksi taulukko ja jaa kenttien arvot hinta mitä tapahtui edellisessä vaiheessa.

Ikkunatoiminnot R:ssä: dplyr

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

Ikkunafunktiot R:ssä: data.table

Ratkaisualgoritmi pysyy samana kuin kohdassa dplyr, meidän on jaettava taulukko ikkunoihin kenttien mukaan Luokka. Kirjoita uuteen sarakkeeseen kutakin riviä vastaavan ryhmän summa ja lisää sarake, jossa laskemme kunkin lipun hinnan osuuden ryhmässään.

Voit lisätä uusia sarakkeita data.table operaattori paikalla :=. Alla on esimerkki ongelman ratkaisemisesta paketin avulla data.table

Ikkunafunktiot R:ssä: data.table

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

Ikkunatoiminnot Pythonissa: pandas

Yksi tapa lisätä uusi sarake pandas - käytä toimintoa assign(). Lippujen hinnan yhteenvetoon hyttiluokittain, ilman rivien ryhmittelyä, käytämme toimintoa transform().

Alla on esimerkki ratkaisusta, jonka lisäämme taulukkoon titaanimainen samat 2 saraketta.

Ikkunatoiminnot Pythonissa: pandas

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

Funktioiden ja menetelmien vastaavuustaulukko

Alla on vastaavuustaulukko erilaisten toimintojen suorittamismenetelmien välillä tarkastelemiemme pakettien tiedoilla.

Kuvaus
siistiä
data. taulukko
pandas

Ladataan tietoja
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Tietokehysten luominen
tibble()
data.table()
dict() + from_dict()

Sarakkeiden valinta
select()
perustelu j, toinen paikka hakasulkeissa
välitämme vaadittujen sarakkeiden luettelon hakasulkeissa / drop() / filter() / select_dtypes()

Rivien suodatus
filter()
perustelu i, ensimmäinen sijainti hakasulkeissa
Listaamme suodatusehdot hakasulkeissa / filter()

Ryhmittely ja yhdistäminen
group_by() + summarise()
väitteet j + by
groupby() + agg()

Pöytien pystysuuntainen liitto (UNION)
bind_rows()
rbind()
concat()

Pöytien vaakasuora liitos (JOIN)
left_join() / *_join()
merge()
merge()

Ikkunan perustoiminnot ja laskettujen sarakkeiden lisääminen
group_by() + mutate()
perustelu j käyttämällä operaattoria := + argumentti by
transform() + assign()

Johtopäätös

Ehkä artikkelissa kuvailin tietojenkäsittelyn optimaalisia toteutuksia, joten olen iloinen, jos korjaat virheeni kommenteissa tai yksinkertaisesti täydennät artikkelissa annettuja tietoja muilla tekniikoilla tietojen käsittelyyn R / Pythonissa.

Kuten edellä kirjoitin, artikkelin tarkoituksena ei ollut pakottaa mielipidettä kumpi kieli on parempi, vaan yksinkertaistaa mahdollisuutta oppia molempia kieliä tai tarvittaessa siirtyä niiden välillä.

Jos pidit artikkelista, saan mielelläni uusia tilaajia youtube и sähke kanavia.

Опрос

Mitä seuraavista paketeista käytät työssäsi?

Kommentteihin voit kirjoittaa syyn valintaasi.

Vain rekisteröityneet käyttäjät voivat osallistua kyselyyn. Kirjaudu sisään, ole kiltti.

Mitä tietojenkäsittelypakettia käytät (voit valita useita vaihtoehtoja)

  • 45,2%siisti versio 19

  • 33,3%data.taulukko14

  • 54,8%pandat 23

42 käyttäjää äänesti. 9 käyttäjää pidättyi äänestämästä.

Lähde: will.com

Lisää kommentti