Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Kwa kutafuta R au Python kwenye mtandao, utapata mamilioni ya makala na kilomita za majadiliano juu ya mada ambayo ni bora, haraka na rahisi zaidi kwa kufanya kazi na data. Lakini kwa bahati mbaya, nakala hizi zote na mabishano sio muhimu sana.

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Madhumuni ya kifungu hiki ni kulinganisha mbinu za msingi za usindikaji wa data katika vifurushi maarufu vya lugha zote mbili. Na uwasaidie wasomaji kufahamu kwa haraka jambo ambalo bado hawajui. Kwa wale wanaoandika katika Python, tafuta jinsi ya kufanya kitu kimoja katika R, na kinyume chake.

Wakati wa kifungu tutachambua syntax ya vifurushi maarufu zaidi katika R. Hizi ni vifurushi vilivyojumuishwa kwenye maktaba. tidyversena pia kifurushi data.table. Na kulinganisha syntax yao na pandas, kifurushi maarufu cha uchambuzi wa data huko Python.

Tutaenda hatua kwa hatua kupitia njia nzima ya uchanganuzi wa data kutoka kwa kuipakia hadi kufanya kazi za uchambuzi wa dirisha kwa kutumia Python na R.

yaliyomo

Nakala hii inaweza kutumika kama karatasi ya kudanganya ikiwa umesahau jinsi ya kufanya operesheni fulani ya usindikaji wa data katika moja ya vifurushi vinavyozingatiwa.

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

  1. Tofauti kuu za syntax kati ya R na Python
    1.1. Kufikia Kazi za Kifurushi
    1.2. Mgawo
    1.3. Indexing
    1.4. Mbinu na OOP
    1.5. Mabomba
    1.6. Miundo ya data
  2. Maneno machache kuhusu vifurushi tutakavyotumia
    2.1. safi
    2.2. data.meza
    2.3. pandas
  3. Kufunga vifurushi
  4. Inapakia Data
  5. Kuunda muafaka wa data
  6. Kuchagua Safu Wima Unazohitaji
  7. Kuchuja safu
  8. Kuweka vikundi na kujumlisha
  9. Muungano wima wa majedwali (MUUNGANO)
  10. Uunganisho wa majedwali mlalo (JIUNGE)
  11. Kazi za msingi za dirisha na safu wima zilizohesabiwa
  12. Jedwali la mawasiliano kati ya njia za usindikaji wa data katika R na Python
  13. Hitimisho
  14. Utafiti mfupi kuhusu kifurushi unachotumia

Ikiwa una nia ya uchambuzi wa data, unaweza kupata yangu telegram и youtube njia. Maudhui mengi yamejitolea kwa lugha ya R.

Tofauti kuu za syntax kati ya R na Python

Ili iwe rahisi kwako kubadili kutoka Python hadi R, au kinyume chake, nitatoa pointi kuu chache ambazo unahitaji kulipa kipaumbele.

Kufikia Kazi za Kifurushi

Mara tu kifurushi kikipakiwa kwenye R, hauitaji kutaja jina la kifurushi ili kufikia kazi zake. Katika hali nyingi hii si ya kawaida katika R, lakini inakubalika. Sio lazima kuagiza kifurushi kabisa ikiwa unahitaji moja ya kazi zake kwenye nambari yako, lakini iite tu kwa kutaja jina la kifurushi na jina la kazi. Kitenganishi kati ya kifurushi na majina ya kazi katika R ni koloni mbili. package_name::function_name().

Katika Python, kinyume chake, inachukuliwa kuwa ya kawaida kuita kazi za kifurushi kwa kutaja jina lake wazi. Kifurushi kinapopakuliwa, kwa kawaida hupewa jina fupi, k.m. pandas kwa kawaida jina bandia hutumiwa pd. Kitendaji cha kifurushi kinapatikana kupitia nukta package_name.function_name().

Mgawo

Katika R, ni kawaida kutumia mshale kugawa thamani kwa kitu. obj_name <- value, ingawa ishara moja ya usawa inaruhusiwa, ishara moja ya usawa katika R hutumiwa hasa kupitisha thamani kwa hoja za utendakazi.

Katika Python, mgawo unafanywa peke na ishara moja ya usawa obj_name = value.

Indexing

Pia kuna tofauti kubwa sana hapa. Katika R, kuorodhesha huanza saa moja na kujumuisha vitu vyote vilivyoainishwa katika safu inayotokana,

