Кадом забонро барои кор бо додаҳо интихоб кардан мумкин аст - 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. Indexing
    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 бахшида шудаанд.

Фарқиятҳои асосии синтаксиси байни 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.

Indexing

Дар ин ҷо низ фарқиятҳои хеле назаррас мавҷуданд. Дар 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? Ҳарду! Муҳоҷират аз пандаҳо ба 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-тои онҳо ба 10 зеркашии боло аз анбори CRAN дохил карда шудаанд.

Асоси китобхона аз бастаҳои зерин иборат аст: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Ҳар яке аз ин бастаҳо ба ҳалли мушкилоти мушаххас нигаронида шудаанд. Барои намуна dplyr барои коркарди маълумот сохта шудааст, tidyr маълумотро ба шакли тоза овардан, stringr кор бо сатрро осон мекунад ва ggplot2 яке аз воситаҳои маъмултарини визуализатсияи додаҳо мебошад.

Бартарӣ tidyverse содда ва осон барои хондан синтаксис аст, ки аз бисёр ҷиҳат ба забони дархости SQL шабоҳат дорад.

маълумот. ҷадвал

Кадом забонро барои кор бо додаҳо интихоб кардан мумкин аст - R ё Python? Ҳарду! Муҳоҷират аз пандаҳо ба tidyverse ва data.table ва бозгаштСомонаи расмӣ: r-datatable.com

Бо data.table Матт Доул аз H2O.ai аст.

Нашри аввалини китобхона дар соли 2006 сурат гирифт.

Синтаксиси бастаҳо он қадар қулай нест tidyverse ва бештар ба dataframes классикӣ дар R хотиррасон аст, вале дар айни замон ба таври назаррас дар фаъолияти васеъ.

Ҳама коркардҳо бо ҷадвали ин баста дар қавсҳои мураббаъ тавсиф карда мешаванд ва агар шумо синтаксисро тарҷума кунед data.table дар SQL, шумо чизе монанди ин мегиред: data.table[ WHERE, SELECT, GROUP BY ]

Қувваи ин баста суръати коркарди миқдори зиёди додаҳо мебошад.

пандахо

Сомонаи расмӣ: pandas.pydata.org Кадом забонро барои кор бо додаҳо интихоб кардан мумкин аст - R ё Python? Ҳарду! Муҳоҷират аз пандаҳо ба tidyverse ва data.table ва бозгашт

Номи китобхона аз истилоҳи эконометрикии "маълумоти панелӣ" гирифта шудааст, ки барои тавсифи маҷмӯаҳои сохтории бисёрченакаи иттилоот истифода мешавад.

Бо pandas Американ Уэс МакКинни мебошад.

Вақте ки сухан дар бораи таҳлили маълумот дар Python меравад, баробар аст pandas Не. Бастаи бисёрфунксионалӣ ва сатҳи баланд, ки ба шумо имкон медиҳад ҳама гуна коркардро бо додаҳо, аз боркунии маълумот аз ҳама гуна манбаъҳо то визуалии он анҷом диҳед.

Насб кардани бастаҳои иловагӣ

Бастаҳои дар ин мақола муҳокимашуда ба тақсимоти асосии R ва Python дохил карда нашудаанд. Гарчанде ки як огоҳии хурд вуҷуд дорад, агар шумо тақсимоти Анакондаро насб кунед, пас ба таври иловагӣ насб кунед 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. Маҷмӯи маълумоти мусофирони Титаник.

Ҳама маълумот дар ман аст GitHub дар шакли файлҳои csv ва tsv. Мо онҳоро аз куҷо талаб мекунем?

Боркунии маълумот ба R: tidyverse, vroom, readr

Барои бор кардани маълумот ба китобхона tidyverse Ду баста вуҷуд дорад: vroom, readr. vroom муосиртар, вале дар оянда бастаҳо метавонанд якҷоя карда шаванд.

Иқтибос аз ҳуҷҷатҳои расмӣ vroom.

vroom против хонанда
Озод кардан аз чи иборат аст vroom маънои барои readr? Ҳоло мо нақша дорем, ки ин ду бастаро алоҳида инкишоф диҳем, аммо эҳтимол мо дар оянда бастаҳоро муттаҳид хоҳем кард. Як нуқсони хониши танбалии vroom ин аст, ки мушкилоти муайяни додаҳоро пешакӣ гузориш додан мумкин нест, аз ин рӯ чӣ гуна беҳтарин муттаҳид кардани онҳо каме андешаро талаб мекунад.

vroom против 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() бо истифода аз аргумент сен барои муайян кардани ҷудокунандаи сутун.

Боркунии маълумот дар 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")

