Кој јазик да се избере за работа со податоци - R или Python? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Со пребарување на R или Python на Интернет, ќе најдете милиони написи и километри дискусии на тема која е подобра, побрза и поудобна за работа со податоци. Но, за жал, сите овие написи и спорови не се особено корисни.

Кој јазик да се избере за работа со податоци - R или Python? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Целта на оваа статија е да се споредат основните техники за обработка на податоци во најпопуларните пакети на двата јазика. И помогнете им на читателите брзо да совладаат нешто што сè уште не го знаат. За оние кои пишуваат во Python, дознајте како да го прават истото во R, и обратно.

Во текот на статијата ќе ја анализираме синтаксата на најпопуларните пакети во Р. Ова се пакетите вклучени во библиотеката tidyverseа исто така и пакетот data.table. И споредете ја нивната синтакса со pandas, најпопуларниот пакет за анализа на податоци во Python.

Ќе одиме чекор по чекор низ целиот пат на анализа на податоците од нивно вчитување до извршување на аналитички функции на прозорецот користејќи Python и R.

содржина

Оваа статија може да се користи како лист за измами ако сте заборавиле како да извршите некоја операција за обработка на податоци во еден од пакетите што се разгледуваат.

Кој јазик да се избере за работа со податоци - R или Python? И двете! Мигрирање од панди до уредно и податоци.табела и назад

  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. Креирање на податочни рамки
  6. Избор на колумни што ви се потребни
  7. Филтрирање на редови
  8. Групирање и агрегација
  9. Вертикална унија на табели (UNION)
  10. Хоризонтално спојување на табели (JOIN)
  11. Основни функции на прозорецот и пресметани колони
  12. Табела за кореспонденција помеѓу методите за обработка на податоци во R и Python
  13. Заклучок
  14. Кратка анкета за тоа кој пакет го користите

Ако сте заинтересирани за анализа на податоци, може да го најдете мојот телеграма и YouTube канали. Најголем дел од содржината е посветена на јазикот Р.

Главните синтаксни разлики помеѓу R и Python

