Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Sa pamamagitan ng paghahanap para sa R ​​o Python sa Internet, makakahanap ka ng milyun-milyong artikulo at kilometro ng mga talakayan sa paksa kung saan ang isa ay mas mahusay, mas mabilis at mas maginhawa para sa pagtatrabaho sa data. Ngunit sa kasamaang-palad, ang lahat ng mga artikulo at mga pagtatalo ay hindi partikular na kapaki-pakinabang.

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Ang layunin ng artikulong ito ay ihambing ang mga pangunahing pamamaraan sa pagproseso ng data sa mga pinakasikat na pakete ng parehong wika. At tulungan ang mga mambabasa na mabilis na makabisado ang isang bagay na hindi pa nila alam. Para sa mga nagsusulat sa Python, alamin kung paano gawin ang parehong bagay sa R, at vice versa.

Sa panahon ng artikulo ay susuriin natin ang syntax ng pinakasikat na mga pakete sa R. Ito ang mga paketeng kasama sa aklatan tidyverseat pati na rin ang pakete data.table. At ihambing ang kanilang syntax sa pandas, ang pinakasikat na data analysis package sa Python.

Tayo ay hakbang-hakbang sa buong landas ng pagsusuri ng data mula sa paglo-load nito hanggang sa pagsasagawa ng analytical window function gamit ang Python at R.

nilalaman

Maaaring gamitin ang artikulong ito bilang cheat sheet kung nakalimutan mo kung paano magsagawa ng ilang operasyon sa pagpoproseso ng data sa isa sa mga paketeng isinasaalang-alang.

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

  1. Mga pangunahing pagkakaiba sa syntax sa pagitan ng R at Python
    1.1. Pag-access sa Mga Function ng Package
    1.2. Takdang-aralin
    1.3. Pag-index
    1.4. Mga Paraan at OOP
    1.5. Mga Pipeline
    1.6. Mga Istraktura ng Data
  2. Ilang salita tungkol sa mga pakete na aming gagamitin
    2.1. tidyverse
    2.2. talaan ng mga impormasyon
    2.3. pandas
  3. Pag-install ng mga pakete
  4. Loading data
  5. Paglikha ng mga dataframe
  6. Pagpili ng Mga Column na Kailangan Mo
  7. Pag-filter ng mga hilera
  8. Pagpapangkat at Pagsasama-sama
  9. Vertical union ng mga talahanayan (UNION)
  10. Pahalang na pagsasama ng mga talahanayan (JOIN)
  11. Mga pangunahing function ng window at mga nakalkulang column
  12. Talahanayan ng korespondensiya sa pagitan ng mga pamamaraan sa pagpoproseso ng data sa R ​​at Python
  13. Konklusyon
  14. Isang maikling survey tungkol sa kung aling pakete ang iyong ginagamit

Kung interesado ka sa pagsusuri ng data, maaari mong mahanap ang aking telegram и youtube mga channel. Karamihan sa nilalaman ay nakatuon sa wikang R.

Mga pangunahing pagkakaiba sa syntax sa pagitan ng R at Python

Upang gawing mas madali para sa iyo na lumipat mula sa Python patungo sa R, o kabaliktaran, magbibigay ako ng ilang pangunahing punto na kailangan mong bigyang pansin.

Pag-access sa Mga Function ng Package

Kapag na-load ang isang package sa R, hindi mo na kailangang tukuyin ang pangalan ng package para ma-access ang mga function nito. Sa karamihan ng mga kaso hindi ito karaniwan sa R, ngunit ito ay katanggap-tanggap. Hindi mo kailangang mag-import ng package kung kailangan mo ng isa sa mga function nito sa iyong code, ngunit tawagan lang ito sa pamamagitan ng pagtukoy sa pangalan ng package at pangalan ng function. Ang separator sa pagitan ng mga pangalan ng package at function sa R ​​ay isang double colon. package_name::function_name().

Sa Python, sa kabaligtaran, itinuturing na klasiko ang pagtawag sa mga function ng isang package sa pamamagitan ng tahasang pagtukoy sa pangalan nito. Kapag na-download ang isang package, kadalasang binibigyan ito ng pinaikling pangalan, hal. pandas karaniwang ginagamitan ng pseudonym pd. Ang isang function ng package ay ina-access sa pamamagitan ng isang tuldok package_name.function_name().

Takdang-aralin

Sa R, karaniwan na gumamit ng arrow upang magtalaga ng halaga sa isang bagay. obj_name <- value, bagama't pinapayagan ang isang solong katumbas na tanda, ang solong katumbas na tanda sa R ​​ay pangunahing ginagamit upang ipasa ang mga halaga upang gumana ang mga argumento.

Sa Python, ang pagtatalaga ay ginagawa ng eksklusibo sa isang solong katumbas na tanda obj_name = value.

