Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Internete ieškodami R ar Python, rasite milijonus straipsnių ir kilometrų diskusijų tema, kuris geresnis, greitesnis ir patogesnis darbui su duomenimis. Deja, visi šie straipsniai ir ginčai nėra ypač naudingi.

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Šio straipsnio tikslas – palyginti pagrindinius duomenų apdorojimo būdus populiariausiuose abiejų kalbų paketuose. Ir padėti skaitytojams greitai įsisavinti tai, ko jie dar nežino. Tie, kurie rašo Python, sužinokite, kaip tą patį padaryti R ir atvirkščiai.

Straipsnio metu analizuosime populiariausių R paketų sintaksę. Tai yra bibliotekoje esantys paketai tidyverseir taip pat pakuotė data.table. Ir palyginkite jų sintaksę su pandas, populiariausias Python duomenų analizės paketas.

Žingsnis po žingsnio eisime per visą duomenų analizės kelią nuo jų įkėlimo iki analitinio lango funkcijų atlikimo naudojant Python ir R.

Turinys

Šis straipsnis gali būti naudojamas kaip sukčiavimo lapas, jei pamiršote, kaip viename iš nagrinėjamų paketų atlikti tam tikrą duomenų apdorojimo operaciją.

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

  1. Pagrindiniai sintaksės skirtumai tarp R ir Python
    1.1. Prieiga prie paketo funkcijų
    1.2. Užduotis
    1.3. Indeksavimas
    1.4. Metodai ir OOP
    1.5. Vamzdynai
    1.6. Duomenų struktūros
  2. Keletas žodžių apie pakuotes, kurias naudosime
    2.1. tvarkinga visata
    2.2. duomenys. lentelė
    2.3. panda
  3. Paketų diegimas
  4. Įkeliami duomenys
  5. Duomenų rėmelių kūrimas
  6. Jums reikalingų stulpelių pasirinkimas
  7. Eilučių filtravimas
  8. Grupavimas ir agregavimas
  9. Vertikali lentelių jungtis (UNION)
  10. Horizontalus lentelių sujungimas (JOIN)
  11. Pagrindinės lango funkcijos ir skaičiuojami stulpeliai
  12. Atitikties lentelė tarp duomenų apdorojimo metodų R ir Python
  13. išvada
  14. Trumpa apklausa apie tai, kurį paketą naudojate

Jei jus domina duomenų analizė, galite rasti mano telegrama и "YouTube" kanalai. Didžioji dalis turinio skirta R kalbai.

Pagrindiniai sintaksės skirtumai tarp R ir Python

Kad jums būtų lengviau pereiti iš Python į R arba atvirkščiai, pateiksiu keletą pagrindinių dalykų, į kuriuos turite atkreipti dėmesį.

Prieiga prie paketo funkcijų

Kai paketas įkeliamas į R, jums nereikia nurodyti paketo pavadinimo, kad galėtumėte pasiekti jo funkcijas. Daugeliu atvejų tai nėra įprasta R, bet tai priimtina. Jums visai nereikia importuoti paketo, jei kode reikia vienos iš jo funkcijų, o tiesiog ją iškviesti nurodant paketo pavadinimą ir funkcijos pavadinimą. Skirtiklis tarp paketo ir funkcijų pavadinimų R yra dvigubas dvitaškis. package_name::function_name().

Priešingai, „Python“ yra laikoma klasika iškviesti paketo funkcijas aiškiai nurodant jo pavadinimą. Kai paketas atsisiunčiamas, jam dažniausiai suteikiamas sutrumpintas pavadinimas, pvz. pandas dažniausiai naudojamas pseudonimas pd. Paketo funkcija pasiekiama per tašką package_name.function_name().

Užduotis

R kalboje įprasta naudoti rodyklę, kad objektui priskirtumėte vertę. obj_name <- value, nors vienas lygybės ženklas yra leidžiamas, vienas lygybės ženklas R pirmiausia naudojamas reikšmėms perduoti funkcijos argumentams.

Python priskyrimas atliekamas tik naudojant vieną lygybės ženklą obj_name = value.

Indeksavimas

Čia taip pat yra gana didelių skirtumų. R indeksavimas prasideda nuo vieno ir apima visus nurodytus elementus gautame diapazone,

