Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Bi lêgerîna R an Python li ser Înternetê, hûn ê bi mîlyonan gotar û kîlometre nîqaşan li ser mijarê bibînin ka kîjan ji bo xebata bi daneyan re çêtir, bileztir û rehettir e. Lê mixabin ev hemû gotar û nakokî bi taybetî bi kêr nayên.

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Цель этой статьи — сравнить основные приёмы обработки данных в наиболее популярных пакетах обоих языков. И помочь читателям максимально быстро овладеть тем, который они ещё не знают. Для тех кто пишет на Python узнать как выполнять всё то же самое в R, и соответственно наоборот.

Di dema gotarê de em ê hevoksaziya pakêtên herî populer ên li R-yê analîz bikin. Ev pakêtên ku di pirtûkxaneyê de cih digirin. tidyverseû her weha pakêt data.table. Û hevoksaziya wan bi hev re bidin ber hev pandas, pakêta analîzkirina daneya herî populer a li Python.

Em ê gav bi gav di tevahiya riya analîzkirina daneyê de ji barkirina wê bigire heya pêkanîna fonksiyonên pencereya analîtîk bi karanîna Python û R-ê re derbas bibin.

Contains

Данная статья может использоваться как шпаргалка, в случае если вы забыли как в одном из рассматриваемых пакетов выполнить некоторую операцию по обработке данных.

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

  1. Основные отличия синтаксиса в R и Python
    1.1. Обращение к функциям пакетов
    1.2. Danî
    1.3. Indekskirin
    1.4. Rêbaz û OOP
    1.5. Pipelines
    1.6. Avahiyên daneyan
  2. Çend gotin li ser pakêtên ku em ê bikar bînin
    2.1. tidyverse
    2.2. data.sifre
    2.3. pandas
  3. Sazkirina pakêtan
  4. Daneyên barkirin
  5. Afirandina dataframes
  6. Выбор нужных столбцов
  7. Фильтрация строк
  8. Группировка и агрегация
  9. Вертикальное объединение таблиц (UNION)
  10. Горизонтальное объединение таблиц (JOIN)
  11. Fonksiyonên paceya bingehîn û stûnên hesabkirî
  12. Tabloya pêwendiyê di navbera rêbazên hilberandina daneyê de li R û Python
  13. encamê
  14. Lêkolînek kurt li ser kîjan pakêtê hûn bikar tînin

Если вы интересуетесь анализом данных возможно вам будут полезны мои têlxiram и youtube kanalên. Piraniya naverokê ji bo zimanê R hatiye veqetandin.

Основные отличия синтаксиса в R и Python

Что бы вам было проще с переходом из Python к R, или наоборот, приведу несколько основных моментов, на которые необходимо обратить внимание.

Обращение к функциям пакетов

Dema ku pakêtek di R-ê de tê barkirin, hûn ne hewce ne ku navê pakêtê diyar bikin da ku hûn bigihîjin fonksiyonên wê. Di pir rewşan de ev di R de ne gelemperî ye, lê ew tê qebûl kirin. Heke hûn di koda xwe de yek ji fonksiyonên wê hewce ne hewce ne ku hûn pakêtek biguhezînin, lê tenê bi destnîşankirina navê pakêtê û navê fonksiyonê jê re bang bikin. Veqetandina di navbera navên pakêt û fonksiyonan de di R de dubendî ye. package_name::function_name().

Di Python de, berevajî, klasîk tê hesibandin ku meriv fonksiyonên pakêtê bi eşkerekirina navê wê vebêje. Dema ku pakêtek tê dakêşandin, bi gelemperî navek kurtkirî tê dayîn, mînakî. pandas bi gelemperî paşnavek tê bikaranîn pd. Fonksiyonek pakêtê bi xalek tê gihîştin package_name.function_name().

Danî

Di R-yê de, gelemperî ye ku meriv tîrek bikar bîne da ku nirxek ji tiştek re diyar bike. obj_name <- value, her çend nîşanek wekheviyê yekane destûr tê dayîn, nîşana yeksaniyê ya di R de bi piranî ji bo derbaskirina nirxan ji argumanên fonksiyonê re tê bikar anîn.

Di Python de, peywir bi tenê bi yek nîşanek wekheviyê tê kirin obj_name = value.

Indekskirin

