Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

Интернеттен R же Python тилдерин издөө менен, кайсынысы жакшыраак, ылдамыраак жана маалыматтар менен иштөө үчүн ыңгайлуу деген темада миллиондогон макалаларды жана километрдик талкууларды таба аласыз. Бирок, тилекке каршы, бардык бул макалалар жана талаш-тартыштар өзгөчө пайдалуу эмес.

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

Бул макаланын максаты эки тилдин эң популярдуу пакеттериндеги маалыматтарды иштетүүнүн негизги ыкмаларын салыштыруу болуп саналат. Жана окурмандарга алар билбеген нерсени тез өздөштүрүүсүнө жардам бериңиз. Python тилинде жазгандар үчүн, ошол эле нерсени R менен кантип жасоону жана тескерисинче, билип алыңыз.

Макаланын жүрүшүндө биз R тилиндеги эң популярдуу пакеттердин синтаксисин талдайбыз. Булар китепканага киргизилген пакеттер. tidyverseжана ошондой эле пакет data.table. Жана алардын синтаксисин салыштыруу pandas, Pythonдогу эң популярдуу маалыматтарды талдоо пакети.

Биз Python жана R жардамы менен аны жүктөөдөн баштап аналитикалык терезе функцияларын аткарууга чейин маалыматтарды талдоонун бүт жолун этап-этабы менен өтөбүз.

ыраазы

Бул макала каралып жаткан пакеттердин биринде маалыматтарды иштетүү операциясын кантип жасоону унутуп калсаңыз, алдоо баракчасы катары колдонсо болот.

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

  1. R жана Python ортосундагы негизги синтаксис айырмачылыктары
    1.1. Пакет функцияларына кирүү
    1.2. Дайындоо
    1.3. индекстөө
    1.4. Методдор жана OOP
    1.5. Түтүк өткөргүчтөрү
    1.6. Маалымат структуралары
  2. Биз колдоно турган пакеттер жөнүндө бир нече сөз
    2.1. тыкандык
    2.2. маалымат.стол
    2.3. рттъ
  3. Пакеттерди орнотуу
  4. Маалыматтар жүктөлүүдө
  5. Dataframe түзүү
  6. Сизге керектүү тилкелерди тандоо
  7. Катарларды чыпкалоо
  8. Топтоо жана топтоо
  9. Таблицалардын вертикалдык бирикмеси (UNION)
  10. Таблицаларды горизонталдуу бириктирүү (JOIN)
  11. Негизги терезе функциялары жана эсептелген мамычалар
  12. R жана Pythonдо маалыматтарды иштетүү ыкмаларынын ортосундагы кат алышуу таблицасы
  13. жыйынтыктоо
  14. Сиз кайсы пакетти колдонгонуңуз тууралуу кыскача сурамжылоо

Эгер сиз маалыматтарды талдоо кызыктырсаңыз, менин таба аласыз телеграмма и YouTube каналдар. Мазмундун көбү R тилине арналган.

R жана Python ортосундагы негизги синтаксис айырмачылыктары

Сизге Pythonдон R же тескерисинче өтүүнү жеңилдетүү үчүн, мен сиз көңүл бурушуңуз керек болгон бир нече негизги ойлорду берем.

Пакет функцияларына кирүү

Пакет Rге жүктөлгөндөн кийин, анын функцияларына жетүү үчүн пакеттин атын көрсөтүүнүн кереги жок. Көпчүлүк учурларда бул R жалпы эмес, бирок ал кабыл алынат. Кодуңузга анын функцияларынын бири керек болсо, пакетти импорттоонун кереги жок, бирок жөн гана пакеттин атын жана функциянын атын көрсөтүү менен аны чакырыңыз. R тилиндеги пакет жана функция аттары ортосундагы бөлүүчү кош кош чекит. package_name::function_name().

Pythonдо, тескерисинче, анын атын ачык көрсөтүү менен пакеттин функцияларын чакыруу классикалык деп эсептелет. Пакет жүктөлүп алынганда, ага адатта кыскартылган аталыш берилет, мис. pandas адатта псевдоним колдонулат pd. Пакет функциясына чекит аркылуу жетүүгө болот package_name.function_name().

Дайындоо

R тилинде объектке маани берүү үчүн жебени колдонуу кеңири таралган. obj_name <- value, жалгыз барабар белгисине уруксат берилгени менен, R ичиндеги жалгыз барабар белги биринчи кезекте маанилерди функция аргументтерине өткөрүү үчүн колдонулат.

Pythonдо дайындоо бир гана барабар белгиси менен аткарылат obj_name = value.

индекстөө