За полесно да се префрлите од Python на 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 на свој начин, напишав за ова во статијата „OOP на јазикот R (дел 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? И двете! Мигрирање од панди до уредно и податоци.табела и назад

В 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(). Резултирачкиот резултат се зачувува во објект OBJ .

Структури на податоци

Структурите на податоци во R и Python се слични, но имаат различни имиња.

Опис
Името во Р
Име во Пајтон/панди

Структура на табелата
податоци.рамка, податок.табела, тибл
Рамка на податоци

Еднодимензионална листа на вредности
Вектор
Серии во панди или список во чист Пајтон

Повеќестепена нетабеларна структура
Список
речник (дикт)

Ќе разгледаме некои други карактеристики и разлики во синтаксата подолу.

Неколку зборови за пакетите што ќе ги користиме

Прво, ќе ви кажам малку за пакетите со кои ќе се запознаете во текот на оваа статија.

уреден

Официальный сайт: tidyverse.org
Кој јазик да се избере за работа со податоци - R или Python? И двете! Мигрирање од панди до уредно и податоци.табела и назад
Библиотека tidyverse напишано од Хедли Викам, виш истражувачки научник во RStudio. tidyverse се состои од импресивен сет на пакети кои ја поедноставуваат обработката на податоците, од кои 5 се вклучени во првите 10 преземања од складиштето CRAN.

Јадрото на библиотеката се состои од следниве пакети: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Секој од овие пакети е насочен кон решавање на одреден проблем. На пример dplyr создаден за манипулација со податоци, tidyr да ги доведете податоците во уредна форма, stringr ја поедноставува работата со жици и ggplot2 е една од најпопуларните алатки за визуелизација на податоци.

предност tidyverse е едноставноста и лесната за читање синтакса, која на многу начини е слична на јазикот за пребарување SQL.

податоци. табела

Кој јазик да се избере за работа со податоци - R или Python? И двете! Мигрирање од панди до уредно и податоци.табела и назадОфициальный сайт: r-datatable.com

Од страна на авторот data.table е Мет Дол од H2O.ai.

Првото издание на библиотеката се случи во 2006 година.

Синтаксата на пакетот не е толку удобна како кај нас tidyverse и повеќе потсетува на класичните податочни рамки во R, но во исто време значително проширена функционалност.

Сите манипулации со табелата во овој пакет се опишани во квадратни загради и ако ја преведете синтаксата data.table во SQL, добивате нешто како ова: data.table[ WHERE, SELECT, GROUP BY ]

Силата на овој пакет е брзината на обработка на големи количини на податоци.

панди

Официальный сайт: pandas.pydata.org Кој јазик да се избере за работа со податоци - R или Python? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Името на библиотеката доаѓа од економетрискиот термин „панел податоци“, кој се користи за опишување на повеќедимензионални структурирани групи на информации.

Од страна на авторот pandas е Американецот Вес Мекини.

Кога станува збор за анализа на податоци во Python, еднакво pandas бр. Многу мултифункционален пакет на високо ниво кој ви овозможува да вршите каква било манипулација со податоците, од вчитување податоци од кој било извор до нивно визуелизирање.

Инсталирање на дополнителни пакети

Пакетите дискутирани во овој напис не се вклучени во основните дистрибуции R и Python. Иако има мала забелешка, ако сте ја инсталирале дистрибуцијата Anaconda, тогаш инсталирајте дополнително pandas не е потребно.

Инсталирање на пакети во Р

Ако барем еднаш сте ја отвориле околината за развој на 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? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Во текот на статијата ќе користиме неколку сетови на податоци:

  1. Две преземања од Google Analytics.
  2. Збир на податоци за патници на Титаник.

Сите податоци се на мојот GitHub во форма на датотеки csv и tsv. Од каде ќе ги бараме?

Вчитување податоци во R: tidyverse, vroom, reader

За вчитување податоци во библиотека tidyverse Постојат два пакети: vroom, readr. vroom помодерно, но во иднина пакетите може да се комбинираат.

Цитат од официјална документација vroom.

vroom vs читател
Што значи ослободувањето на vroom значи за readr? Засега планираме да дозволиме двата пакети да се развиваат одделно, но веројатно ќе ги обединиме пакетите во иднина. Еден недостаток на мрзливото читање на vroom е дека одредени проблеми со податоците не можат да се пријават однапред, па како најдобро да се обединат бара малку размислување.

vroom vs читател
Што значи ослободување? 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: читач

# 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 има функција за вчитување податоци 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: панди

Ако се споредиме со R пакетите, тогаш во овој случај синтаксата е најблиску до pandas ќе readr, бидејќи pandas може да бара податоци од каде било, а во овој пакет има цело семејство на функции read_*().

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

И многу други функции дизајнирани да читаат податоци од различни формати. Но, за нашите цели тоа е доволно read_table() или read_csv() користејќи аргумент септември за да го одредите раздвојувачот на колоните.

Вчитување податоци во Python: панди

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

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

Табела Титаник, што го вчитавме, има поле Пол, кој го складира идентификаторот за пол на патникот.

Но, за поудобно прикажување на податоците во однос на полот на патниците, треба да го користите името наместо родовата шифра.

За да го направите ова, ќе создадеме мал директориум, табела во која ќе има само 2 колони (код и име на пол) и 2 реда, соодветно.

Креирање на податочна рамка во R: tidyverse, dplyr

Во примерот на кодот подолу, ја креираме саканата податочна рамка користејќи ја функцијата tibble() .

Креирање на податочна рамка во R: dplyr

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

Креирање на податочна рамка во R: податоци.табела

Креирање на податочна рамка во R: податоци.табела

## 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? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Затоа, една од првите операции што ќе ги извршите со изворната табела е да ја исчистите од непотребните информации и да ја ослободите меморијата што ја зафаќа оваа информација.

Избор на колони во 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.

DT[i,j,by]

Каде што:
јас - каде, т.е. филтрирање по редови
j - изберете|ажурирај|направи, т.е. избирање колони и нивно конвертирање
по - групирање на податоци

Избор на колони во R: податоци.табела

## data.table
### выбрать по названию столбцов
ga_nov[ , .(date, source, sessions) ]
### исключь по названию столбцов
ga_nov[ , .SD, .SDcols = ! names(ga_nov) %like% "medium|bounces" ]
### выбрать по регулярному выражению
ga_nov[, .SD, .SDcols = patterns("s$")]

Променлива .SD ви овозможува пристап до сите колони и .SDcols филтрирајте ги бараните колони користејќи регуларни изрази или други функции за филтрирање на имињата на колоните што ви се потребни.

Избор на колони во Пајтон, панди

За да изберете колони по име во pandas доволно е да се обезбеди список со нивните имиња. И за да изберете или исклучите колони по име користејќи регуларни изрази, треба да ги користите функциите drop() и filter(), и аргумент оска=1, со што укажувате дека е потребно да се обработуваат колони наместо редови.

За да изберете поле по тип на податоци, користете ја функцијата select_dtypes(), и во аргументи вклучуваат или исклучува поминете листа на типови на податоци што одговараат на полињата што треба да ги изберете.

Избор на колони во Пајтон: панди

# Выбор полей по названию
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? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Филтрирање на редови во 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 Синтаксата за конверзија на податоци е затворена во квадратни загради.

DT[i,j,by]

Каде што:
јас - каде, т.е. филтрирање по редови
j - изберете|ажурирај|направи, т.е. избирање колони и нивно конвертирање
по - групирање на податоци

Аргументот се користи за филтрирање на редови i, кој ја има првата позиција во квадратни загради.

До колоните се пристапува во логички изрази без наводници и без наведување на името на табелата.

Логичките изрази се поврзани едни со други на ист начин како и во dplyr преку операторите & и |.

Филтрирање на редови во R: податоци.табела

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

Филтрирање низи во Пајтон: панди

Филтрирај по редови во pandas слично на филтрирање во data.table, и се прави во квадратни загради.

Во овој случај, пристапот до колоните се врши нужно со означување на името на податочната рамка; тогаш името на колоната може да се наведе и во наводници во квадратни загради (пример df['col_name']), или без наводници по периодот (пример df.col_name).

Ако треба да филтрирате податочна рамка според неколку услови, секој услов мора да биде поставен во загради. Логичките услови се поврзани едни со други од страна на операторите & и |.

Филтрирање низи во Пајтон: панди

# Фильтрация строк таблицы
### фильтрация строк по одному условию
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? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Синтаксата за извршување на овие операции е расфрлана низ сите пакети што ги прегледуваме.

Во овој случај, ќе земеме податочна рамка како пример Титаник, и пресметајте го бројот и просечната цена на билетите во зависност од класата на кабината.

Групирање и агрегација на податоци во R: tidyverse, dplyr

В dplyr функцијата се користи за групирање group_by(), и за агрегација summarise(). Всушност, dplyr постои цела фамилија на функции summarise_*(), но целта на оваа статија е да се спореди основната синтакса, така што нема да навлегуваме во таква џунгла.

Основни функции на агрегација:

  • sum() - сумирање
  • min() / max() – минимална и максимална вредност
  • mean() - просек
  • median() - средна
  • length() - квантитет

Групирање и агрегација во R: dplyr

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

Во функција group_by() ја поминавме табелата како прв аргумент Титаник, а потоа го означи полето Пкласа, со што ќе ја групираме нашата табела. Резултатот од оваа операција со користење на операторот %>% пренесен како прв аргумент на функцијата summarise()и додаде уште 2 полиња: патници и просечна_цена. Во првиот, користејќи ја функцијата length() го пресметал бројот на билети, а во вториот со помош на функцијата mean() ја доби просечната цена на билетот.

Групирање и агрегација на податоци во Р: податоци.табела

В 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(), во која треба да пренесете листа на колони според кои ќе се групира податочната рамка.

За агрегација можете да го користите методот agg()кој прифаќа речник. Копчињата за речник се колоните на кои ќе ги примените функциите за собирање, а вредностите се имињата на функциите за собирање.

Функции на агрегација:

  • sum() - сумирање
  • min() / max() – минимална и максимална вредност
  • mean() - просек
  • median() - средна
  • count() - квантитет

Функција reset_index() во примерот подолу се користи за ресетирање на вгнездени индекси кои pandas стандардно е после собирање податоци.

симбол ви овозможува да преминете на следната линија.

Групирање и агрегација во Пајтон: панди

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

Вертикално спојување на табелите

Операција во која спојувате две или повеќе табели со иста структура. Податоците што ги вчитавме содржат табели ga_nov и ga_dec. Овие табели се идентични по структура, т.е. ги имаат истите колони и типовите на податоци во овие колони.

Кој јазик да се избере за работа со податоци - R или Python? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Ова е прикачување од Google Analytics за месеците ноември и декември, во овој дел ќе ги комбинираме овие податоци во една табела.

Вертикално спојување на табели во R: tidyverse, dplyr

В dplyr Можете да комбинирате 2 табели во една користејќи ја функцијата bind_rows(), пренесувајќи табели како негови аргументи.

Филтрирање на редови во R: dplyr

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

Вертикално спојување на табели во R: податоци.табела

Исто така, не е ништо комплицирано, ајде да го искористиме rbind().

Филтрирање на редови во R: податоци.табела

## data.table
rbind(ga_nov, ga_dec)

Вертикално спојување на табели во Python: панди

В pandas функцијата се користи за спојување на табели concat(), во која треба да внесете листа на рамки за да ги комбинирате.

Филтрирање низи во Пајтон: панди

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

Хоризонтално спојување на табели

Операција во која колоните од втората се додаваат на првата табела со клуч. Често се користи кога се збогатува табела со факти (на пример, табела со податоци за продажба) со некои референтни податоци (на пример, цената на производот).

Кој јазик да се избере за работа со податоци - R или Python? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Постојат неколку видови на спојувања:

Кој јазик да се избере за работа со податоци - R или Python? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Во претходно вчитаната табела Титаник имаме колона Пол, што одговара на родовата шифра на патникот:

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 Треба да ги споите табелите со копче користејќи ја функцијата merge().

Аргументи за merge() функција во податоци.табела

  • x, y — Табели за спојување
  • од — Колона која е клучот за приклучување доколку има исто име во двете табели
  • by.x, by.y — Имињата на колоните што треба да се спојат, доколку имаат различни имиња во табелите
  • all, all.x, all.y — Join type, all ќе ги врати сите редови од двете табели, all.x одговара на операцијата LEFT JOIN (ќе ги остави сите редови од првата табела), all.y — одговара на Операција RIGHT JOIN (ќе ги остави сите редови од втората табела ).

Хоризонтално спојување на табели во R: податоци.табела

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

Хоризонтална табела се приклучува во Python: панди

Како и во data.tableво pandas функцијата се користи за спојување на табели merge().

Аргументи на функцијата merge() кај пандите

  • како — Тип на поврзување: лево, десно, надворешно, внатрешно
  • on — Колона која е клуч ако има исто име во двете табели
  • left_on, right_on — Имиња на клучните колони, доколку имаат различни имиња во табелите

Хоризонтална табела се приклучува во Python: панди

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

Основни функции на прозорецот и пресметани колони

Функциите на прозорецот се слични по значење на функциите за собирање, а исто така често се користат во анализата на податоците. Но, за разлика од функциите за собирање, функциите на прозорецот не го менуваат бројот на редови од појдовната податочна рамка.

Кој јазик да се избере за работа со податоци - R или Python? И двете! Мигрирање од панди до уредно и податоци.табела и назад

Во суштина, користејќи ја функцијата прозорец, ја делиме влезната податочна рамка на делови според некој критериум, т.е. според вредноста на едно поле или неколку полиња. И ние извршуваме аритметички операции на секој прозорец. Резултатот од овие операции ќе биде вратен во секоја линија, т.е. без промена на вкупниот број на редови во табелата.

На пример, да ја земеме табелата Титаник. Можеме да пресметаме колкав процент бил цената на секој билет во рамките на класата на кабината.

За да го направите ова, треба во секоја линија да ја добиеме вкупната цена на билетот за тековната класа на кабина на која припаѓа билетот во оваа линија, а потоа да ја поделиме цената на секој билет со вкупните трошоци на сите билети од истата класа на кабина. .

Функции на прозорец во R: tidyverse, dplyr

За да додадете нови колони, без да користите групирање редови, во dplyr служи функција mutate().

Можете да го решите проблемот опишан погоре со групирање на податоците по полиња Пкласа и сумирање на полето во нова колона Тарифа. Следно, одгрупирајте ја табелата и поделете ги вредностите на полињата Тарифа на она што се случи во претходниот чекор.

Функции на прозорец во R: dplyr

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

Функции на прозорец во R: податоци.табела

Алгоритмот за решение останува ист како во dplyr, треба да ја поделиме табелата на прозорци по поле Пкласа. Изнесете го во нова колона износот за групата што одговара на секој ред и додадете колона во која го пресметуваме учеството на цената на секој билет во неговата група.

За да додадете нови колони во data.table присутен оператор :=. Подолу е пример за решавање на проблем со користење на пакетот data.table

Функции на прозорец во R: податоци.табела

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

Функции на прозорец во Пајтон: панди

Еден начин да додадете нова колона во pandas - користете ја функцијата assign(). За да ги сумираме трошоците за билети по класа на кабина, без групирање на редови, ќе ја користиме функцијата transform().

Подолу е пример за решение во кое додаваме во табелата Титаник истите 2 колони.

Функции на прозорец во Пајтон: панди

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

Креирање на податочни рамки
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%уреден универзум19

  • 33,3%податоци.табела14

  • 54,8%панди 23

Гласале 42 корисници. 9 корисници беа воздржани.

Извор: www.habr.com

Додадете коментар