Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Lè w chèche R oswa Python sou entènèt la, w ap jwenn dè milyon de atik ak kilomèt diskisyon sou sijè ki pi bon, pi vit ak pi bon pou travay ak done yo. Men, malerezman, tout atik sa yo ak diskisyon yo pa patikilyèman itil.

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Objektif atik sa a se pou konpare teknik debaz tretman done yo nan pakè ki pi popilè nan tou de lang yo. Epi ede lektè yo byen vit metrize yon bagay yo poko konnen. Pou moun ki ekri nan Python, chèche konnen ki jan fè menm bagay la nan R, ak vis vèrsa.

Pandan atik la nou pral analize sentaks pakè ki pi popilè nan R. Sa yo se pakè ki enkli nan bibliyotèk la. tidyverseepi tou pakè a data.table. Epi konpare sentaks yo ak pandas, pake analiz done ki pi popilè nan Python.

Nou pral ale etap pa etap nan tout chemen an nan analiz done soti nan chaje li nan fè fonksyon fenèt analyse lè l sèvi avèk Python ak R.

Content

Atik sa a ka itilize kòm yon fèy tronpe si ou te bliye ki jan fè kèk operasyon pwosesis done nan youn nan pakè yo anba konsiderasyon.

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

  1. Diferans sentaks prensipal ant R ak Python
    1.1. Aksè Fonksyon Pake
    1.2. Plasman
    1.3. Indexing
    1.4. Metòd ak OOP
    1.5. Tiyo
    1.6. Estrikti done yo
  2. Kèk mo sou pakè nou pral itilize yo
    2.1. tidyverse
    2.2. done.tab
    2.3. panda
  3. Enstale pakè
  4. Chaje Done
  5. Kreye dataframes
  6. Chwazi kolòn ou bezwen yo
  7. Filtrage ranje
  8. Gwoupman ak Agregasyon
  9. Inyon vètikal tab yo (UNION)
  10. Join orizontal nan tab yo (JOIN)
  11. Fonksyon fenèt debaz ak kolòn kalkile
  12. Tablo korespondans ant metòd pwosesis done nan R ak Python
  13. Konklizyon
  14. Yon sondaj kout sou ki pake ou itilize

Si w enterese nan analiz done, ou ka jwenn mwen telegram и YouTube chanèl. Pifò nan kontni an dedye a lang R la.

Diferans sentaks prensipal ant R ak Python

Pou fè li pi fasil pou ou chanje soti nan Python nan R, oswa vis vèrsa, mwen pral bay kèk pwen prensipal ke ou bezwen peye atansyon a.

Aksè Fonksyon Pake

Yon fwa yo chaje yon pake nan R, ou pa bezwen presize non pake a pou jwenn aksè nan fonksyon li yo. Nan pifò ka sa a pa komen nan R, men li akseptab. Ou pa bezwen enpòte yon pake ditou si ou bezwen youn nan fonksyon li yo nan kòd ou a, men tou senpleman rele li lè w espesifye non pake a ak non fonksyon an. Separatè ant pake ak non fonksyon nan R se yon doub kolon. package_name::function_name().

Nan Python, okontrè, li konsidere kòm klasik yo rele fonksyon yo nan yon pake pa klèman espesifye non li. Lè yo telechaje yon pake, anjeneral yo bay li yon non ki pi kout, pa egzanp. pandas anjeneral yo itilize yon psedonim pd. Yon fonksyon pake gen aksè atravè yon pwen package_name.function_name().

Plasman

Nan R, li komen pou itilize yon flèch pou bay yon valè yon objè. obj_name <- value, byenke yon sèl siy egal a pèmèt, se yon sèl siy egal nan R yo itilize prensipalman pou pase valè nan agiman fonksyon.

Nan Python, plasman yo fèt sèlman ak yon sèl siy egal obj_name = value.

Indexing

Genyen tou diferans byen enpòtan isit la. Nan R, Indexing kòmanse nan yon sèl epi li gen ladan tout eleman espesifye nan seri a ki kapab lakòz,