Бул жерде да олуттуу айырмачылыктар бар. Rде индекстөө бирден башталат жана натыйжада көрсөтүлгөн бардык элементтерди камтыйт,

Pythonдо индекстөө нөлдөн башталат жана тандалган диапазон индексте көрсөтүлгөн акыркы элементти камтыбайт. Ошентип дизайн x[i:j] Pythonдо j элементи камтылбайт.

Терс индекстөөдө, R белгилеринде да айырмачылыктар бар x[-1] акыркысынан башка вектордун бардык элементтерин кайтарат. Pythonдо окшош белги акыркы элементти гана кайтарат.

Методдор жана OOP

R OOPти өз алдынча ишке ашырат, мен бул тууралуу макалада жазганмын "R тилиндеги OOP (1-бөлүк): S3 класстары". Жалпысынан алганда, R функционалдык тил жана андагы бардык нерсе функцияларга негизделген. Ошондуктан, мисалы, Excel колдонуучулары үчүн өтүңүз tydiverse караганда жеңилирээк болот pandas. Бул менин субъективдүү пикирим болушу мүмкүн да.

Кыскача айтканда, R объектилеринде методдор жок (эгерде биз S3 класстары жөнүндө айтсак, бирок башка OOP ишке ашыруулары бар, алар азыраак таралган). Объекттин классына жараша аларды ар кандай иштеткен жалпыланган функциялар гана бар.

Түтүк өткөргүчтөрү

Балким, бул аты pandas Бул таптакыр туура эмес, бирок мен маанисин түшүндүрүүгө аракет кылам.

Аралык эсептөөлөрдү үнөмдөө жана жумушчу чөйрөдө керексиз объектилерди чыгарбоо үчүн, сиз түтүктүн бир түрүн колдоно аласыз. Ошол. эсептөөнүн натыйжасын бир функциядан экинчисине өткөрүү жана аралык натыйжаларды сактабаңыз.

Төмөнкү код мисалын алалы, анда биз аралык эсептөөлөрдү өзүнчө объекттерде сактайбыз:

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

Биз 3 операцияны ырааттуу аткардык, ар биринин жыйынтыгы өзүнчө объектте сакталды. Бирок чындыгында бул аралык объектилердин бизге кереги жок.

Же андан да жаманы, бирок Excel колдонуучуларына көбүрөөк тааныш.

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

Бул учурда, биз аралык эсептөө натыйжаларын сактаган жокпуз, бирок уяланган функциялар менен кодду окуу өтө ыңгайсыз.

Биз Rде маалыматтарды иштетүүнүн бир нече ыкмаларын карап чыгабыз жана алар окшош операцияларды ар кандай жолдор менен аткарышат.

Китепканадагы түтүктөр tidyverse оператор тарабынан ишке ашырылат %>%.

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

Ошентип биз иштин жыйынтыгын алабыз func1() жана аны биринчи аргумент катары өткөрүп бериңиз func2(), анда биз бул эсептөөнүн жыйынтыгын биринчи аргумент катары өткөрөбүз func3(). Акыр-аягы, биз объектке бардык аткарылган эсептөөлөрдү жазабыз obj <-.

Жогоруда айтылгандардын баары бул мемдин сөздөрүнө караганда жакшыраак сүрөттөлгөн:
Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

В data.table чынжырлар ушундай эле жол менен колдонулат.

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

Чарчы кашаанын ар биринде мурунку операциянын жыйынтыгын колдоно аласыз.

В pandas мындай операциялар чекит менен бөлүнгөн.

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

Ошол. дасторконубузду алабыз df жана анын ыкмасын колдонуу fun1(), анда алынган натыйжага ыкманы колдонобуз fun2(), кийин fun3(). Натыйжа объектке сакталат обж .

Маалымат структуралары

R жана Pythonдо маалымат структуралары окшош, бирок аталыштары ар башка.

баяндоо
Аты-жөнү Р
Аты Python/pandas тилинде

Таблица структурасы
data.frame, data.table, tibble
DataFrame

Баалуулуктардын бир өлчөмдүү тизмеси
Оору
Пандалардагы сериялар же таза Python тилиндеги тизме

Көп баскычтуу таблица эмес түзүлүш
Тизме
Сөздүк (дикт)

Төмөндө синтаксистин башка өзгөчөлүктөрүн жана айырмачылыктарын карап чыгабыз.

Биз колдоно турган пакеттер жөнүндө бир нече сөз

Биринчиден, мен сизге ушул макалада тааныш боло турган пакеттер жөнүндө бир аз айтып берем.

тыкандык