Тут тоже есть довольно весомые отличия. В R индексация начинается с единицы и включает в результирующий диапазон все указанные элементы,

Di Python de, îndekskirin ji sifirê dest pê dike û rêza hilbijartî hêmana paşîn a ku di navnîşanê de hatî destnîşan kirin tê de tune. So design x[i:j] di Python de dê hêmana j nebe.

Di nîşankirina neyînî de, di nîşana R de jî cûdahî hene x[-1] dê hemî hêmanên vektorê ji bilî ya paşîn vegerîne. Di Python de, nîşanek wekhev dê tenê hêmana paşîn vegere.

Rêbaz û OOP

R OOP bi awayê xwe bicîh tîne, min di gotarê de li ser vê yekê nivîsî "OOP di zimanê R de (beş 1): dersên S3". Bi gelemperî, R zimanek fonksiyonel e, û her tiştê ku tê de li ser fonksiyonan hatî çêkirin. Ji ber vê yekê, wek nimûne, ji bo bikarhênerên Excel, biçin tydiverse будет проще, чем на pandas. Хотя возможно это моё субъективное мнение.

Bi kurtasî, tiştên di R de ne xwediyê rêbazan in (heke em li ser çînên S3 biaxivin, lê pêkanînên OOP yên din jî hene ku pir hindiktir in). Tenê fonksiyonên gelemperî hene ku li gorî çîna tiştê wan bi rengek cûda pêvajoyê dikin.

Pipelines

Dibe ku ev nav ji bo pandas Ew ê bi tevahî ne rast be, lê ez ê hewl bidim ku wateyê vebêjim.

Ji bo ku hesabên navîn xilas nebin û di hawîrdora xebatê de tiştên nehewce çênebin, hûn dikarin celebek boriyê bikar bînin. Ewan. encamek hesabek ji fonksiyonek berbi ya din re derbas bikin, û encamên navîn xilas nekin.

Возьмём следующий пример кода, в котором мы сохраняем в отдельные объекты промежуточные вычисления:

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

Me 3 operasyonan li pey hev pêk anî, û encama her yekê di cîhek cihê de hate tomarkirin. Lê di rastiyê de, em ne hewce ne ku van tiştên navîn.

Либо ещё хуже, но привычнее пользователям Excel.

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

Di vê rewşê de, me encamên hesabkirina navîn hilneda, lê xwendina kodê bi fonksiyonên hêlînkirî zehf nerehet e.

Em ê li gelek nêzîkatiyên ji bo hilanîna daneyê di R-yê de binihêrin, û ew bi awayên cûda karên wekhev dikin.

Pipelines di pirtûkxaneyê de tidyverse ji hêla operatorê ve hatî bicîh kirin %>%.

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

Bi vî awayî em encama xebatê distînin func1() и передаём его в качестве первого аргумента в func2(), paşê em encama vê hesabkirinê wekî argumana yekem derbas dikin func3(). Û di dawiyê de, em hemî hesabên ku têne kirin di nav objektê de dinivîsin obj <-.

Hemî yên li jor ji hêla vê memê ve ji peyvan çêtir têne destnîşan kirin:
Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

В data.table zincîran bi heman rengî têne bikar anîn.

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

Di her çarçoveyek çargoşe de hûn dikarin encama operasyona berê bikar bînin.

В pandas такие операции разделяются точкой.

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

Т.е. мы берём нашу таблицу df û rêbaza wê bikar bînin fun1(), paşê em rêbazê li ser encama bi dest xistin fun2()piştî fun3(). Полученный результат сохраняем в объект tişt .

Avahiyên daneyan

Strukturên daneyê di R û Python de mîna hev in, lê navên wan cuda ne.

description
Nav di R
Navê Python / panda

Табличная структура
data.çarçove, data.table, tibble
DataFrame

Lîsteya yek-alî ya nirxan
Vektor
Rêze di pandayan de an navnîşek di Python-a paqij de

Многоуровневая не табличная структура
Список (List)
Ferheng (dîkt)

Em ê li jêr li hin taybetmendî û cûdahiyên hevoksaziyê binêrin.

Çend gotin li ser pakêtên ku em ê bikar bînin

Pêşîn, ez ê li ser pakêtên ku hûn ê di vê gotarê de bi wan re bibin nas hinekî ji we re vebêjim.

tidyverse

