Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Trwy chwilio am R neu Python ar y Rhyngrwyd, fe welwch filiynau o erthyglau a chilometrau o drafodaethau ar y pwnc sy'n well, yn gyflymach ac yn fwy cyfleus ar gyfer gweithio gyda data. Ond yn anffodus, nid yw'r holl erthyglau ac anghydfodau hyn yn arbennig o ddefnyddiol.

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Pwrpas yr erthygl hon yw cymharu'r technegau prosesu data sylfaenol yn y pecynnau mwyaf poblogaidd yn y ddwy iaith. A helpwch ddarllenwyr i feistroli rhywbeth nad ydyn nhw'n ei wybod eto yn gyflym. I'r rhai sy'n ysgrifennu yn Python, darganfyddwch sut i wneud yr un peth yn R, ac i'r gwrthwyneb.

Yn ystod yr erthygl byddwn yn dadansoddi cystrawen y pecynnau mwyaf poblogaidd yn R. Dyma'r pecynnau sydd wedi'u cynnwys yn y llyfrgell tidyversea hefyd y pecyn data.table. A chymharer eu cystrawen â pandas, y pecyn dadansoddi data mwyaf poblogaidd yn Python.

Byddwn yn mynd gam wrth gam trwy'r llwybr cyfan o ddadansoddi data o'i lwytho i gyflawni swyddogaethau ffenestr dadansoddol gan ddefnyddio Python ac R.

Cynnwys

Gellir defnyddio'r erthygl hon fel taflen dwyllo os ydych wedi anghofio sut i berfformio rhywfaint o weithrediad prosesu data yn un o'r pecynnau dan sylw.

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

  1. Prif wahaniaethau cystrawen rhwng R a Python
    1.1. Cyrchu Swyddogaethau Pecyn
    1.2. Aseiniad
    1.3. Mynegeio
    1.4. Dulliau a OOP
    1.5. Piblinellau
    1.6. Strwythurau Data
  2. Ychydig eiriau am y pecynnau y byddwn yn eu defnyddio
    2.1. taclus
    2.2. data.tabl
    2.3. pandas
  3. Gosod pecynnau
  4. Llwytho Data
  5. Creu fframiau data
  6. Dewis y Colofnau Sydd Ei Angen
  7. Hidlo rhesi
  8. Grwpio a Chydgrynhoi
  9. Uniad fertigol y tablau (UNDEB)
  10. Uniad llorweddol y byrddau (YMUNWCH)
  11. Swyddogaethau ffenestr sylfaenol a cholofnau wedi'u cyfrifo
  12. Tabl gohebiaeth rhwng dulliau prosesu data yn R a Python
  13. Casgliad
  14. Arolwg byr am ba becyn rydych chi'n ei ddefnyddio

Os oes gennych ddiddordeb mewn dadansoddi data, efallai y byddwch yn dod o hyd i fy telegram и youtube sianeli. Mae'r rhan fwyaf o'r cynnwys wedi'i neilltuo i'r iaith R.

Prif wahaniaethau cystrawen rhwng R a Python

Er mwyn ei gwneud hi'n haws i chi newid o Python i R, neu i'r gwrthwyneb, rhoddaf ychydig o brif bwyntiau y mae angen ichi roi sylw iddynt.

Cyrchu Swyddogaethau Pecyn

Unwaith y bydd pecyn wedi'i lwytho i R, nid oes angen i chi nodi enw'r pecyn i gael mynediad at ei swyddogaethau. Yn y rhan fwyaf o achosion nid yw hyn yn gyffredin yn R, ond mae'n dderbyniol. Nid oes rhaid i chi fewnforio pecyn o gwbl os oes angen un o'i swyddogaethau yn eich cod arnoch chi, ond ffoniwch ef trwy nodi enw'r pecyn ac enw'r swyddogaeth. Mae'r gwahanydd rhwng enwau pecyn a ffwythiannau yn R yn colon dwbl. package_name::function_name().

Yn Python, i'r gwrthwyneb, fe'i hystyrir yn glasurol i alw swyddogaethau pecyn trwy nodi ei enw yn benodol. Pan fydd pecyn yn cael ei lawrlwytho, fel arfer rhoddir enw byrrach iddo, e.e. pandas fel arfer defnyddir ffugenw pd. Gellir cyrchu swyddogaeth pecyn trwy ddot package_name.function_name().

Aseiniad

Yn R, mae'n gyffredin defnyddio saeth i aseinio gwerth i wrthrych. obj_name <- value, er y caniateir arwydd hafal sengl, defnyddir yr arwydd hafal sengl yn R yn bennaf i basio gwerthoedd i ddadleuon swyddogaeth.

Yn Python, gwneir aseiniad gydag un arwydd hafal yn unig obj_name = value.

Mynegeio

