Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

Troch te sykjen nei R of Python op it ynternet, sille jo miljoenen artikels en kilometers oan diskusjes fine oer it ûnderwerp wêrfan ien better, rapper en handiger is foar it wurkjen mei gegevens. Mar spitigernôch binne al dizze artikels en disputen net bysûnder nuttich.

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

It doel fan dit artikel is om de basisgegevensferwurkingstechniken te fergelykjen yn 'e populêrste pakketten fan beide talen. En helpe lêzers gau wat te behearskjen wat se noch net witte. Foar dyjingen dy't skriuwe yn Python, fine út hoe't te dwaan itselde ding yn R, en oarsom.

Tidens it artikel sille wy analysearje de syntaksis fan de meast populêre pakketten yn R. Dit binne de pakketten opnommen yn 'e bibleteek tidyverseen ek it pakket data.table. En fergelykje harren syntaksis mei pandas, it populêrste pakket foar gegevensanalyse yn Python.

Wy sille stap foar stap troch it heule paad fan gegevensanalyse gean fan it laden oant it útfieren fan analytyske finsterfunksjes mei Python en R.

Ynhâld

Dit artikel kin brûkt wurde as cheat sheet as jo fergetten binne hoe't jo wat gegevensferwurkingsoperaasje kinne útfiere yn ien fan 'e pakketten dy't wurde beskôge.

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

  1. Main syntaksis ferskillen tusken R en Python
    1.1. Tagong ta pakketfunksjes
    1.2. Opdracht
    1.3. Yndeksearje
    1.4. Metoaden en OOP
    1.5. Pipelines
    1.6. Data Struktueren
  2. In pear wurden oer de pakketten dy't wy sille brûke
    2.1. tidyverse
    2.2. data.table
    2.3. pandas
  3. Ynstallaasje fan pakketten
  4. It laden fan gegevens
  5. It meitsjen fan dataframes
  6. Selektearje de kolommen dy't jo nedich binne
  7. Filtering rigen
  8. Groepearring en Aggregaasje
  9. Fertikale feriening fan tabellen (UNION)
  10. Horizontale gearfoeging fan tabellen (JOIN)
  11. Basis finsterfunksjes en berekkene kolommen
  12. Korrespondinsjetabel tusken gegevensferwurkingsmetoaden yn R en Python
  13. konklúzje
  14. In koarte enkête oer hokker pakket jo brûke

As jo ​​ynteressearre binne yn gegevens analyze, kinne jo fine myn telegram и youtube kanalen. It grutste part fan de ynhâld is wijd oan de R-taal.

Main syntaksis ferskillen tusken R en Python

Om it makliker te meitsjen foar jo om te wikseljen fan Python nei R, of oarsom, sil ik in pear haadpunten jaan dy't jo oandacht moatte jaan.

Tagong ta pakketfunksjes

Ienris in pakket is laden yn R, hoege jo de pakketnamme net op te jaan om tagong te krijen ta syn funksjes. Yn de measte gefallen is dit net gewoan yn R, mar it is akseptabel. Jo hoege jo hielendal net in pakket te ymportearjen as jo ien fan syn funksjes yn jo koade nedich hawwe, mar neame it gewoan troch de namme fan it pakket en de namme fan 'e funksje op te jaan. De skieding tusken pakket- en funksjenammen yn R is in dûbele kolon. package_name::function_name().

Yn Python, krekt oarsom, wurdt it klassyk beskôge om de funksjes fan in pakket te neamen troch de namme eksplisyt oan te jaan. As in pakket wurdt ynladen, wurdt it meastentiids in ferkoarte namme jûn, bgl. pandas meastentiids wurdt in pseudonym brûkt pd. In pakketfunksje is tagonklik fia in punt package_name.function_name().

Opdracht

Yn R is it gewoanlik om in pylk te brûken om in wearde oan in objekt te jaan. obj_name <- value, hoewol in inkeld lykweardich teken is tastien, wurdt it ienige lykweardich teken yn R primêr brûkt om wearden troch te jaan om arguminten te funksjonearjen.

Yn Python wurdt opdracht eksklusyf dien mei ien lykweardich teken obj_name = value.

Yndeksearje