Malpera fermî: tidyverse.org
Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş
Pirtûkxaneyê tidyverse Ji hêla Hedley Wickham, Zanyarê Lêkolînê ya Bilind li RStudio ve hatî nivîsandin. tidyverse состоит из внушительного набора пакетов упрощающих обработку данных, 5 из которых входят в топ 10 загружаемых из репозитория CRAN.

Bingeha pirtûkxaneyê ji pakêtên jêrîn pêk tê: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Her yek ji van pakêtan ji bo çareserkirina pirsgirêkek taybetî ye. Bo nimûne dplyr ji bo manîpulasyona daneyan hatî afirandin, tidyr da ku daneyan bigihîne formek paqij, stringr xebata bi têlan re hêsan dike, û ggplot2 yek ji wan amûrên dîtbarî yên daneyê yên herî populer e.

berjewendî tidyverse sadebûn û hevoksaziya hêsan e, ku bi gelek awayan dişibihe zimanê pirsê SQL.

data.sifre

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paşMalpera fermî: r-datatable.com

Ji data.table Matt Dole ya H2O.ai ye.

Первый релиз библиотеки состоялся в 2006 году.

Синтаксис пакета не так удобен как в tidyverse û di R-ê de bêtir daneyên danûstendinên klasîk tîne bîra xwe, lê di heman demê de di fonksiyonê de bi girîngî berfireh bûye.

Все манипуляции с таблицей в данном пакете описываются в квадратных скобках, и если перевести синтаксис data.table на SQL, то получится примерно следующее: data.table[ WHERE, SELECT, GROUP BY ]

Hêza vê pakêtê leza hilanîna daneyên mezin e.

pandas

Malpera fermî: pandas.pydata.org Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Navê pirtûkxaneyê ji têgîna ekonomometrikî "daneyên panelê" tê, ku ji bo danasîna berhevokên sazkirî yên pirrengî tê bikar anîn.

Ji pandas является американец Уэс Мак-Кинни.

Когда речь идёт об анализе данных на Python, равных pandas нет. Очень многофункциональный, высокоуровневый пакет, который позволяет вам провести с данными любые манипуляции начиная от загрузки данных из любых источников до их визуализации.

Sazkirina pakêtên zêde

Pakêtên ku di vê gotarê de têne nîqaş kirin di dabeşên bingehîn ên R û Python de ne. Her çend hişyariyek piçûk heye, heke we belavkirina Anaconda saz kiriye, wê hingê pêvek saz bikin pandas ne hewce ye.

Sazkirina pakêtan li R

Ger we bi kêmanî carekê jîngeha pêşkeftina RStudio vekiribe, dibe ku hûn jixwe dizanin ka meriv çawa pakêta hewce li R saz dike. Ji bo sazkirina pakêtan, emrê standard bikar bînin install.packages() bi xebitandina wê rasterast di R bixwe de.

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

Piştî sazkirinê, pêdivî ye ku pakêt werin girêdan, ji bo ku di pir rewşan de ferman tê bikar anîn library().

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

Sazkirina pakêtan li Python

Ji ber vê yekê, heke we Python-a paqij saz kiriye, wê hingê pandas вам необходимо доустанавливать руками. Открываем командную строку, или терминал, в зависимости от вашей операционной системы и вводим следующую команду.

pip install pandas

Dûv re em vedigerin Python-ê û pakêta sazkirî bi fermanê vediguhezînin import.

import pandas as pd

Daneyên barkirin

Kevirkirina daneyan di analîza daneyan de yek ji gavên herî girîng e. Hem Python û hem jî R, heke bixwazin, ji we re fersendên berfireh peyda dikin ku hûn ji her çavkaniyek daneyê bistînin: pelên herêmî, pelên ji Înternetê, malper, her cûre databasan.

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Di tevahiya gotarê de em ê çend daneyan bikar bînin:

  1. Du dakêşandin ji Google Analytics.
  2. Daneyên Rêwiyên Titanic.

Все данные лежат у меня на GitHub di forma pelên csv û tsv de. Em ê ji kû daxwaza wan bikin?

Barkirina daneyan li R: tidyverse, vroom, xwendevan

Ji bo barkirina daneyan di pirtûkxaneyê de tidyverse Du pakêt hene: vroom, readr. vroom более современный, но в будущем возможно пакеты будут объединены.

Gotin ji belgeyên fermî vroom.