Mae gwahaniaethau eithaf sylweddol yma hefyd. Yn R, mae mynegeio yn dechrau ar un ac yn cynnwys yr holl elfennau penodedig yn yr amrediad canlyniadol,

Yn Python, mae mynegeio yn dechrau o sero ac nid yw'r ystod a ddewiswyd yn cynnwys yr elfen olaf a nodir yn y mynegai. Felly dylunio x[i:j] yn Python ni fydd yn cynnwys yr elfen j.

Mae gwahaniaethau hefyd mewn mynegeio negyddol, mewn nodiant R x[-1] yn dychwelyd holl elfennau'r fector ac eithrio'r un olaf. Yn Python, bydd nodiant tebyg yn dychwelyd yr elfen olaf yn unig.

Dulliau a OOP

Mae R yn gweithredu OOP yn ei ffordd ei hun, ysgrifennais am hyn yn yr erthygl "OOP yn yr iaith R (rhan 1): dosbarthiadau S3". Yn gyffredinol, mae R yn iaith swyddogaethol, ac mae popeth ynddi wedi'i adeiladu ar swyddogaethau. Felly, er enghraifft, ar gyfer defnyddwyr Excel, ewch i tydiverse bydd yn haws na pandas. Er efallai mai dyma fy marn oddrychol.