Nan Python, Indexing kòmanse soti nan zewo ak seri a chwazi pa gen ladan dènye eleman ki espesifye nan endèks la. Se konsa, konsepsyon x[i:j] nan Python pa pral enkli eleman j la.

Genyen tou diferans ki genyen nan endèks negatif, nan notasyon R x[-1] pral retounen tout eleman vektè a eksepte dènye a. Nan Python, yon notasyon menm jan an pral retounen sèlman dènye eleman an.

Metòd ak OOP

R aplike OOP nan pwòp fason li, mwen te ekri sou sa a nan atik la "OOP nan lang R (pati 1): klas S3". An jeneral, R se yon lang fonksyonèl, ak tout bagay nan li se bati sou fonksyon. Se poutèt sa, pou egzanp, pou itilizatè Excel, ale nan tydiverse li pral pi fasil pase pandas. Malgre ke sa a ka opinyon subjectif mwen.

Nan ti bout tan, objè nan R pa gen metòd (si nou pale sou klas S3, men gen lòt aplikasyon OOP ki pi mwens komen). Gen sèlman fonksyon jeneralize ki trete yo yon fason diferan selon klas objè a.

Tiyo

Petèt sa a se non an pou pandas Li pa pral totalman kòrèk, men mwen pral eseye eksplike siyifikasyon an.

Yo nan lòd yo pa sove kalkil entèmedyè epi yo pa pwodwi objè ki pa nesesè nan anviwònman an k ap travay, ou ka itilize yon kalite tiyo. Moun sa yo. pase rezilta yon kalkil soti nan yon fonksyon nan yon lòt, epi pa sove rezilta entèmedyè.

Ann pran egzanp kòd sa a, kote nou estoke kalkil entèmedyè nan objè separe:

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

Nou te fè 3 operasyon an sekans, epi rezilta a nan chak te sove nan yon objè separe. Men, an reyalite, nou pa bezwen objè entèmedyè sa yo.

Oswa menm vin pi mal, men plis abitye ak itilizatè Excel.

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

Nan ka sa a, nou pa te sove rezilta kalkil entèmedyè, men lekti kòd ak fonksyon enbrike se trè konvenyan.

Nou pral gade plizyè apwòch nan pwosesis done nan R, epi yo fè operasyon menm jan an nan diferan fason.

Pipelines nan bibliyotèk la tidyverse operatè a aplike %>%.

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

Kidonk nou pran rezilta travay la func1() epi pase li kòm premye agiman an func2(), Lè sa a, nou pase rezilta kalkil sa a kòm premye agiman an func3(). Epi nan fen a, nou ekri tout kalkil yo fè nan objè a obj <-.

Tout sa ki anwo yo ilistre pi byen pase mo pa mem sa a:
Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

В data.table chenn yo itilize menm jan an.

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

Nan chak parantèz yo ou ka itilize rezilta operasyon anvan an.

В pandas operasyon sa yo separe pa yon pwen.

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

Moun sa yo. nou pran tab nou df epi sèvi ak metòd li fun1(), Lè sa a, nou aplike metòd la nan rezilta yo jwenn fun2()apre fun3(). Se rezilta a ki kapab lakòz sove nan yon objè objè .

Estrikti done yo

Estrikti done nan R ak Python yo sanble, men yo gen non diferan.

Deskripsyon
Non nan R
Non nan Python/pandas

Estrikti tab la
data.frame, data.table, tibble
DataFrame

Lis yon dimansyon nan valè
Vektè
Seri nan panda oswa lis nan piton piton

Estrikti milti-nivo ki pa tabul
Lis
Diksyonè (dik)

Nou pral gade kèk lòt karakteristik ak diferans ki genyen nan sentaks anba a.

Kèk mo sou pakè nou pral itilize yo

Premyèman, mwen pral di ou yon ti kras sou pakè yo ke ou pral vin abitye avèk pandan atik sa a.

tidyverse