Pag-index

Mayroon ding mga makabuluhang pagkakaiba dito. Sa R, ang pag-index ay nagsisimula sa isa at kasama ang lahat ng tinukoy na elemento sa resultang hanay,

sa Python, ang pag-index ay nagsisimula sa zero at ang napiling hanay ay hindi kasama ang huling elementong tinukoy sa pag-index. Kaya disenyo x[i:j] sa Python ay hindi isasama ang j elemento.

Mayroon ding mga pagkakaiba sa negatibong pag-index, sa R ​​notation x[-1] ibabalik ang lahat ng elemento ng vector maliban sa huli. Sa Python, ang isang katulad na notasyon ay magbabalik lamang ng huling elemento.

Mga Paraan at OOP

Ang R ay nagpapatupad ng OOP sa sarili nitong paraan, isinulat ko ang tungkol dito sa artikulo "OOP sa wikang R (bahagi 1): Mga klase sa S3". Sa pangkalahatan, ang R ay isang functional na wika, at lahat ng nasa loob nito ay binuo sa mga function. Samakatuwid, halimbawa, para sa mga gumagamit ng Excel, pumunta sa tydiverse ito ay magiging mas madali kaysa sa pandas. Kahit na ito ay maaaring ang aking subjective na opinyon.

Sa madaling sabi, ang mga bagay sa R ​​ay walang mga pamamaraan (kung pinag-uusapan natin ang tungkol sa mga klase ng S3, ngunit may iba pang mga pagpapatupad ng OOP na hindi gaanong karaniwan). Mayroon lamang mga pangkalahatang pag-andar na nagpoproseso ng mga ito nang iba depende sa klase ng bagay.

Mga Pipeline

Marahil ito ang pangalan para sa pandas Hindi ito magiging ganap na tama, ngunit susubukan kong ipaliwanag ang kahulugan.

Upang hindi mai-save ang mga intermediate na kalkulasyon at hindi makagawa ng mga hindi kinakailangang bagay sa kapaligiran ng pagtatrabaho, maaari kang gumamit ng isang uri ng pipeline. Yung. ipasa ang resulta ng isang pagkalkula mula sa isang function patungo sa susunod, at huwag i-save ang mga intermediate na resulta.

Kunin natin ang sumusunod na halimbawa ng code, kung saan nag-iimbak tayo ng mga intermediate na kalkulasyon sa magkakahiwalay na mga bagay:

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

Nagsagawa kami ng 3 operasyon nang sunud-sunod, at ang resulta ng bawat isa ay nai-save sa isang hiwalay na bagay. Ngunit sa katunayan, hindi namin kailangan ang mga intermediate na bagay na ito.

O mas masahol pa, ngunit mas pamilyar sa mga gumagamit ng Excel.

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

Sa kasong ito, hindi kami nag-save ng mga intermediate na resulta ng pagkalkula, ngunit ang pagbabasa ng code na may mga nested function ay lubhang nakakaabala.

Titingnan natin ang ilang mga diskarte sa pagproseso ng data sa R, at nagsasagawa sila ng mga katulad na operasyon sa iba't ibang paraan.

Pipelines sa library tidyverse ipinatupad ng operator %>%.

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

Kaya kinukuha namin ang resulta ng trabaho func1() at ipasa ito bilang unang argumento sa func2(), pagkatapos ay ipinapasa namin ang resulta ng kalkulasyong ito bilang unang argumento func3(). At sa huli, isinusulat namin ang lahat ng mga kalkulasyon na isinagawa sa bagay obj <-.

Ang lahat ng nasa itaas ay mas inilalarawan ng meme na ito kaysa sa mga salita:
Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

В data.table ang mga kadena ay ginagamit sa katulad na paraan.

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

Sa bawat isa sa mga square bracket maaari mong gamitin ang resulta ng nakaraang operasyon.

В pandas ang mga naturang operasyon ay pinaghihiwalay ng isang tuldok.

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

Yung. kunin namin ang table namin df at gamitin ang kanyang pamamaraan fun1(), pagkatapos ay inilalapat namin ang pamamaraan sa nakuha na resulta fun2()pagkatapos fun3(). Ang resultang resulta ay nai-save sa isang bagay obj .

Mga Istraktura ng Data

Ang mga istruktura ng data sa R ​​at Python ay magkatulad, ngunit may magkaibang mga pangalan.

Описание
Pangalan sa R
Pangalan sa Python/pandas

Istraktura ng talahanayan
data.frame, data.table, tibble
Balangkas ng mga datos

Isang-dimensional na listahan ng mga halaga
Vector
Serye sa mga panda o listahan sa purong Python

Multi-level na non-tabular na istraktura
Listahan
Diksyunaryo (dict)