Эҷоди чаҳорчӯбаи додаҳо

Ҷадвал Титаник, ки мо бор кардем, киштзор мавчуд аст Sex, ки муайянкунандаи ҷинси мусофирро нигоҳ медорад.

Аммо барои пешниҳоди қулайи маълумот аз рӯи ҷинсҳои мусофир, шумо бояд номро истифода баред, на рамзи гендер.

Барои ин, мо директорияи хурд, ҷадвалеро эҷод мекунем, ки дар он танҳо 2 сутун (код ва номи гендер) ва 2 сатр мавҷуд хоҳад буд.

Эҷоди чаҳорчӯбаи додаҳо дар R: tidyverse, dplyr

Дар мисоли коди дар поён овардашуда, мо бо истифода аз ин функсия фрейми дилхоҳро эҷод мекунем tibble() .

Эҷоди чаҳорчӯбаи додаҳо дар R: dplyr

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

Эҷоди чаҳорчӯбаи dataframe дар R: data.table

Эҷоди чаҳорчӯбаи dataframe дар R: data.table

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

Эҷоди чаҳорчӯбаи додаҳо дар Python: pandas

В pandas Эҷоди фреймҳо дар чанд марҳила сурат мегирад, аввал мо луғатро эҷод мекунем ва баъд лугатро ба датафраме табдил медиҳем.

Эҷоди чаҳорчӯбаи додаҳо дар Python: pandas

# создаём дата фрейм
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]

Дар куҷо:
ман - дар куҷо, яъне. филтр аз рӯи сатрҳо
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$")]

Тағйирёбанда .SD ба шумо имкон медиҳад, ки дастрасӣ ба ҳамаи сутунҳо, ва .SDcols сутунҳои лозимиро бо истифода аз ибораҳои муқаррарӣ ё дигар вазифаҳо филтр кунед, то номҳои сутунҳои ба шумо лозимиро филтр кунед.

Интихоби сутунҳо дар Python, pandas

Барои интихоби сутунҳо аз рӯи ном дар pandas руйхати номи онхоро пешниход кардан кифоя аст. Ва барои интихоб ё истисно кардани сутунҳо аз рӯи ном бо истифода аз ибораҳои муқаррарӣ, шумо бояд функсияҳоро истифода баред drop() и filter(), ва баҳс меҳвар = 1, ки бо он шумо нишон медиҳед, ки коркарди сутунҳо, на сатрҳо зарур аст.

Барои интихоби майдон аз рӯи намуди маълумот, функсияро истифода баред select_dtypes(), ва ба далелҳо дохил кунед ё истисно рӯйхати намудҳои маълумотро, ки ба кадом соҳаҳо лозим аст, интихоб кунед.

Интихоби сутунҳо дар Python: pandas

# Выбор полей по названию
ga_nov[['date', 'source', 'sessions']]
# Исключить по названию
ga_nov.drop(['medium', 'bounces'], axis=1)
# Выбрать по регулярному выражению
ga_nov.filter(regex="s$", axis=1)
# Выбрать числовые поля
ga_nov.select_dtypes(include=['number'])
# Выбрать текстовые поля
ga_nov.select_dtypes(include=['object'])

Филтр кардани сатрҳо

Масалан, ҷадвали манбаъ метавонад маълумоти якчанд сол дошта бошад, аммо шумо танҳо бояд моҳи гузаштаро таҳлил кунед. Боз, хатҳои иловагӣ раванди коркарди маълумотро суст мекунанд ва хотираи компютерро мебанданд.

Кадом забонро барои кор бо додаҳо интихоб кардан мумкин аст - 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]

Дар куҷо:
ман - дар куҷо, яъне. филтр аз рӯи сатрҳо
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

Аз рӯи сатрҳо филтр кунед pandas монанд ба филтр дар data.table, ва дар қавсҳои мураббаъ иҷро карда мешавад.

Дар ин ҳолат, дастрасӣ ба сутунҳо ҳатман бо нишон додани номи чаҳорчӯбаи додаҳо анҷом дода мешавад; пас номи сутунро инчунин дар нохунак дар қавсҳои мураббаъ нишон додан мумкин аст (намуна df['col_name']), ё бидуни нохунак пас аз давра (намуна df.col_name).

Агар ба шумо лозим аст, ки чаҳорчӯбаи маълумотро аз рӯи якчанд шартҳо филтр кунед, ҳар як шарт бояд дар қавс ҷойгир карда шавад. Шартҳои мантиқӣ бо ҳам тавассути операторҳо пайваст карда мешаванд & и |.

Филтр кардани сатрҳо дар Python: pandas

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

Гурӯҳбандӣ ва ҷамъбасти маълумот