Yn fyr, nid oes gan wrthrychau yn R ddulliau (os ydym yn siarad am ddosbarthiadau S3, ond mae yna weithrediadau OOP eraill sy'n llawer llai cyffredin). Dim ond swyddogaethau cyffredinol sy'n eu prosesu'n wahanol yn dibynnu ar ddosbarth y gwrthrych.

Piblinellau

Efallai mai dyma'r enw ar pandas Ni fydd yn hollol gywir, ond byddaf yn ceisio egluro'r ystyr.

Er mwyn peidio ag arbed cyfrifiadau canolradd ac i beidio â chynhyrchu gwrthrychau diangen yn yr amgylchedd gwaith, gallwch ddefnyddio math o biblinell. Y rhai. pasio canlyniad cyfrifiad o un swyddogaeth i'r llall, a pheidiwch ag arbed canlyniadau canolradd.

Gadewch i ni gymryd yr enghraifft cod canlynol, lle rydym yn storio cyfrifiadau canolradd mewn gwrthrychau ar wahân:

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

Fe wnaethom berfformio 3 llawdriniaeth ddilyniannol, a chafodd canlyniad pob un ei arbed mewn gwrthrych ar wahân. Ond mewn gwirionedd, nid oes angen y gwrthrychau canolraddol hyn arnom.

Neu hyd yn oed yn waeth, ond yn fwy cyfarwydd i ddefnyddwyr Excel.

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

Yn yr achos hwn, ni wnaethom arbed canlyniadau cyfrifo canolradd, ond mae darllen cod gyda swyddogaethau nythu yn hynod anghyfleus.

Byddwn yn edrych ar sawl dull o brosesu data yn R, ac maent yn perfformio gweithrediadau tebyg mewn gwahanol ffyrdd.

Piblinellau yn y llyfrgell tidyverse gweithredu gan y gweithredwr %>%.

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

Felly rydym yn cymryd canlyniad y gwaith func1() a'i basio fel y ddadl gyntaf i func2(), yna rydym yn pasio canlyniad y cyfrifiad hwn fel y ddadl gyntaf func3(). Ac yn y diwedd, rydym yn ysgrifennu'r holl gyfrifiadau a gyflawnir yn y gwrthrych obj <-.

Mae pob un o'r uchod wedi'i ddarlunio'n well na geiriau gan y meme hwn:
Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

В data.table defnyddir cadwyni mewn ffordd debyg.

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

Ym mhob un o'r cromfachau sgwâr gallwch ddefnyddio canlyniad y llawdriniaeth flaenorol.

В pandas mae gweithrediadau o'r fath yn cael eu gwahanu gan ddot.

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

Y rhai. cymerwn ein bwrdd df a defnyddio ei dull fun1(), yna rydym yn cymhwyso'r dull i'r canlyniad a gafwyd fun2()ar ôl fun3(). Mae'r canlyniad canlyniadol yn cael ei gadw i mewn i wrthrych Amc .

Strwythurau Data

Mae strwythurau data yn R a Python yn debyg, ond mae ganddyn nhw enwau gwahanol.

Disgrifiad
Enw yn R
Enw yn Python/pandas

Strwythur tabl
data.frame, data.table, tibble
Ffram Data

Rhestr un dimensiwn o werthoedd
Fector
Cyfres mewn pandas neu restr mewn Python pur

Strwythur aml-lefel nad yw'n dabl
Rhestr
geiriadur (dict)

Byddwn yn edrych ar rai nodweddion a gwahaniaethau eraill mewn cystrawen isod.

Ychydig eiriau am y pecynnau y byddwn yn eu defnyddio

Yn gyntaf, dywedaf ychydig wrthych am y pecynnau y byddwch chi'n dod yn gyfarwydd â nhw yn ystod yr erthygl hon.

taclus

Официальный сайт: tidyverse.org
Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl
Llyfrgell tidyverse ysgrifennwyd gan Hedley Wickham, Uwch Wyddonydd Ymchwil yn RStudio. tidyverse yn cynnwys set drawiadol o becynnau sy'n symleiddio prosesu data, y mae 5 ohonynt wedi'u cynnwys yn y 10 lawrlwythiad uchaf o ystorfa CRAN.

Mae craidd y llyfrgell yn cynnwys y pecynnau canlynol: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Mae pob un o'r pecynnau hyn wedi'u hanelu at ddatrys problem benodol. Er enghraifft dplyr creu ar gyfer trin data, tidyr i ddod â'r data i ffurf daclus, stringr yn symleiddio gweithio gyda llinynnau, a ggplot2 yw un o'r offer delweddu data mwyaf poblogaidd.

Y fantais tidyverse yw'r symlrwydd a'r gystrawen hawdd ei darllen, sydd mewn sawl ffordd yn debyg i iaith ymholiad SQL.

data.tabl

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôlОфициальный сайт: r-datatable.com

Awdur data.table yw Matt Dole o H2O.ai.

Rhyddhawyd y llyfrgell gyntaf yn 2006.

Nid yw cystrawen y pecyn mor gyfleus ag yn tidyverse ac mae'n fwy atgoffaol o fframiau data clasurol yn R, ond ar yr un pryd wedi ehangu'n sylweddol o ran ymarferoldeb.

Mae pob manipulations gyda'r tabl yn y pecyn hwn yn cael eu disgrifio mewn cromfachau sgwâr, ac os ydych yn cyfieithu y gystrawen data.table yn SQL, rydych chi'n cael rhywbeth fel hyn: data.table[ WHERE, SELECT, GROUP BY ]

Cryfder y pecyn hwn yw cyflymder prosesu llawer iawn o ddata.

pandas

Официальный сайт: pandas.pydata.org Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Daw enw’r llyfrgell o’r term econometrig “data panel”, a ddefnyddir i ddisgrifio setiau strwythuredig aml-ddimensiwn o wybodaeth.

Awdur pandas yw American Wes McKinney.

O ran dadansoddi data yn Python, cyfartal pandas Nac ydw. Pecyn amlswyddogaethol, lefel uchel iawn sy'n eich galluogi i berfformio unrhyw drin â data, o lwytho data o unrhyw ffynonellau i'w ddelweddu.

Gosod pecynnau ychwanegol

Nid yw'r pecynnau a drafodir yn yr erthygl hon wedi'u cynnwys yn y dosbarthiadau sylfaenol R a Python. Er bod cafeat bach, os ydych chi wedi gosod y dosbarthiad Anaconda, yna gosodwch hefyd pandas Nid oes angen.

Gosod pecynnau yn R

Os ydych wedi agor yr amgylchedd datblygu RStudio o leiaf unwaith, mae'n debyg eich bod eisoes yn gwybod sut i osod y pecyn gofynnol yn R. I osod pecynnau, defnyddiwch y gorchymyn safonol install.packages() trwy ei redeg yn uniongyrchol yn R ei hun.

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

Ar ôl eu gosod, mae angen cysylltu'r pecynnau, ac yn y rhan fwyaf o achosion defnyddir y gorchymyn library().

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

Gosod pecynnau yn Python

Felly, os oes gennych Python pur wedi'i osod, yna pandas mae angen i chi ei osod â llaw. Agorwch linell orchymyn, neu derfynell, yn dibynnu ar eich system weithredu a nodwch y gorchymyn canlynol.

pip install pandas

Yna byddwn yn dychwelyd i Python ac yn mewnforio'r pecyn gosod gyda'r gorchymyn import.

import pandas as pd

Llwytho Data

Cloddio data yw un o'r camau pwysicaf wrth ddadansoddi data. Mae Python ac R, os dymunir, yn rhoi cyfleoedd helaeth i chi gael data o unrhyw ffynonellau: ffeiliau lleol, ffeiliau o'r Rhyngrwyd, gwefannau, pob math o gronfeydd data.

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Drwy gydol yr erthygl byddwn yn defnyddio sawl set ddata:

  1. Dau lawrlwythiad o Google Analytics.
  2. Set Ddata Teithwyr Titanic.

Mae'r holl ddata ar fy GitHub ar ffurf ffeiliau csv a tsv. O ble byddwn ni'n gofyn amdanyn nhw?

Llwytho data i R: taclus, vroom, darllenydd

I lwytho data i lyfrgell tidyverse Mae dau becyn: vroom, readr. vroom mwy modern, ond yn y dyfodol efallai y bydd y pecynnau yn cael eu cyfuno.

Dyfyniad gan dogfennaeth swyddogol vroom.

vroom vs darllenydd
Beth mae rhyddhau vroom golygu ar gyfer readr? Am y tro rydym yn bwriadu gadael i'r ddau becyn esblygu ar wahân, ond mae'n debygol y byddwn yn uno'r pecynnau yn y dyfodol. Un anfantais i ddarlleniad diog vroom yw na ellir rhoi gwybod am rai problemau data ymlaen llaw, felly mae angen meddwl am y ffordd orau o'u huno.

vroom vs darllenydd
Beth mae rhyddhau yn ei olygu? vroom gyfer readr? Ar hyn o bryd rydym yn bwriadu datblygu'r ddau becyn ar wahân, ond mae'n debyg y byddwn yn eu cyfuno yn y dyfodol. Un o anfanteision darllen diog vroom yw na ellir adrodd rhai problemau gyda'r data ymlaen llaw, felly mae angen i chi feddwl am y ffordd orau i'w cyfuno.

Yn yr erthygl hon byddwn yn edrych ar y ddau becyn llwytho data:

Llwytho data i becyn 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")

Llwytho data i R: darllenydd

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

Yn y pecyn vroom, waeth beth fo'r fformat data csv / tsv, mae llwytho yn cael ei gyflawni gan swyddogaeth yr un enw vroom(), yn y pecyn readr rydym yn defnyddio swyddogaeth wahanol ar gyfer pob fformat read_tsv() и read_csv().

Llwytho data i R: data.table

В data.table mae swyddogaeth ar gyfer llwytho data fread().

Llwytho data i mewn i becyn 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")

Llwytho data yn Python: pandas

Os byddwn yn cymharu â phecynnau R, yna yn yr achos hwn y gystrawen sydd agosaf ato pandas Bydd readr, achos pandas yn gallu gofyn am ddata o unrhyw le, ac mae teulu cyfan o swyddogaethau yn y pecyn hwn read_*().

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

A llawer o swyddogaethau eraill wedi'u cynllunio i ddarllen data o fformatau amrywiol. Ond i'n dybenion ni y mae yn ddigon read_table() neu read_csv() defnyddio dadl Medi i nodi'r gwahanydd colofn.

Llwytho data yn 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")

Creu fframiau data

Bwrdd Titanic, yr ydym yn llwytho, mae maes rhyw, sy'n storio dynodwr rhyw y teithiwr.

Ond ar gyfer cyflwyniad mwy cyfleus o ddata o ran rhyw teithwyr, dylech ddefnyddio'r enw yn hytrach na'r cod rhyw.

I wneud hyn, byddwn yn creu cyfeiriadur bach, tabl lle bydd dim ond 2 golofn (cod ac enw rhyw) a 2 res, yn y drefn honno.

Creu ffrâm data yn R: tidyverse, dplyr

Yn yr enghraifft cod isod, rydym yn creu'r ffrâm ddata a ddymunir gan ddefnyddio'r swyddogaeth tibble() .

Creu ffrâm data yn R:dplyr

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

Creu ffrâm ddata yn R: data.table

Creu ffrâm ddata yn R: data.table

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

Creu ffrâm ddata yn Python: pandas

В pandas Mae creu fframiau yn cael ei wneud mewn sawl cam, yn gyntaf rydym yn creu geiriadur, ac yna rydym yn trosi'r geiriadur yn ffrâm ddata.

Creu ffrâm ddata yn Python: pandas

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

Dewis Colofnau

Gall y tablau rydych chi'n gweithio gyda nhw gynnwys dwsinau neu hyd yn oed gannoedd o golofnau o ddata. Ond i wneud dadansoddiad, fel rheol, nid oes angen yr holl golofnau sydd ar gael yn y tabl ffynhonnell.

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Felly, un o'r gweithrediadau cyntaf y byddwch chi'n ei berfformio gyda'r tabl ffynhonnell yw ei glirio o wybodaeth ddiangen a rhyddhau'r cof y mae'r wybodaeth hon yn ei feddiannu.

Dewis colofnau yn R: tidyverse, dplyr

cystrawen dplyr yn debyg iawn i iaith ymholiad SQL, os ydych chi'n gyfarwydd ag ef byddwch yn meistroli'r pecyn hwn yn gyflym.

I ddewis colofnau, defnyddiwch y swyddogaeth select().

Isod mae enghreifftiau o god y gallwch chi ddewis colofnau yn y ffyrdd canlynol:

  • Rhestru enwau'r colofnau gofynnol
  • Cyfeiriwch at enwau colofnau gan ddefnyddio mynegiadau rheolaidd
  • Yn ôl math o ddata neu unrhyw briodwedd arall o'r data a gynhwysir yn y golofn

Dewis colofnau yn 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)