Расмий сайт: tidyverse.org
Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү
китепкана tidyverse RStudio компаниясынын улук изилдөөчүсү Хедли Уикхэм тарабынан жазылган. tidyverse маалыматтарды иштетүүнү жөнөкөйлөтүүчү таң калыштуу топтомдордон турат, алардын 5и CRAN репозиторийинен эң мыкты 10 жүктөмөлөрдүн катарына кирет.

Китепкананын өзөгү төмөнкүдөй пакеттерден турат: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Бул пакеттердин ар бири белгилүү бир маселени чечүүгө багытталган. Мисалы dplyr маалыматтарды манипуляциялоо үчүн түзүлгөн, tidyr маалыматтарды тыкан формага келтирүү үчүн, stringr саптар менен иштөөнү жеңилдетет жана ggplot2 эң популярдуу маалыматтарды визуалдаштыруу куралдарынын бири.

Артыкчылыгы tidyverse жөнөкөйлүгү жана окууга оңой синтаксиси, ал көп жагынан SQL суроо тилине окшош.

маалымат.стол

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүүРасмий сайт: r-datatable.com

By data.table H2O.ai компаниясынан Мэтт Доул.

Китепкананын биринчи чыгарылышы 2006-жылы болгон.

Пакеттин синтаксиси мурункудай ыңгайлуу эмес tidyverse жана R тилиндеги классикалык датафрамдарды көбүрөөк эске салат, бирок ошол эле учурда функционалдуулугу боюнча кыйла кеңейген.

Бул пакеттеги таблица менен болгон бардык манипуляциялар чарчы кашаанын ичинде сүрөттөлөт жана синтаксисти которсоңуз data.table SQLде сиз төмөнкүдөй нерсени аласыз: data.table[ WHERE, SELECT, GROUP BY ]

Бул пакеттин күчү чоң көлөмдөгү маалыматтарды иштетүү ылдамдыгы болуп саналат.

рттъ

Расмий сайт: pandas.pydata.org Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

Китепкананын аталышы маалыматтын көп өлчөмдүү структураланган топтомун сүрөттөө үчүн колдонулган эконометрикалык “панель маалыматтары” термининен келип чыккан.

By pandas америкалык Уэс МакКинни.

Pythonдо маалыматтарды талдоо жөнүндө сөз болгондо, бирдей pandas Жок. Ар кандай булактардан маалыматтарды жүктөөдөн тартып, аны визуалдаштырууга чейин маалыматтар менен ар кандай манипуляцияларды жүргүзүүгө мүмкүндүк берген өтө көп функциялуу, жогорку деңгээлдеги пакет.

Кошумча пакеттерди орнотуу

Бул макалада талкууланган пакеттер негизги R жана Python бөлүштүрүүдө камтылган эмес. Кичинекей эскертүү бар болсо да, эгер сиз Anaconda бөлүштүрүүнү орнотсоңуз, анда кошумча орнотуңуз pandas кереги жок.

R ичинде пакеттерди орнотуу

Эгерде сиз RStudio иштеп чыгуу чөйрөсүн жок дегенде бир жолу ачкан болсоңуз, анда R-да керектүү пакетти кантип орнотууну мурунтан эле билесиз. Пакеттерди орнотуу үчүн стандарттык буйрукту колдонуңуз. install.packages() аны түздөн-түз R өзүндө иштетүү менен.

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

Орнотуудан кийин пакеттерди туташтыруу керек, ал үчүн көпчүлүк учурларда команда колдонулат library().

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

Pythonдо пакеттерди орнотуу

Демек, сизде таза Python орнотулган болсо, анда pandas аны кол менен орнотуу керек. Иштөө тутумуңузга жараша буйрук сабын же терминалды ачып, төмөнкү буйрукту киргизиңиз.

pip install pandas

Андан кийин биз Python'го кайтып келип, орнотулган пакетти буйрук менен импорттойбуз import.

import pandas as pd

Маалыматтар жүктөлүүдө

Маалыматтарды казып алуу маалыматтарды талдоодогу эң маанилүү кадамдардын бири. Эгер кааласаңыз, Python да, R да сизге каалаган булактардан маалыматтарды алуу үчүн кеңири мүмкүнчүлүктөрдү берет: локалдык файлдар, Интернеттен файлдар, веб-сайттар, маалымат базаларынын бардык түрлөрү.

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

Макалада биз бир нече маалымат топтомун колдонобуз:

  1. Google Analytics'тен эки жүктөө.
  2. Titanic Passenger Dataset.

Бардык маалыматтар менде GitHub csv жана tsv файлдары түрүндө. Аларды кайдан сурайбыз?

Маалыматтарды Rга жүктөө: tidyverse, vroom, readr