Kwenye Python, kuorodhesha huanza kutoka sifuri na safu iliyochaguliwa haijumuishi kipengee cha mwisho kilichoainishwa kwenye faharisi. Hivyo kubuni x[i:j] katika Python haitajumuisha kipengele cha j.

Pia kuna tofauti katika faharasa hasi, katika nukuu ya R x[-1] itarudisha vitu vyote vya vekta isipokuwa ile ya mwisho. Katika Python, nukuu kama hiyo itarudisha kipengee cha mwisho tu.

Mbinu na OOP

R hutumia OOP kwa njia yake mwenyewe, niliandika juu ya hili katika makala "OOP katika lugha ya R (sehemu ya 1): madarasa ya S3". Kwa ujumla, R ni lugha ya kazi, na kila kitu ndani yake kinajengwa juu ya kazi. Kwa hiyo, kwa mfano, kwa watumiaji wa Excel, nenda kwa tydiverse itakuwa rahisi kuliko pandas. Ingawa hii inaweza kuwa maoni yangu ya kibinafsi.

Kwa kifupi, vitu katika R havina njia (ikiwa tunazungumza juu ya madarasa ya S3, lakini kuna utekelezaji mwingine wa OOP ambao sio kawaida sana). Kuna kazi za jumla tu ambazo huzichakata tofauti kulingana na darasa la kitu.

Mabomba

Labda hili ndilo jina la pandas Haitakuwa sahihi kabisa, lakini nitajaribu kuelezea maana.

Ili si kuokoa mahesabu ya kati na si kuzalisha vitu visivyohitajika katika mazingira ya kazi, unaweza kutumia aina ya bomba. Wale. kupitisha matokeo ya hesabu kutoka kazi moja hadi nyingine, na usihifadhi matokeo ya kati.

Wacha tuchukue mfano wa nambari ifuatayo, ambapo tunahifadhi mahesabu ya kati katika vitu tofauti:

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

Tulifanya shughuli 3 kwa mlolongo, na matokeo ya kila moja yalihifadhiwa katika kitu tofauti. Lakini kwa kweli, hatuhitaji vitu hivi vya kati.

Au mbaya zaidi, lakini inajulikana zaidi kwa watumiaji wa Excel.

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

Katika kesi hii, hatukuhifadhi matokeo ya hesabu ya kati, lakini nambari ya kusoma iliyo na vitendaji vilivyowekwa ni ngumu sana.

Tutaangalia mbinu kadhaa za usindikaji wa data katika R, na hufanya shughuli zinazofanana kwa njia tofauti.

Mabomba kwenye maktaba tidyverse kutekelezwa na mwendeshaji %>%.

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

Kwa hivyo tunachukua matokeo ya kazi func1() na kuipitisha kama hoja ya kwanza kwa func2(), kisha tunapitisha matokeo ya hesabu hii kama hoja ya kwanza func3(). Na mwisho, tunaandika mahesabu yote yaliyofanywa kwenye kitu obj <-.

Yote haya hapo juu yameonyeshwa bora kuliko maneno na meme hii:
Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

В data.table minyororo hutumiwa kwa njia sawa.

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

Katika kila mabano ya mraba unaweza kutumia matokeo ya operesheni ya awali.

В pandas shughuli kama hizo hutenganishwa na nukta.

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

Wale. tunachukua meza yetu df na kutumia mbinu yake fun1(), basi tunatumia njia kwa matokeo yaliyopatikana fun2()baada ya fun3(). Matokeo yanayotokana yanahifadhiwa kwenye kitu kitu .

Miundo ya data

Miundo ya data katika R na Python ni sawa, lakini ina majina tofauti.

Description
Jina katika R
Jina katika Python/pandas

Muundo wa meza
data.frame, data.meza, tibble
DataFrame

Orodha ya maadili yenye mwelekeo mmoja
Vector
Mfululizo katika pandas au orodha katika Python safi

Muundo wa ngazi nyingi usio wa jedwali
Orodha
Kamusi (dict)

Tutaangalia vipengele vingine na tofauti za syntax hapa chini.

Maneno machache kuhusu vifurushi tutakavyotumia

Kwanza, nitakuambia kidogo juu ya vifurushi ambavyo utafahamu wakati wa nakala hii.

safi