Dewis colofnau yn R: data.table

Yr un gweithrediadau yn data.table yn cael eu perfformio ychydig yn wahanol, ar ddechrau'r erthygl rhoddais ddisgrifiad o ba ddadleuon sydd y tu mewn i gromfachau sgwâr data.table.

DT[i,j,by]

Ble:
i - lle, h.y. hidlo fesul rhesi
j - dewiswch|diweddaru|gwneud, h.y. dewis colofnau a'u trosi
gan - grwpio data

Dewis colofnau yn 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$")]

Amrywiol .SD yn eich galluogi i gyrchu pob colofn, a .SDcols hidlo'r colofnau gofynnol gan ddefnyddio mynegiadau rheolaidd, neu swyddogaethau eraill i hidlo enwau'r colofnau sydd eu hangen arnoch.

Dewis colofnau yn Python, pandas

I ddewis colofnau yn ôl enw yn pandas digon yw darparu rhestr o'u henwau. Ac i ddewis neu eithrio colofnau yn ôl enw gan ddefnyddio ymadroddion rheolaidd, mae angen i chi ddefnyddio'r swyddogaethau drop() и filter(), a dadl echel=1, yr ydych yn nodi bod angen prosesu colofnau yn hytrach na rhesi.

I ddewis maes yn ôl math o ddata, defnyddiwch y ffwythiant select_dtypes(), ac i mewn i ddadleuon gynnwys neu eithrio pasiwch restr o fathau o ddata sy'n cyfateb i ba feysydd y mae angen i chi eu dewis.