Python sistemoje indeksavimas prasideda nuo nulio, o pasirinktame diapazone nėra paskutinio indekse nurodyto elemento. Taigi dizainas x[i:j] Python neapims j elemento.

Taip pat skiriasi neigiamas indeksavimas, R žymėjimas x[-1] grąžins visus vektoriaus elementus, išskyrus paskutinį. Python programoje panašus žymėjimas grąžins tik paskutinį elementą.

Metodai ir OOP

R įgyvendina OOP savaip, apie tai rašiau straipsnyje "OOP R kalba (1 dalis): S3 klasės". Apskritai R yra funkcinė kalba, ir viskas joje yra pagrįsta funkcijomis. Todėl, pavyzdžiui, „Excel“ naudotojams eikite į tydiverse bus lengviau nei pandas. Nors tai gali būti mano subjektyvi nuomonė.

Trumpai tariant, R objektai neturi metodų (jei kalbame apie S3 klases, bet yra ir kitų OOP diegimų, kurie yra daug rečiau paplitę). Yra tik apibendrintos funkcijos, kurios jas apdoroja skirtingai, priklausomai nuo objekto klasės.

Vamzdynai

Galbūt tai yra pavadinimas pandas Tai nebus visiškai teisinga, bet pabandysiu paaiškinti prasmę.

Kad netaupytumėte tarpinių skaičiavimų ir darbo aplinkoje neatsirastų nereikalingų objektų, galite naudoti savotišką dujotiekį. Tie. perduoti skaičiavimo rezultatą iš vienos funkcijos į kitą ir neišsaugoti tarpinių rezultatų.

Paimkime šį kodo pavyzdį, kuriame tarpinius skaičiavimus saugome atskiruose objektuose:

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

Iš eilės atlikome 3 operacijas, kurių kiekvienos rezultatas buvo išsaugotas atskirame objekte. Bet iš tikrųjų mums nereikia šių tarpinių objektų.

Arba dar blogiau, bet labiau pažįstama Excel vartotojams.

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

Šiuo atveju tarpinių skaičiavimo rezultatų neišsaugojome, tačiau skaityti kodą su įdėtomis funkcijomis yra itin nepatogu.

Apžvelgsime kelis duomenų apdorojimo metodus R, ir jie atlieka panašias operacijas skirtingais būdais.

Vamzdynai bibliotekoje tidyverse įgyvendino operatorius %>%.

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

Taigi mes priimame darbo rezultatą func1() ir perduokite jį kaip pirmąjį argumentą func2(), tada šio skaičiavimo rezultatą perduodame kaip pirmąjį argumentą func3(). Ir galiausiai visus atliktus skaičiavimus įrašome į objektą obj <-.

Visa tai, kas išdėstyta aukščiau, geriau nei žodžiai iliustruoja šis memas:
Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

В data.table grandinės naudojamos panašiai.

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

Kiekviename laužtiniuose skliaustuose galite naudoti ankstesnės operacijos rezultatą.

В pandas tokios operacijos atskirtos tašku.

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

Tie. paimame savo staliuką df ir naudoti jos metodą fun1(), tada gautam rezultatui taikome metodą fun2()po fun3(). Gautas rezultatas išsaugomas objekte Objektas .

Duomenų struktūros

Duomenų struktūros R ir Python yra panašios, tačiau turi skirtingus pavadinimus.

aprašymas
Vardas R
Pavadinimas Python / pandas

Lentelės struktūra
data.frame, data.table, tibble
DataFrame

Vienmatis vertybių sąrašas
Vektorius
Serija pandomis arba sąrašas grynu Python

Daugiapakopė ne lentelinė struktūra
Sąrašas
Žodynas (diktas)

Toliau apžvelgsime kai kurias kitas sintaksės ypatybes ir skirtumus.

Keletas žodžių apie pakuotes, kurias naudosime

Pirmiausia šiek tiek papasakosiu apie paketus, su kuriais susipažinsite šiame straipsnyje.

tvarkinga visata

Официальный сайт: tidyverse.org
Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal
biblioteka tidyverse parašė Hedley Wickham, RStudio vyresnioji mokslo darbuotoja. tidyverse susideda iš įspūdingo paketų rinkinio, kuris supaprastina duomenų apdorojimą, iš kurių 5 yra įtraukti į 10 geriausių atsisiuntimų iš CRAN saugyklos.