Titingnan namin ang ilang iba pang mga tampok at pagkakaiba sa syntax sa ibaba.

Ilang salita tungkol sa mga pakete na aming gagamitin

Una, sasabihin ko sa iyo ang tungkol sa mga pakete na magiging pamilyar ka sa artikulong ito.

tidyverse

Официальный сайт: tidyverse.org
Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik
Aklatan tidyverse isinulat ni Hedley Wickham, Senior Research Scientist sa RStudio. tidyverse ay binubuo ng isang kahanga-hangang hanay ng mga pakete na nagpapasimple sa pagproseso ng data, 5 sa mga ito ay kasama sa nangungunang 10 pag-download mula sa CRAN repository.

Ang core ng library ay binubuo ng mga sumusunod na pakete: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Ang bawat isa sa mga paketeng ito ay naglalayong lutasin ang isang partikular na problema. Halimbawa dplyr nilikha para sa pagmamanipula ng data, tidyr upang dalhin ang data sa isang maayos na anyo, stringr pinapasimple ang pagtatrabaho sa mga string, at ggplot2 ay isa sa pinakasikat na tool sa visualization ng data.

Ang bentahe tidyverse ay ang pagiging simple at madaling basahin ang syntax, na sa maraming paraan ay katulad ng SQL query language.

talaan ng mga impormasyon

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalikОфициальный сайт: r-datatable.com

Sa pamamagitan ng may-akda data.table ay si Matt Dole ng H2O.ai.

Ang unang paglabas ng aklatan ay naganap noong 2006.

Ang syntax ng package ay hindi kasing ginhawa ng in tidyverse at higit na nakapagpapaalaala sa mga klasikong dataframe sa R, ngunit sa parehong oras ay makabuluhang pinalawak sa functionality.

Ang lahat ng mga manipulasyon sa talahanayan sa package na ito ay inilarawan sa mga square bracket, at kung isasalin mo ang syntax data.table sa SQL, nakakakuha ka ng ganito: data.table[ WHERE, SELECT, GROUP BY ]

Ang lakas ng package na ito ay ang bilis ng pagproseso ng malalaking halaga ng data.

pandas

Официальный сайт: pandas.pydata.org Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Ang pangalan ng library ay nagmula sa econometric term na "panel data", na ginagamit upang ilarawan ang multidimensional structured sets ng impormasyon.

Sa pamamagitan ng may-akda pandas ay Amerikanong si Wes McKinney.

Pagdating sa pagsusuri ng data sa Python, pantay pandas Hindi. Isang napaka-multifunctional, mataas na antas na pakete na nagbibigay-daan sa iyong magsagawa ng anumang pagmamanipula sa data, mula sa pag-load ng data mula sa anumang pinagmulan hanggang sa pag-visualize nito.

Pag-install ng mga karagdagang pakete

Ang mga pakete na tinalakay sa artikulong ito ay hindi kasama sa mga pangunahing pamamahagi ng R at Python. Bagaman mayroong isang maliit na caveat, kung na-install mo ang pamamahagi ng Anaconda, pagkatapos ay i-install ang karagdagan pandas hindi kinakailangan.

Pag-install ng mga pakete sa R

Kung binuksan mo ang kapaligiran ng pag-unlad ng RStudio kahit isang beses, malamang na alam mo na kung paano i-install ang kinakailangang pakete sa R. Upang mag-install ng mga pakete, gamitin ang karaniwang command install.packages() sa pamamagitan ng pagpapatakbo nito nang direkta sa R ​​mismo.

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

Pagkatapos ng pag-install, ang mga pakete ay kailangang konektado, kung saan sa karamihan ng mga kaso ay ginagamit ang utos library().

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

Pag-install ng mga pakete sa Python

Kaya, kung mayroon kang purong Python na naka-install, kung gayon pandas kailangan mong i-install ito nang manu-mano. Magbukas ng command line, o terminal, depende sa iyong operating system at ilagay ang sumusunod na command.

pip install pandas

Pagkatapos ay bumalik kami sa Python at i-import ang naka-install na package gamit ang command import.

import pandas as pd

Loading data

Ang data mining ay isa sa pinakamahalagang hakbang sa pagsusuri ng data. Parehong Python at R, kung ninanais, ay nagbibigay sa iyo ng malawak na mga pagkakataon upang makakuha ng data mula sa anumang mga mapagkukunan: mga lokal na file, mga file mula sa Internet, mga website, lahat ng uri ng mga database.

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Sa buong artikulo ay gagamit kami ng ilang mga dataset:

  1. Dalawang pag-download mula sa Google Analytics.
  2. Titanic Passenger Dataset.

Ang lahat ng data ay nasa aking GitHub sa anyo ng mga csv at tsv file. Saan natin sila hihilingin?

