Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

Deur na R of Python op die internet te soek, sal jy miljoene artikels en kilometers se besprekings vind oor die onderwerp waarvan een beter, vinniger en geriefliker is om met data te werk. Maar ongelukkig is al hierdie artikels en dispute nie besonder nuttig nie.

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

Die doel van hierdie artikel is om die basiese dataverwerkingstegnieke in die gewildste pakkette van beide tale te vergelyk. En help lesers vinnig iets bemeester wat hulle nog nie weet nie. Vir diegene wat in Python skryf, vind uit hoe om dieselfde ding in R te doen, en omgekeerd.

Tydens die artikel sal ons die sintaksis van die gewildste pakkette in R ontleed. Dit is die pakkette wat in die biblioteek ingesluit is tidyverseen ook die pakkie data.table. En vergelyk hul sintaksis met pandas, die gewildste data-analise-pakket in Python.

Ons sal stap vir stap deur die hele pad van data-analise gaan van die laai daarvan tot die uitvoering van analitiese vensterfunksies met Python en R.

inhoud

Hierdie artikel kan as 'n cheat sheet gebruik word as jy vergeet het hoe om 'n dataverwerkingsbewerking uit te voer in een van die pakkette wat oorweeg word.

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

  1. Belangrikste sintaksis verskille tussen R en Python
    1.1. Toegang tot pakketfunksies
    1.2. Opdrag
    1.3. Indeksering
    1.4. Metodes en OOP
    1.5. Pyplyne
    1.6. Datastrukture
  2. 'n Paar woorde oor die pakkette wat ons gaan gebruik
    2.1. netjies
    2.2. data.tabel
    2.3. pandas
  3. Installeer pakkette
  4. Laai data
  5. Die skep van datarame
  6. Kies die kolomme wat u benodig
  7. Filtreer rye
  8. Groepering en Aggregasie
  9. Vertikale vereniging van tabelle (UNION)
  10. Horisontale samevoeging van tabelle (JOIN)
  11. Basiese vensterfunksies en berekende kolomme
  12. Korrespondensietabel tussen dataverwerkingsmetodes in R en Python
  13. Gevolgtrekking
  14. 'n Kort opname oor watter pakket jy gebruik

As jy belangstel in data-analise, kan jy my vind telegram и YouTube kanale. Die meeste van die inhoud daarvan word aan die R-taal gewy.

Belangrikste sintaksis verskille tussen R en Python

Om dit vir jou makliker te maak om van Python na R oor te skakel, of andersom, sal ek 'n paar hoofpunte gee waaraan jy moet aandag gee.

Toegang tot pakketfunksies

Sodra 'n pakket in R gelaai is, hoef jy nie die pakketnaam te spesifiseer om toegang tot sy funksies te verkry nie. In die meeste gevalle is dit nie algemeen in R nie, maar dit is aanvaarbaar. Jy hoef glad nie 'n pakket in te voer as jy een van sy funksies in jou kode benodig nie, maar noem dit eenvoudig deur die naam van die pakket en die naam van die funksie te spesifiseer. Die skeiding tussen pakket- en funksiename in R is 'n dubbeldubbelpunt. package_name::function_name().

In Python, inteendeel, word dit as klassiek beskou om die funksies van 'n pakket te noem deur die naam daarvan uitdruklik te spesifiseer. Wanneer 'n pakket afgelaai word, word dit gewoonlik 'n verkorte naam gegee, bv. pandas gewoonlik word 'n skuilnaam gebruik pd. Toegang tot 'n pakketfunksie word deur 'n kolletjie verkry package_name.function_name().

Opdrag

In R is dit algemeen om 'n pyl te gebruik om 'n waarde aan 'n voorwerp toe te ken. obj_name <- value, hoewel 'n enkele gelyke-teken toegelaat word, word die enkel-gelyke-teken in R hoofsaaklik gebruik om waardes deur te gee na funksionele argumente.

In Python word opdrag uitsluitlik met 'n enkele gelyke-teken gedoen obj_name = value.