китепканага маалыматтарды жүктөө үчүн tidyverse Эки пакет бар: vroom, readr. vroom заманбап, бирок келечекте пакеттер айкалыштырылышы мүмкүн.

Цитата расмий документтер vroom.

vroom vs Reader
Эмнени чыгарат vroom үчүн дегенди билдирет readr? Азырынча биз эки пакеттин өзүнчө өнүгүшүн пландаштырып жатабыз, бирок келечекте пакеттерди бириктиребиз. Vroom'дун жалкоо окуусунун бир кемчилиги - белгилүү бир маалымат көйгөйлөрүн алдын ала айтуу мүмкүн эмес, андыктан аларды кантип бириктирүү жакшыраак ойлонууну талап кылат.

vroom vs readr
бошотуу эмнени билдирет? vroom үчүн readr? Учурда биз эки пакетти өз-өзүнчө иштеп чыгууну пландап жатабыз, бирок келечекте аларды бириктиребиз. Жалкоо окуунун кемчиликтеринин бири vroom маалыматтар менен кээ бир көйгөйлөрдү алдын ала билдирүү мүмкүн эмес, ошондуктан, аларды кантип мыкты айкалыштыруу жөнүндө ойлонуп көрүшүбүз керек.

Бул макалада биз эки маалыматтарды жүктөө пакеттерин карап чыгабыз:

Маалыматтар R: 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")

Маалыматтарды 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")

Пакетте vroom, csv / tsv маалымат форматына карабастан, жүктөө бир эле аталыштагы функция менен жүзөгө ашырылат vroom(), пакетте readr биз ар бир формат үчүн башка функцияны колдонобуз read_tsv() и read_csv().

Маалыматтарды Rга жүктөө: data.table

В data.table маалыматтарды жүктөө үчүн функция бар fread().

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

Pythonдо маалыматтар жүктөлүүдө: pandas

Эгерде биз R пакеттери менен салыштырсак, анда бул учурда синтаксис эң жакын pandas болот readr, анткени pandas каалаган жерден маалыматтарды сурай алат жана бул пакетте функциялардын бүтүндөй үй-бүлөсү бар read_*().

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

Жана башка көптөгөн функциялар ар кандай форматтагы маалыматтарды окуу үчүн иштелип чыккан. Бирок биздин максаттарыбыз үчүн бул жетиштүү read_table() же read_csv() аргументти колдонуу Sep мамыча бөлгүчтү көрсөтүү.

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

Dataframe түзүү

Таблица Титаник, биз жүктөгөн, талаа бар жыныс, жүргүнчүнүн гендердик идентификаторун сактайт.

Бирок жүргүнчүлөрдүн жынысы боюнча маалыматтарды ыңгайлуураак көрсөтүү үчүн гендердик кодду эмес, атын колдонушуңуз керек.

Бул үчүн, биз кичинекей каталогду, тиешелүүлүгүнө жараша болгону 2 тилке (код жана гендердик аталыш) жана 2 саптан турган таблицаны түзөбүз.

R ичинде dataframe түзүү: tidyverse, dplyr

Төмөндөгү код мисалында, функцияны колдонуп, керектүү dataframe түзөбүз tibble() .

R: dplyrде дата фреймин түзүү

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

R-де датафрайм түзүү: data.table

R-де датафрайм түзүү: data.table

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

Pythonдо дата фреймин түзүү: пандалар

В pandas Фреймдерди түзүү бир нече этап менен ишке ашат, адегенде сөздүк түзөбүз, андан кийин сөздүктү датафрамга айлантабыз.

Pythonдо дата фреймин түзүү: пандалар

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

Мамычаларды тандоо

Сиз иштеген таблицалар ондогон же жүздөгөн маалыматтар мамычасын камтышы мүмкүн. Бирок талдоо жүргүзүү үчүн, эреже катары, булак таблицасында бар бардык мамычалар керек эмес.

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

Ошондуктан, булак таблицасы менен жасай турган биринчи операциялардын бири аны керексиз маалыматтардан тазалоо жана бул маалымат ээлеген эстутумду бошотуу.

R тилкесинде тилкелерди тандоо: tidyverse, dplyr

синтаксиси dplyr SQL суроо тилине абдан окшош, эгер сиз аны жакшы билсеңиз, бул пакетти тез өздөштүрүп аласыз.

Мамычаларды тандоо үчүн функцияны колдонуңуз select().

Төмөндө төмөнкү жолдор менен мамычаларды тандай турган коддун мисалдары келтирилген:

  • Керектүү тилкелердин аталыштарын тизмелөө
  • Кадимки сөз айкаштарын колдонуу менен тилке аттарын караңыз
  • Маалыматтын түрү же тилкеде камтылган маалыматтардын башка касиеттери боюнча