Naglo-load ng data sa R: tidyverse, vroom, readr

Upang mag-load ng data sa isang library tidyverse Mayroong dalawang pakete: vroom, readr. vroom mas moderno, ngunit sa hinaharap ang mga pakete ay maaaring pagsamahin.

Quote mula sa opisyal na dokumentasyon vroom.

vroom vs reader
Ano ang ginagawa ng pagpapalabas ng vroom ibig sabihin para sa readr? Sa ngayon, plano naming hayaan ang dalawang pakete na mag-evolve nang hiwalay, ngunit malamang na pag-isahin namin ang mga pakete sa hinaharap. Ang isang kawalan sa tamad na pagbabasa ng vroom ay ang ilang mga problema sa data ay hindi maaaring iulat nang unahan, kaya kung paano pinakamahusay na pag-isahin ang mga ito ay nangangailangan ng ilang pag-iisip.

vroom vs reader
Ano ang ibig sabihin ng release? vroom para sa readr? Sa ngayon, plano naming bumuo ng parehong mga pakete nang hiwalay, ngunit malamang na pagsasamahin namin ang mga ito sa hinaharap. Isa sa mga disadvantage ng tamad magbasa vroom ay ang ilang mga problema sa data ay hindi maaaring iulat nang maaga, kaya kailangan mong pag-isipan kung paano pinakamahusay na pagsamahin ang mga ito.

Sa artikulong ito titingnan natin ang parehong mga pakete ng paglo-load ng data:

Naglo-load ng data sa R: vroom package

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

Naglo-load ng data sa 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")

Sa pakete vroom, anuman ang csv / tsv na format ng data, ang paglo-load ay isinasagawa sa pamamagitan ng function ng parehong pangalan vroom(), sa pakete readr gumagamit kami ng ibang function para sa bawat format read_tsv() и read_csv().

Naglo-load ng data sa R: data.table

В data.table mayroong isang function para sa paglo-load ng data fread().

Naglo-load ng data sa R: data.table package

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

Naglo-load ng data sa Python: pandas

Kung ihahambing natin sa mga pakete ng R, kung gayon sa kasong ito ang syntax ay pinakamalapit sa pandas kalooban readr, dahil pandas maaaring humiling ng data mula sa kahit saan, at mayroong isang buong pamilya ng mga function sa package na ito read_*().

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

At maraming iba pang mga function na idinisenyo upang basahin ang data mula sa iba't ibang mga format. Ngunit para sa aming mga layunin ito ay sapat na read_table() o read_csv() gamit ang argumento Septiyembre para tukuyin ang column separator.

Naglo-load ng data sa 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")

Paglikha ng mga dataframe

mesa gahigante, na ni-load namin, may field Kasarian, na nag-iimbak ng pagkakakilanlan ng kasarian ng pasahero.

Ngunit para sa mas maginhawang presentasyon ng data ayon sa kasarian ng pasahero, dapat mong gamitin ang pangalan sa halip na ang code ng kasarian.

Upang gawin ito, gagawa kami ng isang maliit na direktoryo, isang talahanayan kung saan magkakaroon lamang ng 2 column (code at gender name) at 2 row, ayon sa pagkakabanggit.

Paglikha ng dataframe sa R: tidyverse, dplyr

Sa halimbawa ng code sa ibaba, ginagawa namin ang nais na dataframe gamit ang function tibble() .

Paglikha ng dataframe sa R: dplyr

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

Paglikha ng dataframe sa R: data.table

Paglikha ng dataframe sa R: data.table

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

Paglikha ng dataframe sa Python: pandas

В pandas Ang paglikha ng mga frame ay isinasagawa sa maraming yugto, una ay lumikha kami ng isang diksyunaryo, at pagkatapos ay i-convert namin ang diksyunaryo sa isang dataframe.

Paglikha ng dataframe sa Python: pandas

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

Pagpili ng Mga Hanay

Ang mga talahanayan na iyong pinagtatrabahuhan ay maaaring maglaman ng dose-dosenang o kahit na daan-daang mga column ng data. Ngunit upang magsagawa ng pagsusuri, bilang panuntunan, hindi mo kailangan ang lahat ng mga hanay na magagamit sa talahanayan ng pinagmulan.

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Samakatuwid, ang isa sa mga unang operasyon na gagawin mo sa source table ay upang i-clear ito ng hindi kinakailangang impormasyon at palayain ang memorya na sinasakop ng impormasyong ito.

Pagpili ng mga column sa R: tidyverse, dplyr

palaugnayan dplyr ay halos kapareho sa wika ng query ng SQL, kung pamilyar ka dito ay mabilis mong makakabisado ang paketeng ito.

Upang pumili ng mga column, gamitin ang function select().