Официальный сайт: tidyverse.org
Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou
bibliyotèk tidyverse ekri pa Hedley Wickham, Senior Research Syantis nan RStudio. tidyverse konsiste de yon seri pakè enpresyonan ki senplifye pwosesis done, 5 ladan yo enkli nan 10 pi gwo telechajman ki soti nan depo CRAN.

Nwayo bibliyotèk la konsiste de pakè sa yo: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Chak pakè sa yo vize pou rezoud yon pwoblèm espesifik. Pa egzanp dplyr kreye pou manipilasyon done, tidyr pote done yo nan yon fòm pwòp, stringr senplifye travay ak fisèl, ak ggplot2 se youn nan zouti vizyalizasyon done ki pi popilè.

Avantaj la tidyverse se senplisite la ak fasil li sentaks, ki se nan plizyè fason menm jan ak lang nan rechèch SQL.

done.tab

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ouОфициальный сайт: r-datatable.com

Pa data.table se Matt Dole nan H2O.ai.

Premye lage bibliyotèk la te fèt an 2006.

Sentaks pake a pa pratik tankou nan tidyverse epi li se plis okoumansman de klasik dataframes nan R, men an menm tan an siyifikativman elaji nan fonksyonalite.

Tout manipilasyon ak tablo a nan pake sa a yo dekri nan parantèz kare, epi si ou tradui sentaks la data.table nan SQL, ou jwenn yon bagay tankou sa a: data.table[ WHERE, SELECT, GROUP BY ]

Fòs nan pake sa a se vitès la nan pwosesis gwo kantite done.

panda

Официальный сайт: pandas.pydata.org Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Non bibliyotèk la soti nan tèm ekonometrik "panèl done", yo itilize pou dekri seri enfòmasyon estriktire miltidimansyon.

Pa pandas se Ameriken Wes McKinney.

Lè li rive analiz done nan Python, egal pandas Non. Yon pake trè multifonksyonèl, wo nivo ki pèmèt ou fè nenpòt manipilasyon ak done, soti nan chaje done ki soti nan nenpòt sous yo vizyalize li.

Enstale pakè adisyonèl

Pakè yo diskite nan atik sa a pa enkli nan distribisyon debaz R ak Python. Malgre ke gen yon ti opozisyon, si ou enstale distribisyon an Anaconda, Lè sa a, enstale anplis pandas pa obligatwa.

Enstale pakè nan R

Si ou te louvri anviwònman devlopman RStudio omwen yon fwa, pwobableman ou deja konnen ki jan yo enstale pake ki nesesè a nan R. Pou enstale pakè, sèvi ak lòd estanda a. install.packages() pa kouri li dirèkteman nan R tèt li.

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

Apre enstalasyon, pakè yo bezwen konekte, pou ki nan pifò ka yo se kòmandman an itilize library().

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

Enstale pakè nan Python

Se konsa, si ou gen pi bon Python enstale, lè sa a pandas ou bezwen enstale li manyèlman. Louvri yon liy lòd, oswa tèminal, tou depann de sistèm opere ou a epi antre nan lòd sa a.

pip install pandas

Lè sa a, nou retounen nan Python ak enpòte pake a enstale ak lòd la import.

import pandas as pd

Chaje Done

Done min se youn nan etap ki pi enpòtan nan analiz done yo. Tou de Python ak R, si ou vle, bay ou ak anpil opòtinite pou jwenn done ki soti nan nenpòt sous: dosye lokal yo, dosye ki soti nan entènèt la, sit entènèt, tout kalite baz done.

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Pandan tout atik la nou pral sèvi ak plizyè seri done:

  1. De telechaje soti nan Google Analytics.
  2. Dataset pasaje Titanic.

Tout done yo sou mwen GitHub sou fòm dosye csv ak tsv. Ki kote nou pral mande yo?

Chaje done nan R: tidyverse, vroom, readr

Pou chaje done nan yon bibliyotèk tidyverse Gen de pakè: vroom, readr. vroom pi modèn, men nan lavni an pakè yo ka konbine.

Quote soti nan dokiman ofisyèl yo vroom.