D'r binne hjir ek frij wichtige ferskillen. Yn R begjint yndeksearring by ien en befettet alle oantsjutte eleminten yn it resultearjende berik,

Yn Python begjint yndeksearring fan nul en it selektearre berik befettet net it lêste elemint oantsjutte yn 'e yndeks. Design dus x[i:j] yn Python sil net befetsje de j elemint.

D'r binne ek ferskillen yn negative yndeksearring, yn R-notaasje x[-1] sil alle eleminten fan 'e fektor weromjaan útsein de lêste. Yn Python sil in ferlykbere notaasje allinich it lêste elemint weromjaan.

Metoaden en OOP

R ymplemintearret OOP op syn eigen manier, ik skreau oer dit yn it artikel "OOP yn 'e R-taal (diel 1): S3-klassen". Yn it algemien is R in funksjonele taal, en alles dêryn is boud op funksjes. Dêrom, bygelyks, foar Excel-brûkers, gean nei tydiverse it sil wêze makliker as pandas. Hoewol dit myn subjektive miening kin wêze.

Koartsein, foarwerpen yn R hawwe gjin metoaden (as wy prate oer S3 klassen, mar der binne oare OOP ymplemintaasjes dy't folle minder faak). D'r binne allinich generalisearre funksjes dy't se oars ferwurkje ôfhinklik fan 'e klasse fan it objekt.

Pipelines

Miskien is dit de namme foar pandas It sil net hielendal korrekt wêze, mar ik sil besykje de betsjutting út te lizzen.

Om tuskenlizzende berekkeningen net te bewarjen en gjin ûnnedige objekten yn 'e wurkomjouwing te produsearjen, kinne jo in soarte fan pipeline brûke. Dy. trochjaan it resultaat fan in berekkening fan de iene funksje nei de folgjende, en net bewarje tuskenlizzende resultaten.

Litte wy it folgjende koadefoarbyld nimme, wêr't wy tuskenlizzende berekkeningen opslaan yn aparte objekten:

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

Wy hawwe 3 operaasjes sequentially útfierd, en it resultaat fan elk waard bewarre yn in apart objekt. Mar feitlik hawwe wy dizze tuskenobjekten net nedich.

Of noch slimmer, mar mear fertroud foar Excel-brûkers.

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

Yn dit gefal hawwe wy gjin tuskenlizzende berekkeningsresultaten bewarre, mar it lêzen fan koade mei nestele funksjes is ekstreem ûngemaklik.

Wy sille sjen nei ferskate oanpak fan gegevens ferwurking yn R, en se fiere ferlykbere operaasjes op ferskillende wizen.

Pipelines yn 'e biblioteek tidyverse útfierd troch de operator %>%.

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

Sa nimme wy it resultaat fan it wurk func1() en trochjaan it as it earste argumint oan func2(), dan passe wy it resultaat fan dizze berekkening as it earste argumint func3(). En op it lêst skriuwe wy alle berekkeningen útfierd yn it objekt obj <-.

Al it boppesteande wurdt better yllustrearre dan wurden troch dizze meme:
Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

В data.table keatlingen wurde op in fergelykbere manier brûkt.

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

Yn elk fan 'e fjouwerkante heakjes kinne jo it resultaat fan' e foarige operaasje brûke.

В pandas sokke operaasjes wurde skieden troch in stip.

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

Dy. wy nimme ús tafel df en brûk har metoade fun1(), dan tapasse wy de metoade oan it krigen resultaat fun2()nei fun3(). It resultearjende resultaat wurdt bewarre yn in objekt objekt .

Data Struktueren

Gegevensstruktueren yn R en Python binne ferlykber, mar hawwe ferskillende nammen.

beskriuwing
Namme yn R
Namme yn Python / pandas

Tabel struktuer
data.frame, data.table, tippel
DataFrame

Iendiminsjonale list fan wearden
Vector
Searjes yn pandas of list yn suver Python

Multi-level non-tabel struktuer
List
Wurdboek (dik)

Wy sille hjirûnder wat oare funksjes en ferskillen yn syntaksis besjen.

In pear wurden oer de pakketten dy't wy sille brûke

Earst sil ik jo in bytsje fertelle oer de pakketten wêrmei jo yn dit artikel sille wurde fertroud.

tidyverse

Offisjele webside: tidyverse.org
Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom
Bibleteek tidyverse skreaun troch Hedley Wickham, Senior Research Scientist by RStudio. tidyverse bestiet út in yndrukwekkende set pakketten dy't gegevensferwurking ferienfâldigje, wêrfan 5 binne opnommen yn 'e top 10 downloads fan it CRAN-repository.

De kearn fan 'e bibleteek bestiet út de folgjende pakketten: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Elk fan dizze pakketten is rjochte op it oplossen fan in spesifyk probleem. Bygelyks dplyr makke foar gegevensmanipulaasje, tidyr om de gegevens yn in nette foarm te bringen, stringr simplifies wurkje mei snaren, en ggplot2 is ien fan 'e populêrste ark foar gegevensfisualisaasje.

It foardiel tidyverse is de ienfâld en maklik te lêzen syntaksis, dy't op in protte manieren fergelykber is mei de SQL-fraachtaal.

data.table

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en weromOffisjele webside: r-datatable.com

Troch data.table is Matt Dole fan H2O.ai.

De earste útjefte fan de biblioteek fûn plak yn 2006.

De pakketsyntaksis is net sa handich as yn tidyverse en docht tinken oan klassike dataframes yn R, mar tagelyk signifikant útwreide yn funksjonaliteit.

Alle manipulaasjes mei de tabel yn dit pakket wurde beskreaun yn fjouwerkante heakjes, en as jo de syntaksis oersette data.table yn SQL krije jo wat as dit: data.table[ WHERE, SELECT, GROUP BY ]

De krêft fan dit pakket is de snelheid fan it ferwurkjen fan grutte hoemannichten gegevens.

pandas

Offisjele webside: pandas.pydata.org Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

De namme fan 'e bibleteek komt fan' e ekonometryske term "panielgegevens", brûkt om multydinsjonele strukturearre sets fan ynformaasje te beskriuwen.

Troch pandas is Amerikaansk Wes McKinney.

As it giet om gegevens analyze yn Python, gelyk pandas Nee. In heul multyfunksjoneel pakket op heech nivo wêrmei jo elke manipulaasje mei gegevens kinne útfiere, fan it laden fan gegevens fan elke boarne oant it visualisearjen.

Ynstallearje ekstra pakketten

De pakketten besprutsen yn dit artikel binne net opnommen yn 'e basis R- en Python-distribúsjes. Hoewol d'r in lyts warskôging is, as jo de Anaconda-distribúsje ynstalleare, ynstallearje dan ekstra pandas net nedich.

Ynstallaasje fan pakketten yn R

As jo ​​​​de RStudio-ûntwikkelingsomjouwing op syn minst ien kear iepene hawwe, witte jo wierskynlik al hoe't jo it fereaske pakket yn R kinne ynstallearje. Om pakketten te ynstallearjen, brûk it standert kommando install.packages() troch it direkt yn R sels te rinnen.

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

Nei ynstallaasje moatte de pakketten ferbûn wurde, wêrfoar't yn 'e measte gefallen it kommando brûkt wurdt library().

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

Ynstallaasje fan pakketten yn Python

Dus, as jo pure Python ynstalleare hawwe, dan pandas jo moatte it manuell ynstallearje. Iepenje in kommandorigel, as terminal, ôfhinklik fan jo bestjoeringssysteem en fier it folgjende kommando yn.

pip install pandas

Dan geane wy ​​werom nei Python en ymportearje it ynstalleare pakket mei it kommando import.

import pandas as pd

It laden fan gegevens

Data mining is ien fan 'e wichtichste stappen yn gegevensanalyse. Sawol Python as R, as jo wolle, jouwe jo wiidweidige mooglikheden om gegevens te krijen fan alle boarnen: lokale bestannen, bestannen fan it ynternet, websiden, alle soarten databases.

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

Yn it heule artikel sille wy ferskate datasets brûke:

  1. Twa downloads fan Google Analytics.
  2. Titanic Passenger Dataset.

Alle gegevens binne op myn GitHub yn 'e foarm fan csv- en tsv-bestannen. Wêr sille wy se freegje?

Laden fan gegevens yn R: tidyverse, vroom, readr

Om gegevens yn in bibleteek te laden tidyverse Der binne twa pakketten: vroom, readr. vroom moderner, mar yn 'e takomst kinne de pakketten kombineare wurde.

Sitaat fan offisjele dokumintaasje vroom.

vroom vs lêzer
Wat docht de útjefte fan vroom betsjutte foar readr? Foar no binne wy ​​fan plan de twa pakketten apart te litten evoluearje, mar wierskynlik sille wy de pakketten yn 'e takomst ferienigje. Ien neidiel foar it luie lêzen fan vroom is dat bepaalde gegevensproblemen net foarôf kinne wurde rapportearre, dus hoe't se it bêste kinne ferienigje, freget wat gedachte.

vroom vs lêzer
Wat betsjut frijlitting? vroom foar readr? Op it stuit binne wy ​​fan plan om beide pakketten apart te ûntwikkeljen, mar wy sille se wierskynlik yn 'e takomst kombinearje. Ien fan de neidielen fan loai lêzen vroom is dat guon problemen mei de gegevens net fan tefoaren kinne wurde rapportearre, dus jo moatte tinke oer hoe't jo se it bêste kinne kombinearje.

Yn dit artikel sille wy sjen nei beide pakketten foar it laden fan gegevens:

Laden fan gegevens yn 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")

Laden fan gegevens yn 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")

Yn it pakket vroom, nettsjinsteande it csv / tsv-gegevensformaat, wurdt it laden útfierd troch de funksje mei deselde namme vroom(), yn it pakket readr wy brûke in oare funksje foar elk formaat read_tsv() и read_csv().

Laden fan gegevens yn R: data.table

В data.table der is in funksje foar it laden fan gegevens fread().

Laden fan gegevens yn 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")

Laden gegevens yn Python: pandas

As wy fergelykje mei R-pakketten, dan is yn dit gefal de syntaksis it tichtst by pandas sil wêze readr, omdat pandas kin freegje gegevens fan oeral, en der is in hiele famylje fan funksjes yn dit pakket read_*().

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

En in protte oare funksjes ûntworpen om gegevens út ferskate formaten te lêzen. Mar foar ús doelen is it genôch read_table() of read_csv() mei help fan argumint Sep om de kolomskieding oan te jaan.

Laden gegevens yn 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")

It meitsjen fan dataframes

Tafel titanich, dy't wy laden, der is in fjild Seks, dy't de geslachtidentifikaasje fan 'e passazjier opslacht.

Mar foar in handiger presintaasje fan gegevens yn termen fan passazjiersgeslach, moatte jo de namme brûke ynstee fan de geslachtskoade.

Om dit te dwaan, sille wy in lyts map meitsje, in tabel wêryn d'r respektivelik mar 2 kolommen (koade en geslachtnamme) en 2 rigen sille wêze.

It meitsjen fan in dataframe yn R: tidyverse, dplyr

Yn it koade foarbyld hjirûnder meitsje wy it winske dataframe mei de funksje tibble() .

It meitsjen fan in dataframe yn R: dplyr

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

It meitsjen fan in dataframe yn R: data.table

It meitsjen fan in dataframe yn R: data.table

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

It meitsjen fan in dataframe yn Python: pandas

В pandas It meitsjen fan frames wurdt útfierd yn ferskate stadia, earst meitsje wy in wurdboek, en dan konvertearje wy it wurdboek yn in dataframe.

It meitsjen fan in dataframe yn Python: pandas

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

Selektearje Kolommen

De tabellen wêrmei jo wurkje kinne tsientallen of sels hûnderten kolommen mei gegevens befetsje. Mar om analyse út te fieren, hawwe jo yn 'e regel net alle kolommen nedich dy't beskikber binne yn' e boarnetabel.

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

Dêrom is ien fan 'e earste operaasjes dy't jo sille útfiere mei de boarnetabel om it te wiskjen fan ûnnedige ynformaasje en it ûnthâld frij te meitsjen dat dizze ynformaasje ynnimt.

Selektearje kolommen yn R: tidyverse, dplyr

syntaksis dplyr is tige ferlykber mei de SQL-query-taal, as jo der mei bekend binne, sille jo dit pakket fluch behearskje.

Om kolommen te selektearjen, brûk de funksje select().

Hjirûnder binne foarbylden fan koade wêrmei jo kolommen op 'e folgjende manieren kinne selektearje:

  • List fan de nammen fan de fereaske kolommen
  • Ferwize nei kolomnammen mei reguliere útdrukkingen
  • Troch gegevenstype of in oare eigenskip fan 'e gegevens yn' e kolom

Selektearje kolommen yn 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)