Dewis colofnau yn 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'])

Hidlo rhesi

Er enghraifft, efallai y bydd y tabl ffynhonnell yn cynnwys sawl blwyddyn o ddata, ond dim ond y mis diwethaf y mae angen i chi ei ddadansoddi. Unwaith eto, bydd llinellau ychwanegol yn arafu'r broses prosesu data ac yn rhwystro cof y PC.

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Hidlo rhesi yn R: tydyverse, dplyr

В dplyr defnyddir y swyddogaeth i hidlo rhesi filter(). Mae'n cymryd ffrâm data fel y ddadl gyntaf, yna rydych chi'n rhestru'r amodau hidlo.

Wrth ysgrifennu ymadroddion rhesymegol i hidlo tabl, yn yr achos hwn, nodwch enwau'r colofnau heb ddyfyniadau a heb ddatgan enw'r tabl.

Wrth ddefnyddio ymadroddion rhesymegol lluosog i hidlo, defnyddiwch y gweithredwyr canlynol:

  • & neu goma - rhesymegol AC
  • | - rhesymegol NEU

Hidlo rhesi yn R: dplyr

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

Hidlo rhesi yn R: data.table

Fel yr ysgrifenais eisoes uchod, yn data.table amgaeir cystrawen trosi data mewn cromfachau sgwâr.

DT[i,j,by]

Ble:
i - lle, h.y. hidlo fesul rhesi
j - dewiswch|diweddaru|gwneud, h.y. dewis colofnau a'u trosi
gan - grwpio data

Defnyddir y ddadl i hidlo rhesi i, sydd â'r safle cyntaf mewn cromfachau sgwâr.

Ceir mynediad at golofnau mewn ymadroddion rhesymegol heb ddyfynodau a heb nodi enw'r tabl.

Mae ymadroddion rhesymegol yn perthyn i'w gilydd yn yr un modd ag yn dplyr trwy y &a |weithredwyr.

Hidlo rhesi yn R: data.table

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

Hidlo tannau yn Python: pandas

Hidlo fesul rhesi i mewn pandas tebyg i hidlo i mewn data.table, ac fe'i gwneir mewn cromfachau sgwâr.

Yn yr achos hwn, mae mynediad i golofnau yn cael ei wneud o reidrwydd trwy nodi enw'r ffrâm ddata; yna gellir nodi enw'r golofn hefyd mewn dyfynodau mewn cromfachau sgwâr (enghraifft df['col_name']), neu heb ddyfynbrisiau ar ôl y cyfnod (enghraifft df.col_name).

Os oes angen i chi hidlo ffrâm ddata yn ôl nifer o amodau, rhaid gosod pob amod mewn cromfachau. Mae amodau rhesymegol yn gysylltiedig â'i gilydd gan weithredwyr & и |.

Hidlo tannau yn 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)]

Grwpio a chyfuno data

Un o'r gweithrediadau a ddefnyddir amlaf wrth ddadansoddi data yw grwpio a chydgrynhoi.

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Mae'r gystrawen ar gyfer cyflawni'r gweithrediadau hyn wedi'i gwasgaru ar draws yr holl becynnau rydyn ni'n eu hadolygu.