Indeksering

Hier is ook nogal beduidende verskille. In R begin indeksering by een en sluit alle gespesifiseerde elemente in die resulterende reeks in,

In Python begin indeksering vanaf nul en die geselekteerde reeks sluit nie die laaste element in wat in die indeks gespesifiseer is nie. So ontwerp x[i:j] in Python sal nie die j-element insluit nie.

Daar is ook verskille in negatiewe indeksering, in R-notasie x[-1] sal alle elemente van die vektor behalwe die laaste een terugstuur. In Python sal 'n soortgelyke notasie slegs die laaste element terugstuur.

Metodes en OOP

R implementeer OOP op sy eie manier, ek het hieroor in die artikel geskryf "OOP in die R-taal (deel 1): S3-klasse". Oor die algemeen is R 'n funksionele taal, en alles daarin is gebou op funksies. Daarom, byvoorbeeld, vir Excel-gebruikers, gaan na tydiverse dit sal makliker wees as pandas. Alhoewel dit dalk my subjektiewe mening is.

Kortom, voorwerpe in R het nie metodes nie (as ons van S3-klasse praat, maar daar is ander OOP-implementerings wat baie minder algemeen voorkom). Daar is slegs veralgemeende funksies wat hulle verskillend verwerk na gelang van die klas van die voorwerp.

Pyplyne

Miskien is dit die naam vir pandas Dit sal nie heeltemal korrek wees nie, maar ek sal probeer om die betekenis te verduidelik.

Om nie tussentydse berekeninge te stoor nie en om nie onnodige voorwerpe in die werksomgewing te produseer nie, kan jy 'n soort pyplyn gebruik. Dié. gee die resultaat van 'n berekening van een funksie na die volgende, en moenie tussenresultate stoor nie.

Kom ons neem die volgende kodevoorbeeld, waar ons intermediêre berekeninge in aparte voorwerpe stoor:

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

Ons het 3 bewerkings opeenvolgend uitgevoer, en die resultaat van elkeen is in 'n aparte voorwerp gestoor. Maar in werklikheid het ons nie hierdie intermediêre voorwerpe nodig nie.

Of selfs erger, maar meer bekend vir Excel-gebruikers.

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

In hierdie geval het ons nie intermediêre berekeningsresultate gestoor nie, maar die lees van kode met geneste funksies is uiters ongerieflik.

Ons sal na verskeie benaderings tot dataverwerking in R kyk, en hulle voer soortgelyke bewerkings op verskillende maniere uit.

Pyplyne in die biblioteek tidyverse geïmplementeer deur die operateur %>%.

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

So neem ons die resultaat van die werk func1() en gee dit as die eerste argument aan func2(), dan gee ons die resultaat van hierdie berekening deur as die eerste argument func3(). En op die ou end skryf ons al die berekeninge wat uitgevoer is in die voorwerp obj <-.

Al die bogenoemde word beter as woorde deur hierdie meme geïllustreer:
Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

В data.table kettings word op 'n soortgelyke manier gebruik.

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

In elk van die vierkantige hakies kan jy die resultaat van die vorige bewerking gebruik.

В pandas sulke bewerkings word deur 'n punt geskei.

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

Dié. ons neem ons tafel df en gebruik haar metode fun1(), dan pas ons die metode toe op die verkry resultaat fun2(), na fun3(). Die gevolglike resultaat word in 'n voorwerp gestoor obj .

Datastrukture

Datastrukture in R en Python is soortgelyk, maar het verskillende name.

Beskrywing
Naam in R
Naam in Python/pandas

Tafelstruktuur
data.frame, data.table, tibble
Dataraam

Eendimensionele lys van waardes
vektor
Reeks in pandas of lys in suiwer Python

Multi-vlak nie-tabelstruktuur
Lys
Woordeboek (dict)

Ons sal hieronder na 'n paar ander kenmerke en verskille in sintaksis kyk.

'n Paar woorde oor die pakkette wat ons gaan gebruik