R тилкесинде тилкелерди тандоо: dplyr

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

R тилкесинде тилкелерди тандоо: data.table

Ошол эле операциялар data.table бир аз башкача аткарылат, макаланын башында мен төрт бурчтуу кашаанын ичинде кандай аргументтер бар экенин сүрөттөп бердим. data.table.

DT[i,j,by]

мында:
i - кайда, б.а. саптар боюнча чыпкалоо
j - тандоо|жаңыртуу|до, б.а. тилкелерди тандоо жана аларды өзгөртүү
боюнча - маалыматтарды топтоо

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 бардык мамычаларды кирүүгө мүмкүндүк берет, жана .SDcols керектүү тилкелерди кадимки туюнтмаларды же башка функцияларды колдонуп, сизге керектүү тилкелердин аттарын чыпкалоо.

Python, пандалар тилкелерин тандоо

Мамычаларды аты боюнча тандоо үчүн pandas алардын фамилияларынын тизмесин беруу жетиштуу. Ал эми кадимки туюнтмалардын жардамы менен тилкелерди аты боюнча тандоо же алып салуу үчүн функцияларды колдонушуңуз керек drop() и filter(), жана аргумент ок=1, анын жардамы менен сиз саптарды эмес, мамычаларды иштетүү зарыл экенин көрсөтөсүз.

Талааны маалымат түрү боюнча тандоо үчүн функцияны колдонуңуз select_dtypes(), жана аргументтерге камтыйт же чыгаруу кайсы талааларды тандап алышыңыз керек болгон маалымат түрлөрүнүн тизмесин тапшырыңыз.

Python тилкесинде тилкелерди тандоо: пандалар

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

Катарларды чыпкалоо

Мисалы, булак таблицасы бир нече жылдык маалыматтарды камтышы мүмкүн, бирок сиз акыркы айды гана талдооңуз керек. Дагы, кошумча линиялар маалыматтарды иштетүү процессин жайлатып, компьютердин эс тутумун бүтөп калат.

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

R-де саптарды чыпкалоо: tydyverse, dplyr

В dplyr функция саптарды чыпкалоо үчүн колдонулат filter(). Ал биринчи аргумент катары датафраймди алат, андан кийин чыпкалоо шарттарын тизмелейсиз.

Таблицаны чыпкалоо үчүн логикалык туюнтмаларды жазууда, бул учурда тырмакчасыз жана таблица атын жарыялоосуз мамычалардын аталыштарын көрсөтүңүз.

Чыпкалоо үчүн бир нече логикалык туюнтмаларды колдонууда төмөнкү операторлорду колдонуңуз:

  • & же үтүр - логикалык ЖАНА
  • | - логикалык ЖЕ

R ичиндеги саптарды чыпкалоо: dplyr

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

R ичиндеги саптарды чыпкалоо: data.table

Мен буга чейин эле жогоруда жазгандай, жылы data.table маалыматтарды конвертациялоо синтаксиси чарчы кашаага алынган.

DT[i,j,by]

мында:
i - кайда, б.а. саптар боюнча чыпкалоо
j - тандоо|жаңыртуу|до, б.а. тилкелерди тандоо жана аларды өзгөртүү
боюнча - маалыматтарды топтоо

Аргумент саптарды чыпкалоо үчүн колдонулат i, төрт бурчтуу кашаанын ичинде биринчи орунга ээ.

Мамычаларга тырмакчасыз жана таблица атын көрсөтпөстөн логикалык туюнтмалар менен кирүүгө болот.

Логикалык туюнтмалар бири-бири менен дал ушундай байланышта болот dplyr & жана | операторлору аркылуу.

R ичиндеги саптарды чыпкалоо: data.table

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

Python'до саптарды чыпкалоо: пандалар

Катарлар боюнча чыпкалоо pandas чыпкалоого окшош data.table, жана чарчы кашаанын ичинде аткарылат.

Бул учурда, мамычаларга кирүү сөзсүз түрдө маалымат рамкасынын атын көрсөтүү менен жүзөгө ашырылат; андан кийин тилкенин аталышы тырмакчанын ичинде чарчы кашаанын ичинде да көрсөтүлүшү мүмкүн (мисал df['col_name']), же мөөнөттөн кийин тырмакчасыз (мисал df.col_name).

Эгер сиз маалымат фреймин бир нече шарттар боюнча чыпкалоо керек болсо, анда ар бир шарт кашаанын ичинде коюлушу керек. Логикалык шарттар бири-бири менен операторлор аркылуу байланышат & и |.