vroom vs xwendevan
Çi serbestberdana vroom wateya ji bo readr? Naha em plan dikin ku em her du pakêt ji hev cuda pêşve bibin, lê dibe ku em ê di pêşerojê de pakêtan bikin yek. Yek dezavantajek ji xwendina tembel a vroom re ev e ku hin pirsgirêkên daneyê nekarin pêşiyê werin rapor kirin, ji ber vê yekê meriv çawa çêtirîn wan yek dike hin fikir hewce dike.

vroom vs xwendevan
serbestberdan tê çi wateyê? vroom bo readr? Heya nuha em plan dikin ku her du pakêtan ji hev cuda pêşve bibin, lê dibe ku em ê di pêşerojê de wan bi hev re bikin. Yek ji dezawantajên xwendina tembeliyê vroom является то, что о некоторых проблемах с данными нельзя сообщить заранее, поэтому, необходимо подумать о том как лучше их объединить.

В этой статье мы рассмотрим оба пакета для загрузки данных:

Daneyên barkirina R: pakêta 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")

Daneyên barkirina nav R: xwendevan

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

Di pakêtê de vroom, bêyî ku forma daneya csv / tsv, barkirin ji hêla fonksiyona heman navî ve tête kirin vroom(), di pakêtê de readr em ji bo her formatek fonksiyonek cûda bikar tînin read_tsv() и read_csv().

Barkirina daneyan di R: data.table

В data.table ji bo barkirina daneyan fonksiyonek heye fread().

Daneyên barkirina R: pakêta 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

Ger em bi pakêtên R-yê re bidin hev, wê hingê di vê rewşê de hevoksaziya herî nêzîk e pandas dê bibe readr, ji ber pandas умеет запрашивать данные от куда угодно, и в этом пакете присутствует целое семейство функций read_*().

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

Û gelek fonksiyonên din ên ku ji bo xwendina daneyan ji formên cihêreng hatine çêkirin. Lê ji bo armancên me bes e read_table() an read_csv() argûman bikar tînin Sep ji bo veqetandina stûnê diyar bike.

Загрузка данных в 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")

Afirandina dataframes

Mêz titanic, которую мы загрузили, есть поле sex, ku nasnameya zayenda rêwiyan hildide.

Lê ji bo pêşandanek hêsantir a daneyan di warê zayenda rêwiyan de, divê hûn ji koda zayendî bêtir nav bikar bînin.

Ji bo vê yekê, em ê pelrêçek piçûk çêbikin, tabloyek ku tê de tenê 2 stûn (kod û navê zayendê) û 2 rêz hene.

Afirandina çarçoveyek daneyê li R: tidyverse, dplyr

Di mînaka koda jêrîn de, em bi karanîna fonksiyonê dataframeya xwestinê diafirînin tibble() .

Создание датафрейма в R: dplyr

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

Afirandina çarçoveyek daneyê di R: data.table

Afirandina çarçoveyek daneyê di R: data.table

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

Afirandina çarçoveyek daneyê li Python: panda

В pandas Afirandina çarçoveyan di çend qonaxan de pêk tê, pêşî em ferhengekê çêdikin, paşê em ferhengê vediguherînin çarçoveyek daneyê.

Afirandina çarçoveyek daneyê li Python: panda

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

Hilbijartina Stûnan

Tabloyên ku hûn pê re dixebitin dibe ku bi dehan an jî bi sedan stûnên daneyê hebin. Lê ji bo pêkanîna analîzê, wekî qaîdeyek, hûn ne hewce ne hemî stûnên ku di tabloya çavkaniyê de hene.

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Ji ber vê yekê, yek ji yekem operasyonên ku hûn ê bi tabloya çavkaniyê re bikin ev e ku hûn wê ji agahdariya nehewce paqij bikin û bîranîna ku ev agahdarî dagir dike azad bikin.

Hilbijartina stûnên di R: tidyverse, dplyr

syntax dplyr pir dişibihe zimanê pirsê SQL, ger hûn pê nas bin hûn ê zû vê pakêtê serdest bikin.

Для выбора столбцов используется функция select().

Li jêr nimûneyên kodê hene ku hûn dikarin bi awayên jêrîn stûnan hilbijêrin:

  • Перечислив названия нужных столбцов
  • Navên stûnan bi karanîna bêjeyên rêkûpêk binihêrin
  • По типу данных или любому другому свойству данных которые содержатся в столбце