Bibliotekos branduolį sudaro šie paketai: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Kiekvienas iš šių paketų yra skirtas konkrečiai problemai išspręsti. Pavyzdžiui dplyr sukurtas duomenų apdorojimui, tidyr kad duomenys būtų tvarkingi, stringr supaprastina darbą su stygomis ir ggplot2 yra vienas iš populiariausių duomenų vizualizavimo įrankių.

Privalumas tidyverse yra paprastumas ir lengvai skaitoma sintaksė, kuri daugeliu atžvilgių panaši į SQL užklausų kalbą.

duomenys. lentelė

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgalОфициальный сайт: r-datatable.com

Autorius data.table yra Mattas Dole'as iš H2O.ai.

Pirmasis bibliotekos leidimas įvyko 2006 m.

Paketo sintaksė nėra tokia patogi kaip tidyverse ir labiau primena klasikinius duomenų rėmelius R, bet tuo pačiu žymiai išplėstas funkcionalumas.

Visos manipuliacijos su lentele šiame pakete aprašytos laužtiniuose skliaustuose, o jei verčiate sintaksę data.table SQL, jūs gaunate kažką panašaus į tai: data.table[ WHERE, SELECT, GROUP BY ]

Šio paketo privalumas – didelio duomenų kiekio apdorojimo greitis.

panda

Официальный сайт: pandas.pydata.org Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Bibliotekos pavadinimas kilęs iš ekonometrinio termino „paneliniai duomenys“, vartojamo daugiamačiams struktūrizuotiems informacijos rinkiniams apibūdinti.

Autorius pandas yra amerikietis Wesas McKinney.

Kalbant apie duomenų analizę Python, lygi pandas Nr. Labai daugiafunkcinis, aukšto lygio paketas, leidžiantis atlikti bet kokias manipuliacijas su duomenimis – nuo ​​duomenų įkėlimo iš bet kokių šaltinių iki jų vizualizavimo.

Papildomų paketų diegimas

Šiame straipsnyje aptariami paketai nėra įtraukti į pagrindinį R ir Python paskirstymą. Nors yra nedidelis įspėjimas, jei įdiegėte „Anaconda“ paskirstymą, įdiekite papildomai pandas nereikalaujama.

Paketų diegimas R

Jei bent kartą atidarėte RStudio kūrimo aplinką, tikriausiai jau žinote, kaip įdiegti reikiamą paketą R. Norėdami įdiegti paketus, naudokite standartinę komandą install.packages() paleisdami jį tiesiogiai pačiame R.

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

Po įdiegimo reikia sujungti paketus, kuriems dažniausiai naudojama komanda library().

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

Paketų diegimas Python

Taigi, jei turite įdiegtą gryną Python, tada pandas jį reikia įdiegti rankiniu būdu. Atidarykite komandų eilutę arba terminalą, priklausomai nuo operacinės sistemos, ir įveskite šią komandą.

pip install pandas

Tada grįžtame į Python ir importuojame įdiegtą paketą su komanda import.

import pandas as pd

Įkeliami duomenys

Duomenų gavyba yra vienas iš svarbiausių duomenų analizės žingsnių. Tiek Python, tiek R, jei pageidaujate, suteikia plačias galimybes gauti duomenis iš bet kokių šaltinių: vietinių failų, failų iš interneto, svetainių, visų rūšių duomenų bazių.

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Straipsnyje naudosime kelis duomenų rinkinius:

  1. Du atsisiuntimai iš Google Analytics.
  2. Titaniko keleivių duomenų rinkinys.

Visi duomenys yra mano GitHub csv ir tsv failų pavidalu. Iš kur mes jų prašysime?

Duomenų įkėlimas į R: tidyverse, vroom, readr

Norėdami įkelti duomenis į biblioteką tidyverse Yra du paketai: vroom, readr. vroom modernesnis, tačiau ateityje paketai gali būti derinami.

Citata iš oficialius dokumentus vroom.