Selektearje kolommen yn R: data.table

Deselde operaasjes yn data.table wurde wat oars útfierd, oan it begjin fan it artikel joech ik in beskriuwing fan hokker arguminten binnen fjouwerkante heakjes binne data.table.

DT[i,j,by]

Wêr:
ik - wêr, d.w.s. filterjen troch rigen
j - selektearje|update|do, d.w.s. kolommen selektearje en se konvertearje
troch - gegevens groepearring

Selektearje kolommen yn 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$")]

Variable .SD kinne jo tagong ta alle kolommen, en .SDcols filterje de fereaske kolommen mei reguliere útdrukkingen, of oare funksjes om de nammen fan de kolommen te filterjen dy't jo nedich binne.

Selektearje kolommen yn Python, pandas

Om kolommen op namme yn te selektearjen pandas it is genôch om in list fan har nammen te jaan. En om kolommen mei namme te selektearjen of út te sluten mei reguliere útdrukkingen, moatte jo de funksjes brûke drop() и filter(), en argumint as=1, wêrmei jo oanjaan dat it nedich is om kolommen te ferwurkjen ynstee fan rigen.

Om in fjild te selektearjen op gegevenstype, brûk de funksje select_dtypes(), en yn arguminten ynklusyf of útslute pass in list mei gegevenstypen oerienkommende mei hokker fjilden jo moatte selektearje.