Hilbijartina stûnên di 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

Heman operasyon li data.table hinekî cûda têne kirin, di destpêka gotarê de min ravekek pêşkêş kir ka kîjan argûman di hundurê kelûpelên çargoşe de hene data.table.

DT[i,j,by]

Çu:
i — where, т.е. фильтрация по строкам
j - hilbijêre|nûvekirin|kirin, yanî. hilbijartina stûnan û veguhertina wan
bi - komkirina daneyan

Выбор столбцов в 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$")]

Têgûherr .SD destûrê dide te ku bigihîje hemî stûnan, û .SDcols stûnên pêwîst bi karanîna bêjeyên birêkûpêk, an fonksiyonên din fîlter bikin da ku navên stûnên ku hûn hewce ne fîlter bikin.

Hilbijartina stûnên li Python, panda

Для выбора столбцов по названию в pandas достаточно передать список их названий. А для выбора или исключения столбцов по названию используя регулярные выражения необходимо использовать функции drop() и filter(), и аргумент eksê=1, bi ku hûn destnîşan dikin ku hewce ye ku stûnan ji rêzan pêve bikin.

Для выбора поля по типу данных используйте функцию select_dtypes(), û nav argumanan linavxistin an jinavderxistin передайте список типов данных соответствующие тем, какие поля вам необходимо выбрать.

Hilbijartina stûnên li 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'])

Фильтрация строк

Mînakî, tabloya çavkaniyê dibe ku çend sal daneyan hebe, lê hûn tenê hewce ne ku meha paşîn analîz bikin. Dîsa, xetên zêde dê pêvajoya hilberandina daneyê hêdî bikin û bîranîna PC-ê xitimînin.

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Parzûnkirina rêzan di R: tydyverse, dplyr

В dplyr fonksiyon ji bo fîlterkirina rêzan tê bikar anîn filter(). Ew çarçoveyek daneyê wekî argumana yekem digire, dûv re hûn şertên fîlterkirinê navnîş dikin.

При написании логических выражений для фильтрации таблицы в данном случае имена столбцов указываете без кавычек, и без объявления имени таблицы.

Dema ku ji bo fîlterkirina gelek îfadeyên mantiqî bikar tînin, operatorên jêrîn bikar bînin:

  • & an koma - mentiqî Û
  • | — логическое ИЛИ

Parzûnkirina rêzan di 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 hevoksaziya veguherîna daneyê di nav kemberên çargoşe de tê girtin.

DT[i,j,by]

Çu:
i — where, т.е. фильтрация по строкам
j - hilbijêre|nûvekirin|kirin, yanî. hilbijartina stûnan û veguhertina wan
bi - komkirina daneyan

Arguman ji bo fîlterkirina rêzan tê bikar anîn i, ku di çarçikên çargoşe de pozîsyona yekem heye.

Di bêjeyên mentiqî de bêyî îşaretan û bêyî diyarkirina navê tabloyê dest bi stûnan tê kirin.

Gotinên mantiqî bi heman awayî bi hev ve girêdayî ne dplyr bi rêya operatorên & û |.

Фильтрация строк в R: data.table

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

Parzûnkirina rêzikên di Python de: panda

Фильтрация по строкам в pandas dişibin fîlterkirin data.table, û di çarçikên çargoşe de tête kirin.

Di vê rewşê de, gihîştina stûnan pêdivî ye ku bi nîşankirina navê çarçoweya daneyê pêk were; wê hingê navê stûnê jî dikare di nav nîgarên di çarçikên çargoşe de were destnîşan kirin (nimûne df['col_name']), либо без кавычек после точки (nimûne df.col_name).

Heke hûn hewce ne ku çarçoveyek daneyê li gorî çend mercan fîlter bikin, divê her şert di nav parantezê de were danîn. Şertên mantiqî ji hêla operatoran ve bi hevûdu ve girêdayî ne & и |.

Parzûnkirina rêzikên di Python de: 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)]

Komkirin û berhevkirina daneyan

Yek ji wan operasyonên ku di analîza daneyê de herî zêde tê bikar anîn komkirin û komkirin e.

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Hevoksaziya ji bo pêkanîna van operasyonan li hemî pakêtên ku em dinirxînin belav dibe.

