Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Duke kërkuar për R ose Python në internet, do të gjeni miliona artikuj dhe kilometra diskutime mbi temën se cili është më i mirë, më i shpejtë dhe më i përshtatshëm për të punuar me të dhëna. Por për fat të keq, të gjithë këta artikuj dhe mosmarrëveshje nuk janë veçanërisht të dobishme.

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Qëllimi i këtij artikulli është të krahasojë teknikat bazë të përpunimit të të dhënave në paketat më të njohura të të dy gjuhëve. Dhe ndihmoni lexuesit të zotërojnë shpejt diçka që nuk e dinë ende. Për ata që shkruajnë në Python, zbuloni se si të bëni të njëjtën gjë në R dhe anasjelltas.

Gjatë artikullit do të analizojmë sintaksën e paketave më të njohura në R. Këto janë paketat e përfshira në bibliotekë tidyversedhe gjithashtu paketën data.table. Dhe krahasoni sintaksën e tyre me pandas, paketa më e njohur e analizës së të dhënave në Python.

Ne do të kalojmë hap pas hapi në të gjithë rrugën e analizës së të dhënave nga ngarkimi i tyre deri te kryerja e funksioneve analitike të dritares duke përdorur Python dhe R.

Përmbajtje

Ky artikull mund të përdoret si një fletë mashtrimi nëse keni harruar se si të kryeni disa operacione të përpunimit të të dhënave në një nga paketat në shqyrtim.

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

  1. Dallimet kryesore sintaksore midis R dhe Python
    1.1. Qasja në funksionet e paketës
    1.2. Detyrë
    1.3. Indeksimi
    1.4. Metodat dhe OOP
    1.5. Tubacionet
    1.6. Strukturat e të dhënave
  2. Disa fjalë për paketat që do të përdorim
    2.1. e rregullt
    2.2. të dhëna.tabela
    2.3. pandas
  3. Instalimi i paketave
  4. Ngarkimi i të dhënave
  5. Krijimi i kornizave të të dhënave
  6. Zgjedhja e kolonave që ju nevojiten
  7. Filtrimi i rreshtave
  8. Grupimi dhe grumbullimi
  9. Bashkimi vertikal i tabelave (UNION)
  10. Bashkimi horizontal i tabelave (JOIN)
  11. Funksionet bazë të dritares dhe kolonat e llogaritura
  12. Tabela e korrespondencës midis metodave të përpunimit të të dhënave në R dhe Python
  13. Përfundim
  14. Një anketë e shkurtër se cilën paketë përdorni

Nëse jeni të interesuar për analizën e të dhënave, mund të gjeni timin telegram и youtube kanalet. Pjesa më e madhe e përmbajtjes i kushtohet gjuhës R.

Dallimet kryesore sintaksore midis R dhe Python

Për ta bërë më të lehtë për ju kalimin nga Python në R, ose anasjelltas, unë do të jap disa pika kryesore që duhet t'i kushtoni vëmendje.

Qasja në funksionet e paketës

Pasi një paketë ngarkohet në R, nuk keni nevojë të specifikoni emrin e paketës për të hyrë në funksionet e saj. Në shumicën e rasteve kjo nuk pranohet në R, por është e pranueshme. Nuk duhet të importoni fare një paketë nëse keni nevojë për një nga funksionet e saj në kodin tuaj, por thjesht thirreni atë duke specifikuar emrin e paketës dhe emrin e funksionit. Ndarësi ndërmjet emrave të paketave dhe funksioneve në R është një dy pika. package_name::function_name().

Në Python, përkundrazi, konsiderohet klasik thirrja e funksioneve të një pakete duke specifikuar në mënyrë eksplicite emrin e saj. Kur një paketë shkarkohet, zakonisht i jepet një emër i shkurtuar, p.sh. pandas zakonisht përdoret një pseudonim pd. Një funksion i paketës arrihet përmes një pike package_name.function_name().

Detyrë

Në R, është e zakonshme të përdoret një shigjetë për t'i caktuar një vlerë një objekti. obj_name <- value, megjithëse lejohet një shenjë e vetme barazimi, shenja e vetme e barazimit në R përdoret kryesisht për të kaluar vlerat në argumentet e funksionit.

Në Python, caktimi bëhet ekskluzivisht me një shenjë të vetme barazimi obj_name = value.

Indeksimi