Selektearje kolommen yn 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'])

Filtering rigen

Bygelyks, de boarne tabel kin befetsje ferskate jierren fan gegevens, mar jo moatte allinne analysearje de lêste moanne. Nochris sille ekstra rigels it gegevensferwurkingsproses fertrage en it PC-ûnthâld ferstoppe.

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

Filtering rigen yn R: tydyverse, dplyr

В dplyr de funksje wurdt brûkt om rigen te filterjen filter(). It nimt in dataframe as it earste argumint, dan listje jo de filterbetingsten.

By it skriuwen fan logyske útdrukkingen om in tabel te filterjen, spesifisearje yn dit gefal de kolomnammen sûnder quotes en sûnder de tabelnamme te ferklearjen.

As jo ​​​​meardere logyske útdrukkingen brûke om te filterjen, brûk dan de folgjende operators:

  • & of komma - logysk EN
  • | - logyske OR

Filtering rigen yn R: dplyr

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

Filtering rigen yn R: data.table

Lykas ik hjirboppe al skreau, yn data.table data konverzje syntaksis wurdt omsletten yn fjouwerkante heakjes.

DT[i,j,by]

Wêr:
ik - wêr, d.w.s. filterjen troch rigen
j - selektearje|update|do, d.w.s. kolommen selektearje en se konvertearje
troch - gegevens groepearring