Nasa ibaba ang mga halimbawa ng code kung saan maaari kang pumili ng mga column sa mga sumusunod na paraan:

  • Paglilista ng mga pangalan ng mga kinakailangang column
  • Sumangguni sa mga pangalan ng column gamit ang mga regular na expression
  • Sa pamamagitan ng uri ng data o anumang iba pang katangian ng data na nasa column

Pagpili ng mga column sa 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)

Pagpili ng mga column sa R: data.table

Ang parehong mga operasyon sa data.table ay gumanap nang bahagyang naiiba, sa simula ng artikulo ay nagbigay ako ng isang paglalarawan kung anong mga argumento ang nasa loob ng mga square bracket data.table.

DT[i,j,by]

Saan:
ako - saan, i.e. pag-filter ayon sa mga hilera
j - piliin|i-update|gawin, ibig sabihin. pagpili ng mga column at pag-convert ng mga ito
ayon sa - data grouping

Pagpili ng mga column sa 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 nagbibigay-daan sa iyo na ma-access ang lahat ng mga column, at .SDcols i-filter ang mga kinakailangang column gamit ang mga regular na expression, o iba pang function para i-filter ang mga pangalan ng column na kailangan mo.

Pagpili ng mga column sa Python, pandas

Upang pumili ng mga column ayon sa pangalan sa pandas ito ay sapat na upang magbigay ng isang listahan ng kanilang mga pangalan. At para pumili o magbukod ng mga column ayon sa pangalan gamit ang mga regular na expression, kailangan mong gamitin ang mga function drop() и filter(), at argumento axis=1, kung saan ipinapahiwatig mo na kinakailangang iproseso ang mga hanay sa halip na mga hilera.

Upang pumili ng field ayon sa uri ng data, gamitin ang function select_dtypes(), at sa mga argumento isama o huwag isama magpasa ng listahan ng mga uri ng data na naaayon sa kung aling mga field ang kailangan mong piliin.

Pagpili ng mga column sa 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'])

Pag-filter ng mga hilera

Halimbawa, maaaring maglaman ang source table ng ilang taon ng data, ngunit kailangan mo lang suriin ang nakaraang buwan. Muli, ang mga dagdag na linya ay magpapabagal sa proseso ng pagpoproseso ng data at makakabara sa memorya ng PC.

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Pag-filter ng mga hilera sa R: tydyverse, dplyr

В dplyr ang function ay ginagamit upang i-filter ang mga hilera filter(). Kailangan ng dataframe bilang unang argumento, pagkatapos ay ilista mo ang mga kundisyon sa pag-filter.

Kapag nagsusulat ng mga lohikal na expression upang i-filter ang isang talahanayan, sa kasong ito, tukuyin ang mga pangalan ng column na walang mga panipi at hindi ipinapahayag ang pangalan ng talahanayan.

Kapag gumagamit ng maraming lohikal na expression upang i-filter, gamitin ang mga sumusunod na operator:

  • & o kuwit - lohikal AT
  • | - lohikal O

Pag-filter ng mga hilera sa R: dplyr

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

Pag-filter ng mga row sa R: data.table

Tulad ng naisulat ko na sa itaas, sa data.table Ang syntax ng conversion ng data ay nakapaloob sa mga square bracket.

DT[i,j,by]

Saan:
ako - saan, i.e. pag-filter ayon sa mga hilera
j - piliin|i-update|gawin, ibig sabihin. pagpili ng mga column at pag-convert ng mga ito
ayon sa - data grouping

Ang argument ay ginagamit upang i-filter ang mga hilera i, na may unang posisyon sa mga square bracket.

Naa-access ang mga column sa mga lohikal na expression nang walang mga panipi at hindi tinukoy ang pangalan ng talahanayan.

Ang mga lohikal na expression ay nauugnay sa bawat isa sa parehong paraan tulad ng sa dplyr sa pamamagitan ng & at | operator.

Pag-filter ng mga row sa R: data.table

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

Pag-filter ng mga string sa Python: pandas

I-filter ayon sa mga hilera sa pandas katulad ng pag-filter sa data.table, at ginagawa sa mga square bracket.

Sa kasong ito, ang pag-access sa mga haligi ay kinakailangan sa pamamagitan ng pagpahiwatig ng pangalan ng dataframe; pagkatapos ay ang pangalan ng haligi ay maaari ding ipahiwatig sa mga panipi sa mga square bracket (halimbawa df['col_name']), o walang mga panipi pagkatapos ng tuldok (halimbawa df.col_name).

Kung kailangan mong i-filter ang isang dataframe ayon sa ilang kundisyon, dapat ilagay sa panaklong ang bawat kundisyon. Ang mga lohikal na kondisyon ay konektado sa bawat isa ng mga operator & и |.