vroom prieš skaitytoją
Ką reiškia išleidimas vroom reiškia už readr? Šiuo metu planuojame leisti abiem paketams vystytis atskirai, tačiau tikėtina, kad ateityje paketus sujungsime. Vienas iš „vroom“ tingaus skaitymo trūkumų yra tas, kad tam tikrų duomenų problemų negalima pranešti iš anksto, todėl reikia šiek tiek pagalvoti, kaip geriausiai jas suvienodinti.

vroom prieš skaitytoją
Ką reiškia paleidimas? vroomreadr? Šiuo metu abu paketus planuojame vystyti atskirai, tačiau ateityje tikriausiai juos derinsime. Vienas iš tinginio skaitymo trūkumų vroom yra tai, kad kai kurių duomenų problemų negalima pranešti iš anksto, todėl reikia pagalvoti, kaip geriausia jas sujungti.

Šiame straipsnyje apžvelgsime abu duomenų įkėlimo paketus:

Įkeliami duomenys į R: vroom paketą

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

Duomenų įkėlimas į 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")

Pakuotėje vroom, neatsižvelgiant į csv / tsv duomenų formatą, įkėlimas atliekamas naudojant to paties pavadinimo funkciją vroom(), pakuotėje readr kiekvienam formatui naudojame skirtingą funkciją read_tsv() и read_csv().

Duomenų įkėlimas į R: data.table

В data.table yra duomenų įkėlimo funkcija fread().

Duomenų įkėlimas į R: paketą 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")

Įkeliami duomenys Python: pandos

Jei palyginsime su R paketais, tai šiuo atveju sintaksė yra artimiausia pandas valia readr, nes pandas gali prašyti duomenų iš bet kurios vietos, o šiame pakete yra visa eilė funkcijų read_*().

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

Ir daug kitų funkcijų, skirtų duomenims iš įvairių formatų nuskaityti. Bet mūsų tikslams to pakanka read_table() arba read_csv() naudojant argumentą rugsėjis norėdami nurodyti stulpelių skyriklį.

Įkeliami duomenys Python: pandos

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

Duomenų rėmelių kūrimas

Lentelė titaniškas, kurį pakrovėme, yra laukas seksas, kuriame saugomas keleivio lyties identifikatorius.

Tačiau norėdami patogiau pateikti duomenis pagal keleivio lytį, turėtumėte naudoti vardą, o ne lyties kodą.

Norėdami tai padaryti, sukursime nedidelį katalogą, lentelę, kurioje bus atitinkamai tik 2 stulpeliai (kodas ir lyties pavadinimas) ir 2 eilutės.

Duomenų rėmelio kūrimas R: tidyverse, dplyr

Žemiau pateiktame kodo pavyzdyje mes sukuriame norimą duomenų rėmelį naudodami funkciją tibble() .

Duomenų rėmelio kūrimas naudojant R: dplyr

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

Duomenų rėmelio kūrimas R: data.table

Duomenų rėmelio kūrimas R: data.table

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

Duomenų rėmelio kūrimas Python: pandos

В pandas Rėmeliai kuriami keliais etapais, pirmiausia sukuriame žodyną, o tada žodyną konvertuojame į duomenų rėmelį.

Duomenų rėmelio kūrimas Python: pandos

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

Stulpelių pasirinkimas

Lentelėse, su kuriomis dirbate, gali būti dešimtys ar net šimtai duomenų stulpelių. Tačiau norint atlikti analizę, paprastai nereikia visų šaltinio lentelėje esančių stulpelių.

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Todėl viena iš pirmųjų operacijų, kurią atliksite su šaltinio lentele, yra išvalyti ją nuo nereikalingos informacijos ir atlaisvinti šios informacijos užimamą atmintį.

Stulpelių pasirinkimas R: tidyverse, dplyr

sintaksė dplyr yra labai panaši į SQL užklausų kalbą, jei esate su ja susipažinę, greitai įsisavinsite šį paketą.

Norėdami pasirinkti stulpelius, naudokite funkciją select().

Toliau pateikiami kodo, kurį naudodami galite pasirinkti stulpelius šiais būdais, pavyzdžiai:

  • Reikalingų stulpelių pavadinimų sąrašas
  • Žr. stulpelių pavadinimus naudodami įprastus posakius
  • Pagal duomenų tipą ar bet kurią kitą stulpelyje esančių duomenų savybę