Python'до саптарды чыпкалоо: пандалар

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

Маалыматтарды топтоо жана топтоо

Маалыматтарды талдоодо эң көп колдонулган операциялардын бири топтоо жана топтоо болуп саналат.

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

Бул операцияларды аткаруу үчүн синтаксис биз карап чыккан бардык пакеттерде чачырап кеткен.

Бул учурда, биз мисал катары dataframe алабыз Титаник, жана кабина классына жараша билеттердин санын жана орточо баасын эсептеп.

R: tidyverse, dplyr маалыматтарды топтоо жана топтоо

В dplyr функция топтоо үчүн колдонулат group_by(), жана бириктирүү үчүн summarise(). Чындыгында, dplyr функциялардын бүтүндөй үй-бүлөсү бар summarise_*(), бирок бул макаланын максаты негизги синтаксистин салыштыруу болуп саналат, ошондуктан биз мындай жунглиге кирбейбиз.

Негизги топтоо функциялары:

  • sum() — жыйынтыктоо
  • min() / max() – минималдуу жана максималдуу маани
  • mean() - орто арифметикалык
  • median() — медиана
  • length() - саны

Р-де топтоштуруу жана топтоо: дплыр

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

Функцияда group_by() биринчи аргумент катары үстөлдөн өттүк Титаник, анан талааны көрсөттү Pclass, анын негизинде биз үстөлүбүздү топтойбуз. Оператордун жардамы менен бул операциянын натыйжасы %>% функцияга биринчи аргумент катары өттү summarise(), жана дагы 2 талаа кошту: жүргүнчүлөр и орточо_баа. Биринчиден, функцияны колдонуу length() билеттердин санын эсептеп, экинчисинде функцияны колдонуп mean() билеттин орточо баасын алган.

Rдеги маалыматтарды топтоо жана топтоо: data.table

В data.table аргумент бириктирүү үчүн колдонулат j чарчы кашаанын ичинде экинчи позициясы бар жана топтоого by же keybyучунчу орунду ээлеген.

Бул учурда топтоо функцияларынын тизмеси сүрөттөлгөн менен бирдей dplyr, анткени бул негизги R синтаксисинин функциялары.

R-де топтоштуруу жана топтоо: маалыматтар.таблица

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

Pythonдо маалыматтарды топтоо жана топтоо: пандалар

Топтоо pandas окшош dplyr, бирок топтоо окшош эмес dplyr күйүк эмес data.table.

Топтоо үчүн методду колдонуңуз groupby(), ага сиз dataframe топтоло турган тилкелердин тизмесин тапшырышыңыз керек.

Топтоо үчүн сиз ыкманы колдоно аласыз agg()сөздүктү кабыл алат. Сөздүк ачкычтары - бул сиз топтоо функцияларын колдоно турган тилкелер, ал эми баалуулуктар - бириктирүү функцияларынын аталыштары.

Агрегация функциялары:

  • sum() — жыйынтыктоо
  • min() / max() – минималдуу жана максималдуу маани
  • mean() - орто арифметикалык
  • median() — медиана
  • count() - саны

милдети reset_index() төмөндөгү мисалда ал уяланган индекстерди баштапкы абалга келтирүү үчүн колдонулат pandas маалыматтар топтолгондон кийин демейки болуп саналат.

белги кийинки сапка өтүүгө мүмкүндүк берет.

Pythonдо топтоштуруу жана топтоо: пандалар

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

Таблицаларды вертикалдуу бириктирүү

Бир структурадагы эки же андан көп таблицаларды бириктирген операция. Биз жүктөгөн маалыматтарда таблицалар бар ga_nov и ga_dec. Бул таблицалар түзүлүшү боюнча окшош, б.а. бирдей мамычалар жана бул тилкелердеги маалымат түрлөрү бар.

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

Бул Google Analyticsтен ноябрь жана декабрь айлары үчүн жүктөө, бул бөлүмдө биз бул маалыматтарды бир таблицага бириктиребиз.

Rдеги үстөлдөрдү вертикалдуу бириктирүү: tidyverse, dplyr

В dplyr Функцияны колдонуу менен 2 таблицаны бир таблицага бириктире аласыз bind_rows(), анын аргументтери катары таблицаларды өткөрүү.

R ичиндеги саптарды чыпкалоо: dplyr

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

Rдеги таблицаларды вертикалдуу бириктирүү: data.table

Бул да татаал эч нерсе эмес, колдонолу rbind().

R ичиндеги саптарды чыпкалоо: data.table

## data.table
rbind(ga_nov, ga_dec)