Яке аз амалиётҳои маъмултарин дар таҳлили додаҳо гурӯҳбандӣ ва ҷамъкунӣ мебошад.

Кадом забонро барои кор бо додаҳо интихоб кардан мумкин аст - R ё Python? Ҳарду! Муҳоҷират аз пандаҳо ба tidyverse ва data.table ва бозгашт

Синтаксис барои иҷрои ин амалҳо дар тамоми бастаҳое, ки мо баррасӣ мекунем, пароканда аст.

Дар ин ҳолат, мо ҳамчун як фрейм маълумот мегирем Титаник, ва шумора ва арзиши миёнаи билетхоро вобаста ба класси кабина хисоб кунед.

Гурӯҳбандӣ ва ҷамъоварии маълумот дар 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() нархи миёнаи билетро гирифт.

Гурӯҳбандӣ ва ҷамъбасти маълумот дар R: data.table

В data.table аргумент барои ҷамъоварӣ истифода мешавад j ки дар қавсҳои мураббаъ мавқеи дуюм дорад ва барои гурӯҳбандӣ by ё keyby, ки мавкеи сеюмро ишгол мекунанд.

Рӯйхати функсияҳои ҷамъоварӣ дар ин ҳолат ба ҳамон чизест, ки дар тавсиф шудааст dplyr, зеро инҳо функсияҳо аз синтаксиси асосии R мебошанд.

Гурӯҳбандӣ ва ҷамъоварӣ дар R: data.table

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

Гурӯҳбандӣ ва ҷамъоварии маълумот дар Python: pandas

Дар гурӯҳбандӣ pandas монанд ба dplyr, вале агрегат ба он монанд нест dplyr на дар data.table.

Барои гурӯҳ, усулро истифода баред groupby(), ки ба шумо лозим аст, ки рӯйхати сутунҳоро гузоред, ки тавассути онҳо чаҳорчӯбаи dataframe гурӯҳбандӣ карда мешавад.

Барои ҷамъоварӣ шумо метавонед усулро истифода баред agg()ки лугатро кабул мекунад. Калидҳои луғат сутунҳое мебошанд, ки дар онҳо шумо функсияҳои ҷамъкуниро татбиқ хоҳед кард ва арзишҳо номҳои функсияҳои ҷамъкунӣ мебошанд.

Функсияҳои ҷамъоварӣ:

  • sum() — ҷамъбаст
  • min() / max() - арзиши ҳадди ақал ва ҳадди аксар
  • mean() - миёна
  • median() — миёна
  • count() - микдор

функсия reset_index() дар мисоли зер он барои аз нав танзимкунии индексҳои лона истифода мешавад, ки pandas пас аз ҷамъоварии маълумот пешфарз мешавад.

Символ ба шумо имкон медиҳад, ки ба сатри оянда гузаред.

Гурӯҳбандӣ ва ҷамъоварӣ дар Python: pandas

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

Якҷоякунии амудии ҷадвалҳо

Амалиёте, ки дар он шумо ду ё зиёда ҷадвалҳои як сохторро ҳамроҳ мекунед. Маълумоте, ки мо бор кардем, ҷадвалҳоро дар бар мегирад га_нов и 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

В pandas функсия барои пайваст кардани ҷадвалҳо истифода мешавад concat(), ки ба шумо лозим аст, ки рӯйхати чаҳорчӯбҳоро барои якҷоя кардани онҳо гузаронед.

Филтр кардани сатрҳо дар Python: pandas

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

Якҷоякунии уфуқии ҷадвалҳо

Амалиёте, ки дар он сутунҳои дуюм ба ҷадвали якум тавассути калид илова карда мешаванд. Он аксар вақт ҳангоми ғанӣ гардонидани ҷадвали фактҳо (масалан, ҷадвал бо маълумоти фурӯш) бо баъзе маълумотҳои истинод (масалан, арзиши маҳсулот) истифода мешавад.

Кадом забонро барои кор бо додаҳо интихоб кардан мумкин аст - R ё Python? Ҳарду! Муҳоҷират аз пандаҳо ба tidyverse ва data.table ва бозгашт

Якчанд намуди пайвастшавӣ вуҷуд дорад:

Кадом забонро барои кор бо додаҳо интихоб кардан мумкин аст - R ё Python? Ҳарду! Муҳоҷират аз пандаҳо ба tidyverse ва data.table ва бозгашт

Дар ҷадвали қаблан боршуда Титаник мо сутун дорем Sex, ки ба рамзи гендерии мусофир мувофиқат мекунад:

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 ба амалиёти ҶАҲОНИ ЧАП мувофиқат мекунад (ҳамаи сатрҳои ҷадвали аввалро тарк мекунад), all.y — ба Амалиёти RIGHT JOIN (ҳамаи сатрҳои ҷадвали дуюмро тарк мекунад).