В данном случае в качестве примера мы возьмём датафрейм titanic, û hejmar û lêçûna navînî ya bilêtan li gorî çîna kabînê bihejmêre.

Группировка и агрегация данных в R: tidyverse, dplyr

В dplyr для группировки используется функция group_by(), û ji bo kombûnê summarise(). Di rastî, dplyr tevahiya malbatek fonksiyonan heye summarise_*(), lê mebesta vê gotarê berhevdana hevoksaziya bingehîn e, ji ber vê yekê em ê neçin daristanek wusa.

Fonksiyonên berhevkirina bingehîn:

  • sum() - berhevkirin
  • min() / max() - nirxa herî kêm û herî zêde
  • mean() - navîn
  • median() - navîn
  • length() - mîqdar

Komkirin û komkirin di R: dplyr

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

Ji bo fonksiyonê group_by() me wek argumana yekem sifrê derbas kir titanic, û paşê zeviyê nîşan kir Pclass, ku em ê tabloya xwe kom bikin. Encama vê operasyonê bi karanîna operatorê %>% wekî argumana yekem ji fonksiyonê re derbas bû summarise(), û 2 qadên din lê zêde kirin: rêwiyan и avg_price. Di yekem de, fonksiyonê bikar tîne length() hejmara bilêtan hesab kirin, û di ya duyemîn de fonksiyonê bikar tîne mean() nirxa bilêtê ya navîn wergirtiye.

Komkirin û komkirina daneyan di R: dane.table

В data.table arguman ji bo kombûnê tê bikaranîn j ku xwedan pozîsyona duyemîn e di nav berikên çargoşe de, û ji bo komkirinê by an keyby, ku xwediyê pozîsyona sêyemîn e.

Navnîşa fonksiyonên berhevkirinê di vê rewşê de bi ya ku tê de hatî destnîşan kirin yek e dplyr, т.к. это функции из базового синтаксиса R.

Группировка и агрегация в R: data.table

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

Komkirin û berhevkirina daneyan li Python: panda

Komkirin di pandas mîna dplyr, lê kombûn ne mîna hev e dplyr qet data.table.

Для группировки используйте метод groupby(), ku hûn hewce ne ku navnîşek stûnên ku dê çarçoweya daneyê tê de were kom kirin derbas bikin.

Ji bo berhevkirinê hûn dikarin rêbazê bikar bînin agg()ku ferhengekê qebûl dike. Bişkojkên ferhengê ew stûn in ku hûn ê li ser wan fonksiyonên berhevkirinê bicîh bikin, û nirx jî navên fonksiyonên berhevkirinê ne.

Fonksiyonên kombûnê:

  • sum() - berhevkirin
  • min() / max() - nirxa herî kêm û herî zêde
  • mean() - navîn
  • median() - navîn
  • count() - mîqdar

function reset_index() di mînaka li jêr de ew ji bo sifirkirina indexên hêlîn ên ku tê bikar anîn pandas ji bo piştî berhevkirina daneyan standard dike.

Symbol позволяет вам переходить на следующую строку.

Kombûn û kombûn di Python de: panda

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

Вертикальное объединение таблиц

Операция, при которой вы объединяете две или более таблиц одинаковой структуры. В загруженных нами данными есть таблицы ga_nov и ga_dec. Ev tablo di strukturê de yek in, ango. di van stûnan de heman stûn hene, û celebên daneyê hene.

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Ev barkirinek ji Google Analytics ji bo meha Mijdar û Kanûnê ye, di vê beşê de em ê van daneyan di yek tabloyê de berhev bikin.

Di R-yê de bi hev ve girêdidin tabloyên: tidyverse, dplyr

В dplyr Hûn dikarin bi karanîna fonksiyonê 2 tabloyan yek bikin bind_rows(), derbaskirina tabloyan wekî argumanên wê.

Parzûnkirina rêzan di R: dplyr

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

Di R-yê de bi hev ve girêdidin tabloyên: data.table

Ew jî ne tiştek tevlihev e, em bikar bînin rbind().

Фильтрация строк в R: data.table

## data.table
rbind(ga_nov, ga_dec)

Вертикальное объединение таблиц в Python: pandas

В pandas для объединения таблиц служит функция concat(), ku hûn hewce ne ku navnîşek çarçoveyan derbas bikin da ku wan berhev bikin.

Parzûnkirina rêzikên di Python de: panda

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