Stulpelių pasirinkimas 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)

Stulpelių pasirinkimas R: data.table

Tos pačios operacijos ir data.table atliekami šiek tiek kitaip, straipsnio pradžioje pateikiau aprašymą, kokie argumentai yra laužtiniuose skliaustuose data.table.

DT[i,j,by]

Kur:
aš – kur, t.y. filtravimas pagal eilutes
j – pasirinkti|atnaujinti|daryti, t.y. stulpelių parinkimas ir jų konvertavimas
pagal – duomenų grupavimą

Stulpelių pasirinkimas 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$")]

Kintamas .SD leidžia pasiekti visus stulpelius ir .SDcols filtruoti reikiamus stulpelius naudodami reguliariąsias išraiškas arba kitas funkcijas, kad filtruotumėte reikiamų stulpelių pavadinimus.

Stulpelių pasirinkimas Python, pandos

Norėdami pasirinkti stulpelius pagal pavadinimą pandas pakanka pateikti jų vardų sąrašą. O norėdami pasirinkti arba išskirti stulpelius pagal pavadinimą naudodami reguliariąsias išraiškas, turite naudoti funkcijas drop() и filter(), ir argumentas ašis = 1, kuriuo nurodote, kad reikia apdoroti stulpelius, o ne eilutes.

Norėdami pasirinkti lauką pagal duomenų tipą, naudokite funkciją select_dtypes(), ir į argumentus įtraukti arba išskirti perduoti duomenų tipų sąrašą, atitinkantį tuos laukus, kuriuos reikia pasirinkti.

Stulpelių pasirinkimas Python: pandos

# Выбор полей по названию
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'])

Eilučių filtravimas

Pavyzdžiui, šaltinio lentelėje gali būti kelių metų duomenys, tačiau reikia išanalizuoti tik paskutinį mėnesį. Vėlgi, papildomos eilutės sulėtins duomenų apdorojimo procesą ir užkimš kompiuterio atmintį.

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Filtravimo eilutės R: tydyverse, dplyr

В dplyr funkcija naudojama eilutėms filtruoti filter(). Pirmuoju argumentu naudojamas duomenų rėmelis, tada pateikiate filtravimo sąlygas.

Rašydami logines išraiškas, kad filtruotumėte lentelę, šiuo atveju nurodykite stulpelių pavadinimus be kabučių ir nedeklaruodami lentelės pavadinimo.

Kai filtruoti naudojate kelias logines išraiškas, naudokite šiuos operatorius:

  • & arba kablelis – loginis AND
  • | - loginis ARBA

Eilučių filtravimas R: dplyr

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

Eilučių filtravimas R: data.table

Kaip jau rašiau aukščiau, in data.table duomenų konvertavimo sintaksė yra laužtiniuose skliaustuose.

DT[i,j,by]

Kur:
aš – kur, t.y. filtravimas pagal eilutes
j – pasirinkti|atnaujinti|daryti, t.y. stulpelių parinkimas ir jų konvertavimas
pagal – duomenų grupavimą

Argumentas naudojamas eilutėms filtruoti i, kurio pirmoji pozicija yra laužtiniuose skliaustuose.

Stulpeliai pasiekiami loginėmis išraiškomis be kabučių ir nenurodant lentelės pavadinimo.

Loginės išraiškos yra susijusios viena su kita taip pat, kaip ir dplyr per & ir | operatorius.

Eilučių filtravimas R: data.table

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

Eilučių filtravimas Python: pandos

Filtruoti pagal eilutes pandas panašus į filtravimą data.table, ir daroma laužtiniuose skliaustuose.

Tokiu atveju prieiga prie stulpelių būtinai vykdoma nurodant duomenų rėmelio pavadinimą; tada stulpelio pavadinimą taip pat galima nurodyti kabutėse laužtiniuose skliaustuose (pavyzdys df['col_name']), arba be kabučių po taško (pavyzdys df.col_name).

Jei reikia filtruoti duomenų rėmelį pagal kelias sąlygas, kiekviena sąlyga turi būti dedama skliausteliuose. Logines sąlygas tarpusavyje susieja operatoriai & и |.

Eilučių filtravimas Python: pandos

# Фильтрация строк таблицы
### фильтрация строк по одному условию
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)]