Официальный сайт: tidyverse.org
Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi
maktaba tidyverse iliyoandikwa na Hedley Wickham, Mwanasayansi Mwandamizi wa Utafiti katika RStudio. tidyverse inajumuisha seti ya kuvutia ya vifurushi vinavyorahisisha uchakataji wa data, 5 kati ya hizo zimejumuishwa katika vipakuliwa 10 bora kutoka kwa hazina ya CRAN.

Msingi wa maktaba ni pamoja na vifurushi vifuatavyo: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Kila moja ya vifurushi hivi inalenga kutatua tatizo fulani. Kwa mfano dplyr iliyoundwa kwa ajili ya kuchezea data, tidyr kuleta data katika fomu safi, stringr hurahisisha kufanya kazi na kamba, na ggplot2 ni mojawapo ya zana maarufu za taswira ya data.

faida tidyverse ni usahili na rahisi kusoma sintaksia, ambayo kwa njia nyingi inafanana na lugha ya uulizaji ya SQL.

data.meza

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudiОфициальный сайт: r-datatable.com

Na data.table ni Matt Dole wa H2O.ai.

Toleo la kwanza la maktaba lilifanyika mnamo 2006.

Sintaksia ya kifurushi si rahisi kama in tidyverse na inakumbusha zaidi fremu za data za kawaida katika R, lakini wakati huo huo zimepanuliwa kwa kiasi kikubwa katika utendakazi.

Udanganyifu wote ulio na jedwali kwenye kifurushi hiki umeelezewa katika mabano ya mraba, na ikiwa utatafsiri syntax. data.table katika SQL, unapata kitu kama hiki: data.table[ WHERE, SELECT, GROUP BY ]

Nguvu ya mfuko huu ni kasi ya usindikaji wa kiasi kikubwa cha data.

pandas

Официальный сайт: pandas.pydata.org Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Jina la maktaba linatokana na neno la kiuchumi "data ya paneli", linalotumiwa kuelezea seti za habari zenye muundo wa pande nyingi.

Na pandas ni Mmarekani Wes McKinney.

Linapokuja suala la uchambuzi wa data katika Python, sawa pandas Hapana. Kifurushi chenye kazi nyingi, cha kiwango cha juu kinachokuruhusu kufanya upotoshaji wowote na data, kutoka kwa kupakia data kutoka kwa chanzo chochote hadi kuibua.

Kufunga vifurushi vya ziada

Vifurushi vilivyojadiliwa katika nakala hii hazijajumuishwa katika usambazaji wa msingi wa R na Python. Ingawa kuna tahadhari ndogo, ikiwa umesakinisha usambazaji wa Anaconda, kisha usakinishe kwa kuongeza pandas haihitajiki.

Kufunga vifurushi katika R

Ikiwa umefungua mazingira ya maendeleo ya RStudio angalau mara moja, labda tayari unajua jinsi ya kufunga kifurushi kinachohitajika katika R. Ili kufunga vifurushi, tumia amri ya kawaida. install.packages() kwa kuiendesha moja kwa moja katika R yenyewe.

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

Baada ya ufungaji, vifurushi vinahitaji kuunganishwa, ambayo katika hali nyingi amri hutumiwa library().

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

Kufunga vifurushi katika Python

Kwa hivyo, ikiwa una Python safi iliyosanikishwa, basi pandas unahitaji kuiweka kwa mikono. Fungua mstari wa amri, au terminal, kulingana na mfumo wako wa uendeshaji na uingie amri ifuatayo.

pip install pandas

Kisha tunarudi kwa Python na kuagiza kifurushi kilichowekwa na amri import.

import pandas as pd

Inapakia Data

Uchimbaji data ni moja wapo ya hatua muhimu zaidi katika uchanganuzi wa data. Python na R, ikiwa inataka, hukupa fursa nyingi za kupata data kutoka kwa vyanzo vyovyote: faili za ndani, faili kutoka kwa Mtandao, tovuti, kila aina ya hifadhidata.

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Katika makala yote tutatumia hifadhidata kadhaa:

  1. Vipakuliwa viwili kutoka kwa Google Analytics.
  2. Seti ya Data ya Abiria ya Titanic.

Data zote ziko kwenye yangu GitHub kwa namna ya faili za csv na tsv. Tutaziomba kutoka wapi?

Inapakia data katika R: tidyverse, vroom, readr

Ili kupakia data kwenye maktaba tidyverse Kuna vifurushi viwili: vroom, readr. vroom kisasa zaidi, lakini katika siku zijazo vifurushi vinaweza kuunganishwa.