Yn yr achos hwn, byddwn yn cymryd ffrâm ddata fel enghraifft Titanic, a chyfrifwch nifer a chost gyfartalog y tocynnau yn dibynnu ar y dosbarth caban.

Grwpio a chydgasglu data yn R: tidyverse, dplyr

В dplyr defnyddir y swyddogaeth ar gyfer grwpio group_by(), ac ar gyfer agregu summarise(). Yn wir, dplyr mae yna deulu cyfan o swyddogaethau summarise_*(), ond pwrpas yr erthygl hon yw cymharu'r gystrawen sylfaenol, felly ni fyddwn yn mynd i'r jyngl o'r fath.

Swyddogaethau agregu sylfaenol:

  • sum() — crynhoi
  • min() / max() – isafswm ac uchafswm gwerth
  • mean() - cyfartaledd
  • median() - canolrif
  • length() - rhif

Grwpio a chydgasglu yn R:dplyr

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

I weithredu group_by() aethom heibio i'r bwrdd fel y ddadl gyntaf Titanic, ac yna nododd y maes Pdosbarth, wrth yr hwn y byddwn yn grwpio ein bwrdd. Canlyniad y llawdriniaeth hon gan ddefnyddio'r gweithredwr %>% pasio fel y ddadl gyntaf i'r swyddogaeth summarise(), ac ychwanegodd 2 faes arall: teithwyr и cyf_pris. Yn y cyntaf, gan ddefnyddio'r swyddogaeth length() cyfrifo nifer y tocynnau, ac yn yr ail gan ddefnyddio'r swyddogaeth mean() wedi derbyn pris cyfartalog y tocyn.

Grwpio a chyfuno data yn R: data.table

В data.table defnyddir y ddadl ar gyfer agregu j sydd ag ail safle mewn cromfachau sgwâr, ac ar gyfer grwpio by neu keyby, sydd â'r trydydd safle.

Mae'r rhestr o swyddogaethau agregu yn yr achos hwn yn union yr un fath â'r hyn a ddisgrifir yn dplyr, achos mae'r rhain yn swyddogaethau o'r gystrawen R sylfaenol.

Grwpio a chyfuno yn R: data.table

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

Grwpio a chydgasglu data yn Python: pandas

Grwpio i mewn pandas yn debyg i dplyr, ond nid yw yr agregiad yn debyg i dplyr ddim ymlaen data.table.

I grwpio, defnyddiwch y dull groupby(), lle mae angen i chi basio rhestr o golofnau y bydd y ffrâm ddata yn cael ei grwpio yn eu herbyn.

Ar gyfer agregu gallwch ddefnyddio'r dull agg()sy'n derbyn geiriadur. Bysellau'r geiriadur yw'r colofnau y byddwch yn cymhwyso'r swyddogaethau agregu arnynt, a'r gwerthoedd yw enwau'r swyddogaethau agregu.

Swyddogaethau agregu:

  • sum() — crynhoi
  • min() / max() – isafswm ac uchafswm gwerth
  • mean() - cyfartaledd
  • median() - canolrif
  • count() - rhif

Swyddogaeth reset_index() yn yr enghraifft isod fe'i defnyddir i ailosod mynegeion nythu hynny pandas rhagosodiadau i ar ôl cydgasglu data.

Symbol yn caniatáu ichi symud i'r llinell nesaf.

Grwpio a chydgasglu yn Python: pandas

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

Uniad fertigol tablau

Gweithrediad lle rydych chi'n ymuno â dau fwrdd neu fwy o'r un strwythur. Mae'r data a lwythwyd gennym yn cynnwys tablau ga_nov и ga_dec. Mae’r tablau hyn yn union yr un fath o ran strwythur, h.y. cael yr un colofnau, a'r mathau o ddata yn y colofnau hyn.

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Mae hwn yn uwchlwythiad o Google Analytics ar gyfer mis Tachwedd a mis Rhagfyr, yn yr adran hon byddwn yn cyfuno'r data hwn yn un tabl.

Uno tablau'n fertigol yn R: tidyverse, dplyr

В dplyr Gallwch gyfuno 2 dabl yn un gan ddefnyddio'r ffwythiant bind_rows(), pasio tablau fel ei ddadleuon.

Hidlo rhesi yn R: dplyr

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

Uno tablau yn fertigol yn R: data.table

Nid yw ychwaith yn ddim byd cymhleth, gadewch i ni ei ddefnyddio rbind().

Hidlo rhesi yn R: data.table

## data.table
rbind(ga_nov, ga_dec)

Ymuno'n fertigol â thablau yn Python: pandas