vroom vs lektè
Ki sa ki liberasyon an nan vroom vle di pou readr? Pou kounye a nou planifye kite de pakè yo evolye separeman, men gen anpil chans nou pral ini pakè yo nan lavni. Youn nan dezavantaj nan lekti parese vroom a se sèten pwoblèm done yo pa ka rapòte davans, kidonk ki jan pi bon inifye yo mande pou kèk reflechi.

vroom vs lektè
Ki sa Liberasyon vle di? vroom pou readr? Nan moman sa a nou planifye devlope tou de pakè separeman, men nou pral pwobableman konbine yo nan lavni. Youn nan dezavantaj yo nan lekti parese vroom se ke kèk pwoblèm ak done yo pa ka rapòte davans, kidonk ou bezwen reflechi sou ki jan pi bon konbine yo.

Nan atik sa a nou pral gade tou de pakè chaj done yo:

Chaje done nan R: pake vroom

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

Chaje done nan 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")

Nan pake a vroom, kèlkeswa fòma done csv / tsv, chajman fèt pa fonksyon menm non an. vroom(), nan pakè a readr nou itilize yon fonksyon diferan pou chak fòma read_tsv() и read_csv().

Chaje done nan R: data.table

В data.table gen yon fonksyon pou chaje done fread().

Chaje done nan R: pake data.table

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

Chaje done nan Python: panda

Si nou konpare ak pakè R, Lè sa a, nan ka sa a sentaks la pi pre pandas pral readr, paske pandas ka mande done nenpòt kote, epi gen yon fanmi antye nan fonksyon nan pake sa a read_*().

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

Ak anpil lòt fonksyon ki fèt pou li done ki soti nan divès fòma. Men, pou rezon nou li ase read_table() oswa read_csv() lè l sèvi avèk agiman Sep pou presize separateur kolòn lan.

Chaje done nan Python: panda

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

Kreye dataframes

Tablo Titanic, ki nou chaje, gen yon jaden Sèks, ki sere idantifikasyon sèks pasaje a.

Men, pou yon prezantasyon pi pratik nan done pa sèks pasaje yo, ou ta dwe itilize non an olye ke kòd sèks la.

Pou fè sa, nou pral kreye yon ti anyè, yon tab nan ki pral gen sèlman 2 kolòn (kòd ak non sèks) ak 2 ranje, respektivman.

Kreye yon dataframe nan R: tidyverse, dplyr

Nan egzanp kòd ki anba a, nou kreye dataframe vle a lè l sèvi avèk fonksyon an tibble() .

Kreye yon dataframe nan R: dplyr

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

Kreye yon dataframe nan R: data.table

Kreye yon dataframe nan R: data.table

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

Kreye yon dataframe nan Python: panda

В pandas se kreye ankadreman fèt nan plizyè etap, premye nou kreye yon diksyonè, ak Lè sa a, nou konvèti diksyonè a nan yon dataframe.

Kreye yon dataframe nan Python: panda

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

Chwazi kolòn

Tablo ou travay avèk yo ka genyen plizyè douzèn oswa menm dè santèn de kolòn done. Men, pou fè analiz, kòm yon règ, ou pa bezwen tout kolòn ki disponib nan tablo sous la.

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Se poutèt sa, youn nan premye operasyon yo ke ou pral fè ak tab sous la se netwaye li nan enfòmasyon ki pa nesesè epi libere memwa ke enfòmasyon sa a okipe.

Chwazi kolòn nan R: tidyverse, dplyr

sentaks dplyr se trè menm jan ak lang nan rechèch SQL, si ou abitye ak li ou pral byen vit metrize pake sa a.

Pou chwazi kolòn, sèvi ak fonksyon an select().

Anba a gen kèk egzanp kòd ak kote ou ka chwazi kolòn nan fason sa yo:

  • Lis non kolòn obligatwa yo
  • Gade non kolòn yo lè l sèvi avèk ekspresyon regilye
  • Dapre kalite done oswa nenpòt lòt pwopriyete done ki nan kolòn nan

Chwazi kolòn nan 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)

Chwazi kolòn nan R: data.table

Operasyon yo menm nan data.table yo fè yon ti kras diferan, nan kòmansman atik la mwen te bay yon deskripsyon sou ki agiman yo andedan parantèz kare nan data.table.

DT[i,j,by]

Ki kote:
mwen - kote, i.e. filtraj pa ranje
j - chwazi|mizajou|fè, i.e. chwazi kolòn ak konvèti yo
pa - gwoupman done

Chwazi kolòn nan 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$")]

Varyab .SD pèmèt ou jwenn aksè nan tout kolòn, ak .SDcols filtre kolòn ki nesesè yo lè l sèvi avèk ekspresyon regilye, oswa lòt fonksyon pou filtre non kolòn ou bezwen yo.

Chwazi kolòn nan Python, panda

Pou chwazi kolòn pa non nan pandas li ase pou bay yon lis non yo. Epi pou chwazi oswa eskli kolòn pa non lè l sèvi avèk ekspresyon regilye, ou bezwen sèvi ak fonksyon yo drop() и filter(), ak agiman aks = 1, ak ki ou endike ke li nesesè pou trete kolòn olye ke ranje.

Pou chwazi yon jaden pa kalite done, sèvi ak fonksyon an select_dtypes(), ak nan agiman gen ladan yo oswa eskli pase yon lis kalite done ki koresponn ak ki jaden ou bezwen chwazi.

Chwazi kolòn nan Python: panda

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

Filtrage ranje

Pou egzanp, tab sous la ka gen plizyè ane nan done, men ou sèlman bezwen analize dènye mwa a. Yon fwa ankò, liy siplemantè yo pral ralanti pwosesis la pwosesis done ak bouche memwa PC a.

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Filtrage ranje nan R: tydyverse, dplyr

В dplyr fonksyon an itilize pou filtre ranje filter(). Li pran yon dataframe kòm premye agiman an, Lè sa a, ou lis kondisyon yo filtraj.

Lè w ap ekri ekspresyon lojik pou filtre yon tab, nan ka sa a, presize non kolòn yo san guillemets epi san yo pa deklare non tab la.

Lè w ap itilize plizyè ekspresyon lojik pou filtre, sèvi ak operatè sa yo:

  • & oswa vigil - lojik AND
  • | - lojik OSWA

Filtrage ranje nan R: dplyr

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

Filtrage ranje nan R: data.table

Kòm mwen te deja ekri pi wo a, nan data.table sentaks konvèsyon done yo mete nan parantèz kare.

DT[i,j,by]

Ki kote:
mwen - kote, i.e. filtraj pa ranje
j - chwazi|mizajou|fè, i.e. chwazi kolòn ak konvèti yo
pa - gwoupman done

Yo itilize agiman an pou filtre ranje i, ki gen premye pozisyon nan parantèz kare.

Yo jwenn aksè nan kolòn nan ekspresyon lojik san guillemets epi san yo pa espesifye non tab la.

Ekspresyon lojik yo gen rapò youn ak lòt menm jan ak nan dplyr atravè operatè yo & ak |.

Filtrage ranje nan R: data.table

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

Filtrage strings nan Python: panda

Filtre pa ranje nan pandas menm jan ak filtraj nan data.table, epi li fè nan parantèz kare.

Nan ka sa a, aksè nan kolòn yo fèt nesesèman lè w endike non an nan dataframe la; Lè sa a, non kolòn nan ka endike tou nan guillemets nan parantèz kare (egzanp df['col_name']), oswa san quotes apre peryòd la (egzanp df.col_name).

Si ou bezwen filtre yon dataframe pa plizyè kondisyon, yo dwe mete chak kondisyon an parantèz. Kondisyon lojik yo konekte youn ak lòt pa operatè yo & и |.

Filtrage strings nan Python: panda

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

Gwoupman ak agrégation done yo

Youn nan operasyon ki pi souvan itilize nan analiz done se gwoupman ak agrégation.

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Sentaks pou fè operasyon sa yo gaye nan tout pakè nou revize yo.

Nan ka sa a, nou pral pran yon dataframe kòm yon egzanp Titanic, epi kalkile kantite ak pri mwayèn tikè yo depann de klas kabin an.

Gwoupman ak agrégasyon done nan R: tidyverse, dplyr

В dplyr se fonksyon an itilize pou gwoupman group_by(), ak pou agrégation summarise(). An reyalite, dplyr gen tout yon fanmi fonksyon summarise_*(), men objektif atik sa a se konpare sentaks debaz la, kidonk nou pa pral antre nan forè sa yo.

Fonksyon de baz agrégation:

  • sum() - rezime
  • min() / max() - valè minimòm ak maksimòm
  • mean() - mwayèn
  • median() - medyàn
  • length() - kantite

Gwoupman ak agrégation nan R: dplyr

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

Pou fonksyone group_by() nou te pase tab la kòm premye agiman an Titanic, ak Lè sa a, endike jaden an Pclass, pa ki nou pral gwoupe tab nou an. Rezilta a nan operasyon sa a lè l sèvi avèk operatè a %>% pase kòm premye agiman nan fonksyon an summarise(), epi ajoute 2 lòt jaden: pasaje yo и pri_mwayèn. Nan premye a, lè l sèvi avèk fonksyon an length() kalkile kantite tikè, ak nan dezyèm lan lè l sèvi avèk fonksyon an mean() te resevwa pri mwayèn tikè a.

Gwoupman ak agrégation done nan R: data.table

В data.table se agiman an itilize pou agrégation j ki gen yon dezyèm pozisyon nan parantèz kare, ak pou gwoupman by oswa keyby, ki gen twazyèm pozisyon.

Lis fonksyon agrégasyon nan ka sa a idantik ak sa ki dekri nan dplyr, paske sa yo se fonksyon ki soti nan sentaks R debaz la.

Gwoupman ak agrégation nan R: data.table

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

Gwoupman ak agrégation done nan Python: panda

Gwoupman nan pandas menm jan ak dplyr, men totalman an pa sanble ak dplyr pa sou data.table.

Pou gwoupe, sèvi ak metòd la groupby(), nan ki ou bezwen pase yon lis kolòn kote dataframe a pral gwoupe.

Pou agrégation ou ka itilize metòd la agg()ki aksepte yon diksyonè. Kle diksyonè yo se kolòn kote w ap aplike fonksyon agrégasyon yo, ak valè yo se non fonksyon agrégasyon yo.

Fonksyon Agregasyon:

  • sum() - rezime
  • min() / max() - valè minimòm ak maksimòm
  • mean() - mwayèn
  • median() - medyàn
  • count() - kantite

Fonksyon reset_index() nan egzanp ki anba a li se itilize yo Reyajiste endis ki enbrike sa pandas par défaut apre agrégation done.

Senbòl pèmèt ou ale nan pwochen liy lan.

Gwoupman ak agrégation nan Python: panda

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

Vètikal rantre nan tab yo

Yon operasyon kote ou rantre de oswa plis tab nan menm estrikti a. Done nou chaje yo gen tab ga_nov и ga_dec. Tablo sa yo idantik nan estrikti, i.e. gen menm kolòn yo, ak kalite done yo nan kolòn sa yo.

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Sa a se yon upload soti nan Google Analytics pou mwa Novanm ak Desanm, nan seksyon sa a nou pral konbine done sa yo nan yon sèl tablo.

Vètikalman rantre nan tab nan R: tidyverse, dplyr

В dplyr Ou ka konbine 2 tab nan yon sèl lè l sèvi avèk fonksyon an bind_rows(), pase tab kòm agiman li yo.

Filtrage ranje nan R: dplyr

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

Vètikalman rantre nan tab nan R: data.table

Se tou pa gen anyen konplike, ann sèvi ak rbind().

Filtrage ranje nan R: data.table

## data.table
rbind(ga_nov, ga_dec)

Vètikalman rantre nan tab nan Python: panda

В pandas fonksyon an itilize pou rantre nan tab yo concat(), nan ki ou bezwen pase yon lis ankadreman yo konbine yo.

Filtrage strings nan Python: panda

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

Orizontal rantre nan tab yo

Yon operasyon kote kolòn ki soti nan dezyèm lan yo ajoute nan premye tab la pa kle. Li se souvan itilize lè anrichi yon tablo reyalite (pa egzanp, yon tablo ak done lavant) ak kèk done referans (pa egzanp, pri a nan yon pwodwi).

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Gen plizyè kalite rantre:

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Nan tab la deja chaje Titanic nou gen yon kolòn Sèks, ki koresponn ak kòd sèks pasaje a:

1 - fi
2 - gason

Epitou, nou te kreye yon tab - yon liv referans sèks. Pou yon prezantasyon pi pratik nan done sou sèks pasaje yo, nou bezwen ajoute non sèks la nan anyè a. sèks sou tab la Titanic.

Tablo orizontal rantre nan R: tidyverse, dplyr

В dplyr Gen yon fanmi antye nan fonksyon pou rantre orizontal:

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

Ki pi souvan itilize nan pratik mwen an se left_join().

Kòm de premye agiman yo, fonksyon yo ki nan lis pi wo a pran de tab yo rantre nan, ak kòm twazyèm agiman an by ou dwe presize kolòn yo rantre nan.

Tablo orizontal rantre nan R: dplyr

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

Orizontal rantre nan tab nan R: data.table

В data.table Ou bezwen rantre nan tab pa kle lè l sèvi avèk fonksyon an merge().

Agiman pou merge() fonksyon nan data.table

  • x, y — Tablo pou rantre nan
  • by — Kolòn ki se kle pou rantre si li gen menm non nan tou de tab yo
  • by.x, by.y — Non kolòn yo dwe fizyone, si yo gen non diferan nan tablo yo
  • all, all.x, all.y — Kalite Join, all ap retounen tout ranje ki soti nan tou de tab, all.x koresponn ak operasyon LEFT JOIN (ap kite tout ranje premye tab la), all.y — koresponn ak Operasyon RIGHT JOIN (ap kite tout ranje dezyèm tab la).

Orizontal rantre nan tab nan R: data.table

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

Tablo orizontal rantre nan Python: panda

Osi byen ke nan data.tablepous pandas fonksyon an itilize pou rantre nan tab yo merge().

Agiman merge() fonksyon nan panda

  • ki jan — Kalite koneksyon: gòch, dwa, ekstèn, enteryè
  • on — Kolòn ki se yon kle si li gen menm non an nan tou de tablo yo
  • left_on, right_on — Non kolòn kle yo, si yo gen non diferan nan tablo yo

Tablo orizontal rantre nan Python: panda

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

Fonksyon fenèt debaz ak kolòn kalkile

Fonksyon fenèt yo sanble nan siyifikasyon fonksyon agrégasyon, epi yo souvan itilize tou nan analiz done. Men, kontrèman ak fonksyon agrégation, fonksyon fenèt yo pa chanje kantite ranje dataframe sortan an.

Ki lang pou w chwazi pou travay ak done - R oswa Python? Tou de! Migrasyon soti nan panda nan tidyverse ak data.table ak tounen lakay ou

Esansyèlman, lè l sèvi avèk fonksyon fenèt la, nou divize dataframe fèk ap rantre an an pati dapre kèk kritè, i.e. pa valè yon jaden, oswa plizyè jaden. Epi nou fè operasyon aritmetik sou chak fenèt. Rezilta operasyon sa yo pral retounen nan chak liy, i.e. san yo pa chanje kantite total ranje nan tablo a.

Pa egzanp, ann pran tab la Titanic. Nou ka kalkile ki pousantaj pri chak tikè te nan klas kabin li a.

Pou fè sa, nou bezwen jwenn nan chak liy pri total yon tikè pou klas kabin aktyèl la kote tikè nan liy sa a fè pati, epi divize pri chak tikè pa pri total tout tikè nan menm klas kabin. .

Fonksyon fenèt nan R: tidyverse, dplyr

Pou ajoute nouvo kolòn, san yo pa itilize gwoupman ranje, nan dplyr sèvi fonksyon mutate().

Ou ka rezoud pwoblèm ki dekri pi wo a lè w gwoupe done pa jaden Pclass ak adisyone jaden an nan yon nouvo kolòn Pri. Apre sa, separe tab la epi divize valè jaden yo Pri sa ki te pase nan etap anvan an.

Fonksyon fenèt nan R: dplyr

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

Fonksyon fenèt nan R: data.table

Algorithm solisyon an rete menm jan ak nan dplyr, nou bezwen divize tab la nan fenèt pa jaden Pclass. Sòti nan yon nouvo kolòn kantite lajan an pou gwoup ki koresponn ak chak ranje, epi ajoute yon kolòn nan ki nou kalkile pati nan pri a nan chak tikè nan gwoup li yo.

Pou ajoute nouvo kolòn nan data.table operatè prezan :=. Anba a se yon egzanp pou rezoud yon pwoblèm lè l sèvi avèk pake a data.table

Fonksyon fenèt nan R: data.table

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

Fonksyon fenèt nan Python: panda

Youn nan fason yo ajoute yon nouvo kolòn nan pandas - sèvi ak fonksyon an assign(). Pou rezime pri tikè pa klas kabin, san gwoupman ranje, nou pral sèvi ak fonksyon an transform().

Anba a se yon egzanp yon solisyon kote nou ajoute nan tablo a Titanic menm 2 kolòn yo.

Fonksyon fenèt nan Python: panda

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

Fonksyon ak metòd korespondans tablo

Anba a se yon tablo korespondans ant metòd pou fè divès operasyon ak done nan pakè yo nou te konsidere yo.

Deskripsyon
tidyverse
done.tab
panda

Chaje Done
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Kreye dataframes
tibble()
data.table()
dict() + from_dict()

Chwazi kolòn
select()
agiman j, dezyèm pozisyon nan parantèz kare
nou pase lis kolòn obligatwa yo nan parantèz kare / drop() / filter() / select_dtypes()

Filtrage ranje
filter()
agiman i, premye pozisyon nan parantèz kare
Nou lis kondisyon filtraj yo nan parantèz kare / filter()

Gwoupman ak Agregasyon
group_by() + summarise()
agiman j + by
groupby() + agg()

Inyon vètikal tab yo (UNION)
bind_rows()
rbind()
concat()

Join orizontal nan tab yo (JOIN)
left_join() / *_join()
merge()
merge()

Fonksyon fenèt debaz yo ak ajoute kolòn kalkile
group_by() + mutate()
agiman j lè l sèvi avèk operatè a := + agiman by
transform() + assign()

Konklizyon

Petèt nan atik la mwen dekri pa aplikasyon ki pi optimal nan pwosesis done, kidonk mwen pral kontan si ou korije erè mwen yo nan kòmantè yo, oswa tou senpleman konplete enfòmasyon yo bay nan atik la ak lòt teknik pou travay ak done nan R / Python.

Kòm mwen te ekri pi wo a, objektif la nan atik la pa te enpoze opinyon yon moun sou ki lang ki pi bon, men senplifye opòtinite pou aprann tou de lang, oswa, si sa nesesè, emigre ant yo.

Si ou te renmen atik la, mwen pral kontan gen nouvo abonnés pou mwen YouTube и telegram chanèl.

Опрос

Kilès nan pakè sa yo ou itilize nan travay ou?

Nan kòmantè yo ou ka ekri rezon ki fè chwa ou.

Se sèlman itilizatè ki anrejistre ki ka patisipe nan sondaj la. Enskri, tanpri.

Ki pake tretman done ou itilize (ou ka chwazi plizyè opsyon)

  • 45,2%tidyverse19

  • 33,3%done.table14

  • 54,8%panda23

42 itilizatè yo te vote. 9 itilizatè te absteni.

Sous: www.habr.com

Add nouvo kòmantè