It argumint wurdt brûkt om rigen te filterjen i, dy't de earste posysje hat tusken fjouwerkante heakjes.

Kolommen binne tagonklik yn logyske útdrukkingen sûnder oanhalingstekens en sûnder de tabelnamme op te jaan.

Logyske útdrukkingen binne besibbe oan inoar op deselde wize as yn dplyr troch de & en | operators.

Filtering rigen yn R: data.table

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

Stringen filterjen yn Python: pandas

Filterje op rigen yn pandas fergelykber mei filterjen yn data.table, en wurdt dien yn fjouwerkante heakjes.

Yn dit gefal wurdt tagong ta kolommen needsaaklikerwize útfierd troch de namme fan it dataframe oan te jaan; dan kin de kolomnamme ek oanjûn wurde tusken oanhalingstekens yn fjouwerkante heakjes (foarbyld df['col_name']), of sûnder quotes nei de perioade (foarbyld df.col_name).

As jo ​​​​in dataframe moatte filterje troch ferskate betingsten, moat elke betingst tusken heakjes pleatst wurde. Logyske betingsten binne ferbûn mei elkoar troch operators & и |.

Stringen filterjen yn 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)]

Groepearjen en aggregaasje fan gegevens

Ien fan 'e meast brûkte operaasjes yn gegevensanalyse is groepearring en aggregaasje.

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