Këtu ka edhe dallime mjaft domethënëse. Në R, indeksimi fillon në një dhe përfshin të gjithë elementët e specifikuar në diapazonin që rezulton,

Në Python, indeksimi fillon nga zero dhe diapazoni i zgjedhur nuk përfshin elementin e fundit të specifikuar në indeks. Pra dizajn x[i:j] në Python nuk do të përfshijë elementin j.

Ka edhe dallime në indeksimin negativ, në shënimin R x[-1] do të kthejë të gjithë elementët e vektorit përveç atij të fundit. Në Python, një shënim i ngjashëm do të kthejë vetëm elementin e fundit.

Metodat dhe OOP

R zbaton OOP në mënyrën e vet, kam shkruar për këtë në artikull "OOP në gjuhën R (pjesa 1): klasa S3". Në përgjithësi, R është një gjuhë funksionale dhe gjithçka në të është e ndërtuar mbi funksione. Prandaj, për shembull, për përdoruesit e Excel, shkoni te tydiverse do të jetë më e lehtë se pandas. Edhe pse ky mund të jetë mendimi im subjektiv.

Me pak fjalë, objektet në R nuk kanë metoda (nëse flasim për klasa S3, por ka zbatime të tjera OOP që janë shumë më pak të zakonshme). Ekzistojnë vetëm funksione të përgjithësuara që i përpunojnë ato ndryshe në varësi të klasës së objektit.

Tubacionet

Ndoshta ky është emri për pandas Nuk do të jetë plotësisht e saktë, por do të përpiqem të shpjegoj kuptimin.

Për të mos kursyer llogaritjet e ndërmjetme dhe për të mos prodhuar objekte të panevojshme në mjedisin e punës, mund të përdorni një lloj tubacioni. Ato. kaloni rezultatin e një llogaritjeje nga një funksion në tjetrin dhe mos ruani rezultate të ndërmjetme.

Le të marrim shembullin e kodit të mëposhtëm, ku ruajmë llogaritjet e ndërmjetme në objekte të veçanta:

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

Kemi kryer 3 operacione radhazi, dhe rezultati i secilit është ruajtur në një objekt të veçantë. Por në fakt, ne nuk kemi nevojë për këto objekte të ndërmjetme.

Ose edhe më keq, por më i njohur për përdoruesit e Excel.

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

Në këtë rast, ne nuk i ruajmë rezultatet e llogaritjes së ndërmjetme, por leximi i kodit me funksione të ndërthurura është jashtëzakonisht i papërshtatshëm.

Ne do të shikojmë disa qasje për përpunimin e të dhënave në R, dhe ato kryejnë operacione të ngjashme në mënyra të ndryshme.

Tubacionet në bibliotekë tidyverse zbatuar nga operatori %>%.

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

Kështu marrim rezultatin e punës func1() dhe ia kaloni si argumentin e parë func2(), atëherë ne kalojmë rezultatin e kësaj llogaritjeje si argument të parë func3(). Dhe në fund, ne shkruajmë të gjitha llogaritjet e kryera në objekt obj <-.

Të gjitha sa më sipër janë ilustruar më mirë se fjalët nga kjo meme:
Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

В data.table zinxhirët përdoren në mënyrë të ngjashme.

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

Në secilën prej kllapave katrore mund të përdorni rezultatin e operacionit të mëparshëm.

В pandas veprime të tilla ndahen me një pikë.

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

ato. marrim tryezën tonë df dhe përdorni metodën e saj fun1(), pastaj aplikojmë metodën në rezultatin e fituar fun2(), pas fun3(). Rezultati që rezulton ruhet në një objekt obj .

Strukturat e të dhënave

Strukturat e të dhënave në R dhe Python janë të ngjashme, por kanë emra të ndryshëm.

Përshkrim
Emri në R
Emri në Python/panda

Struktura e tabelës
data.frame, data.tabela, tibble
Korniza e të Dhënave

Lista njëdimensionale e vlerave
vektor
Seri në panda ose listë në Python të pastër

Struktura jo tabelare me shumë nivele
Listë
fjalor (dikt)

Më poshtë do të shikojmë disa veçori dhe ndryshime të tjera në sintaksë.

Disa fjalë për paketat që do të përdorim

Së pari, do t'ju tregoj pak për paketat me të cilat do të njiheni gjatë këtij artikulli.

e rregullt