Python тилиндеги таблицаларды вертикалдуу бириктирүү: пандалар

В pandas функциясы таблицаларды бириктирүү үчүн колдонулат concat(), ага сиз аларды бириктирүү үчүн рамкалардын тизмесин тапшырышыңыз керек.

Python'до саптарды чыпкалоо: пандалар

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

Таблицаларды горизонталдуу бириктирүү

Ачкыч аркылуу биринчи таблицага экинчиден мамычалар кошулган операция. Көбүнчө факты таблицасын (мисалы, сатуу маалыматтары бар таблица) кээ бир маалымдама маалыматтары (мисалы, буюмдун өздүк наркы) менен байытууда колдонулат.

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

кошулуу бир нече түрлөрү бар:

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

Мурда жүктөлгөн таблицада Титаник бизде колонна бар жыныс, ал жүргүнчүнүн гендердик кодуна туура келет:

1 - аял
2 - эркек

Ошондой эле, биз таблица түздүк - маалымдама гендердик. Жүргүнчүлөрдүн жынысы боюнча маалыматтарды ыңгайлуураак көрсөтүү үчүн, каталогдон жыныстын атын кошуу керек. гендердик столго Титаник.

R горизонталдуу стол кошулуу: tidyverse, dplyr

В dplyr Горизонталдуу кошулуу үчүн функциялардын бүтүндөй үй-бүлөсү бар:

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

Менин практикамда эң көп колдонулат left_join().

Биринчи эки аргумент катары, жогоруда саналып өткөн функциялар кошулуу үчүн эки таблицаны, ал эми үчүнчү аргумент катары by кошулуу үчүн тилкелерди көрсөтүшүңүз керек.

Горизонталдык таблица R ичинде кошулат: dplyr

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

R ичиндеги таблицалардын горизонталдуу кошулуусу: data.table

В data.table Функцияны колдонуп, баскыч менен таблицаларга кошулушуңуз керек merge().

data.table ичиндеги бириктирүү() функциясы үчүн аргументтер

  • x, y — кошулуу үчүн таблицалар
  • by — Эгер эки таблицада бирдей атка ээ болсо, кошулууга ачкыч болгон тилке
  • by.x, by.y — Мамычалардын аттары, эгерде алардын таблицаларда башка аталыштары болсо, бириктирилет
  • all, all.x, all.y — Кошулуу түрү, бардыгы эки таблицадагы бардык саптарды кайтарат, all.x LEFT JOIN операциясына туура келет (биринчи таблицанын бардык саптарын калтырат), all.y — дал келет RIGHT JOIN операциясы (экинчи таблицадагы бардык саптарды калтырат).

R ичиндеги таблицалардын горизонталдуу кошулуусу: data.table

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

Python'до горизонталдуу стол кошулуу: пандалар

Ошондой эле ичинде data.tableбоюнча pandas функциясы таблицаларды бириктирүү үчүн колдонулат merge().

Pandasдагы merge() функциясынын аргументтери

  • Кантип — Байланыш түрү: сол, оң, тышкы, ички
  • on — Эгерде эки таблицада бирдей аталышка ээ болсо, ачкыч болгон тилке
  • left_on, right_on — Негизги мамычалардын аттары, эгерде алардын таблицаларда ар кандай аталыштары болсо

Python'до горизонталдуу стол кошулуу: пандалар

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

Негизги терезе функциялары жана эсептелген мамычалар

Терезе функциялары бириктирүү функцияларына мааниси боюнча окшош жана ошондой эле маалыматтарды талдоодо да көп колдонулат. Бирок топтоо функцияларынан айырмаланып, терезе функциялары чыгуучу маалымат рамкасынын саптарынын санын өзгөртпөйт.

Берилиштер менен иштөө үчүн кайсы тилди тандоо керек - R же Python? экөө тең! Пандалардан tidyverse жана data.table жана кайра көчүү

Негизи, терезе функциясын колдонуу менен, биз кандайдыр бир критерийге ылайык, келген дата фреймин бөлүктөргө бөлөбүз, б.а. талаанын же бир нече талаанын мааниси боюнча. Ал эми ар бир терезеге арифметикалык амалдарды жасайбыз. Бул операциялардын натыйжасы ар бир сапта кайтарылат, б.а. таблицадагы катарлардын жалпы санын өзгөртпөстөн.

Мисалы, столду алалы Титаник. Ар бир билеттин баасы анын кабинасынын классында канча пайыз болгонун эсептей алабыз.

Бул үчүн, биз ар бир сапка ушул саптагы билет таандык болгон учурдагы кабина классындагы билеттин жалпы баасын алышыбыз керек, андан кийин ар бир билеттин баасын ошол эле кабина классындагы бардык билеттердин жалпы наркына бөлүү керек. .