Nukuu kutoka nyaraka rasmi vroom.

vroom dhidi ya msomaji
Kutolewa kwa nini vroom maana kwa readr? Kwa sasa tunapanga kuruhusu vifurushi viwili kubadilika tofauti, lakini kuna uwezekano kwamba tutaunganisha vifurushi katika siku zijazo. Ubaya mmoja wa usomaji wa uvivu wa vroom ni shida fulani za data haziwezi kuripotiwa mbele, kwa hivyo jinsi bora ya kuziunganisha inahitaji mawazo fulani.

vroom dhidi ya msomaji
Kutolewa kunamaanisha nini? vroom kwa readr? Kwa sasa tunapanga kuunda vifurushi vyote viwili tofauti, lakini labda tutavichanganya katika siku zijazo. Moja ya hasara za kusoma kwa uvivu vroom ni kwamba shida zingine na data haziwezi kuripotiwa mapema, kwa hivyo unahitaji kufikiria juu ya jinsi bora ya kuzichanganya.

Katika nakala hii tutaangalia vifurushi vyote viwili vya upakiaji wa data:

Inapakia data kwenye kifurushi cha 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")

Inapakia data katika R: msomaji

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

Katika kifurushi vroom, bila kujali muundo wa data wa csv / tsv, upakiaji unafanywa na kazi ya jina moja vroom(), kwenye kifurushi readr tunatumia kazi tofauti kwa kila umbizo read_tsv() и read_csv().

Inapakia data kwenye R: data.table

В data.table kuna kazi ya kupakia data fread().

Inapakia data kwenye R: data.table package

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

Inapakia data katika Python: pandas

Ikiwa tunalinganisha na vifurushi vya R, basi katika kesi hii syntax iko karibu zaidi pandas mapenzi readr, kwa sababu pandas inaweza kuomba data kutoka popote, na kuna familia nzima ya kazi katika kifurushi hiki read_*().

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

Na vipengele vingine vingi vilivyoundwa ili kusoma data kutoka kwa miundo mbalimbali. Lakini kwa madhumuni yetu inatosha read_table() au read_csv() kwa kutumia hoja Septemba kutaja kitenganishi cha safu wima.

Inapakia data katika 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")

Kuunda muafaka wa data

Jedwali Titanic, ambayo tulipakia, kuna shamba Ngono, ambayo huhifadhi kitambulisho cha jinsia ya abiria.

Lakini kwa uwasilishaji unaofaa zaidi wa data kwa jinsia ya abiria, unapaswa kutumia jina badala ya msimbo wa jinsia.

Ili kufanya hivyo, tutaunda saraka ndogo, meza ambayo kutakuwa na nguzo 2 tu (msimbo na jina la jinsia) na safu 2, kwa mtiririko huo.

Kuunda mfumo wa data katika R: tidyverse, dplyr

Katika mfano wa msimbo hapa chini, tunaunda mfumo wa data unaohitajika kwa kutumia chaguo la kukokotoa tibble() .

Kuunda mfumo wa data katika R: dplyr

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

Kuunda mfumo wa data katika R: data.table

Kuunda mfumo wa data katika R: data.table

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

Kuunda mfumo wa data katika Python: pandas

В pandas Uundaji wa muafaka unafanywa katika hatua kadhaa, kwanza tunaunda kamusi, na kisha tunabadilisha kamusi kuwa safu ya data.

Kuunda mfumo wa data katika Python: pandas

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

Kuchagua Safu

Jedwali unalofanya kazi nalo linaweza kuwa na dazeni au hata mamia ya safu wima za data. Lakini kufanya uchambuzi, kama sheria, hauitaji safu wima zote zinazopatikana kwenye jedwali la chanzo.

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Kwa hivyo, moja ya shughuli za kwanza ambazo utafanya na jedwali la chanzo ni kuifuta habari isiyo ya lazima na kuweka kumbukumbu ambayo habari hii inachukua.

Kuchagua safu katika R: tidyverse, dplyr

syntax dplyr inafanana sana na lugha ya kuuliza ya SQL, ikiwa unaifahamu utaijua haraka kifurushi hiki.

Ili kuchagua safu wima, tumia chaguo la kukokotoa select().

Ifuatayo ni mifano ya msimbo ambayo unaweza kuchagua safu wima kwa njia zifuatazo:

  • Kuorodhesha majina ya safu wima zinazohitajika
  • Rejelea majina ya safu wima kwa kutumia maneno ya kawaida
  • Kwa aina ya data au sifa nyingine yoyote ya data iliyo kwenye safu wima