Duomenų grupavimas ir agregavimas

Viena iš dažniausiai duomenų analizės operacijų yra grupavimas ir agregavimas.

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Šių operacijų sintaksė yra išsklaidyta visuose mūsų peržiūrimuose paketuose.

Šiuo atveju kaip pavyzdį paimsime duomenų rėmelį titaniškas, ir apskaičiuokite bilietų skaičių bei vidutinę kainą, priklausomai nuo salono klasės.

Duomenų grupavimas ir agregavimas R: tidyverse, dplyr

В dplyr funkcija naudojama grupavimui group_by(), ir agregacijai summarise(). Faktiškai, dplyr yra visa funkcijų šeima summarise_*(), tačiau šio straipsnio tikslas yra palyginti pagrindinę sintaksę, todėl į tokias džiungles nesileisime.

Pagrindinės agregavimo funkcijos:

  • sum() - sumavimas
  • min() / max() – mažiausia ir didžiausia vertė
  • mean() - vidutinis
  • median() - mediana
  • length() - kiekis

Grupavimas ir agregavimas R: dplyr

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

Funkcijoje group_by() mes praėjome lentelę kaip pirmąjį argumentą titaniškas, tada nurodė lauką Pklasė, pagal kurį sugrupuosime savo lentelę. Šios operacijos rezultatas naudojant operatorių %>% perduotas kaip pirmasis funkcijos argumentas summarise()ir pridėjo dar 2 laukus: keleiviai и vid._kaina. Pirmajame, naudojant funkciją length() apskaičiavo bilietų skaičių, o antrajame naudodamas funkciją mean() gavo vidutinę bilieto kainą.

Duomenų grupavimas ir agregavimas R: duomenys.lentelė

В data.table argumentas naudojamas agregacijai j kuri turi antrą poziciją laužtiniuose skliaustuose, ir grupavimui by arba keyby, kurie užima trečią vietą.

Sumavimo funkcijų sąrašas šiuo atveju yra identiškas aprašytajam dplyr, nes tai funkcijos iš pagrindinės R sintaksės.

Grupavimas ir agregavimas R: duomenys.lentelė

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

Duomenų grupavimas ir kaupimas Python: pandos

Grupavimas pandas panašus į dplyr, bet agregacija nepanaši į dplyr Neprijungtas data.table.

Norėdami grupuoti, naudokite metodą groupby(), į kurį reikia perduoti stulpelių, pagal kuriuos bus sugrupuotas duomenų rėmelis, sąrašą.

Sumavimui galite naudoti metodą agg()kuri priima žodyną. Žodyno raktai yra stulpeliai, kuriuose taikysite agregavimo funkcijas, o reikšmės yra agregavimo funkcijų pavadinimai.

Agregavimo funkcijos:

  • sum() - sumavimas
  • min() / max() – mažiausia ir didžiausia vertė
  • mean() - vidutinis
  • median() - mediana
  • count() - kiekis

Funkcija reset_index() toliau pateiktame pavyzdyje jis naudojamas norint iš naujo nustatyti įdėtuosius indeksus pandas numatytasis po duomenų sujungimo.

Simbolis leidžia pereiti į kitą eilutę.

Grupavimas ir agregavimas Python: pandos

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

Vertikalus lentelių sujungimas

Operacija, kurios metu sujungiate dvi ar daugiau tos pačios struktūros lentelių. Įkeltuose duomenyse yra lentelės ga_nov и ga_dec. Šios lentelės savo struktūra yra identiškos, t.y. turi tuos pačius stulpelius ir duomenų tipus šiuose stulpeliuose.

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Tai lapkričio ir gruodžio mėnesio įkėlimas iš Google Analytics. Šioje skiltyje šiuos duomenis sujungsime į vieną lentelę.

Vertikaliai sujungiamos lentelės R: tidyverse, dplyr

В dplyr Naudodami funkciją galite sujungti 2 lenteles į vieną bind_rows(), pateikiant lenteles kaip argumentus.

Eilučių filtravimas R: dplyr

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

Vertikaliai sujungiamos lentelės R: data.table

Tai taip pat nieko sudėtinga, naudokimės rbind().

Eilučių filtravimas R: data.table

## data.table
rbind(ga_nov, ga_dec)