Eerstens sal ek jou 'n bietjie vertel van die pakkette waarmee jy tydens hierdie artikel vertroud sal raak.

netjies

Официальный сайт: tidyverse.org
Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug
Biblioteek tidyverse geskryf deur Hedley Wickham, Senior Navorsingswetenskaplike by RStudio. tidyverse bestaan ​​uit 'n indrukwekkende stel pakkette wat dataverwerking vereenvoudig, waarvan 5 by die top 10 aflaaie van die CRAN-bewaarplek ingesluit is.

Die kern van die biblioteek bestaan ​​uit die volgende pakkette: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Elkeen van hierdie pakkette is daarop gemik om 'n spesifieke probleem op te los. Byvoorbeeld dplyr geskep vir data manipulasie, tidyr om die data in 'n netjiese vorm te bring, stringr vereenvoudig werk met snare, en ggplot2 is een van die gewildste datavisualiseringsinstrumente.

Die voordeel tidyverse is die eenvoud en maklik leesbare sintaksis, wat in baie opsigte soortgelyk is aan die SQL-navraagtaal.

data.tabel

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terugОфициальный сайт: r-datatable.com

Skrywer data.table is Matt Dole van H2O.ai.

Die eerste vrystelling van die biblioteek het in 2006 plaasgevind.

Die pakketsintaksis is nie so gerieflik soos in tidyverse en herinner meer aan klassieke datarame in R, maar terselfdertyd aansienlik uitgebrei in funksionaliteit.

Alle manipulasies met die tabel in hierdie pakket word in vierkantige hakies beskryf, en as jy die sintaksis vertaal data.table in SQL kry jy iets soos hierdie: data.table[ WHERE, SELECT, GROUP BY ]

Die sterkte van hierdie pakket is die spoed van die verwerking van groot hoeveelhede data.

pandas

Официальный сайт: pandas.pydata.org Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

Die naam van die biblioteek kom van die ekonometriese term "paneeldata", wat gebruik word om multidimensionele gestruktureerde stelle inligting te beskryf.

Skrywer pandas is die Amerikaner Wes McKinney.

As dit kom by data-analise in Python, gelyk pandas Geen. 'n Baie multifunksionele, hoëvlak-pakket wat jou toelaat om enige manipulasie met data uit te voer, van die laai van data vanaf enige bronne tot die visualisering daarvan.

Installeer bykomende pakkette

Die pakkette wat in hierdie artikel bespreek word, is nie by die basiese R- en Python-verspreidings ingesluit nie. Alhoewel daar 'n klein voorbehoud is, as jy die Anaconda-verspreiding geïnstalleer het, installeer dan addisioneel pandas is nie nodig nie.

Installeer pakkette in R

As jy die RStudio-ontwikkelingsomgewing ten minste een keer oopgemaak het, weet jy waarskynlik reeds hoe om die vereiste pakket in R te installeer. Om pakkette te installeer, gebruik die standaard opdrag install.packages() deur dit direk in R self uit te voer.

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

Na installasie moet die pakkette gekoppel word, waarvoor die opdrag in die meeste gevalle gebruik word library().

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

Installeer pakkette in Python

Dus, as jy suiwer Python geïnstalleer het, dan pandas jy moet dit handmatig installeer. Open 'n opdragreël, of terminaal, afhangende van jou bedryfstelsel en voer die volgende opdrag in.

pip install pandas

Dan keer ons terug na Python en voer die geïnstalleerde pakket in met die opdrag import.

import pandas as pd

Laai data

Data-ontginning is een van die belangrikste stappe in data-analise. Beide Python en R bied u, indien verkies, uitgebreide geleenthede om data uit enige bronne te verkry: plaaslike lêers, lêers vanaf die internet, webwerwe, allerhande databasisse.

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

Dwarsdeur die artikel sal ons verskeie datastelle gebruik:

  1. Twee aflaaie van Google Analytics.
  2. Titanic passasiersdatastel.

Al die data is op my GitHub in die vorm van csv- en tsv-lêers. Waarvandaan sal ons hulle versoek?