Kuchagua safu katika 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)

Kuchagua safu wima katika R: data.table

Operesheni sawa katika data.table hutekelezwa kwa njia tofauti kidogo, mwanzoni mwa kifungu nilitoa maelezo ya ni hoja gani ziko ndani ya mabano ya mraba data.table.

DT[i,j,by]

Ambapo:
i - wapi, i.e. kuchuja kwa safu
j - chagua|sasisha|fanya, i.e. kuchagua safu wima na kuzibadilisha
kwa - kupanga data

Kuchagua safu wima katika 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$")]

Inaweza kubadilika .SD hukuruhusu kufikia safu wima zote, na .SDcols chuja safu wima zinazohitajika kwa kutumia misemo ya kawaida, au vitendaji vingine ili kuchuja majina ya safu wima unazohitaji.

Kuchagua safu katika Python, pandas

Ili kuchagua safu kwa jina ndani pandas inatosha kutoa orodha ya majina yao. Na kuchagua au kuwatenga safu kwa jina kwa kutumia misemo ya kawaida, unahitaji kutumia vitendaji drop() и filter(), na hoja mhimili=1, ambayo unaonyesha kuwa ni muhimu kuchakata safu badala ya safu.

Ili kuchagua sehemu kwa aina ya data, tumia chaguo la kukokotoa select_dtypes(), na katika mabishano ni pamoja na au kuwatenga kupitisha orodha ya aina za data zinazolingana na sehemu gani unahitaji kuchagua.

Kuchagua safu katika 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'])

Kuchuja safu

Kwa mfano, jedwali la chanzo linaweza kuwa na data ya miaka kadhaa, lakini unahitaji tu kuchambua mwezi uliopita. Tena, mistari ya ziada itapunguza kasi ya mchakato wa usindikaji wa data na kuziba kumbukumbu ya Kompyuta.

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Kuchuja safu katika R: tydyverse, dplyr

В dplyr kazi hutumika kuchuja safu filter(). Inachukua mfumo wa data kama hoja ya kwanza, kisha unaorodhesha masharti ya kuchuja.

Wakati wa kuandika maneno ya mantiki ili kuchuja meza, katika kesi hii, taja majina ya safu bila quotes na bila kutangaza jina la meza.

Unapotumia misemo mingi ya kimantiki kuchuja, tumia viendeshaji vifuatavyo:

  • & au koma - mantiki NA
  • | - kimantiki AU

Kuchuja safu katika R: dplyr

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

Inachuja safu katika R: data.table

Kama nilivyoandika hapo juu, katika data.table Sintaksia ya ubadilishaji wa data imefungwa katika mabano ya mraba.

DT[i,j,by]

Ambapo:
i - wapi, i.e. kuchuja kwa safu
j - chagua|sasisha|fanya, i.e. kuchagua safu wima na kuzibadilisha
kwa - kupanga data

Hoja hutumika kuchuja safu mlalo i, ambayo ina nafasi ya kwanza katika mabano ya mraba.

Safu wima hupatikana kwa maneno yenye mantiki bila alama za nukuu na bila kutaja jina la jedwali.

Maneno ya kimantiki yanahusiana kwa njia sawa na katika dplyr kupitia & na | waendeshaji.

Inachuja safu katika R: data.table

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

Kuchuja kamba katika Python: pandas

Chuja kwa safu mlalo ndani pandas sawa na kuchuja ndani data.table, na inafanywa katika mabano ya mraba.

Katika kesi hii, ufikiaji wa safu wima unafanywa lazima kwa kuonyesha jina la mfumo wa data; basi jina la safu pia linaweza kuonyeshwa katika alama za nukuu kwenye mabano ya mraba (mfano df['col_name']), au bila nukuu baada ya kipindi (mfano df.col_name).

Ikiwa unahitaji kuchuja mfumo wa data kwa masharti kadhaa, kila sharti lazima liwekwe kwenye mabano. Hali za kimantiki zimeunganishwa na kila mmoja na waendeshaji & и |.

Kuchuja kamba katika 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)]

Kupanga na kujumlisha data

Mojawapo ya shughuli zinazotumiwa sana katika uchanganuzi wa data ni kupanga na kujumlisha.

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Sintaksia ya kutekeleza shughuli hizi imetawanyika katika vifurushi vyote tunavyokagua.