De syntaksis foar it útfieren fan dizze operaasjes is ferspraat oer alle pakketten dy't wy besjogge.

Yn dit gefal sille wy in dataframe as foarbyld nimme titanich, en berekkenje it oantal en gemiddelde kosten fan kaartsjes ôfhinklik fan de kabine klasse.

Groepearjen en aggregaasje fan gegevens yn R: tidyverse, dplyr

В dplyr de funksje wurdt brûkt foar groepearring group_by(), en foar aggregaasje summarise(). Yn feite, dplyr der is in hiele famylje fan funksjes summarise_*(), mar it doel fan dit artikel is om de basissyntaksis te fergelykjen, dus wy sille net yn sa'n jungle gean.

Basis aggregation funksjes:

  • sum() - gearfetting
  • min() / max() - minimum en maksimum wearde
  • mean() - gemiddeld
  • median() - mediaan
  • length() - kwantiteit

Groepearring en aggregaasje yn R: dplyr

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

Funksjonearje group_by() wy passe de tafel as it earste argumint titanich, en dan it fjild oanjûn Pclass, wêrmei't wy ús tabel groepearje. It resultaat fan dizze operaasje mei help fan de operator %>% trochjûn as it earste argumint foar de funksje summarise(), en hat noch 2 fjilden tafoege: passazjiers и avg_priis. Yn 'e earste, mei help fan de funksje length() berekkene it oantal kaartsjes, en yn de twadde mei help fan de funksje mean() krige de gemiddelde ticketpriis.

Groepearjen en aggregaasje fan gegevens yn R: data.table

В data.table it argumint wurdt brûkt foar aggregaasje j dat hat in twadde posysje yn fjouwerkante heakjes, en foar groepearring by of keyby, dy't de tredde posysje hawwe.

De list fan aggregaasjefunksjes yn dit gefal is identyk oan dy beskreaun yn dplyr, omdat dit binne funksjes fan 'e basis R-syntaksis.

Groepearjen en aggregaasje yn R: data.table

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

Groepearjen en aggregaasje fan gegevens yn Python: pandas

Groepearje yn pandas gelyk oan dplyr, mar de aggregaasje is net gelyk oan dplyr net oan data.table.

Brûk de metoade om te groepearjen groupby(), wêryn jo in list mei kolommen trochjaan moatte wêrmei't it dataframe groepearre wurdt.

Foar aggregaasje kinne jo de metoade brûke agg()dy't in wurdboek akseptearret. De wurdboekkaaien binne de kolommen wêrop jo de aggregaasjefunksjes sille tapasse, en de wearden binne de nammen fan 'e aggregaasjefunksjes.

Aggregaasjefunksjes:

  • sum() - gearfetting
  • min() / max() - minimum en maksimum wearde
  • mean() - gemiddeld
  • median() - mediaan
  • count() - kwantiteit

function reset_index() yn it foarbyld hjirûnder wurdt it brûkt om geneste yndeksen werom te setten dat pandas standert nei dataaggregaasje.

Symbol kinne jo ferhúzje nei de folgjende rigel.

Groepearjen en aggregaasje yn Python: pandas

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

Fertikale join fan tabellen

In operaasje wêryn jo by twa of mear tabellen fan deselde struktuer meidwaan. De gegevens dy't wy laden befetsje tabellen ga_nov и ga_dec. Dizze tabellen binne identyk yn struktuer, d.w.s. hawwe deselde kolommen, en de gegevenstypen yn dizze kolommen.

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

Dit is in upload fan Google Analytics foar de moanne novimber en desimber, yn dizze seksje sille wy dizze gegevens kombinearje yn ien tabel.

Fertikaal joining tabellen yn R: tidyverse, dplyr

В dplyr Jo kinne 2 tabellen yn ien kombinearje mei de funksje bind_rows(), trochjaan tabellen as syn arguminten.

Filtering rigen yn R: dplyr

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