Tevlihevkirina asoyî ya tabloyan

Operasyonek ku tê de stûnên ji ya duyemîn bi mifteyê li tabloya yekem têne zêdekirin. Ew pir caran dema ku tabloyek rastiyê (mînak, tabloyek bi daneyên firotanê) bi hin daneyên referansê (mînak, lêçûna hilberek) dewlemend dike, tê bikar anîn.

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Çend cureyên tevlîbûnê hene:

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Di tabloya berê barkirî de titanic stûnek me heye sex, ku bi koda zayenda rêwiyan re têkildar e:

1 - mê
2 - nêr

Также, мы с вами создали таблицу — справочник cinsî. Ji bo danasînek hêsantir a daneyên li ser zayenda rêwiyan, pêdivî ye ku em navê zayendê ji pelrêçê zêde bikin. cinsî ser sifrê titanic.

Tevlêbûna tabloya asoyî di R: tidyverse, dplyr

В dplyr для горизонтального объединения присутствует целое семейство функций:

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

Ya herî zêde di pratîka min de tê bikar anîn ev e left_join().

Wekî du argumanên yekem, fonksiyonên ku li jor hatine destnîşan kirin du tabloyên ku tev lê dibin, û wekî argumana sêyemîn digirin by divê hûn stûnên tevlêbûnê diyar bikin.

Tevlêbûna tabloya asoyî di R: dplyr

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

Горизонтальное объединение таблиц в R: data.table

В data.table Pêdivî ye ku hûn bi karanîna fonksiyonê bi bişkojkê tevlî tabloyan bibin merge().

Аргументы функции merge() в data.table

  • x, y - Tabloyên ji bo tevlêbûnê
  • bi - Stûna ku mifteya tevlêbûnê ye heke di her du tabloyan de heman navî hebe
  • by.x, by.y - Ger navên stûnan di tabloyan de navên cihêreng hebin, werin yek kirin.
  • all, all.x, all.y - Tîpa tevlêbûnê, hemî dê hemî rêzan ji her du tabloyan vegerînin, hemî.x bi operasyona LEFT JOIN re têkildar e (dê hemî rêzên tabloya yekem bihêle), hemî.y - bi Operasyona TEVLÊBÛNA RAST (dê hemî rêzên tabloya duyemîn derkeve).

Горизонтальное объединение таблиц в R: data.table

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

Горизонтальное объединение таблиц в Python: pandas

Так же как и в data.tablein pandas для объединения таблиц используется функция merge().

Argumentên fonksiyona merge() di pandayan de

  • çawa - Cureyê girêdanê: çep, rast, derve, hundur
  • ser — Ger di her du tabloyan de heman navî hebe stûna ku mifteyek e
  • left_on, right_on — Имена столбцов ключей, в случае если они имеют разные имена в таблицах

Горизонтальное объединение таблиц в Python: pandas

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

Fonksiyonên paceya bingehîn û stûnên hesabkirî

Fonksiyonên pencereyê di wateya fonksiyonên kombûnê de dişibin hev, û her weha pir caran di analîza daneyê de têne bikar anîn. Lê berevajî fonksiyonên berhevkirinê, fonksiyonên pencereyê hejmara rêzên çarçoveya daneya derketinê naguherînin.

Kîjan ziman ji bo xebata bi daneyan hilbijêrin - R an Python? Herdû! Koçberî ji pandayan ber bi tidyverse û data.table û paş

Di bingeh de, bi karanîna fonksiyona pencereyê, em dataframeya gihîştî li gorî hin pîvanan parçe dikin, ango. bi nirxê zeviyek, an çend zeviyan. Û em li ser her paceyê operasyonên jimartinê pêk tînin. Encama van operasyonan dê di her rêzê de were vegerandin, i.e. bêyî guhertina hejmara giştî ya rêzikên di tabloyê de.

Mînak, em sifrê bigirin titanic. Em dikarin hesab bikin ka ji sedî çend lêçûna her bilêtê di nav çîna kabîneya wê de bû.

Ji bo vê yekê, pêdivî ye ku em di her rêzê de lêçûna giştî ya bilêtek ji bo çîna kabîneya heyî ya ku bilêta di vê rêzê de tê de ye bistînin, dûv re lêçûna her bilêtê bi lêçûna giştî ya hemî bilêtên heman çîna kabînê re parve bikin. .