Pag-filter ng mga string sa 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)]

Pagpapangkat at pagsasama-sama ng data

Ang isa sa mga pinakakaraniwang ginagamit na operasyon sa pagsusuri ng data ay ang pagpapangkat at pagsasama-sama.

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Ang syntax para sa pagsasagawa ng mga operasyong ito ay nakakalat sa lahat ng mga pakete na aming sinusuri.

Sa kasong ito, kukuha kami ng dataframe bilang isang halimbawa gahigante, at kalkulahin ang bilang at average na halaga ng mga tiket depende sa klase ng cabin.

Pagpapangkat at pagsasama-sama ng data sa R: tidyverse, dplyr

В dplyr ang function ay ginagamit para sa pagpapangkat group_by(), at para sa pagsasama-sama summarise(). Sa katunayan, dplyr mayroong isang buong pamilya ng mga function summarise_*(), ngunit ang layunin ng artikulong ito ay ihambing ang pangunahing syntax, kaya hindi tayo pupunta sa ganoong gubat.

Mga pangunahing pag-andar ng pagsasama-sama:

  • sum() — pagbubuod
  • min() / max() — pinakamababa at pinakamataas na halaga
  • mean() - karaniwan
  • median() — panggitna
  • length() - dami

Pagpapangkat at pagsasama-sama sa R: dplyr

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

Sa pag-andar group_by() dumaan kami sa mesa bilang unang argumento gahigante, at pagkatapos ay ipinahiwatig ang field Pclass, kung saan papangkatin natin ang ating mesa. Ang resulta ng operasyong ito gamit ang operator %>% naipasa bilang unang argumento sa function summarise(), at nagdagdag ng 2 pang field: mga pasahero и avg_price. Sa una, gamit ang function length() kinakalkula ang bilang ng mga tiket, at sa pangalawa gamit ang function mean() natanggap ang average na presyo ng tiket.

Pagpapangkat at pagsasama-sama ng data sa R: data.table

В data.table ang argumento ay ginagamit para sa pagsasama-sama j na may pangalawang posisyon sa mga square bracket, at para sa pagpapangkat by o keyby, na may pangatlong posisyon.

Ang listahan ng mga function ng pagsasama-sama sa kasong ito ay kapareho ng inilarawan sa dplyr, dahil ito ay mga function mula sa pangunahing R syntax.

Pagpapangkat at pagsasama-sama sa R: data.table

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

Pagpapangkat at pagsasama-sama ng data sa Python: pandas

Pagpapangkat sa pandas kapareho ng dplyr, ngunit ang pagsasama-sama ay hindi katulad ng dplyr hindi talaga data.table.

Upang pangkatin, gamitin ang pamamaraan groupby(), kung saan kailangan mong ipasa ang isang listahan ng mga column kung saan ipapangkat ang dataframe.

Para sa pagsasama-sama maaari mong gamitin ang pamamaraan agg()na tumatanggap ng diksyunaryo. Ang mga key ng diksyunaryo ay ang mga column kung saan mo ilalapat ang mga function ng pagsasama-sama, at ang mga halaga ay ang mga pangalan ng mga function ng pagsasama-sama.

Mga function ng pagsasama-sama:

  • sum() — pagbubuod
  • min() / max() — pinakamababa at pinakamataas na halaga
  • mean() - karaniwan
  • median() — panggitna
  • count() - dami

Tungkulin reset_index() sa halimbawa sa ibaba ito ay ginagamit upang i-reset ang mga nested index na iyon pandas default sa pagkatapos ng pagsasama-sama ng data.

simbolo nagpapahintulot sa iyo na lumipat sa susunod na linya.

Pagpapangkat at pagsasama-sama sa Python: pandas

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

Patayong pagsasama ng mga talahanayan

Isang operasyon kung saan sumali ka sa dalawa o higit pang mga talahanayan ng parehong istraktura. Ang data na na-load namin ay naglalaman ng mga talahanayan ga_nov и ga_dec. Ang mga talahanayan na ito ay magkapareho sa istraktura, i.e. may parehong mga column, at ang mga uri ng data sa mga column na ito.

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Isa itong upload mula sa Google Analytics para sa buwan ng Nobyembre at Disyembre, sa seksyong ito ay pagsasamahin namin ang data na ito sa isang talahanayan.

Patayong pagsasama ng mga talahanayan sa R: tidyverse, dplyr

В dplyr Maaari mong pagsamahin ang 2 talahanayan sa isa gamit ang function bind_rows(), pagpasa ng mga talahanayan bilang mga argumento nito.

Pag-filter ng mga hilera sa R: dplyr

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

Patayong pagsasama ng mga talahanayan sa R: data.table

Wala ring kumplikado, gamitin natin rbind().