Fertikaal joining tabellen yn R: data.table

It is ek neat yngewikkeld, lit ús brûke rbind().

Filtering rigen yn R: data.table

## data.table
rbind(ga_nov, ga_dec)

Fertikaal joining tabellen yn Python: pandas

В pandas de funksje wurdt brûkt om oan tabellen te kommen concat(), wêryn jo in list mei frames moatte trochjaan om se te kombinearjen.

Stringen filterjen yn Python: pandas

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

Horizontale gearfoeging fan tabellen

In operaasje wêryn kolommen fan 'e twadde wurde tafoege oan' e earste tabel troch kaai. It wurdt faak brûkt by it ferrykjen fan in feittabel (bygelyks in tabel mei ferkeapgegevens) mei guon referinsjegegevens (bygelyks de kosten fan in produkt).

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

D'r binne ferskate soarten joins:

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

Yn de earder laden tabel titanich wy hawwe in kolom Seks, dy't oerienkomt mei de geslachtskoade fan 'e passazjier:

1 - frou
2 - man

Ek hawwe wy in tabel makke - in referinsjeboek gender. Foar in handiger presintaasje fan gegevens oer it geslacht fan passazjiers, moatte wy de namme fan it geslacht tafoegje út 'e map gender oan tafel titanich.

Horizontale tabel join yn R: tidyverse, dplyr

В dplyr D'r is in hiele famylje fan funksjes foar horizontale gearfoeging:

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

De meast brûkte yn myn praktyk is left_join().

As de earste twa arguminten nimme de hjirboppe neamde funksjes twa tabellen om mei te dwaan, en as it tredde argumint by jo moatte de kolommen opjaan om mei te dwaan.

Horizontale tabel join yn R: dplyr

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

Horizontale join fan tabellen yn R: data.table

В data.table Jo moatte meidwaan oan tabellen mei de kaai mei de funksje merge().