Katika kesi hii, tutachukua mfumo wa data kama mfano Titanic, na kukokotoa nambari na wastani wa gharama ya tikiti kulingana na darasa la kabati.

Kupanga na kujumlisha data katika R: tidyverse, dplyr

В dplyr kazi hutumika kwa kuweka kambi group_by(), na kwa mkusanyiko summarise(). Kwa kweli, dplyr kuna familia nzima ya kazi summarise_*(), lakini madhumuni ya makala haya ni kulinganisha sintaksia ya msingi, kwa hivyo hatutaingia kwenye msitu kama huo.

Vipengele vya msingi vya ujumlishaji:

  • sum() - majumuisho
  • min() / max() - thamani ya chini na ya juu
  • mean() - wastani
  • median() - wastani
  • length() - wingi

Kuweka vikundi na kujumlisha katika R: dplyr

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

Kufanya kazi group_by() tulipitisha meza kama hoja ya kwanza Titanic, na kisha ikaonyesha uga Pclass, ambayo tutaweka meza yetu. Matokeo ya operesheni hii kwa kutumia operator %>% ilipitishwa kama hoja ya kwanza kwa chaguo la kukokotoa summarise(), na kuongeza sehemu 2 zaidi: abiria и wastani_bei. Katika kwanza, kwa kutumia kazi length() ilihesabu idadi ya tikiti, na ya pili kwa kutumia chaguo la kukokotoa mean() alipokea bei ya wastani ya tikiti.

Kupanga na kujumlisha data katika R: data.table

В data.table hoja inatumika kwa kujumlisha j ambayo ina nafasi ya pili katika mabano ya mraba, na kwa kambi by au keyby, ambazo zina nafasi ya tatu.

Orodha ya kazi za kujumlisha katika kesi hii ni sawa na ile iliyofafanuliwa katika dplyr, kwa sababu hizi ni kazi kutoka kwa syntax ya msingi ya R.

Kupanga na kujumlisha katika R: data.table

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

Kuweka vikundi na kujumlisha data katika Python: pandas

Kuweka katika vikundi pandas sawa na dplyr, lakini muunganisho haufanani na dplyr sio juu data.table.

Kwa kikundi, tumia njia groupby(), ambamo unahitaji kupitisha orodha ya safu wima ambayo mfumo wa data utawekwa kwenye vikundi.

Kwa mkusanyiko unaweza kutumia njia agg()ambayo inakubali kamusi. Vifunguo vya kamusi ni safu wima ambazo utatumia kazi za kujumlisha, na thamani ni majina ya chaguo za kukokotoa.

Vipengele vya kujumlisha:

  • sum() - majumuisho
  • min() / max() - thamani ya chini na ya juu
  • mean() - wastani
  • median() - wastani
  • count() - wingi

Kazi reset_index() katika mfano hapa chini inatumika kuweka upya faharasa zilizowekwa ambazo pandas chaguomsingi baada ya kujumlisha data.

ishara hukuruhusu kuhamia mstari unaofuata.

Kuweka vikundi na kujumlisha katika Python: pandas

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

Uunganisho wa wima wa meza

Operesheni ambayo unaunganisha meza mbili au zaidi za muundo sawa. Data tuliyopakia ina majedwali ga_nov и ga_des. Jedwali hizi zinafanana katika muundo, i.e. kuwa na safu wima sawa, na aina za data katika safu wima hizi.

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Huu ni upakiaji kutoka kwa Google Analytics kwa mwezi wa Novemba na Desemba, katika sehemu hii tutachanganya data hii katika jedwali moja.

Jedwali zinazounganisha kiwima katika R: tidyverse, dplyr

В dplyr Unaweza kuchanganya jedwali 2 kuwa moja kwa kutumia kitendakazi bind_rows(), kupitisha meza kama hoja zake.

Kuchuja safu katika R: dplyr

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

Kuunganisha kwa wima majedwali katika R: data.table

Pia sio kitu ngumu, hebu tumia rbind().

Inachuja safu katika R: data.table

## data.table
rbind(ga_nov, ga_dec)

Kuunganisha kwa wima meza katika Python: pandas

В pandas kazi hutumiwa kuunganisha meza concat(), ambamo unahitaji kupitisha orodha ya viunzi ili kuzichanganya.

Kuchuja kamba katika Python: pandas

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

Kuunganishwa kwa meza kwa usawa