Laai data in R: tidyverse, vroom, readr

Om data in 'n biblioteek te laai tidyverse Daar is twee pakkette: vroom, readr. vroom meer modern, maar in die toekoms kan die pakkette gekombineer word.

Haal aan uit amptelike dokumentasie vroom.

vroom vs leser
Wat beteken die vrystelling van vroom beteken vir readr? Vir nou beplan ons om die twee pakkette afsonderlik te laat ontwikkel, maar ons sal waarskynlik die pakkette in die toekoms verenig. Een nadeel van vroom se lui lees is dat sekere dataprobleme nie vooraf aangemeld kan word nie, so hoe om dit die beste te verenig, verg 'n bietjie nadenke.

vroom vs leser
Wat beteken vrylating? vroom vir readr? Op die oomblik beplan ons om beide pakkette afsonderlik te ontwikkel, maar ons sal hulle waarskynlik in die toekoms kombineer. Een van die nadele van lui lees vroom is dat sommige probleme met die data nie vooraf aangemeld kan word nie, so jy moet dink oor hoe om dit die beste te kombineer.

In hierdie artikel sal ons kyk na beide datalaaipakkette:

Laai data in R: vroom-pakket

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

Laai data in R: readr

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

In die pakkie vroom, ongeag die csv / tsv-dataformaat, word laai uitgevoer deur die funksie met dieselfde naam vroom(), in die pakkie readr ons gebruik 'n ander funksie vir elke formaat read_tsv() и read_csv().

Laai data in R: data.table

В data.table daar is 'n funksie om data te laai fread().

Laai data in R: data.table-pakket

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

Laai data in Python: pandas

As ons vergelyk met R-pakkette, dan is die sintaksis in hierdie geval die naaste aan pandas sal readr, omdat pandas kan data van enige plek aanvra, en daar is 'n hele familie van funksies in hierdie pakket read_*().

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

En baie ander funksies wat ontwerp is om data van verskillende formate te lees. Maar vir ons doeleindes is dit genoeg read_table() of read_csv() argument gebruik September om die kolomskeier te spesifiseer.

Laai data in Python: 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")

Die skep van datarame

Tafel Titanic, wat ons gelaai het, is daar 'n veld Seks, wat die passasier se geslagsidentifiseerder stoor.

Maar vir 'n geriefliker aanbieding van data in terme van passasiergeslag, moet jy die naam eerder as die geslagskode gebruik.

Om dit te doen, sal ons 'n klein gids skep, 'n tabel waarin daar slegs 2 kolomme (kode en geslag naam) en 2 rye sal wees, onderskeidelik.

Skep 'n dataraam in R: tidyverse, dplyr

In die kodevoorbeeld hieronder skep ons die verlangde dataraam met die funksie tibble() .

Skep 'n dataraam in R: dplyr

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

Skep 'n dataraam in R: data.table

Skep 'n dataraam in R: data.table

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

Skep 'n dataraam in Python: pandas

В pandas Die skepping van rame word in verskeie fases uitgevoer, eers skep ons 'n woordeboek, en dan omskep ons die woordeboek in 'n dataraam.

Skep 'n dataraam in Python: pandas

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

Kies kolomme

Die tabelle waarmee u werk, kan dosyne of selfs honderde kolomme data bevat. Maar om analise uit te voer, het jy as 'n reël nie al die kolomme nodig wat in die brontabel beskikbaar is nie.

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

Daarom is een van die eerste bewerkings wat jy met die brontabel sal uitvoer om dit van onnodige inligting skoon te maak en die geheue wat hierdie inligting beslaan vry te maak.

Kies kolomme in R: tidyverse, dplyr

sintaksis dplyr is baie soortgelyk aan die SQL-navraagtaal, as jy daarmee vertroud is, sal jy hierdie pakket vinnig bemeester.

Gebruik die funksie om kolomme te kies select().