Vertikaliai sujungtos lentelės Python: pandos

В pandas funkcija naudojama lentelėms sujungti concat(), į kurį reikia perduoti kadrų sąrašą, kad juos sujungtumėte.

Eilučių filtravimas Python: pandos

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

Horizontalus lentelių sujungimas

Operacija, kai stulpeliai iš antrojo pridedami prie pirmosios lentelės pagal raktą. Jis dažnai naudojamas papildant faktų lentelę (pavyzdžiui, lentelę su pardavimo duomenimis) kai kuriais referenciniais duomenimis (pavyzdžiui, produkto kaina).

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Yra keletas sujungimų tipų:

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Anksčiau įkeltoje lentelėje titaniškas turime koloną seksas, kuris atitinka keleivio lyties kodą:

1 - moteris
2 - vyras

Taip pat sukūrėme lentelę – žinyną lytis. Kad būtų patogiau pateikti duomenis apie keleivių lytį, turime įtraukti lyties pavadinimą iš katalogo lytis prie stalo titaniškas.

Horizontalus stalo sujungimas R: tidyverse, dplyr

В dplyr Horizontaliam sujungimui yra visa eilė funkcijų:

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

Mano praktikoje dažniausiai naudojamas left_join().

Kaip pirmieji du argumentai, aukščiau išvardytos funkcijos turi sujungti dvi lenteles, o trečiasis argumentas by turite nurodyti stulpelius, kuriuos norite sujungti.

Horizontalus stalo sujungimas R: dplyr

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

Horizontalus lentelių sujungimas R: data.table

В data.table Lenteles reikia sujungti raktu, naudojant funkciją merge().

Argumentai merge() funkcijai data.table

  • x, y – sujungimo lentelės
  • by – stulpelis, kuris yra sujungimo raktas, jei jis turi tą patį pavadinimą abiejose lentelėse
  • by.x, by.y – sujungiami stulpelių pavadinimai, jei lentelėse jų pavadinimai skiriasi
  • all, all.x, all.y — sujungimo tipas, visi grąžins visas abiejų lentelių eilutes, all.x atitinka LEFT JOIN operaciją (paliks visas pirmosios lentelės eilutes), all.y — atitinka RIGHT JOIN operacija (liks visos antrosios lentelės eilutės).

Horizontalus lentelių sujungimas R: data.table

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

Horizontalus stalo sujungimas Python: pandos

Taip pat ir viduje data.tableĮ pandas funkcija naudojama lentelėms sujungti merge().

Funkcijos merge() argumentai pandose

  • kaip — Ryšio tipas: kairė, dešinė, išorinė, vidinė
  • on – stulpelis, kuris yra raktas, jei jis turi tą patį pavadinimą abiejose lentelėse
  • left_on, right_on – pagrindinių stulpelių pavadinimai, jei jie skiriasi lentelėse

Horizontalus stalo sujungimas Python: pandos

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

Pagrindinės lango funkcijos ir skaičiuojami stulpeliai

Langų funkcijos yra panašios į agregavimo funkcijas, taip pat dažnai naudojamos duomenų analizei. Tačiau skirtingai nei agregavimo funkcijos, lango funkcijos nekeičia siunčiamo duomenų rėmelio eilučių skaičiaus.

Kokią kalbą pasirinkti darbui su duomenimis – R ar Python? Abu! Perėjimas iš pandų į tidyverse ir duomenis.lentelė ir atgal

Iš esmės, naudodami lango funkciją, gaunamą duomenų rėmelį skaidome į dalis pagal kažkokį kriterijų, t.y. pagal lauko ar kelių laukų vertę. Ir kiekviename lange atliekame aritmetines operacijas. Kiekvienoje eilutėje bus grąžintas šių operacijų rezultatas, t.y. nekeičiant bendro lentelės eilučių skaičiaus.

Pavyzdžiui, paimkime lentelę titaniškas. Galime apskaičiuoti, kiek procentų kainavo kiekvienas bilietas jo salono klasėje.

Norėdami tai padaryti, kiekvienoje eilutėje turime gauti bendrą bilieto kainą dabartinei kajutės klasei, kuriai priklauso šios eilutės bilietas, tada padalinti kiekvieno bilieto kainą iš visų tos pačios klasės bilietų kainos. .