Operesheni ambayo safu wima kutoka kwa pili huongezwa kwenye jedwali la kwanza kwa ufunguo. Mara nyingi hutumiwa wakati wa kuimarisha jedwali la ukweli (kwa mfano, jedwali na data ya mauzo) na data fulani ya kumbukumbu (kwa mfano, gharama ya bidhaa).

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Kuna aina kadhaa za viungo:

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Katika meza iliyopakiwa hapo awali Titanic tuna safu Ngono, ambayo inalingana na msimbo wa jinsia ya abiria:

1 - kike
2 - kiume

Pia, tumeunda meza - kitabu cha kumbukumbu jinsia. Kwa uwasilishaji rahisi zaidi wa data juu ya jinsia ya abiria, tunahitaji kuongeza jina la jinsia kutoka kwenye saraka. jinsia kwa meza Titanic.

Jedwali la usawa jiunge na R: tidyverse, dplyr

В dplyr Kuna familia nzima ya kazi za kuunganisha kwa usawa:

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

Inayotumika sana katika mazoezi yangu ni left_join().

Kama hoja mbili za kwanza, chaguo za kukokotoa zilizoorodheshwa hapo juu huchukua majedwali mawili kuunganishwa, na kama hoja ya tatu by lazima ubainishe safu wima za kujiunga.

Jedwali la mlalo jiunge na R: dplyr

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

Uunganisho mlalo wa jedwali katika R: data.table

В data.table Unahitaji kuunganisha meza kwa ufunguo kwa kutumia chaguo la kukokotoa merge().

Hoja za kuunganisha() kazi katika data.table

  • x, y - Majedwali ya kujiunga
  • by - Safu ambayo ni ufunguo wa kujiunga ikiwa ina jina sawa katika majedwali yote mawili
  • by.x, by.y - Majina ya safu wima yataunganishwa, ikiwa yana majina tofauti kwenye jedwali
  • all, all.x, all.y — Aina ya Kuunganisha, zote zitarudisha safu mlalo zote kutoka kwa majedwali yote mawili, all.x inalingana na operesheni ya LEFT JOIN (itaacha safu mlalo zote za jedwali la kwanza), all.y - inalingana na Operesheni ya KUUNGANISHA KULIA (itaacha safu mlalo zote za jedwali la pili).

Uunganisho mlalo wa jedwali katika R: data.table

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

Jedwali la usawa jiunge na Python: pandas

Vile vile katika data.tablendani pandas kazi hutumiwa kuunganisha meza merge().

Hoja za chaguo za kujumuisha () katika panda

  • jinsi - Aina ya unganisho: kushoto, kulia, nje, ndani
  • on - Safu ambayo ni ufunguo ikiwa ina jina sawa katika majedwali yote mawili
  • kushoto_kuwasha, kulia_kuwasha - Majina ya safu wima muhimu, ikiwa zina majina tofauti kwenye majedwali

Jedwali la usawa jiunge na Python: pandas

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

Kazi za msingi za dirisha na safu wima zilizohesabiwa

Chaguo za kukokotoa za dirisha zinafanana kimaana na kazi za kujumlisha, na pia hutumiwa mara nyingi katika uchanganuzi wa data. Lakini tofauti na vitendakazi vya kujumlisha, vitendakazi vya dirisha havibadilishi idadi ya safu mlalo ya mfumo wa data unaotoka.

Ni lugha gani ya kuchagua kufanya kazi na data - R au Python? Zote mbili! Inahama kutoka kwa panda kwenda kwa mpangilio mzuri na data.table na kurudi

Kimsingi, kwa kutumia kitendakazi cha dirisha, tunagawanya mfumo wa data unaoingia katika sehemu kulingana na kigezo fulani, i.e. kwa thamani ya sehemu, au sehemu kadhaa. Na tunafanya shughuli za hesabu kwenye kila dirisha. Matokeo ya shughuli hizi yatarejeshwa katika kila mstari, i.e. bila kubadilisha jumla ya idadi ya safu katika jedwali.

Kwa mfano, hebu tuchukue meza Titanic. Tunaweza kuhesabu ni asilimia ngapi gharama ya kila tikiti ilikuwa ndani ya darasa lake la kabati.

Ili kufanya hivyo, tunahitaji kupata katika kila mstari jumla ya gharama ya tikiti kwa darasa la sasa la kabati ambalo tiketi katika laini hii inamiliki, kisha tugawanye gharama ya kila tikiti kwa jumla ya gharama ya tikiti zote za darasa moja la kabati. .