Hieronder is voorbeelde van kode waarmee u kolomme op die volgende maniere kan kies:

  • Lys die name van die vereiste kolomme
  • Verwys na kolomname deur gereelde uitdrukkings te gebruik
  • Volgens datatipe of enige ander eienskap van die data vervat in die kolom

Kies kolomme in 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)

Kies kolomme in R: data.table

Dieselfde operasies in data.table ietwat anders uitgevoer word, het ek aan die begin van die artikel 'n beskrywing gegee van watter argumente binne vierkantige hakies in data.table.

DT[i,j,by]

Waar:
ek - waar, d.w.s. filter volgens rye
j - kies|opdatering|doen, d.w.s. kolomme te kies en dit om te skakel
deur - datagroepering

Kies kolomme in R: 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$")]

veranderlike .SD laat jou toe om toegang tot alle kolomme te kry, en .SDcols filtreer die vereiste kolomme deur gebruik te maak van gewone uitdrukkings, of ander funksies om die name van die kolomme wat jy benodig, te filter.

Kies kolomme in Python, pandas

Om kolomme volgens naam in te kies pandas dit is genoeg om 'n lys van hul name te verskaf. En om kolomme op naam te kies of uit te sluit deur gebruik te maak van gereelde uitdrukkings, moet jy die funksies gebruik drop() и filter(), en argument as=1, waarmee jy aandui dat dit nodig is om kolomme eerder as rye te verwerk.

Om 'n veld volgens datatipe te kies, gebruik die funksie select_dtypes(), en in argumente sluit of sluit slaag 'n lys van datatipes wat ooreenstem met watter velde jy moet kies.

Kies kolomme in Python: 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'])

Filtreer rye

Die brontabel kan byvoorbeeld etlike jare se data bevat, maar jy hoef net die afgelope maand te ontleed. Weereens, ekstra lyne sal die dataverwerkingsproses vertraag en die rekenaargeheue verstop.

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

Filtreer rye in R: tydyverse, dplyr

В dplyr die funksie word gebruik om rye te filter filter(). Dit neem 'n dataraam as die eerste argument, dan lys jy die filtervoorwaardes.

Wanneer jy logiese uitdrukkings skryf om 'n tabel te filter, spesifiseer in hierdie geval die kolomname sonder aanhalingstekens en sonder om die tabelnaam te verklaar.

Wanneer jy veelvuldige logiese uitdrukkings gebruik om te filter, gebruik die volgende operateurs:

  • & of komma - logiese EN
  • | - logiese OF

Filtreer rye in R: dplyr

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

Filtreer rye in R: data.table

Soos ek reeds hierbo geskryf het, in data.table data-omskakelingssintaksis word tussen vierkantige hakies ingesluit.

DT[i,j,by]

Waar:
ek - waar, d.w.s. filter volgens rye
j - kies|opdatering|doen, d.w.s. kolomme te kies en dit om te skakel
deur - datagroepering

Die argument word gebruik om rye te filter i, wat die eerste posisie tussen vierkantige hakies het.

Toegang tot kolomme word verkry in logiese uitdrukkings sonder aanhalingstekens en sonder om die tabelnaam te spesifiseer.

Logiese uitdrukkings hou verband met mekaar op dieselfde manier as in dplyr deur die & en | operateurs.

Filtreer rye in R: data.table

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

Filtreer snare in Python: pandas

Filtreer volgens rye in pandas soortgelyk aan infiltreer data.table, en word tussen vierkantige hakies gedoen.

In hierdie geval word toegang tot kolomme noodwendig uitgevoer deur die naam van die dataraam aan te dui; dan kan die kolomnaam ook tussen aanhalingstekens tussen vierkantige hakies (Byvoorbeeld df['col_name']), of sonder aanhalings na die tydperk (Byvoorbeeld df.col_name).

As jy 'n dataraamwerk deur verskeie voorwaardes moet filter, moet elke voorwaarde tussen hakies geplaas word. Logiese toestande word deur operateurs met mekaar verbind & и |.

Filtreer snare in Python: pandas

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

Groepering en samevoeging van data