Arguminten te fusearjen () funksje yn data.table

  • x, y - Tabellen foar joining
  • troch - Kolom dat is de kaai om mei te dwaan as it hat deselde namme yn beide tabellen
  • by.x, by.y - Kolomnammen dy't moatte wurde gearfoege, as se ferskillende nammen hawwe yn 'e tabellen
  • all.x RIGHT JOIN-operaasje (sil alle rigen fan 'e twadde tabel ferlitte).

Horizontale join fan tabellen yn R: data.table

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

Horizontale tabel meidwaan yn Python: pandas

Likegoed as yn data.table, yn pandas de funksje wurdt brûkt om oan tabellen te kommen merge().

Arguminten fan de gearfoeging () funksje yn pandas

  • hoe - Ferbiningstype: lofts, rjochts, uterlik, ynderlik
  • on - Kolom dat is in kaai as it hat deselde namme yn beide tabellen
  • left_on, right_on - Nammen fan kaai kolommen, as se hawwe ferskillende nammen yn tabellen

Horizontale tabel meidwaan yn Python: pandas

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

Basis finsterfunksjes en berekkene kolommen

Finsterfunksjes binne yn betsjutting fergelykber mei aggregaasjefunksjes, en wurde ek faak brûkt yn gegevensanalyse. Mar oars as aggregaasjefunksjes feroarje finsterfunksjes it oantal rigen fan it útgeande dataframe net.

Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom

Yn essinsje, mei help fan de finsterfunksje, spjalte wy it ynkommende dataframe yn dielen neffens guon kritearia, d.w.s. troch de wearde fan in fjild, of ferskate fjilden. En wy fiere arithmetic operaasjes op elk finster. It resultaat fan dizze operaasjes wurdt weromjûn yn elke rigel, d.w.s. sûnder it feroarjen fan it totale oantal rigen yn 'e tabel.

Litte wy bygelyks de tafel nimme titanich. Wy kinne berekkenje hokker persintaazje de kosten fan elk ticket wie binnen syn kabine klasse.

Om dit te dwaan, moatte wy yn elke rigel de totale kosten fan in kaartsje krije foar de hjoeddeistige kabineklasse dêr't it kaartsje yn dizze line ta heart, en dan de kosten fan elk ticket te dielen troch de totale kosten fan alle kaartsjes fan deselde kabineklasse .

Finster funksjes yn R: tidyverse, dplyr

Om nije kolommen ta te foegjen, sûnder rigelgroepearring te brûken, yn dplyr tsjinnet funksje mutate().

Jo kinne it hjirboppe beskreaune probleem oplosse troch gegevens per fjild te groepearjen Pclass en gearfette it fjild yn in nije kolom do. Folgjende, ûntgroepearje de tabel en diele de fjildwearden do nei wat der barde yn 'e foarige stap.

Finster funksjes yn R: dplyr

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

Finster funksjes yn R: data.table

It oplossingsalgoritme bliuwt itselde as yn dplyr, wy moatte de tabel splitst yn finsters foar fjild Pclass. Utfier yn in nije kolom it bedrach foar de groep dy't oerienkomt mei elke rige, en heakje in kolom ta wêryn wy it oandiel fan 'e kosten fan elk kaartsje yn syn groep berekkenje.

Om nije kolommen ta te foegjen data.table operator oanwêzich :=. Hjirûnder is in foarbyld fan it oplossen fan in probleem mei it pakket data.table

Finster funksjes yn R: data.table

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

Finsterfunksjes yn Python: pandas

Ien manier om in nije kolom ta te foegjen pandas - brûk de funksje assign(). Om de kosten fan kaartsjes troch kabineklasse te gearfetsje, sûnder rigen te groepearjen, sille wy de funksje brûke transform().

Hjirûnder is in foarbyld fan in oplossing wêryn wy tafoegje oan 'e tabel titanich deselde 2 kolommen.

Finsterfunksjes yn Python: pandas

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

Funksjes en metoaden korrespondinsje tabel

Hjirûnder is in tabel fan korrespondinsje tusken metoaden foar it útfieren fan ferskate operaasjes mei gegevens yn 'e pakketten dy't wy hawwe beskôge.

beskriuwing
tidyverse
data.table
pandas

It laden fan gegevens
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

It meitsjen fan dataframes
tibble()
data.table()
dict() + from_dict()

Selektearje Kolommen
select()
argumint j, twadde posysje yn fjouwerkante heakjes
wy passe de list mei fereaske kolommen yn fjouwerkante heakjes / drop() / filter() / select_dtypes()

Filtering rigen
filter()
argumint i, earste posysje yn fjouwerkante heakjes
Wy listje de filterbetingsten yn fjouwerkante heakjes / filter()

Groepearring en Aggregaasje
group_by() + summarise()
arguminten j + by
groupby() + agg()

Fertikale feriening fan tabellen (UNION)
bind_rows()
rbind()
concat()

Horizontale gearfoeging fan tabellen (JOIN)
left_join() / *_join()
merge()
merge()

Basis finsterfunksjes en it tafoegjen fan berekkene kolommen
group_by() + mutate()
argumint j mei help fan de operator := + argumint by
transform() + assign()

konklúzje

Miskien yn it artikel beskreau ik net de meast optimale ymplemintaasjes fan gegevensferwurking, dus ik sil bliid wêze as jo myn flaters yn 'e opmerkingen korrigearje, of gewoan de ynformaasje jûn yn it artikel oanfolje mei oare techniken foar wurkjen mei gegevens yn R / Python.

Sa't ik hjirboppe skreau, wie it doel fan it artikel net om jins miening op te lizzen oer hokker taal better is, mar om de kâns te ferienfâldigjen om beide talen te learen, of, as it nedich is, tusken har te migrearjen.

As jo ​​​​it artikel leuk fine, sil ik bliid wêze om nije abonnees te hawwen op myn youtube и telegram kanalen.

Poll

Hokker fan de folgjende pakketten brûke jo yn jo wurk?

Yn 'e opmerkings kinne jo de reden foar jo kar skriuwe.

Allinnich registrearre brûkers kinne meidwaan oan 'e enkête. Ynlogge, asjebleaft.

Hokker gegevensferwurkingspakket brûke jo (jo kinne ferskate opsjes selektearje)

  • 45,2%skjinne 19

  • 33,3%data.tabel14

  • 54,8%panda's 23

42 brûkers stimden. 9 brûkers ûntholden har.

Boarne: www.habr.com

Add a comment