Vitendaji vya dirisha katika R: tidyverse, dplyr

Ili kuongeza safu wima mpya, bila kutumia kupanga safu mlalo, ndani dplyr hutumikia kazi mutate().

Unaweza kutatua tatizo lililoelezwa hapo juu kwa kuweka data katika vikundi Pclass na muhtasari wa uga katika safu mpya Farea. Ifuatayo, ondoa meza na ugawanye maadili ya uwanja Farea kwa kile kilichotokea katika hatua ya awali.

Kazi za dirisha katika R: dplyr

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

Vitendaji vya dirisha katika R: data.table

Algorithm ya suluhisho inabaki sawa na in dplyr, tunahitaji kugawanya meza ndani ya madirisha kwa shamba Pclass. Toa katika safu wima mpya kiasi cha kikundi kinacholingana na kila safu mlalo, na ongeza safu ambamo tunakokotoa sehemu ya gharama ya kila tikiti kwenye kikundi chake.

Ili kuongeza safu wima mpya kwa data.table mwendeshaji aliyepo :=. Chini ni mfano wa kutatua tatizo kwa kutumia kifurushi data.table

Vitendaji vya dirisha katika R: data.table

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

Kazi za dirisha katika Python: pandas

Njia moja ya kuongeza safu mpya pandas - tumia kazi assign(). Ili kufanya muhtasari wa gharama ya tikiti kwa darasa la kabati, bila safu mlalo za vikundi, tutatumia chaguo la kukokotoa transform().

Chini ni mfano wa suluhisho ambalo tunaongeza kwenye meza Titanic safu 2 sawa.

Kazi za dirisha katika Python: pandas

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

Jedwali la mawasiliano ya kazi na njia

Ifuatayo ni jedwali la mawasiliano kati ya njia za kufanya shughuli mbali mbali na data kwenye vifurushi ambavyo tumezingatia.

Description
safi
data.meza
pandas

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

Kuunda muafaka wa data
tibble()
data.table()
dict() + from_dict()

Kuchagua Safu
select()
hoja j, nafasi ya pili katika mabano ya mraba
tunapitisha orodha ya safu wima zinazohitajika kwenye mabano ya mraba / drop() / filter() / select_dtypes()

Kuchuja safu
filter()
hoja i, nafasi ya kwanza katika mabano ya mraba
Tunaorodhesha hali ya kuchuja katika mabano ya mraba / filter()

Kuweka vikundi na kujumlisha
group_by() + summarise()
hoja j + by
groupby() + agg()

Muungano wima wa majedwali (MUUNGANO)
bind_rows()
rbind()
concat()

Uunganisho wa majedwali mlalo (JIUNGE)
left_join() / *_join()
merge()
merge()

Kazi za msingi za dirisha na kuongeza safu wima zilizohesabiwa
group_by() + mutate()
hoja j kwa kutumia operator := + hoja by
transform() + assign()

Hitimisho

Labda katika kifungu nilichoelezea sio utekelezaji bora zaidi wa usindikaji wa data, kwa hivyo nitafurahi ikiwa utasahihisha makosa yangu kwenye maoni, au kuongeza tu habari iliyotolewa katika kifungu na mbinu zingine za kufanya kazi na data katika R / Python.

Kama nilivyoandika hapo juu, kusudi la kifungu hicho halikuwa kulazimisha maoni ya mtu juu ya lugha gani ni bora, lakini kurahisisha fursa ya kujifunza lugha zote mbili, au, ikiwa ni lazima, kuhama kati yao.

Ikiwa ulipenda nakala hiyo, nitafurahi kuwa na wasajili wapya kwangu youtube и telegramu njia.

Опрос

Je, unatumia kifurushi kipi kati ya vifuatavyo katika kazi yako?

Katika maoni unaweza kuandika sababu ya uchaguzi wako.

Watumiaji waliojiandikisha pekee ndio wanaweza kushiriki katika utafiti. Weka sahihitafadhali.

Unatumia kifurushi gani cha usindikaji wa data (unaweza kuchagua chaguzi kadhaa)

  • 45,2%tidyverse19

  • 33,3%data.meza14

  • 54,8%panda23

Watumiaji 42 walipiga kura. Watumiaji 9 walijizuia.

Chanzo: mapenzi.com

Kuongeza maoni