Een van die mees gebruikte bewerkings in data-analise is groepering en samevoeging.

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

Die sintaksis vir die uitvoering van hierdie bewerkings is versprei oor al die pakkette wat ons hersien.

In hierdie geval sal ons 'n dataraam as 'n voorbeeld neem Titanic, en bereken die aantal en gemiddelde koste van kaartjies afhangende van die kajuitklas.

Groepering en samevoeging van data in R: tidyverse, dplyr

В dplyr die funksie word vir groepering gebruik group_by(), en vir samevoeging summarise(). In werklikheid, dplyr daar is 'n hele familie van funksies summarise_*(), maar die doel van hierdie artikel is om die basiese sintaksis te vergelyk, so ons sal nie in so 'n oerwoud ingaan nie.

Basiese samevoegingsfunksies:

  • sum() - opsomming
  • min() / max() – minimum en maksimum waarde
  • mean() - gemiddeld
  • median() - mediaan
  • length() - hoeveelheid

Groepering en samevoeging in R: dplyr

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

Om te funksioneer group_by() ons het die tabel as die eerste argument geslaag Titanic, en dan die veld aangedui Pklas, waarmee ons ons tabel sal groepeer. Die resultaat van hierdie operasie met behulp van die operateur %>% deurgegee as die eerste argument vir die funksie summarise(), en het nog 2 velde bygevoeg: passasiers и gemiddelde_prys. In die eerste gebruik die funksie length() die aantal kaartjies bereken, en in die tweede die funksie gebruik mean() die gemiddelde kaartjieprys ontvang het.

Groepering en samevoeging van data in R: data.tabel

В data.table die argument word vir samevoeging gebruik j wat 'n tweede posisie tussen vierkantige hakies het, en vir groepering by of keyby, wat die derde posisie het.

Die lys van samevoegingsfunksies in hierdie geval is identies aan dié beskryf in dplyr, omdat dit is funksies van die basiese R-sintaksis.

Groepering en samevoeging in R: data.tabel

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

Groepering en samevoeging van data in Python: pandas

Groepering in pandas soortgelyk aan dplyr, maar die samevoeging is nie soortgelyk aan dplyr nie aan nie data.table.

Gebruik die metode om te groepeer groupby(), waarin jy 'n lys kolomme moet deurgee waarvolgens die dataraam gegroepeer sal word.

Vir samevoeging kan jy die metode gebruik agg()wat 'n woordeboek aanvaar. Die woordeboeksleutels is die kolomme waarop u die samevoegingsfunksies sal toepas, en die waardes is die name van die samevoegingsfunksies.

Aggregasie funksies:

  • sum() - opsomming
  • min() / max() – minimum en maksimum waarde
  • mean() - gemiddeld
  • median() - mediaan
  • count() - hoeveelheid

Funksie reset_index() in die voorbeeld hieronder word dit gebruik om geneste indekse terug te stel wat pandas verstek na data-aggregasie.

Simbool laat jou toe om na die volgende reël te beweeg.

Groepering en samevoeging in Python: pandas

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

Vertikale samevoeging van tabelle

'n Bewerking waarin jy twee of meer tabelle van dieselfde struktuur verbind. Die data wat ons gelaai het, bevat tabelle ga_nov и ga_des. Hierdie tabelle is identies in struktuur, d.w.s. dieselfde kolomme het, en die datatipes in hierdie kolomme.

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

Dit is 'n oplaai vanaf Google Analytics vir die maand November en Desember, in hierdie afdeling sal ons hierdie data in een tabel kombineer.

Vertikale koppeling van tabelle in R: tidyverse, dplyr

В dplyr Jy kan 2 tabelle in een kombineer deur die funksie te gebruik bind_rows(), deurgaan van tabelle as sy argumente.

Filtreer rye in R: dplyr

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

Vertikale koppeling van tabelle in R: data.table

Dit is ook niks ingewikkeld nie, kom ons gebruik rbind().

Filtreer rye in R: data.table

## data.table
rbind(ga_nov, ga_dec)