В pandas defnyddir y swyddogaeth i uno tablau concat(), y mae angen i chi basio rhestr o fframiau i'w cyfuno.

Hidlo tannau yn Python: pandas

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

Uniad llorweddol y byrddau

Gweithrediad lle mae colofnau o'r ail yn cael eu hychwanegu at y tabl cyntaf fesul allwedd. Fe'i defnyddir yn aml wrth gyfoethogi tabl ffeithiau (er enghraifft, tabl gyda data gwerthiant) gyda rhywfaint o ddata cyfeirio (er enghraifft, cost cynnyrch).

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Mae sawl math o uniadau:

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Yn y tabl a lwythwyd yn flaenorol Titanic mae gennym golofn rhyw, sy'n cyfateb i god rhyw y teithiwr:

1 - benywaidd
2 - gwryw

Hefyd, rydym wedi creu tabl - cyfeirlyfr rhyw. I gael cyflwyniad mwy cyfleus o ddata ar ryw teithwyr, mae angen i ni ychwanegu enw'r rhyw o'r cyfeiriadur rhyw i'r bwrdd Titanic.

Tabl llorweddol yn ymuno yn R: tidyverse, dplyr

В dplyr Mae yna deulu cyfan o swyddogaethau ar gyfer uno llorweddol:

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

Y mwyaf cyffredin a ddefnyddir yn fy ymarfer yw left_join().

Fel y ddwy ddadl gyntaf, mae'r swyddogaethau a restrir uchod yn cymryd dau dabl i ymuno, ac fel y drydedd ddadl by rhaid i chi nodi'r colofnau i ymuno.

Tabl llorweddol yn ymuno yn R: dplyr

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

Uniad llorweddol y tablau yn R: data.table

В data.table Mae angen i chi uno tablau trwy allwedd gan ddefnyddio'r ffwythiant merge().

Mae dadleuon i uno() yn gweithredu yn data.table

  • x, y — Byrddau ar gyfer ymuno
  • by — Colofn sy'n allweddol i ymuno os oes ganddo'r un enw yn y ddau dabl
  • by.x,by.y—Enwau colofnau i'w huno, os bydd ganddynt enwau gwahanol yn y tablau
  • i gyd, all.x, all.y—Ymuno math, bydd pawb yn dychwelyd pob rhes o'r ddau fwrdd, all.x yn cyfateb i'r gweithrediad CHWITH JOIN (bydd yn gadael holl resi y bwrdd cyntaf), all.y—yn cyfateb i'r I'R DDE YMUNO gweithrediad (bydd yn gadael yr holl resi yr ail dabl ).

Uniad llorweddol y tablau yn R: data.table

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

Tabl llorweddol yn ymuno yn Python: pandas

Yn ogystal ag yn data.tableYn pandas defnyddir y swyddogaeth i uno tablau merge().

Dadleuon swyddogaeth uno() mewn pandas

  • sut — Math o gysylltiad: chwith, dde, allanol, mewnol
  • ymlaen — Colofn sy'n allwedd os oes ganddo'r un enw yn y ddau dabl
  • left_on, right_on — Enwau colofnau allweddol, os oes ganddyn nhw enwau gwahanol mewn tablau

Tabl llorweddol yn ymuno yn Python: pandas

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

Swyddogaethau ffenestr sylfaenol a cholofnau wedi'u cyfrifo

Mae swyddogaethau ffenestri yn debyg o ran ystyr i swyddogaethau agregu, ac fe'u defnyddir yn aml hefyd wrth ddadansoddi data. Ond yn wahanol i swyddogaethau agregu, nid yw swyddogaethau ffenestr yn newid nifer y rhesi o'r ffrâm ddata sy'n mynd allan.

Pa iaith i'w dewis ar gyfer gweithio gyda data - R neu Python? Y ddau! Mudo o'r pandas i'r llwybr taclus a data.table ac yn ôl

Yn y bôn, gan ddefnyddio swyddogaeth y ffenestr, rydym yn rhannu'r ffrâm data sy'n dod i mewn yn rhannau yn unol â rhai maen prawf, h.y. gan werth cae, neu sawl maes. Ac rydym yn cynnal gweithrediadau rhifyddeg ar bob ffenestr. Bydd canlyniad y gweithrediadau hyn yn cael ei ddychwelyd ym mhob llinell, h.y. heb newid cyfanswm y rhesi yn y tabl.

Er enghraifft, gadewch i ni gymryd y bwrdd Titanic. Gallwn gyfrifo pa ganran oedd cost pob tocyn o fewn ei ddosbarth caban.

I wneud hyn, mae angen i ni gael ym mhob llinell gyfanswm cost tocyn ar gyfer y dosbarth caban presennol y mae'r tocyn yn y llinell hon yn perthyn iddo, yna rhannwch gost pob tocyn â chyfanswm cost pob tocyn o'r un dosbarth caban. .