R-де терезе функциялары: tidyverse, dplyr

Катарларды топтоону колдонбостон, жаңы тилкелерди кошуу үчүн dplyr функциясын аткарат mutate().

Маалыматтарды талаа боюнча топтоо менен жогоруда сүрөттөлгөн маселени чече аласыз Pclass жана жаңы тилкеде талааны жыйынтыктоо жүрүүгө төлөө. Андан кийин, таблицаны чечип, талаанын маанилерин бөлүңүз жүрүүгө төлөө мурунку кадамда эмне болгонун.

Rдеги терезе функциялары: dplyr

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

Rдеги терезе функциялары: data.table

Чечимдин алгоритми мурункудай эле калат dplyr, биз үстөлдү талаалар боюнча терезелерге бөлүшүбүз керек Pclass. Жаңы тилкеге ​​ар бир сапка туура келген топ үчүн сумманы чыгарыңыз жана анын тобундагы ар бир билеттин наркынын үлүшүн эсептей турган тилкени кошуңуз.

Жаңы тилкелерди кошуу үчүн data.table оператор бар :=. Төмөндө пакетти колдонуу менен маселени чечүүнүн мисалы келтирилген data.table

Rдеги терезе функциялары: data.table

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

Python тилиндеги терезе функциялары: пандалар

Жаңы тилке кошуунун бир жолу pandas - функцияны колдонуңуз assign(). Катарларды топтобостон, кабина класстары боюнча билеттердин баасын жалпылоо үчүн биз функцияны колдонобуз transform().

Төмөндө биз таблицага кошо турган чечимдин мисалы келтирилген Титаник ошол эле 2 тилке.

Python тилиндеги терезе функциялары: пандалар

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

Функциялар жана методдор кат алышуу таблицасы

Төмөндө биз карап чыккан пакеттердеги маалыматтар менен ар кандай операцияларды аткаруу ыкмаларынын ортосундагы кат алышуу таблицасы келтирилген.

баяндоо
тыкандык
маалымат.стол
рттъ

Маалыматтар жүктөлүүдө
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Dataframe түзүү
tibble()
data.table()
dict() + from_dict()

Мамычаларды тандоо
select()
далил j, чарчы кашаанын ичинде экинчи орун
биз чарчы кашаанын ичинде талап кылынган тилкелердин тизмесин өткөрөбүз / drop() / filter() / select_dtypes()

Катарларды чыпкалоо
filter()
далил i, төрт бурчтуу кашаанын ичинде биринчи орун
Биз чыпкалоо шарттарын чарчы кашаага келтиребиз / filter()

Топтоо жана топтоо
group_by() + summarise()
аргументтер j + by
groupby() + agg()

Таблицалардын вертикалдык бирикмеси (UNION)
bind_rows()
rbind()
concat()

Таблицаларды горизонталдуу бириктирүү (JOIN)
left_join() / *_join()
merge()
merge()

Негизги терезе функциялары жана эсептелген мамычаларды кошуу
group_by() + mutate()
далил j операторду колдонуу := + аргумент by
transform() + assign()

жыйынтыктоо

Балким, макалада мен маалыматтарды иштеп чыгуунун эң оптималдуу ишке ашырылышын сүрөттөгөн эмесмин, андыктан комментарийлердеги каталарымды оңдосоңуз же макалада келтирилген маалыматты R/Pythonдо маалыматтар менен иштөөнүн башка ыкмалары менен толуктап койсоңуз, мен кубанычтамын.

Мен жогоруда жазгандай, макаланын максаты кайсы тил жакшыраак деген пикирди таңуулоо эмес, эки тилди тең үйрөнүү, же керек болсо, алардын ортосунда көчүп кетүү мүмкүнчүлүгүн жеңилдетүү болчу.

Эгер сизге макала жакса, мен өзүмдүн жаңы жазылуучуларыма кубанычта болом YouTube и телеграмма каналдар.

интервью

Ишиңизде төмөндөгү пакеттердин кайсынысын колдоносуз?

Комментарийге тандооңуздун себебин жазсаңыз болот.

Сурамжылоого катталган колдонуучулар гана катыша алышат. Кирүү, өтүнөмүн.

Кайсы маалыматтарды иштетүү пакетин колдоносуз (бир нече варианттарды тандай аласыз)

  • 45,2%tidyverse19

  • 33,3%data.table14

  • 54,8%pandas23

42 колдонуучу добуш берди. 9 колдонуучу добуш берүүдөн баш тартты.

Source: www.habr.com

Комментарий кошуу