Faqja zyrtare: tidyverse.org
Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa
Bibliotekë tidyverse shkruar nga Hedley Wickham, shkencëtare e lartë kërkimore në RStudio. tidyverse përbëhet nga një grup mbresëlënës paketash që thjeshtojnë përpunimin e të dhënave, 5 prej të cilave përfshihen në 10 shkarkimet më të mira nga depoja CRAN.

Thelbi i bibliotekës përbëhet nga paketat e mëposhtme: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Secila prej këtyre paketave ka për qëllim zgjidhjen e një problemi specifik. Për shembull dplyr krijuar për manipulimin e të dhënave, tidyr për të sjellë të dhënat në një formë të rregullt, stringr thjeshton punën me vargje, dhe ggplot2 është një nga mjetet më të njohura të vizualizimit të të dhënave.

avantazh tidyverse është thjeshtësia dhe sintaksa e lehtë për t'u lexuar, e cila në shumë mënyra është e ngjashme me gjuhën e pyetjeve SQL.

të dhëna.tabela

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapaFaqja zyrtare: r-datatable.com

Nga autori data.table është Matt Dole i H2O.ai.

Publikimi i parë i bibliotekës u bë në vitin 2006.

Sintaksa e paketës nuk është aq e përshtatshme sa në tidyverse dhe të kujton më shumë kornizat klasike të të dhënave në R, por në të njëjtën kohë zgjerohet ndjeshëm në funksionalitet.

Të gjitha manipulimet me tabelën në këtë paketë përshkruhen në kllapa katrore dhe nëse përktheni sintaksën data.table në SQL, ju merrni diçka si kjo: data.table[ WHERE, SELECT, GROUP BY ]

Fuqia e kësaj pakete është shpejtësia e përpunimit të sasive të mëdha të të dhënave.

pandas

Faqja zyrtare: pandas.pydata.org Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Emri i bibliotekës vjen nga termi ekonometrik "të dhënat e panelit", i përdorur për të përshkruar grupe informacionesh të strukturuara shumëdimensionale.

Nga autori pandas është amerikani Wes McKinney.

Kur bëhet fjalë për analizën e të dhënave në Python, është e barabartë pandas Nr. Një paketë shumëfunksionale, e nivelit të lartë që ju lejon të kryeni çdo manipulim me të dhënat, nga ngarkimi i të dhënave nga çdo burim deri te vizualizimi i tyre.

Instalimi i paketave shtesë

Paketat e diskutuara në këtë artikull nuk përfshihen në shpërndarjet bazë R dhe Python. Edhe pse ka një paralajmërim të vogël, nëse keni instaluar shpërndarjen Anaconda, atëherë instaloni shtesë pandas nuk kërkohet

Instalimi i paketave në R

Nëse e keni hapur të paktën një herë mjedisin e zhvillimit RStudio, me siguri tashmë e dini se si të instaloni paketën e kërkuar në R. Për të instaluar paketat, përdorni komandën standarde install.packages() duke e drejtuar direkt në vetë R.

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

Pas instalimit, paketat duhet të lidhen, për të cilat në shumicën e rasteve përdoret komanda library().

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

Instalimi i paketave në Python

Pra, nëse keni të instaluar Python të pastër, atëherë pandas duhet ta instaloni manualisht. Hapni një linjë komande ose terminal, në varësi të sistemit tuaj operativ dhe futni komandën e mëposhtme.

pip install pandas

Më pas kthehemi në Python dhe importojmë paketën e instaluar me komandën import.

import pandas as pd

Ngarkimi i të dhënave

Minimi i të dhënave është një nga hapat më të rëndësishëm në analizën e të dhënave. Si Python ashtu edhe R, nëse dëshironi, ju ofrojnë mundësi të gjera për të marrë të dhëna nga çdo burim: skedarë lokalë, skedarë nga Interneti, faqet e internetit, të gjitha llojet e bazave të të dhënave.

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Gjatë gjithë artikullit ne do të përdorim disa grupe të dhënash:

  1. Dy shkarkime nga Google Analytics.
  2. Të dhënat e pasagjerëve të Titanic.

Të gjitha të dhënat janë tek unë GitHub në formën e skedarëve csv dhe tsv. Nga do t'i kërkojmë?

Ngarkimi i të dhënave në R: tidyverse, vroom, reader

Për të ngarkuar të dhënat në një bibliotekë tidyverse Ka dy paketa: vroom, readr. vroom më moderne, por në të ardhmen paketat mund të kombinohen.