Lango funkcijos R: tidyverse, dplyr

Norėdami pridėti naujų stulpelių, nenaudodami eilučių grupavimo, į dplyr atlieka funkciją mutate().

Aukščiau aprašytą problemą galite išspręsti sugrupuodami duomenis pagal laukus Pklasė ir susumuojant lauką naujame stulpelyje Bilietas. Tada išgrupuokite lentelę ir padalinkite lauko reikšmes Bilietas į tai, kas nutiko ankstesniame žingsnyje.

Lango funkcijos R: dplyr

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

Lango funkcijos R: data.table

Sprendimo algoritmas išlieka toks pat kaip ir dplyr, turime padalinti lentelę į langus pagal laukus Pklasė. Naujame stulpelyje išveskite sumą, skirtą grupei, atitinkančią kiekvieną eilutę, ir pridėkite stulpelį, kuriame apskaičiuojame kiekvieno bilieto kainos dalį jo grupėje.

Norėdami pridėti naujų stulpelių data.table dalyvauja operatorius :=. Žemiau pateikiamas problemos sprendimo naudojant paketą pavyzdys data.table

Lango funkcijos R: data.table

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

Python lango funkcijos: pandos

Vienas iš būdų pridėti naują stulpelį pandas - naudokite funkciją assign(). Norėdami apibendrinti bilietų kainą pagal kajutės klases, negrupuodami eilučių, naudosime funkciją transform().

Žemiau pateikiamas sprendimo, kurį įtraukiame į lentelę, pavyzdys titaniškas tos pačios 2 stulpeliai.

Python lango funkcijos: pandos

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

Funkcijų ir metodų atitikmenų lentelė

Žemiau pateikiama įvairių operacijų su duomenimis, esančiais mūsų svarstytuose paketuose, metodų atitikimo lentelė.

aprašymas
tvarkinga visata
duomenys. lentelė
panda

Įkeliami duomenys
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Duomenų rėmelių kūrimas
tibble()
data.table()
dict() + from_dict()

Stulpelių pasirinkimas
select()
argumentas j, antra vieta laužtiniuose skliaustuose
laužtiniuose skliaustuose perduodame reikalingų stulpelių sąrašą / drop() / filter() / select_dtypes()

Eilučių filtravimas
filter()
argumentas i, pirmoji pozicija laužtiniuose skliaustuose
Filtravimo sąlygas pateikiame laužtiniuose skliaustuose / filter()

Grupavimas ir agregavimas
group_by() + summarise()
argumentai j + by
groupby() + agg()

Vertikali lentelių jungtis (UNION)
bind_rows()
rbind()
concat()

Horizontalus lentelių sujungimas (JOIN)
left_join() / *_join()
merge()
merge()

Pagrindinės lango funkcijos ir apskaičiuotų stulpelių pridėjimas
group_by() + mutate()
argumentas j naudojant operatorių := + argumentas by
transform() + assign()

išvada

Galbūt straipsnyje aprašiau ne pačius optimaliausius duomenų apdorojimo būdus, todėl džiaugsiuosi, jei komentaruose ištaisysite mano klaidas arba tiesiog papildysite straipsnyje pateiktą informaciją kitais būdais, kaip dirbti su duomenimis R / Python.

Kaip rašiau aukščiau, straipsnio tikslas buvo ne primesti savo nuomonę, kuri kalba yra geresnė, o supaprastinti galimybę išmokti abi kalbas arba, jei reikia, migruoti tarp jų.

Jei jums patiko straipsnis, mielai turėsiu naujų mano prenumeratorių "YouTube" и telegrama kanalai.

Опрос

Kuriuos iš šių paketų naudojate savo darbe?

Komentaruose galite parašyti savo pasirinkimo priežastį.

Apklausoje gali dalyvauti tik registruoti vartotojai. Prisijungti, Prašau.

Kokį duomenų apdorojimo paketą naudojate (galite pasirinkti keletą variantų)

  • 45,2%tvarkinga 19

  • 33,3%duomenys.14 lentelė

  • 54,8%pandos23

Balsavo 42 vartotojai. 9 vartotojų susilaikė.

Šaltinis: www.habr.com

Добавить комментарий