Fonksiyonên pencereyê di R: tidyverse, dplyr

Ji bo lê zêdekirina stûnên nû, bêyî karanîna komkirina rêzan, tê de dplyr fonksiyonê dike mutate().

Hûn dikarin pirsgirêka ku li jor hatî destnîşan kirin bi komkirina daneyan li gorî zeviyê çareser bikin Pclass и просуммировав в новом столбце поле çi. Piştre, tabloyê kom bikin û nirxên zeviyê dabeş bikin çi ji bo tiştê ku di gava berê de qewimî.

Fonksiyonên pencereyê di R: dplyr

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

Fonksiyonên pencereyê di R: data.table

Algorîtmaya çareseriyê wekî di nav de dimîne dplyr, divê em tabloyê bi qad li pencereyan parçe bikin Pclass. Di stûnek nû de mîqdara koma ku bi her rêzê re têkildar e derxîne, û stûnek lê zêde bike ku tê de em para lêçûna her bilêtê di koma wê de hesab dikin.

Для добавления новых столбцов в data.table operator heyî :=. Li jêr mînakek çareserkirina pirsgirêkek bi karanîna pakêtê heye data.table

Fonksiyonên pencereyê di R: data.table

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

Оконные функции в Python: pandas

Rêyek ku meriv stûnek nû lê zêde bike pandas — использовать функцию assign(). Ji bo kurtkirina lêçûna bilêtan li gorî pola kabînê, bêyî komkirina rêzan, em ê fonksiyonê bikar bînin transform().

Li jêr mînakek çareseriyek heye ku tê de em li tabloyê zêde dikin titanic heman 2 stûnên.

Оконные функции в Python: pandas

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

Tabloya pêwendiya fonksiyon û rêbazan

Li jêr tabloyek hevahengiya di navbera awayên ji bo pêkanîna operasyonên cihêreng bi daneya di pakêtên ku me li ber çavan girtin de heye.

description
tidyverse
data.sifre
pandas

Daneyên barkirin
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

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

Hilbijartina Stûnan
select()
bersivk j, pozîsyona duyemîn di nav çeperên çargoşe de
em navnîşa stûnên pêwîst di nav kemberên çargoşe de derbas dikin / drop() / filter() / select_dtypes()

Фильтрация строк
filter()
bersivk i, pozîsyona yekem di nav çeperên çargoşe de
перечисляем условия фильтрации в квадратных скобках / filter()

Группировка и агрегация
group_by() + summarise()
argumana j + by
groupby() + agg()

Вертикальное объединение таблиц (UNION)
bind_rows()
rbind()
concat()

Горизонтальное объединение таблиц (JOIN)
left_join() / *_join()
merge()
merge()

Fonksiyonên paceya bingehîn û lê zêdekirina stûnên hesabkirî
group_by() + mutate()
bersivk j с использованием оператора := + arguman by
transform() + assign()

encamê

Dibe ku di gotarê de min ne pêkanînên herî çêtirîn ên hilberandina daneyê diyar kir, ji ber vê yekê ez ê kêfxweş bibim ku hûn di şîroveyan de xeletiyên min rast bikin, an jî tenê agahdariya ku di gotarê de hatî dayîn bi teknîkên din re ji bo xebata bi daneyan di R / Python de temam bikin.

Mîna ku min li jor jî nivîsî, mebesta gotarê ne ferzkirina nerîna xwe li ser kîjan zimanî çêtir e, lê hêsankirina derfeta fêrbûna her du zimanan, an ger hewce be, koçkirina di navbera wan de bû.

Ger we gotar jê hez kir, ez ê kêfxweş bibim ku aboneyên min ên nû hebin youtube и têlxiram каналах.

Poll

Hûn di karê xwe de kîjan ji pakêtên jêrîn bikar tînin?

Di şîroveyan de hûn dikarin sedema hilbijartina xwe binivîsin.

Tenê bikarhênerên qeydkirî dikarin beşdarî anketê bibin. Têketinji kerema xwe.

Hûn kîjan pakêta hilberandina daneyê bikar tînin (hûn dikarin çend vebijarkan hilbijêrin)

  • 45,2%tidyverse19

  • 33,3%data.table14

  • 54,8%pandas23

42 bikarhêneran deng dan. 9 bikarhêner jî betal bûn.

Source: www.habr.com

Add a comment