Swyddogaethau ffenestr yn R: tidyverse, dplyr

I ychwanegu colofnau newydd, heb ddefnyddio grwpio rhes, i mewn dplyr yn gwasanaethu swyddogaeth mutate().

Gallwch ddatrys y broblem a ddisgrifir uchod trwy grwpio data fesul maes Pdosbarth a chrynhoi y maes mewn colofn newydd Pris. Nesaf, dadgrwpio'r tabl a rhannu'r gwerthoedd maes Pris i'r hyn a ddigwyddodd yn y cam blaenorol.

Swyddogaethau ffenestr yn R: dplyr

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

Ffenestr swyddogaethau yn R: data.table

Mae'r algorithm datrysiad yn aros yr un fath ag yn dplyr, mae angen i ni rannu'r bwrdd yn ffenestri fesul cae Pdosbarth. Allbwn mewn colofn newydd y swm ar gyfer y grŵp sy'n cyfateb i bob rhes, ac ychwanegwch golofn lle rydym yn cyfrifo cyfran cost pob tocyn yn ei grŵp.

I ychwanegu colofnau newydd at data.table gweithredwr yn bresennol :=. Isod mae enghraifft o ddatrys problem gan ddefnyddio'r pecyn data.table

Ffenestr swyddogaethau yn R: data.table

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

Swyddogaethau ffenestr yn Python: pandas

Un ffordd i ychwanegu colofn newydd i pandas - defnyddio'r swyddogaeth assign(). I grynhoi cost tocynnau fesul dosbarth caban, heb grwpio rhesi, byddwn yn defnyddio'r swyddogaeth transform().

Isod mae enghraifft o ddatrysiad yr ydym yn ei ychwanegu at y tabl Titanic yr un 2 golofn.

Swyddogaethau ffenestr yn Python: pandas

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

Tabl gohebiaeth swyddogaethau a dulliau

Isod mae tabl o ohebiaeth rhwng dulliau o gyflawni gweithrediadau amrywiol gyda data yn y pecynnau yr ydym wedi'u hystyried.

Disgrifiad
taclus
data.tabl
pandas

Llwytho Data
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Creu fframiau data
tibble()
data.table()
dict() + from_dict()

Dewis Colofnau
select()
dadl j, ail safle mewn cromfachau sgwâr
rydym yn pasio'r rhestr o golofnau gofynnol mewn cromfachau sgwâr / drop() / filter() / select_dtypes()

Hidlo rhesi
filter()
dadl i, safle cyntaf mewn cromfachau sgwâr
Rydym yn rhestru'r amodau hidlo mewn cromfachau sgwâr / filter()

Grwpio a Chydgrynhoi
group_by() + summarise()
y dadleuon j + by
groupby() + agg()

Uniad fertigol y tablau (UNDEB)
bind_rows()
rbind()
concat()

Uniad llorweddol y byrddau (YMUNWCH)
left_join() / *_join()
merge()
merge()

Swyddogaethau ffenestr sylfaenol ac ychwanegu colofnau wedi'u cyfrifo
group_by() + mutate()
dadl j defnyddio'r gweithredwr := + dadl by
transform() + assign()

Casgliad

Efallai yn yr erthygl ni ddisgrifiais y gweithrediadau prosesu data mwyaf optimaidd, felly byddaf yn falch os byddwch yn cywiro fy nghamgymeriadau yn y sylwadau, neu'n ategu'r wybodaeth a roddir yn yr erthygl â thechnegau eraill ar gyfer gweithio gyda data yn R / Python.

Fel yr ysgrifennais uchod, nid gosod barn ar ba iaith sydd orau oedd pwrpas yr erthygl, ond yn hytrach symleiddio’r cyfle i ddysgu’r ddwy iaith, neu, os oes angen, ymfudo rhyngddynt.

Os oeddech chi'n hoffi'r erthygl, byddaf yn falch o gael tanysgrifwyr newydd i fy youtube и telegram sianeli.

Cyfweliad

Pa rai o'r pecynnau canlynol ydych chi'n eu defnyddio yn eich gwaith?

Yn y sylwadau gallwch chi ysgrifennu'r rheswm dros eich dewis.

Dim ond defnyddwyr cofrestredig all gymryd rhan yn yr arolwg. Mewngofnodios gwelwch yn dda.

Pa becyn prosesu data ydych chi'n ei ddefnyddio (gallwch ddewis sawl opsiwn)

  • 45,2%taclus19

  • 33,3%data.tabl14

  • 54,8%pandas23

Pleidleisiodd 42 o ddefnyddwyr. Ymataliodd 9 o ddefnyddwyr.

Ffynhonnell: hab.com

Ychwanegu sylw