Citim nga dokumentacion zyrtar vroom.

vroom vs lexues
Çfarë bën lirimi i vroom do të thotë për readr? Tani për tani ne planifikojmë t'i lëmë të dy paketat të evoluojnë veçmas, por ka të ngjarë t'i bashkojmë paketat në të ardhmen. Një disavantazh i leximit dembel të vroom është se disa probleme të të dhënave nuk mund të raportohen përpara, kështu që mënyra më e mirë për t'i unifikuar ato kërkon pak mendim.

vroom vs lexues
Çfarë do të thotë lirim? vroom për readr? Për momentin planifikojmë t'i zhvillojmë të dyja paketat veç e veç, por me siguri do t'i kombinojmë në të ardhmen. Një nga disavantazhet e leximit dembel vroom është se disa probleme me të dhënat nuk mund të raportohen paraprakisht, kështu që ju duhet të mendoni se si t'i kombinoni ato më mirë.

Në këtë artikull do të shikojmë të dy paketat e ngarkimit të të dhënave:

Ngarkimi i të dhënave në paketën 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")

Ngarkimi i të dhënave në R: lexues

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

Në paketë vroom, pavarësisht nga formati i të dhënave csv / tsv, ngarkimi kryhet nga funksioni me të njëjtin emër vroom(), në paketim readr ne përdorim një funksion të ndryshëm për çdo format read_tsv() и read_csv().

Ngarkimi i të dhënave në R: data.tabela

В data.table ekziston një funksion për ngarkimin e të dhënave fread().

Ngarkimi i të dhënave në paketën R: data.tabela

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

Ngarkimi i të dhënave në Python: panda

Nëse krahasojmë me paketat R, atëherë në këtë rast sintaksa është më afër pandas do të readr, sepse pandas mund të kërkojë të dhëna nga kudo, dhe ka një familje të tërë funksionesh në këtë paketë read_*().

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

Dhe shumë funksione të tjera të krijuara për të lexuar të dhëna nga formate të ndryshme. Por për qëllimet tona mjafton read_table() ose read_csv() duke përdorur argumentin shtator për të specifikuar ndarësin e kolonës.

Ngarkimi i të dhënave në Python: panda

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

Krijimi i kornizave të të dhënave

Tabela kolosal, të cilën e ngarkuam, ka një fushë Seks, e cila ruan identifikuesin gjinor të pasagjerit.

Por për një prezantim më të përshtatshëm të të dhënave për sa i përket gjinisë së pasagjerëve, duhet të përdorni emrin dhe jo kodin gjinor.

Për ta bërë këtë, ne do të krijojmë një drejtori të vogël, një tabelë në të cilën do të ketë vetëm 2 kolona (kodi dhe emri i gjinisë) dhe 2 rreshta, përkatësisht.

Krijimi i një kornize të dhënash në R: tidyverse, dplyr

Në shembullin e kodit më poshtë, ne krijojmë kornizën e dëshiruar të të dhënave duke përdorur funksionin tibble() .

Krijimi i një kornize të dhënash në R: dplyr

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

Krijimi i një kornize të dhënash në R: data.tabela

Krijimi i një kornize të dhënash në R: data.tabela

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

Krijimi i një kornize të dhënash në Python: pandas

В pandas Krijimi i kornizave kryhet në disa faza, fillimisht krijojmë një fjalor dhe më pas e shndërrojmë fjalorin në një kornizë të dhënash.

Krijimi i një kornize të dhënash në Python: pandas

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

Përzgjedhja e kolonave

Tabelat me të cilat punoni mund të përmbajnë dhjetëra apo edhe qindra kolona të dhënash. Por për të kryer analiza, si rregull, nuk ju nevojiten të gjitha kolonat që janë të disponueshme në tabelën burimore.

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Prandaj, një nga operacionet e para që do të kryeni me tabelën burimore është pastrimi i saj nga informacioni i panevojshëm dhe lirimi i memories që zë ky informacion.

Zgjedhja e kolonave në R: tidyverse, dplyr

sintaksë dplyr është shumë e ngjashme me gjuhën e pyetjeve SQL, nëse jeni njohur me të, do ta zotëroni shpejt këtë paketë.

Për të zgjedhur kolonat, përdorni funksionin select().