Vertikaal koppeling van tabelle in Python: pandas

В pandas die funksie word gebruik om tabelle aan te sluit concat(), waarin jy 'n lys rame moet deurgee om hulle te kombineer.

Filtreer snare in Python: pandas

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

Horisontale samevoeging van tabelle

'n Bewerking waarin kolomme van die tweede per sleutel by die eerste tabel gevoeg word. Dit word dikwels gebruik wanneer 'n feitetabel (byvoorbeeld 'n tabel met verkoopsdata) met sekere verwysingsdata (byvoorbeeld die koste van 'n produk) verryk word.

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

Daar is verskeie tipes verbindings:

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

In die voorheen gelaaide tabel Titanic ons het 'n kolom Seks, wat ooreenstem met die passasier se geslagskode:

1 - vroulik
2 - manlik

Ons het ook 'n tabel geskep - 'n naslaanboek geslag. Vir 'n geriefliker aanbieding van data oor die geslag van passasiers, moet ons die naam van die geslag uit die gids byvoeg geslag na die tafel Titanic.

Horisontale tabel sluit in R: tidyverse, dplyr

В dplyr Daar is 'n hele familie van funksies vir horisontale aansluiting:

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

Die mees algemene gebruik in my praktyk is left_join().

As die eerste twee argumente neem die funksies hierbo gelys twee tabelle om saam te voeg, en as die derde argument by jy moet die kolomme spesifiseer om aan te sluit.

Horisontale tabel sluit in R: dplyr

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

Horisontale koppeling van tabelle in R: data.table

В data.table Jy moet by tabelle aansluit deur die sleutel deur die funksie te gebruik merge().

Argumente om saam te voeg() funksioneer in data.table

  • x, y — Tabelle vir aansluiting
  • deur - Kolom wat die sleutel is om aan te sluit as dit dieselfde naam in albei tabelle het
  • by.x, by.y — Kolomname wat saamgevoeg moet word, as hulle verskillende name in die tabelle het
  • all, all.x, all.y — Sluit tipe, almal sal alle rye van beide tabelle terugstuur, all.x stem ooreen met die LEFT JOIN bewerking (sal al die rye van die eerste tabel verlaat), all.y — stem ooreen met die RIGHT JOIN-operasie (sal al die rye van die tweede tabel verlaat).

Horisontale koppeling van tabelle in R: data.table

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

Horisontale tafel sluit aan by Python: pandas

Sowel as in data.tableIn pandas die funksie word gebruik om tabelle aan te sluit merge().

Argumente van die samesmelting()-funksie in pandas

  • hoe — Verbindingstipe: links, regs, buite, binne
  • aan - Kolom wat 'n sleutel is as dit dieselfde naam in beide tabelle het
  • left_on, right_on — Name van sleutelkolomme, as hulle verskillende name in tabelle het

Horisontale tafel sluit aan by Python: pandas

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

Basiese vensterfunksies en berekende kolomme

Vensterfunksies is soortgelyk in betekenis aan samevoegingsfunksies, en word ook dikwels in data-analise gebruik. Maar in teenstelling met samevoegingsfunksies, verander vensterfunksies nie die aantal rye van die uitgaande dataraam nie.

Watter taal om te kies om met data te werk - R of Python? Albei! Migreer van pandas na tydyverse en data.table en terug

In wese, met behulp van die vensterfunksie, verdeel ons die inkomende dataraam in dele volgens een of ander kriterium, d.w.s. deur die waarde van 'n veld, of verskeie velde. En ons voer rekenkundige bewerkings op elke venster uit. Die resultaat van hierdie bewerkings sal in elke reël teruggestuur word, d.w.s. sonder om die totale aantal rye in die tabel te verander.

Kom ons neem byvoorbeeld die tabel Titanic. Ons kan bereken watter persentasie die koste van elke kaartjie binne sy kajuitklas was.

Om dit te doen, moet ons in elke reël die totale koste van 'n kaartjie kry vir die huidige kajuitklas waaraan die kaartjie in hierdie lyn behoort, en dan die koste van elke kaartjie te deel deur die totale koste van alle kaartjies van dieselfde kajuitklas .