Пайвастшавии уфуқии ҷадвалҳо дар R: data.table

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

Ҷадвали уфуқӣ дар Python пайваст мешавад: pandas

Инчунин дар data.tableдар дохили pandas функсия барои пайваст кардани ҷадвалҳо истифода мешавад merge().

Аргументҳои функсияи merge() дар пандаҳо

  • чӣ тавр — Навъи пайвастшавӣ: чап, рост, берунӣ, дарунӣ
  • on — Сутуне, ки калид аст, агар он дар ҳарду ҷадвал як ном дошта бошад
  • left_on, right_on — Номҳои сутунҳои калидӣ, агар онҳо дар ҷадвал номҳои гуногун дошта бошанд

Ҷадвали уфуқӣ дар Python пайваст мешавад: pandas

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

Функсияҳои асосии тиреза ва сутунҳои ҳисобшуда

Функсияҳои равзана аз ҷиҳати маъно ба функсияҳои ҷамъкунӣ монанданд ва инчунин аксар вақт дар таҳлили додаҳо истифода мешаванд. Аммо бар хилофи функсияҳои ҷамъкунӣ, функсияҳои равзана шумораи сатрҳои чаҳорчӯбаи додаҳои содиротро тағир намедиҳанд.

Кадом забонро барои кор бо додаҳо интихоб кардан мумкин аст - R ё Python? Ҳарду! Муҳоҷират аз пандаҳо ба tidyverse ва data.table ва бозгашт

Аслан, бо истифода аз функсияи равзана, мо чаҳорчӯбаи додаҳои воридшударо мувофиқи баъзе меъёрҳо ба қисмҳо тақсим мекунем, яъне. аз рӯи арзиши майдон ё якчанд майдонҳо. Ва мо дар ҳар як тиреза амалҳои арифметикиро иҷро мекунем. Натиҷаи ин амалҳо дар ҳар як сатр баргардонида мешавад, яъне. бидуни тағир додани шумораи умумии сатрҳои ҷадвал.

Масалан, ҷадвалро мегирем Титаник. Мо метавонем ҳисоб кунем, ки арзиши ҳар як чипта дар дохили синфи кабина чанд фоиз буд.

Барои ин ба мо лозим аст, ки дар ҳар як сатр арзиши умумии билети синфи ҷории кабинаро гирем, ки билети ин сатр ба он тааллуқ дорад, пас арзиши ҳар як чиптаро ба арзиши умумии ҳамаи чиптаҳои ҳамон класси кабина тақсим кунем. .

Функсияҳои Тиреза дар 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: data.table

Алгоритм ҳалли ҳамон тавре боқӣ мемонад dplyr, мо бояд ҷадвалро ба тирезаҳо аз рӯи майдон тақсим кунем Синфи компютер. Дар сутуни нав маблағи гурӯҳи ба ҳар як сатр мувофиқро бароред ва сутунеро илова кунед, ки дар он мо ҳиссаи арзиши ҳар як чиптаро дар гурӯҳи он ҳисоб мекунем.

Барои илова кардани сутунҳои нав ба data.table оператор ҳозир аст :=. Дар зер намунаи ҳалли мушкилот бо истифодаи баста оварда шудааст data.table

Функсияҳои тиреза дар R: data.table

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

Функсияҳои тиреза дар Python: pandas

Як роҳи илова кардани сутуни нав ба pandas - функсияро истифода баред assign(). Барои ҷамъбасти арзиши чиптаҳо аз рӯи синфи кабина, бидуни гурӯҳбандии сатрҳо, мо функсияро истифода мебарем transform().

Дар зер намунаи ҳалли он аст, ки мо ба ҷадвал илова мекунем Титаник ҳамон 2 сутун.

Функсияҳои тиреза дар Python: pandas

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 и телеграмма каналхо.

Poll

Кадоме аз бастаҳои зеринро шумо дар кори худ истифода мебаред?

Дар шарҳҳо шумо метавонед сабаби интихоби худро нависед.

Танҳо корбарони сабтиномшуда метавонанд дар пурсиш иштирок кунанд. даромад, Лутфан.

Кадом бастаи коркарди маълумотро истифода мебаред (шумо метавонед якчанд вариантро интихоб кунед)

  • 45,2%озода 19

  • 33,3%маълумот.ҷадвали 14

  • 54,8%панда 23

42 корбар овоз доданд. 9 корбар худдорӣ карданд.

Манбаъ: will.com

Илова Эзоҳ