Pag-filter ng mga row sa R: data.table

## data.table
rbind(ga_nov, ga_dec)

Patayong pagsali sa mga talahanayan sa Python: pandas

В pandas ang function ay ginagamit upang sumali sa mga talahanayan concat(), kung saan kailangan mong ipasa ang isang listahan ng mga frame upang pagsamahin ang mga ito.

Pag-filter ng mga string sa Python: pandas

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

Pahalang na pagsasama ng mga talahanayan

Isang operasyon kung saan ang mga column mula sa pangalawa ay idinaragdag sa unang talahanayan sa pamamagitan ng key. Madalas itong ginagamit kapag nagpapayaman ng isang talahanayan ng katotohanan (halimbawa, isang talahanayan na may data ng pagbebenta) na may ilang reference na data (halimbawa, ang halaga ng isang produkto).

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Mayroong ilang mga uri ng pagsali:

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Sa naunang na-load na talahanayan gahigante may column tayo Kasarian, na tumutugma sa code ng kasarian ng pasahero:

1 - babae
2 - lalaki

Gayundin, gumawa kami ng isang talahanayan - isang reference na libro kasarian. Para sa isang mas maginhawang pagtatanghal ng data sa kasarian ng mga pasahero, kailangan naming idagdag ang pangalan ng kasarian mula sa direktoryo kasarian sa mesa gahigante.

Ang pahalang na talahanayan ay sumali sa R: tidyverse, dplyr

В dplyr Mayroong isang buong pamilya ng mga function para sa pahalang na pagsali:

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

Ang pinakakaraniwang ginagamit sa aking pagsasanay ay left_join().

Bilang unang dalawang argumento, ang mga function na nakalista sa itaas ay kumukuha ng dalawang talahanayan upang pagsamahin, at bilang pangatlong argumento by dapat mong tukuyin ang mga column na sasalihan.

Ang pahalang na talahanayan ay sumali sa R: dplyr

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

Pahalang na pagsasama ng mga talahanayan sa R: data.table

В data.table Kailangan mong sumali sa mga talahanayan sa pamamagitan ng key gamit ang function merge().

Mga argumento para pagsamahin ang() function sa data.table

  • x, y — Mga talahanayan para sa pagsali
  • sa pamamagitan ng — Column na ang susi sa pagsali kung ito ay may parehong pangalan sa parehong mga talahanayan
  • by.x, by.y — Isasama ang mga pangalan ng column, kung magkaiba sila ng mga pangalan sa mga talahanayan
  • all, all.x, all.y — Uri ng pagsali, ibabalik ng lahat ang lahat ng mga hilera mula sa parehong mga talahanayan, ang all.x ay tumutugma sa LEFT JOIN na operasyon (iiwan ang lahat ng mga hilera ng unang talahanayan), all.y — tumutugma sa RIGHT JOIN operation (iiwan ang lahat ng row ng pangalawang table ).

Pahalang na pagsasama ng mga talahanayan sa R: data.table

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

Ang pahalang na talahanayan ay sumali sa Python: pandas

Pati na rin sa data.tablesa pandas ang function ay ginagamit upang sumali sa mga talahanayan merge().

Mga argumento ng merge() function sa mga pandas

  • paano — Uri ng koneksyon: kaliwa, kanan, panlabas, panloob
  • sa — Column na isang susi kung ito ay may parehong pangalan sa parehong mga talahanayan
  • left_on, right_on — Mga pangalan ng mga pangunahing column, kung may iba't ibang pangalan ang mga ito sa mga talahanayan

Ang pahalang na talahanayan ay sumali sa Python: pandas

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

Mga pangunahing function ng window at mga nakalkulang column

Ang mga function ng window ay katulad ng kahulugan sa mga function ng aggregation, at madalas ding ginagamit sa pagsusuri ng data. Ngunit hindi tulad ng mga function ng aggregation, hindi binabago ng mga function ng window ang bilang ng mga row ng papalabas na dataframe.

Aling wika ang pipiliin para sa pagtatrabaho sa data - R o Python? pareho! Ang paglipat mula sa mga panda patungo sa tidyverse at data.table at pabalik

Sa esensya, gamit ang window function, hinati namin ang papasok na dataframe sa mga bahagi ayon sa ilang criterion, i.e. sa pamamagitan ng halaga ng isang field, o ilang mga field. At nagsasagawa kami ng mga pagpapatakbo ng aritmetika sa bawat window. Ang resulta ng mga operasyong ito ay ibabalik sa bawat linya, i.e. nang hindi binabago ang kabuuang bilang ng mga hilera sa talahanayan.

Halimbawa, kunin natin ang mesa gahigante. Maaari naming kalkulahin kung anong porsyento ang halaga ng bawat tiket sa loob ng klase ng cabin nito.