Venster funksies in R: tidyverse, dplyr

Om nuwe kolomme by te voeg, sonder om rygroepering te gebruik, in dplyr dien funksie mutate().

Jy kan die probleem wat hierbo beskryf word oplos deur data volgens veld te groepeer Pklas en som die veld in 'n nuwe kolom op tarief. Ontgroepeer dan die tabel en verdeel die veldwaardes tarief na wat in die vorige stap gebeur het.

Venster funksioneer in R: dplyr

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

Venster funksies in R: data.table

Die oplossingsalgoritme bly dieselfde as in dplyr, moet ons die tabel in vensters vir veld verdeel Pklas. Voer in 'n nuwe kolom die bedrag uit vir die groep wat met elke ry ooreenstem, en voeg 'n kolom by waarin ons die deel van die koste van elke kaartjie in sy groep bereken.

Om nuwe kolomme by te voeg data.table operateur teenwoordig :=. Hieronder is 'n voorbeeld van die oplossing van 'n probleem deur die pakket te gebruik data.table

Venster funksies in R: data.table

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

Vensterfunksies in Python: pandas

Een manier om 'n nuwe kolom by te voeg pandas - gebruik die funksie assign(). Om die koste van kaartjies per kajuitklas op te som, sonder om rye te groepeer, sal ons die funksie gebruik transform().

Hieronder is 'n voorbeeld van 'n oplossing waarin ons by die tabel voeg Titanic dieselfde 2 kolomme.

Vensterfunksies in Python: pandas

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

Funksies en metodes korrespondensie tabel

Hieronder is 'n tabel van ooreenstemming tussen metodes om verskeie bewerkings uit te voer met data in die pakkette wat ons oorweeg het.

Beskrywing
netjies
data.tabel
pandas

Laai data
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Die skep van datarame
tibble()
data.table()
dict() + from_dict()

Kies kolomme
select()
argument j, tweede posisie tussen vierkantige hakies
ons slaag die lys van vereiste kolomme tussen vierkantige hakies / drop() / filter() / select_dtypes()

Filtreer rye
filter()
argument i, eerste posisie tussen vierkantige hakies
Ons lys die filtervoorwaardes in vierkantige hakies / filter()

Groepering en Aggregasie
group_by() + summarise()
argumente j + by
groupby() + agg()

Vertikale vereniging van tabelle (UNION)
bind_rows()
rbind()
concat()

Horisontale samevoeging van tabelle (JOIN)
left_join() / *_join()
merge()
merge()

Basiese vensterfunksies en die byvoeging van berekende kolomme
group_by() + mutate()
argument j die operateur gebruik := + argument by
transform() + assign()

Gevolgtrekking

Miskien het ek in die artikel nie die mees optimale implementering van dataverwerking beskryf nie, so ek sal bly wees as u my foute in die kommentaar regstel, of bloot die inligting wat in die artikel gegee word aanvul met ander tegnieke om met data in R / Python te werk.

Soos ek hierbo geskryf het, was die doel van die artikel nie om 'n mens se mening af te dwing oor watter taal beter is nie, maar om die geleentheid om beide tale aan te leer, of, indien nodig, tussen hulle te migreer, te vereenvoudig.

As jy van die artikel gehou het, sal ek bly wees om nuwe intekenare op my te hê YouTube и telegram kanale.

Опрос

Watter van die volgende pakkette gebruik jy in jou werk?

In die kommentaar kan jy die rede vir jou keuse skryf.

Slegs geregistreerde gebruikers kan aan die opname deelneem. Meld aan, asseblief.

Watter dataverwerkingspakket gebruik jy (jy kan verskeie opsies kies)

  • 45,2%netjies19

  • 33,3%data.tabel14

  • 54,8%pandas 23

42 gebruikers het gestem. 9 gebruikers het buite stemming gebly.

Bron: will.com

Voeg 'n opmerking