Më poshtë janë shembuj të kodit me të cilin mund të zgjidhni kolonat në mënyrat e mëposhtme:

  • Renditja e emrave të kolonave të kërkuara
  • Referojuni emrave të kolonave duke përdorur shprehje të rregullta
  • Sipas llojit të të dhënave ose çdo veçori tjetër të të dhënave të përfshira në kolonë

Zgjedhja e kolonave në 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)

Zgjedhja e kolonave në R: të dhënat.tabela

Të njëjtat operacione në data.table janë kryer disi ndryshe, në fillim të artikullit kam dhënë një përshkrim se cilat argumente janë brenda kllapave katrore në data.table.

DT[i,j,by]

Ku:
i - ku, d.m.th. filtrim sipas rreshtave
j - zgjidhni|përditësoni|bëj, d.m.th. zgjedhjen e kolonave dhe konvertimin e tyre
nga - grupimi i të dhënave

Zgjedhja e kolonave në R: të dhënat.tabela

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

Ndryshore .SD ju lejon të përdorni të gjitha kolonat, dhe .SDcols filtroni kolonat e kërkuara duke përdorur shprehje të rregullta ose funksione të tjera për të filtruar emrat e kolonave që ju nevojiten.

Përzgjedhja e kolonave në Python, panda

Për të zgjedhur kolonat sipas emrit në pandas mjafton të jepet një listë me emrat e tyre. Dhe për të zgjedhur ose përjashtuar kolonat me emër duke përdorur shprehje të rregullta, duhet të përdorni funksionet drop() и filter(), dhe argumenti aks=1, me të cilën tregoni se është e nevojshme të përpunohen kolonat dhe jo rreshtat.

Për të zgjedhur një fushë sipas llojit të të dhënave, përdorni funksionin select_dtypes(), dhe në argumente përfshin ose përjashtoj kaloni një listë të llojeve të të dhënave që korrespondojnë me cilat fusha duhet të zgjidhni.

Përzgjedhja e kolonave në Python: panda

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

Filtrimi i rreshtave

Për shembull, tabela burimore mund të përmbajë të dhëna disa vjeçare, por ju duhet vetëm të analizoni muajin e kaluar. Përsëri, linjat shtesë do të ngadalësojnë procesin e përpunimit të të dhënave dhe do të bllokojnë kujtesën e kompjuterit.

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Filtrimi i rreshtave në R: tydyverse, dplyr

В dplyr funksioni përdoret për të filtruar rreshtat filter(). Ai merr një kornizë të dhënash si argumentin e parë, pastaj ju listoni kushtet e filtrimit.

Kur shkruani shprehje logjike për të filtruar një tabelë, në këtë rast, specifikoni emrat e kolonave pa thonjëza dhe pa deklaruar emrin e tabelës.

Kur përdorni shprehje të shumta logjike për të filtruar, përdorni operatorët e mëposhtëm:

  • & ose presje - logjike DHE
  • | - logjik OSE

Filtrimi i rreshtave në R: dplyr

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

Filtrimi i rreshtave në R: data.tabela

Siç kam shkruar tashmë më lart, në data.table Sintaksa e konvertimit të të dhënave është e mbyllur në kllapa katrore.

DT[i,j,by]

Ku:
i - ku, d.m.th. filtrim sipas rreshtave
j - zgjidhni|përditësoni|bëj, d.m.th. zgjedhjen e kolonave dhe konvertimin e tyre
nga - grupimi i të dhënave

Argumenti përdoret për të filtruar rreshtat i, e cila ka pozicionin e parë në kllapa katrore.

Kolonat aksesohen në shprehje logjike pa thonjëza dhe pa specifikuar emrin e tabelës.

Shprehjet logjike lidhen me njëra-tjetrën në të njëjtën mënyrë si në dplyr nëpërmjet operatorëve & dhe |.

Filtrimi i rreshtave në R: data.tabela

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

Filtrimi i vargjeve në Python: panda

Filtro sipas rreshtave brenda pandas të ngjashme me filtrimin në data.table, dhe bëhet në kllapa katrore.

Në këtë rast, qasja në kolona kryhet domosdoshmërisht duke treguar emrin e kornizës së të dhënave; atëherë emri i kolonës mund të tregohet gjithashtu në thonjëza në kllapa katrore (shembull df['col_name']), ose pa kuota pas periudhës (shembull df.col_name).

Nëse keni nevojë të filtroni një kornizë të dhënash sipas disa kushteve, çdo kusht duhet të vendoset në kllapa. Kushtet logjike lidhen me njëra-tjetrën nga operatorët & и |.

Filtrimi i vargjeve në Python: panda

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

Grupimi dhe grumbullimi i të dhënave

Një nga operacionet më të përdorura në analizën e të dhënave është grupimi dhe grumbullimi.

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Sintaksa për kryerjen e këtyre operacioneve është e shpërndarë në të gjitha paketat që shqyrtojmë.

Në këtë rast, ne do të marrim një kornizë të dhënash si shembull kolosal, dhe llogaritni numrin dhe koston mesatare të biletave në varësi të klasës së kabinës.

Grupimi dhe grumbullimi i të dhënave në R: tidyverse, dplyr

В dplyr funksioni përdoret për grupim group_by(), dhe për grumbullim summarise(). Në fakt, dplyr ekziston një familje e tërë funksionesh summarise_*(), por qëllimi i këtij artikulli është të krahasojë sintaksën bazë, kështu që ne nuk do të hyjmë në një xhungël të tillë.

Funksionet bazë të grumbullimit:

  • sum() - përmbledhje
  • min() / max() - vlera minimale dhe maksimale
  • mean() - mesatare
  • median() - mesatare
  • length() - sasi

Grupimi dhe grumbullimi në R: dplyr

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

Në funksion group_by() kaluam tabelën si argumentin e parë kolosal, dhe më pas tregoi fushën Pklasa, me anë të së cilës do të grupojmë tabelën tonë. Rezultati i këtij operacioni duke përdorur operatorin %>% kalohet si argumenti i parë i funksionit summarise(), dhe shtoi edhe 2 fusha të tjera: pasagjerët и çmimi_mesatar. Në të parën, duke përdorur funksionin length() llogaritur numrin e biletave, dhe në të dytën duke përdorur funksionin mean() mori çmimin mesatar të biletës.

Grupimi dhe grumbullimi i të dhënave në R: të dhëna.tabela

В data.table argumenti përdoret për grumbullim j e cila ka një pozicion të dytë në kllapa katrore dhe për grupim by ose keyby, që zënë vendin e tretë.

Lista e funksioneve të grumbullimit në këtë rast është identike me atë të përshkruar në dplyr, sepse këto janë funksione nga sintaksa bazë R.

Grupimi dhe grumbullimi në R: të dhëna.tabela

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

Grupimi dhe grumbullimi i të dhënave në Python: panda

Grupimi në pandas të ngjashme me dplyr, por grumbullimi nuk është i ngjashëm me dplyr jo në data.table.

Për të grupuar, përdorni metodën groupby(), në të cilën duhet të kaloni një listë kolonash me të cilat do të grupohet korniza e të dhënave.

Për grumbullim mund të përdorni metodën agg()që pranon një fjalor. Çelësat e fjalorit janë kolonat në të cilat do të aplikoni funksionet e grumbullimit, dhe vlerat janë emrat e funksioneve të grumbullimit.

Funksionet e grumbullimit:

  • sum() - përmbledhje
  • min() / max() - vlera minimale dhe maksimale
  • mean() - mesatare
  • median() - mesatare
  • count() - sasi

Funksion reset_index() në shembullin e mëposhtëm përdoret për të rivendosur indekset e mbivendosura që pandas parazgjedhur në pas grumbullimit të të dhënave.

Simbol ju lejon të kaloni në rreshtin tjetër.

Grupimi dhe grumbullimi në Python: panda

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

Bashkimi vertikal i tabelave

Një operacion në të cilin ju bashkoni dy ose më shumë tabela të së njëjtës strukturë. Të dhënat që ngarkuam përmbajnë tabela ga_nov и ga_dhjetor. Këto tabela janë identike në strukturë, d.m.th. kanë të njëjtat kolona dhe llojet e të dhënave në këto kolona.

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Ky është një ngarkim nga Google Analytics për muajt nëntor dhe dhjetor, në këtë seksion do t'i kombinojmë këto të dhëna në një tabelë.

Lidhja vertikale e tabelave në R: tidyverse, dplyr

В dplyr Ju mund të kombinoni 2 tabela në një duke përdorur funksionin bind_rows(), kalimi i tabelave si argumente të tij.

Filtrimi i rreshtave në R: dplyr

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

Bashkimi vertikal i tabelave në R: të dhëna.tabela

Nuk është gjithashtu asgjë e komplikuar, le ta përdorim rbind().

Filtrimi i rreshtave në R: data.tabela

## data.table
rbind(ga_nov, ga_dec)

Bashkimi vertikal i tabelave në Python: panda

В pandas funksioni përdoret për bashkimin e tabelave concat(), në të cilën duhet të kaloni një listë kornizash për t'i kombinuar ato.

Filtrimi i vargjeve në Python: panda

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

Bashkimi horizontal i tabelave

Një operacion në të cilin kolonat nga e dyta shtohen në tabelën e parë me çelës. Shpesh përdoret kur pasurohet një tabelë faktesh (për shembull, një tabelë me të dhëna shitjesh) me disa të dhëna referencë (për shembull, kostoja e një produkti).

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Ekzistojnë disa lloje të lidhjeve:

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Në tabelën e ngarkuar më parë kolosal kemi një kolonë Seks, që korrespondon me kodin gjinor të pasagjerit:

1 - femër
2 - mashkull

Gjithashtu, ne kemi krijuar një tabelë - një libër referencë gjini. Për një prezantim më të përshtatshëm të të dhënave për gjininë e pasagjerëve, duhet të shtojmë emrin e gjinisë nga drejtoria. gjini te tavolina kolosal.

Lidhja horizontale e tabelës në R: tidyverse, dplyr

В dplyr Ekziston një familje e tërë funksionesh për bashkimin horizontal:

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

Më e përdorura në praktikën time është left_join().

Si dy argumentet e para, funksionet e listuara më sipër marrin dy tabela për t'u bashkuar dhe si argumenti i tretë by ju duhet të specifikoni kolonat për t'u bashkuar.

Bashkimi horizontal i tabelës në R: dplyr

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

Bashkimi horizontal i tabelave në R: të dhëna.tabela

В data.table Ju duhet të bashkoni tabelat me çelës duke përdorur funksionin merge().

Funksioni i argumenteve për merge() në të dhënat.tabela

  • x, y - Tabelat për bashkim
  • nga — Kolona që është çelësi për t'u bashkuar nëse ka të njëjtin emër në të dyja tabelat
  • by.x, by.y - Emrat e kolonave që do të bashkohen, nëse kanë emra të ndryshëm në tabela
  • all, all.x, all.y — Join type, all do t'i kthejë të gjitha rreshtat nga të dyja tabelat, all.x korrespondon me operacionin LEFT JOIN (do të lërë të gjitha rreshtat e tabelës së parë), all.y - korrespondon me Operacioni RIGHT JOIN (do të lërë të gjitha rreshtat e tabelës së dytë).

Bashkimi horizontal i tabelave në R: të dhëna.tabela

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

Bashkimi horizontal i tabelës në Python: panda

Si dhe në data.table, në pandas funksioni përdoret për bashkimin e tabelave merge().

Argumentet e funksionit merge() në panda

  • si — Lloji i lidhjes: majtas, djathtas, i jashtëm, i brendshëm
  • on — Kolona që është një çelës nëse ka të njëjtin emër në të dyja tabelat
  • left_on, right_on — Emrat e kolonave kryesore, nëse ato kanë emra të ndryshëm në tabela

Bashkimi horizontal i tabelës në Python: panda

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

Funksionet bazë të dritares dhe kolonat e llogaritura

Funksionet e dritares janë të ngjashme në kuptim me funksionet e grumbullimit, dhe gjithashtu përdoren shpesh në analizën e të dhënave. Por ndryshe nga funksionet e grumbullimit, funksionet e dritares nuk ndryshojnë numrin e rreshtave të kornizës së të dhënave dalëse.

Cila gjuhë të zgjidhni për të punuar me të dhëna - R apo Python? te dyja! Migrimi nga panda në të rregullt dhe të dhëna.tabelë dhe mbrapa

Në thelb, duke përdorur funksionin e dritares, ne e ndajmë kornizën e të dhënave hyrëse në pjesë sipas disa kritereve, d.m.th. nga vlera e një fushe ose disa fushave. Dhe ne kryejmë veprime aritmetike në secilën dritare. Rezultati i këtyre operacioneve do të kthehet në çdo rresht, d.m.th. pa ndryshuar numrin e përgjithshëm të rreshtave në tabelë.

Për shembull, le të marrim tabelën kolosal. Mund të llogarisim se sa përqind ishte kostoja e secilës biletë brenda klasës së saj të kabinës.

Për ta bërë këtë, ne duhet të marrim në secilën linjë koston totale të një bilete për klasën aktuale të kabinës së cilës i përket bileta në këtë linjë, më pas të pjesëtojmë koston e secilës biletë me koston totale të të gjitha biletave të së njëjtës klasë kabine. .

Funksionet e dritares në R: tidyverse, dplyr

Për të shtuar kolona të reja, pa përdorur grupimin e rreshtave, në dplyr shërben funksionin mutate().

Ju mund ta zgjidhni problemin e përshkruar më sipër duke grupuar të dhënat sipas fushës Pklasa dhe përmbledhja e fushës në një kolonë të re tarifë. Më pas, anuloni tabelën dhe ndani vlerat e fushës tarifë për atë që ndodhi në hapin e mëparshëm.

Funksionet e dritares në R: dplyr

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

Funksionet e dritares në R: të dhënat.tabela

Algoritmi i zgjidhjes mbetet i njëjtë si në dplyr, duhet ta ndajmë tabelën në dritare sipas fushës Pklasa. Vendosni në një kolonë të re shumën për grupin që korrespondon me çdo rresht dhe shtoni një kolonë në të cilën llogarisim pjesën e kostos së secilës biletë në grupin e saj.

Për të shtuar kolona të reja në data.table operatori i pranishëm :=. Më poshtë është një shembull i zgjidhjes së një problemi duke përdorur paketën data.table

Funksionet e dritares në R: të dhënat.tabela

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

Funksionet e dritares në Python: panda

Një mënyrë për të shtuar një kolonë të re pandas - përdorni funksionin assign(). Për të përmbledhur koston e biletave sipas klasës së kabinës, pa grupuar rreshtat, do të përdorim funksionin transform().

Më poshtë është një shembull i një zgjidhjeje në të cilën ne shtojmë në tabelë kolosal të njëjtat 2 kolona.

Funksionet e dritares në Python: panda

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

Tabela e korrespondencës së funksioneve dhe metodave

Më poshtë është një tabelë e korrespondencës midis metodave për kryerjen e operacioneve të ndryshme me të dhënat në paketat që kemi shqyrtuar.

Përshkrim
e rregullt
të dhëna.tabela
pandas

Ngarkimi i të dhënave
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Krijimi i kornizave të të dhënave
tibble()
data.table()
dict() + from_dict()

Përzgjedhja e kolonave
select()
argument j, pozicioni i dytë në kllapa katrore
ne kalojmë listën e kolonave të kërkuara në kllapa katrore / drop() / filter() / select_dtypes()

Filtrimi i rreshtave
filter()
argument i, pozicioni i parë në kllapa katrore
Ne rendisim kushtet e filtrimit në kllapa katrore / filter()

Grupimi dhe grumbullimi
group_by() + summarise()
argumentet j + by
groupby() + agg()

Bashkimi vertikal i tabelave (UNION)
bind_rows()
rbind()
concat()

Bashkimi horizontal i tabelave (JOIN)
left_join() / *_join()
merge()
merge()

Funksionet bazë të dritares dhe shtimi i kolonave të llogaritura
group_by() + mutate()
argument j duke përdorur operatorin := + argument by
transform() + assign()

Përfundim

Ndoshta në artikull përshkrova jo implementimet më optimale të përpunimit të të dhënave, kështu që do të jem i lumtur nëse korrigjoni gabimet e mia në komente, ose thjesht plotësoni informacionin e dhënë në artikull me teknika të tjera për të punuar me të dhëna në R / Python.

Siç shkrova më lart, qëllimi i artikullit nuk ishte të impononte mendimin se cila gjuhë është më e mirë, por të thjeshtonte mundësinë për të mësuar të dyja gjuhët, ose, nëse është e nevojshme, të migronte midis tyre.

Nëse ju pëlqeu artikulli, do të jem i lumtur të kem pajtimtarë të rinj në tim youtube и telegram kanalet.

Опрос

Cilën nga paketat e mëposhtme përdorni në punën tuaj?

Në komente mund të shkruani arsyen e zgjedhjes suaj.

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, te lutem

Cilën paketë të përpunimit të të dhënave përdorni (mund të zgjidhni disa opsione)

  • 45,2%e rregullt19

  • 33,3%të dhënat.tabela14

  • 54,8%panda 23

42 përdorues kanë votuar. 9 përdorues abstenuan.

Burimi: www.habr.com

Shto një koment