Upang gawin ito, kailangan nating makuha sa bawat linya ang kabuuang halaga ng isang tiket para sa kasalukuyang klase ng cabin kung saan kabilang ang tiket sa linyang ito, pagkatapos ay hatiin ang halaga ng bawat tiket sa kabuuang halaga ng lahat ng mga tiket ng parehong klase ng cabin .

Mga function ng window sa R: tidyverse, dplyr

Upang magdagdag ng mga bagong column, nang hindi gumagamit ng row grouping, sa dplyr nagsisilbing function mutate().

Maaari mong lutasin ang problemang inilarawan sa itaas sa pamamagitan ng pagpapangkat ng data ayon sa field Pclass at pagbubuod ng field sa isang bagong column gumawa. Susunod, alisin sa pangkat ang talahanayan at hatiin ang mga halaga ng field gumawa sa nangyari sa nakaraang hakbang.

Mga function ng window sa R: dplyr

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

Mga function ng window sa R: data.table

Ang algorithm ng solusyon ay nananatiling pareho sa dplyr, kailangan nating hatiin ang talahanayan sa mga bintana ayon sa field Pclass. I-output sa isang bagong column ang halaga para sa pangkat na naaayon sa bawat row, at magdagdag ng column kung saan kinakalkula namin ang bahagi ng halaga ng bawat tiket sa pangkat nito.

Upang magdagdag ng mga bagong column sa data.table naroroon ang operator :=. Nasa ibaba ang isang halimbawa ng paglutas ng problema gamit ang package data.table

Mga function ng window sa R: data.table

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

Mga function ng window sa Python: pandas

Isang paraan upang magdagdag ng bagong column sa pandas - gamitin ang function assign(). Upang ibuod ang halaga ng mga tiket ayon sa klase ng cabin, nang walang pagpapangkat ng mga hilera, gagamitin namin ang function transform().

Nasa ibaba ang isang halimbawa ng isang solusyon kung saan idinaragdag namin sa talahanayan gahigante parehong 2 column.

Mga function ng window sa Python: pandas

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

Talahanayan ng pagsusulatan ng mga function at pamamaraan

Nasa ibaba ang isang talahanayan ng pagsusulatan sa pagitan ng mga pamamaraan para sa pagsasagawa ng iba't ibang mga operasyon na may data sa mga pakete na aming isinasaalang-alang.

Описание
tidyverse
talaan ng mga impormasyon
pandas

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

Paglikha ng mga dataframe
tibble()
data.table()
dict() + from_dict()

Pagpili ng Mga Hanay
select()
pagtatalo j, pangalawang posisyon sa mga square bracket
ipinapasa namin ang listahan ng mga kinakailangang hanay sa mga square bracket / drop() / filter() / select_dtypes()

Pag-filter ng mga hilera
filter()
pagtatalo i, unang posisyon sa mga square bracket
Inilista namin ang mga kundisyon sa pag-filter sa mga square bracket / filter()

Pagpapangkat at Pagsasama-sama
group_by() + summarise()
argumento j + by
groupby() + agg()

Vertical union ng mga talahanayan (UNION)
bind_rows()
rbind()
concat()

Pahalang na pagsasama ng mga talahanayan (JOIN)
left_join() / *_join()
merge()
merge()

Mga pangunahing function ng window at pagdaragdag ng mga nakalkulang column
group_by() + mutate()
pagtatalo j gamit ang operator := + argumento by
transform() + assign()

Konklusyon

Marahil sa artikulong inilarawan ko hindi ang pinakamainam na pagpapatupad ng pagproseso ng data, kaya't matutuwa ako kung itatama mo ang aking mga pagkakamali sa mga komento, o dagdagan lamang ang impormasyong ibinigay sa artikulo sa iba pang mga diskarte para sa pagtatrabaho sa data sa R ​​/ Python.

Tulad ng isinulat ko sa itaas, ang layunin ng artikulo ay hindi upang magpataw ng opinyon ng isang tao sa kung aling wika ang mas mahusay, ngunit upang gawing simple ang pagkakataong matutunan ang parehong mga wika, o, kung kinakailangan, lumipat sa pagitan ng mga ito.

Kung nagustuhan mo ang artikulo, matutuwa akong magkaroon ng mga bagong subscriber sa aking youtube и telegram mga channel.

Опрос

Alin sa mga sumusunod na pakete ang ginagamit mo sa iyong trabaho?

Sa mga komento maaari mong isulat ang dahilan ng iyong pagpili.

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

Aling data processing package ang ginagamit mo (maaari kang pumili ng ilang opsyon)

  • 45,2%malinis naverse19

  • 33,3%datos.talahanayan14

  • 54,8%panda23

42 na user ang bumoto. 9 user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento