Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

Billi tfittex R jew Python fuq l-Internet, issib miljuni ta 'artikoli u kilometri ta' diskussjonijiet dwar is-suġġett li wieħed huwa aħjar, aktar mgħaġġel u aktar konvenjenti biex taħdem bid-dejta. Iżda sfortunatament, dawn l-artikoli u tilwim kollha mhumiex partikolarment utli.

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

L-iskop ta 'dan l-artikolu huwa li jqabbel it-tekniki bażiċi tal-ipproċessar tad-dejta fl-aktar pakketti popolari taż-żewġ lingwi. U għin lill-qarrejja malajr jegħlbu xi ħaġa li għadhom ma jafux. Għal dawk li jiktbu f'Python, issir taf kif tagħmel l-istess ħaġa f'R, u viċi versa.

Matul l-artiklu se nanalizzaw is-sintassi tal-pakketti l-aktar popolari f'R. Dawn huma l-pakketti inklużi fil-librerija tidyverseu wkoll il-pakkett data.table. U qabbel is-sintassi tagħhom ma ' pandas, l-aktar pakkett ta 'analiżi tad-dejta popolari f'Python.

Se ngħaddu pass pass fit-triq kollha tal-analiżi tad-dejta mit-tagħbija tagħha sat-twettiq tal-funzjonijiet tat-tieqa analitiċi bl-użu ta 'Python u R.

Kontenut

Dan l-artikolu jista 'jintuża bħala cheat sheet jekk insejt kif twettaq xi operazzjoni ta' pproċessar tad-dejta f'wieħed mill-pakketti taħt konsiderazzjoni.

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

  1. Differenzi ewlenin tas-sintassi bejn R u Python
    1.1. Aċċess għall-Funzjonijiet tal-Pakkett
    1.2. Assenjazzjoni
    1.3. Indiċjar
    1.4. Metodi u OOP
    1.5. Pipelines
    1.6. Strutturi tad-data
  2. Ftit kelmiet dwar il-pakketti li se nużaw
    2.1. tidyverse
    2.2. data.table
    2.3. panda
  3. Installazzjoni ta' pakketti
  4. Tagħbija tad-Dejta
  5. Ħolqien tad-dataframes
  6. Għażla tal-Kolonni li għandek bżonn
  7. Filtrar ringieli
  8. Raggruppament u Aggregazzjoni
  9. Għaqda vertikali tal-imwejjed (UNION)
  10. Għaqda orizzontali ta' tabelli (JOIN)
  11. Funzjonijiet bażiċi tat-tieqa u kolonni kkalkulati
  12. Tabella ta 'korrispondenza bejn metodi ta' pproċessar ta 'dejta f'R u Python
  13. Konklużjoni
  14. Stħarriġ qasir dwar liema pakkett tuża

Jekk inti interessat fl-analiżi tad-dejta, tista' ssib tiegħi telegramma и YouTube kanali. Ħafna mill-kontenut huwa ddedikat għal-lingwa R.

Differenzi ewlenin tas-sintassi bejn R u Python

Biex tagħmilha aktar faċli għalik li taqleb minn Python għal R, jew viċi versa, se nagħti ftit punti ewlenin li trid tagħti attenzjoni għalihom.

Aċċess għall-Funzjonijiet tal-Pakkett

Ladarba pakkett jitgħabba f'R, m'għandekx għalfejn tispeċifika l-isem tal-pakkett biex taċċessa l-funzjonijiet tiegħu. F'ħafna każijiet dan mhux komuni f'R, iżda huwa aċċettabbli. M'għandekx għalfejn timporta pakkett jekk għandek bżonn waħda mill-funzjonijiet tiegħu fil-kodiċi tiegħek, imma sempliċement isejħilha billi tispeċifika l-isem tal-pakkett u l-isem tal-funzjoni. Is-separatur bejn l-ismijiet tal-pakketti u l-funzjonijiet f'R huwa kolon doppju. package_name::function_name().

F'Python, għall-kuntrarju, huwa meqjus klassiku li ssejjaħ il-funzjonijiet ta 'pakkett billi tispeċifika b'mod espliċitu ismu. Meta pakkett jitniżżel, ġeneralment jingħata isem imqassar, eż. pandas normalment jintuża psewdonimu pd. Funzjoni ta' pakkett hija aċċessata permezz ta' tikka package_name.function_name().

Assenjazzjoni

F'R, huwa komuni li tuża vleġġa biex tassenja valur lil oġġett. obj_name <- value, għalkemm huwa permess sinjal wieħed ugwali, is-sinjal wieħed ugwali f'R jintuża primarjament biex jgħaddi valuri għall-argumenti tal-funzjoni.

F'Python, l-assenjazzjoni ssir esklussivament b'sinjal wieħed ugwali obj_name = value.

Indiċjar

Hemm ukoll differenzi pjuttost sinifikanti hawnhekk. F'R, l-indiċjar jibda f'wieħed u jinkludi l-elementi speċifikati kollha fil-medda li tirriżulta,

F'Python, l-indiċjar jibda minn żero u l-firxa magħżula ma tinkludix l-aħħar element speċifikat fl-indiċi. Allura disinn x[i:j] f'Python mhux se jinkludi l-element j.

Hemm ukoll differenzi fl-indiċjar negattiv, fin-notazzjoni R x[-1] se jirritorna l-elementi kollha tal-vettur ħlief l-aħħar wieħed. F'Python, notazzjoni simili tirritorna biss l-aħħar element.

Metodi u OOP

R jimplimenta l-OOP bil-mod tiegħu, ktibt dwar dan fl-artiklu "OOP fil-lingwa R (parti 1): klassijiet S3". B'mod ġenerali, R hija lingwa funzjonali, u kollox fih huwa mibni fuq funzjonijiet. Għalhekk, per eżempju, għall-utenti ta 'Excel, mur tydiverse se jkun aktar faċli milli pandas. Għalkemm din tista' tkun l-opinjoni suġġettiva tiegħi.

Fil-qosor, l-oġġetti f'R m'għandhomx metodi (jekk nitkellmu dwar klassijiet S3, iżda hemm implimentazzjonijiet OOP oħra li huma ħafna inqas komuni). Hemm biss funzjonijiet ġeneralizzati li jipproċessawhom b'mod differenti skont il-klassi tal-oġġett.

Pipelines

Forsi dan huwa l-isem għal pandas Mhux se jkun kompletament korrett, imma ser nipprova nispjega t-tifsira.

Sabiex ma tiffrankax kalkoli intermedji u ma tipproduċix oġġetti mhux meħtieġa fl-ambjent tax-xogħol, tista 'tuża tip ta' pipeline. Dawk. jgħaddi r-riżultat ta 'kalkolu minn funzjoni waħda għall-oħra, u ma tissejvjax riżultati intermedji.

Ejja nieħdu l-eżempju tal-kodiċi li ġej, fejn naħżnu kalkoli intermedji f'oġġetti separati:

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

Aħna wettaqna 3 operazzjonijiet b'mod sekwenzjali, u r-riżultat ta 'kull wieħed ġie ffrankat f'oġġett separat. Iżda fil-fatt, m'għandniex bżonn dawn l-oġġetti intermedji.

Jew saħansitra agħar, iżda aktar familjari għall-utenti ta 'Excel.

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

F'dan il-każ, aħna ma ssejvjax ir-riżultati tal-kalkolu intermedji, iżda l-qari tal-kodiċi b'funzjonijiet nested huwa estremament inkonvenjenti.

Se nħarsu lejn diversi approċċi għall-ipproċessar tad-dejta f'R, u jwettqu operazzjonijiet simili b'modi differenti.

Pipelines fil-librerija tidyverse implimentati mill-operatur %>%.

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

B’hekk nieħdu r-riżultat tax-xogħol func1() u jgħaddiha bħala l-ewwel argument lil func2(), imbagħad ngħaddu r-riżultat ta 'dan il-kalkolu bħala l-ewwel argument func3(). U fl-aħħar, niktbu l-kalkoli kollha mwettqa fl-oġġett obj <-.

Dan kollu hawn fuq huwa illustrat aħjar mill-kliem minn dan il-meme:
Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

В data.table ktajjen huma użati b'mod simili.

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

F'kull waħda mill-parentesi kwadri tista 'tuża r-riżultat tal-operazzjoni preċedenti.

В pandas operazzjonijiet bħal dawn huma separati b'tikka.

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

Dawk. nieħdu l-mejda tagħna df u uża l-metodu tagħha fun1(), imbagħad napplikaw il-metodu għar-riżultat miksub fun2(), wara fun3(). Ir-riżultat li jirriżulta jiġi ffrankat f'oġġett oġġett .

Strutturi tad-data

L-istrutturi tad-dejta f'R u Python huma simili, iżda għandhom ismijiet differenti.

Deskrizzjoni
Titolu f'R
Isem f'Python/pandas

Struttura tal-mejda
data.frame, data.table, tibble
DataFrame

Lista unidimensjonali ta' valuri
Vettur
Serje f'pandas jew lista f'Python pur

Struttura mhux tabulari f'diversi livelli
Lista
dizzjunarju (dict)

Se nħarsu lejn xi karatteristiċi u differenzi oħra fis-sintassi hawn taħt.

Ftit kelmiet dwar il-pakketti li se nużaw

L-ewwel, ngħidlek ftit dwar il-pakketti li se ssir familjari magħhom matul dan l-artikolu.

tidyverse

Официальный сайт: tidyverse.org
Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura
Librerija tidyverse miktub minn Hedley Wickham, Xjentist Anzjan tar-Riċerka f'RStudio. tidyverse jikkonsisti f'sett impressjonanti ta' pakketti li jissimplifikaw l-ipproċessar tad-dejta, li 5 minnhom huma inklużi fl-aqwa 10 downloads mir-repożitorju CRAN.

Il-qalba tal-librerija tikkonsisti fil-pakketti li ġejjin: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Kull wieħed minn dawn il-pakketti huwa mmirat biex isolvi problema speċifika. Pereżempju dplyr maħluqa għall-manipulazzjoni tad-dejta, tidyr biex iġġib id-data f'forma pulita, stringr tissimplifika l-ħidma ma 'kordi, u ggplot2 hija waħda mill-aktar għodod popolari għall-viżwalizzazzjoni tad-dejta.

vantaġġ tidyverse hija s-sintassi tas-sempliċità u faċli biex tinqara, li f'ħafna modi hija simili għall-lingwa tal-mistoqsija SQL.

data.table

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u luraОфициальный сайт: r-datatable.com

Permezz data.table huwa Matt Dole ta' H2O.ai.

L-ewwel ħarġa tal-librerija saret fl-2006.

Is-sintassi tal-pakkett mhix konvenjenti daqs fi tidyverse u huwa aktar reminixxenti ta 'dataframes klassiċi f'R, iżda fl-istess ħin estiża b'mod sinifikanti fil-funzjonalità.

Il-manipulazzjonijiet kollha bit-tabella f'dan il-pakkett huma deskritti f'parentesi kwadri, u jekk tittraduċi s-sintassi data.table fl-SQL, ikollok xi ħaġa bħal din: data.table[ WHERE, SELECT, GROUP BY ]

Is-saħħa ta 'dan il-pakkett hija l-veloċità tal-ipproċessar ta' ammonti kbar ta 'dejta.

panda

Официальный сайт: pandas.pydata.org Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

L-isem tal-librerija ġej mit-terminu ekonometriku "data tal-pannelli", użat biex jiddeskrivi settijiet strutturati multidimensjonali ta 'informazzjoni.

Permezz pandas huwa l-Amerikan Wes McKinney.

Meta niġu għall-analiżi tad-dejta f'Python, ugwali pandas Nru. Pakkett multifunzjonali ħafna, ta 'livell għoli li jippermettilek twettaq kwalunkwe manipulazzjoni bid-dejta, mit-tagħbija tad-dejta minn kwalunkwe sors sal-viżwalizzazzjoni tagħha.

Installazzjoni ta 'pakketti addizzjonali

Il-pakketti diskussi f'dan l-artikolu mhumiex inklużi fid-distribuzzjonijiet bażiċi R u Python. Għalkemm hemm twissija żgħira, jekk installajt id-distribuzzjoni Anaconda, imbagħad installa addizzjonalment pandas mhux meħtieġ.

L-installazzjoni ta' pakketti f'R

Jekk ftaħt l-ambjent ta' żvilupp RStudio mill-inqas darba, probabilment diġà taf kif tinstalla l-pakkett meħtieġ f'R. Biex tinstalla pakketti, uża l-kmand standard install.packages() billi tmexxiha direttament f'R innifsu.

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

Wara l-installazzjoni, il-pakketti jeħtieġ li jiġu konnessi, li fil-biċċa l-kbira tal-każijiet jintuża l-kmand library().

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

Installazzjoni ta' Pakketti f'Python

Allura, jekk għandek Python pur installat, allura pandas għandek bżonn tinstallah manwalment. Iftaħ linja ta 'kmand, jew terminal, skond is-sistema operattiva tiegħek u daħħal il-kmand li ġej.

pip install pandas

Imbagħad nerġgħu lura lejn Python u nimportaw il-pakkett installat bil-kmand import.

import pandas as pd

Tagħbija tad-Dejta

It-tħaffir tad-dejta huwa wieħed mill-aktar passi importanti fl-analiżi tad-dejta. Kemm Python kif ukoll R, jekk mixtieq, jagħtuk opportunitajiet estensivi biex tikseb data minn kwalunkwe sors: fajls lokali, fajls mill-Internet, websajts, kull tip ta 'databases.

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

Matul l-artikolu se nużaw diversi settijiet ta' dejta:

  1. Żewġ downloads minn Google Analytics.
  2. Sett tad-Data tal-Passiġġieri tat-Titanic.

Id-dejta kollha tinsab fuq tiegħi GitHub fil-forma ta' fajls csv u tsv. Minn fejn se nitolbuhom?

Tagħbija tad-dejta f'R: tidyverse, vroom, readr

Biex tagħbija data f'librerija tidyverse Hemm żewġ pakketti: vroom, readr. vroom aktar moderni, iżda fil-futur il-pakketti jistgħu jingħaqdu.

Kwotazzjoni minn dokumentazzjoni uffiċjali vroom.

vroom vs qarrej
X'jagħmel ir-rilaxx ta ' vroom tfisser għal readr? Għalissa qed nippjanaw li nħallu ż-żewġ pakketti jevolvu separatament, iżda x'aktarx se ngħaqqdu l-pakketti fil-futur. Żvantaġġ wieħed għall-qari għażżien ta 'vroom huwa ċerti problemi tad-dejta ma jistgħux jiġu rrappurtati bil-quddiem, għalhekk kif l-aħjar biex tgħaqqadhom teħtieġ xi ħsieb.

vroom vs readr
Xi jfisser ir-rilaxx? vroom għall- readr? Bħalissa qed nippjanaw li niżviluppaw iż-żewġ pakketti separatament, iżda probabbilment se ngħaqqduhom fil-futur. Wieħed mill-iżvantaġġi tal-qari għażżien vroom hija li xi problemi bid-dejta ma jistgħux jiġu rrappurtati minn qabel, għalhekk għandek bżonn taħseb dwar kif l-aħjar tgħaqqadhom.

F'dan l-artikolu se nħarsu lejn iż-żewġ pakketti tat-tagħbija tad-dejta:

Tagħbija tad-dejta f'R: pakkett 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")

Tagħbija tad-dejta f'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")

Fil-pakkett vroom, irrispettivament mill-format tad-dejta csv / tsv, it-tagħbija titwettaq bil-funzjoni tal-istess isem vroom(), fil-pakkett readr nużaw funzjoni differenti għal kull format read_tsv() и read_csv().

Tagħbija tad-dejta f'R: data.table

В data.table hemm funzjoni għat-tagħbija tad-data fread().

Tagħbija tad-dejta f'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")

Tagħbija tad-dejta f'Python: pandas

Jekk inqabblu ma 'pakketti R, allura f'dan il-każ is-sintassi hija l-eqreb pandas se readr, għax pandas jista 'jitlob data minn kullimkien, u hemm familja sħiħa ta' funzjonijiet f'dan il-pakkett read_*().

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

U ħafna funzjonijiet oħra mfassla biex jaqraw data minn diversi formati. Iżda għall-iskopijiet tagħna huwa biżżejjed read_table() jew read_csv() bl-użu tal-argument settembru biex tispeċifika s-separatur tal-kolonna.

Tagħbija tad-dejta f'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")

Ħolqien tad-dataframes

Tabella titaniku, li aħna mgħobbija, hemm għalqa Sess, li jaħżen l-identifikatur tal-ġeneru tal-passiġġier.

Iżda għal preżentazzjoni aktar konvenjenti tad-dejta f'termini ta' sess tal-passiġġieri, għandek tuża l-isem aktar milli l-kodiċi tal-ġeneru.

Biex tagħmel dan, se noħolqu direttorju żgħir, tabella li fiha se jkun hemm biss 2 kolonni (kodiċi u isem tas-sess) u 2 ringieli, rispettivament.

Il-ħolqien ta' dataframe f'R: tidyverse, dplyr

Fl-eżempju tal-kodiċi hawn taħt, noħolqu l-qafas tad-data mixtieq bl-użu tal-funzjoni tibble() .

Il-ħolqien ta' dataframe f'R: dplyr

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

Il-ħolqien ta' dataframe f'R: data.table

Il-ħolqien ta' dataframe f'R: data.table

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

Il-ħolqien ta' dataframe f'Python: pandas

В pandas Il-ħolqien ta 'frejms jitwettaq f'diversi stadji, l-ewwel noħolqu dizzjunarju, u mbagħad nikkonverti d-dizzjunarju fi dataframe.

Il-ħolqien ta' dataframe f'Python: pandas

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

Għażla tal-Kolonni

It-tabelli li taħdem magħhom jista' jkun fihom għexieren jew saħansitra mijiet ta' kolonni ta' dejta. Iżda biex twettaq analiżi, bħala regola, m'għandekx bżonn il-kolonni kollha li huma disponibbli fit-tabella tas-sors.

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

Għalhekk, waħda mill-ewwel operazzjonijiet li se twettaq mat-tabella tas-sors hija li tnaddafha minn informazzjoni mhux meħtieġa u tillibera l-memorja li tokkupa din l-informazzjoni.

Għażla ta' kolonni f'R: tidyverse, dplyr

sintassi dplyr huwa simili ħafna għall-lingwa tal-mistoqsija SQL, jekk inti familjari magħha malajr se tikkontrolla dan il-pakkett.

Biex tagħżel kolonni, uża l-funzjoni select().

Hawn taħt hawn eżempji ta 'kodiċi li bihom tista' tagħżel kolonni bil-modi li ġejjin:

  • Li jelenka l-ismijiet tal-kolonni meħtieġa
  • Irreferi għall-ismijiet tal-kolonni billi tuża espressjonijiet regolari
  • Skont it-tip tad-dejta jew kwalunkwe proprjetà oħra tad-dejta li tinsab fil-kolonna

Għażla ta' kolonni f'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)

Għażla ta' kolonni f'R: data.table

L-istess operazzjonijiet fi data.table huma mwettqa kemmxejn differenti, fil-bidu tal-artiklu ipprovdejt deskrizzjoni ta’ liema argumenti hemm ġewwa parentesi kwadri fil- data.table.

DT[i,j,by]

Fejn:
i - fejn, i.e. iffiltrar minn ringieli
j - agħżel|aġġorna|tagħmel, i.e. l-għażla tal-kolonni u l-konverżjoni tagħhom
skond - raggruppament tad-data

Għażla ta' kolonni f'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$")]

Varjabbli .SD jippermettilek li taċċessa l-kolonni kollha, u .SDcols iffiltra l-kolonni meħtieġa billi tuża espressjonijiet regolari, jew funzjonijiet oħra biex tiffiltra l-ismijiet tal-kolonni li għandek bżonn.

Għażla ta' kolonni f'Python, pandas

Biex tagħżel kolonni bl-isem fil pandas huwa biżżejjed li tipprovdi lista ta 'ismijiet tagħhom. U biex tagħżel jew teskludi kolonni bl-isem billi tuża espressjonijiet regolari, trid tuża l-funzjonijiet drop() и filter(), u argument assi=1, li biha tindika li huwa meħtieġ li jiġu pproċessati kolonni aktar milli ringieli.

Biex tagħżel qasam skont it-tip tad-dejta, uża l-funzjoni select_dtypes(), u f'argumenti jinkludu jew jeskludu jgħaddi lista ta’ tipi ta’ data li jikkorrispondu għal liema oqsma trid tagħżel.

Għażla ta' kolonni f'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'])

Filtrar ringieli

Pereżempju, it-tabella tas-sors jista 'jkun fiha diversi snin ta' dejta, iżda għandek bżonn tanalizza biss ix-xahar li għadda. Għal darb'oħra, linji żejda jnaqqsu l-proċess tal-ipproċessar tad-dejta u jxekklu l-memorja tal-PC.

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

Ir-ringieli tal-filtrazzjoni f'R: tydyverse, dplyr

В dplyr il-funzjoni tintuża biex tiffiltra ringieli filter(). Huwa jieħu dataframe bħala l-ewwel argument, imbagħad inti telenka l-kundizzjonijiet tal-filtrazzjoni.

Meta tikteb espressjonijiet loġiċi biex tiffiltra tabella, f'dan il-każ, speċifika l-ismijiet tal-kolonni mingħajr kwotazzjonijiet u mingħajr ma tiddikjara l-isem tat-tabella.

Meta tuża espressjonijiet loġiċi multipli biex tiffiltra, uża l-operaturi li ġejjin:

  • & jew virgola - loġika U
  • | - JEW loġiku

Filtrar ta' ringieli f'R: dplyr

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

Iffiltrar ta 'ringieli f'R: data.table

Kif diġà ktibt hawn fuq, fi data.table sintassi tal-konverżjoni tad-data hija magħluqa f'parentesi kwadri.

DT[i,j,by]

Fejn:
i - fejn, i.e. iffiltrar minn ringieli
j - agħżel|aġġorna|tagħmel, i.e. l-għażla tal-kolonni u l-konverżjoni tagħhom
skond - raggruppament tad-data

L-argument jintuża biex jiffiltra ringieli i, li għandha l-ewwel pożizzjoni fil-parentesi kwadri.

Il-kolonni huma aċċessati f'espressjonijiet loġiċi mingħajr virgoletti u mingħajr ma jiġi speċifikat l-isem tat-tabella.

L-espressjonijiet loġiċi huma relatati ma’ xulxin bl-istess mod bħal fi dplyr permezz tal-operaturi & u |.

Iffiltrar ta 'ringieli f'R: data.table

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

Iffiltrar ta 'kordi f'Python: pandas

Iffiltra bir-ringieli ġewwa pandas simili għall-filtrazzjoni fil data.table, u jsir fil-parentesi kwadri.

F'dan il-każ, l-aċċess għall-kolonni jitwettaq bilfors billi jiġi indikat l-isem tal-qafas tad-dejta; allura l-isem tal-kolonna jista' jiġi indikat ukoll bil-virgoletti fil-parentesi kwadri (eżempju df['col_name']), jew mingħajr kwotazzjonijiet wara l-perjodu (eżempju df.col_name).

Jekk għandek bżonn tiffiltra dataframe b'diversi kundizzjonijiet, kull kundizzjoni trid titqiegħed fil-parentesi. Il-kundizzjonijiet loġiċi huma konnessi ma 'xulxin mill-operaturi & и |.

Iffiltrar ta 'kordi f'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)]

Raggruppament u aggregazzjoni ta' data

Waħda mill-operazzjonijiet l-aktar komunement użati fl-analiżi tad-dejta hija raggruppament u aggregazzjoni.

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

Is-sintassi għat-twettiq ta' dawn l-operazzjonijiet hija mifruxa mal-pakketti kollha li nirrevedu.

F'dan il-każ, aħna se nieħdu dataframe bħala eżempju titaniku, u kkalkula n-numru u l-ispiża medja tal-biljetti skont il-klassi tal-kabina.

Raggruppament u aggregazzjoni ta' data f'R: tidyverse, dplyr

В dplyr il-funzjoni tintuża għall-grupp group_by(), u għall-aggregazzjoni summarise(). Fil-fatt, dplyr hemm familja sħiħa ta' funzjonijiet summarise_*(), iżda l-iskop ta 'dan l-artikolu huwa li jqabbel is-sintassi bażika, għalhekk mhux se nidħlu f'ġungla bħal din.

Funzjonijiet bażiċi ta' aggregazzjoni:

  • sum() — somma
  • min() / max() – valur minimu u massimu
  • mean() - medja
  • median() — medjan
  • length() - kwantità

Raggruppament u aggregazzjoni f'R: dplyr

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

Fil-funzjoni group_by() g[addejna t-tabella b[ala l-ewwel argument titaniku, u mbagħad indika l-qasam Pclass, li biha niġbru t-tabella tagħna. Ir-riżultat ta 'din l-operazzjoni bl-użu ta' l-operatur %>% għadda bħala l-ewwel argument għall-funzjoni summarise(), u żiedet 2 oqsma oħra: passiġġieri и prezz_medja. Fl-ewwel, bl-użu tal-funzjoni length() ikkalkulat in-numru ta 'biljetti, u fit-tieni bl-użu tal-funzjoni mean() irċieva l-prezz medju tal-biljett.

Raggruppament u aggregazzjoni ta' data f'R: data.table

В data.table l-argument jintuża għall-aggregazzjoni j li għandha t-tieni pożizzjoni fil-parentesi kwadri, u għall-grupp by jew keyby, li għandhom it-tielet pożizzjoni.

Il-lista ta' funzjonijiet ta' aggregazzjoni f'dan il-każ hija identika għal dik deskritta fi dplyr, għax dawn huma funzjonijiet mis-sintassi R bażika.

Raggruppament u aggregazzjoni f'R: data.table

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

Raggruppament u aggregazzjoni ta 'dejta f'Python: pandas

Raggruppament fi pandas simili għal dplyr, iżda l-aggregazzjoni mhix simili għal dplyr mhux fuq data.table.

Biex tiggruppa, uża l-metodu groupby(), li fiha għandek bżonn tgħaddi lista ta 'kolonni li bihom id-dataframe se jiġi raggruppat.

Għall-aggregazzjoni tista' tuża l-metodu agg()li jaċċetta dizzjunarju. Iċ-ċwievet tad-dizzjunarju huma l-kolonni li fuqhom se tapplika l-funzjonijiet ta 'aggregazzjoni, u l-valuri huma l-ismijiet tal-funzjonijiet ta' aggregazzjoni.

Funzjonijiet ta' aggregazzjoni:

  • sum() — somma
  • min() / max() – valur minimu u massimu
  • mean() - medja
  • median() — medjan
  • count() - kwantità

Funzjoni reset_index() fl-eżempju hawn taħt huwa użat biex reset indiċijiet nested li pandas default wara l-aggregazzjoni tad-dejta.

Simbolu jippermettilek timxi għal-linja li jmiss.

Raggruppament u aggregazzjoni f'Python: pandas

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

Jingħaqdu vertikali ta 'tabelli

Operazzjoni li fiha tgħaqqad żewġ tabelli jew aktar tal-istess struttura. Id-dejta li għabbejna fiha tabelli ga_nov и ga_dec. Dawn it-tabelli huma identiċi fl-istruttura, i.e. għandhom l-istess kolonni, u t-tipi tad-dejta f'dawn il-kolonni.

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

Din hija upload minn Google Analytics għax-xahar ta 'Novembru u Diċembru, f'din it-taqsima se ngħaqqdu din id-dejta f'tabella waħda.

Tabelli li jingħaqdu vertikalment f'R: tidyverse, dplyr

В dplyr Tista 'tgħaqqad 2 tabelli f'waħda billi tuża l-funzjoni bind_rows(), tgħaddi tabelli bħala l-argumenti tagħha.

Filtrar ta' ringieli f'R: dplyr

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

Tabelli li jingħaqdu vertikalment f'R: data.table

Huwa wkoll xejn ikkumplikat, ejja nużaw rbind().

Iffiltrar ta 'ringieli f'R: data.table

## data.table
rbind(ga_nov, ga_dec)

Tgħaqqad it-tabelli vertikalment f'Python: pandas

В pandas il-funzjoni tintuża biex tgħaqqad it-tabelli concat(), li fiha għandek bżonn tgħaddi lista ta 'frejms biex tgħaqqadhom.

Iffiltrar ta 'kordi f'Python: pandas

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

Jingħaqdu orizzontali ta 'tabelli

Operazzjoni li fiha kolonni mit-tieni huma miżjuda mal-ewwel tabella b'ċavetta. Ħafna drabi tintuża meta tarrikkixxi tabella tal-fatti (per eżempju, tabella b'dejta tal-bejgħ) b'xi data ta 'referenza (per eżempju, l-ispiża ta' prodott).

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

Hemm diversi tipi ta’ tingħaqad:

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

Fit-tabella mgħobbija qabel titaniku għandna kolonna Sess, li jikkorrispondi għall-kodiċi tal-ġeneru tal-passiġġier:

1 - mara
2 - raġel

Ukoll, ħloqna tabella - ktieb ta 'referenza sess. Għal preżentazzjoni aktar konvenjenti tad-dejta dwar is-sess tal-passiġġieri, irridu nżidu l-isem tas-sess mid-direttorju sess mal-mejda titaniku.

Tabella orizzontali jingħaqdu f'R: tidyverse, dplyr

В dplyr Hemm familja sħiħa ta' funzjonijiet għall-għaqda orizzontali:

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

L-aktar komunement użat fil-prattika tiegħi huwa left_join().

Bħala l-ewwel żewġ argumenti, il-funzjonijiet elenkati hawn fuq jieħdu żewġ tabelli biex jingħaqdu, u bħala t-tielet argument by trid tispeċifika l-kolonni li tingħaqad.

Tabella orizzontali jingħaqdu f'R: dplyr

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

Għaqda orizzontali tat-tabelli f'R: data.table

В data.table Ikollok bżonn tingħaqad mat-tabelli b'ċavetta billi tuża l-funzjoni merge().

L-argumenti biex jingħaqdu () jiffunzjonaw fid-data.table

  • x, y — Tabelli biex tgħaqqad
  • by — Kolonna li hija ċ-ċavetta biex tissieħeb jekk ikollha l-istess isem fiż-żewġ tabelli
  • by.x, by.y — Ismijiet tal-kolonni li għandhom jingħaqdu, jekk ikollhom ismijiet differenti fit-tabelli
  • all, all.x, all.y — Tip ta' tingħaqad, kollha se jirritorna r-ringieli kollha miż-żewġ tabelli, all.x jikkorrispondi għall-operazzjoni LEFT JOIN (se jħalli r-ringieli kollha tal-ewwel tabella), all.y — jikkorrispondi għall- Operazzjoni RIGHT JOIN (se tħalli r-ringieli kollha tat-tieni tabella ).

Għaqda orizzontali tat-tabelli f'R: data.table

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

Tabella orizzontali jingħaqdu f'Python: pandas

Kif ukoll fil data.tablepulzieri pandas il-funzjoni tintuża biex tgħaqqad it-tabelli merge().

L-argumenti tal-funzjoni merge() fil-pandas

  • kif — Tip ta' konnessjoni: tax-xellug, tal-lemin, ta' barra, ta' ġewwa
  • on — Kolonna li hija ċavetta jekk ikollha l-istess isem fiż-żewġ tabelli
  • left_on, right_on — Ismijiet tal-kolonni ewlenin, jekk ikollhom ismijiet differenti fit-tabelli

Tabella orizzontali jingħaqdu f'Python: pandas

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

Funzjonijiet bażiċi tat-tieqa u kolonni kkalkulati

Il-funzjonijiet tat-twieqi huma simili fit-tifsira għall-funzjonijiet ta 'aggregazzjoni, u spiss jintużaw ukoll fl-analiżi tad-dejta. Iżda b'differenza mill-funzjonijiet ta' aggregazzjoni, il-funzjonijiet tat-twieqi ma jbiddlux in-numru ta' ringieli tad-dataframe li joħroġ.

Liema lingwa tagħżel biex taħdem bid-dejta - R jew Python? It-tnejn! Migrazzjoni minn pandas għal tidyverse u data.table u lura

Essenzjalment, bl-użu tal-funzjoni tat-tieqa, aħna naqsmu d-dataframe li jkun dieħel f'partijiet skont xi kriterju, i.e. bil-valur ta' qasam, jew diversi oqsma. U nwettqu operazzjonijiet aritmetiċi fuq kull tieqa. Ir-riżultat ta’ dawn l-operazzjonijiet se jintbagħat lura f’kull linja, i.e. mingħajr ma jinbidel in-numru totali ta’ ringieli fit-tabella.

Per eżempju, ejja nieħdu t-tabella titaniku. Nistgħu nikkalkulaw x'perċentwal kienet l-ispiża ta' kull biljett fi ħdan il-klassi tal-kabina tiegħu.

Biex nagħmlu dan, irridu nġibu f'kull linja l-ispiża totali ta 'biljett għall-klassi tal-kabina attwali li għaliha jappartjeni l-biljett f'din il-linja, imbagħad naqsam l-ispiża ta' kull biljett bl-ispiża totali tal-biljetti kollha tal-istess klassi tal-kabina .

Funzjonijiet tat-tieqa f'R: tidyverse, dplyr

Biex iżżid kolonni ġodda, mingħajr ma tuża grupp ta' ringieli, in dplyr jaqdi funzjoni mutate().

Tista' ssolvi l-problema deskritta hawn fuq billi tiġbor id-dejta skont il-qasam Pclass u jinġabru l-qasam f'kolonna ġdida do. Sussegwentement, aqsam it-tabella u jaqsam il-valuri tal-qasam do għal dak li ġara fil-pass preċedenti.

Funzjonijiet tat-tieqa f'R: dplyr

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

Funzjonijiet tat-tieqa f'R: data.table

L-algoritmu tas-soluzzjoni jibqa l-istess bħal fi dplyr, għandna bżonn naqsmu t-tabella fi twieqi skont il-qasam Pclass. Output f'kolonna ġdida l-ammont għall-grupp li jikkorrispondi għal kull ringiela, u żid kolonna li fiha nikkalkulaw is-sehem tal-ispiża ta 'kull biljett fil-grupp tiegħu.

Biex iżżid kolonni ġodda data.table operatur preżenti :=. Hawn taħt hemm eżempju ta 'soluzzjoni ta' problema bl-użu tal-pakkett data.table

Funzjonijiet tat-tieqa f'R: data.table

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

Funzjonijiet tat-tieqa f'Python: pandas

Mod wieħed biex iżżid kolonna ġdida pandas - uża l-funzjoni assign(). Biex tiġbor fil-qosor l-ispiża tal-biljetti skont il-klassi tal-kabina, mingħajr ma niġbru r-ringieli, se nużaw il-funzjoni transform().

Hawn taħt hemm eżempju ta 'soluzzjoni li fiha nżidu mat-tabella titaniku l-istess 2 kolonni.

Funzjonijiet tat-tieqa f'Python: pandas

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

Funzjonijiet u metodi tabella korrispondenza

Hawn taħt hawn tabella ta 'korrispondenza bejn metodi għat-twettiq ta' operazzjonijiet varji b'dejta fil-pakketti li kkunsidrajna.

Deskrizzjoni
tidyverse
data.table
panda

Tagħbija tad-Dejta
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Ħolqien tad-dataframes
tibble()
data.table()
dict() + from_dict()

Għażla tal-Kolonni
select()
argument j, it-tieni pożizzjoni fil-parentesi kwadri
ngħaddu l-lista tal-kolonni meħtieġa fil-parentesi kwadri / drop() / filter() / select_dtypes()

Filtrar ringieli
filter()
argument i, l-ewwel pożizzjoni fil-parentesi kwadri
Aħna jelenkaw il-kundizzjonijiet tal-filtrazzjoni f'parentesi kwadri / filter()

Raggruppament u Aggregazzjoni
group_by() + summarise()
l-argumenti j + by
groupby() + agg()

Għaqda vertikali tal-imwejjed (UNION)
bind_rows()
rbind()
concat()

Għaqda orizzontali ta' tabelli (JOIN)
left_join() / *_join()
merge()
merge()

Funzjonijiet bażiċi tat-tieqa u żżid kolonni kkalkulati
group_by() + mutate()
argument j bl-użu tal-operatur := + argument by
transform() + assign()

Konklużjoni

Forsi fl-artiklu ddeskrivejt mhux l-aktar implimentazzjonijiet ottimali tal-ipproċessar tad-dejta, għalhekk inkun ferħan jekk tikkoreġi l-iżbalji tiegħi fil-kummenti, jew sempliċement tissupplimenta l-informazzjoni mogħtija fl-artikolu b'tekniki oħra biex taħdem mad-dejta f'R / Python.

Kif ktibt hawn fuq, l-iskop tal-artiklu ma kienx li jimponi l-opinjoni tiegħu dwar liema lingwa hija aħjar, iżda li tissimplifika l-opportunità li titgħallem iż-żewġ lingwi, jew, jekk meħtieġ, jemigra bejniethom.

Jekk għoġbok l-artiklu, inkun ferħan li jkolli abbonati ġodda għal tiegħi YouTube и telegramma kanali.

Poll

Liema mill-pakketti li ġejjin tuża fix-xogħol tiegħek?

Fil-kummenti tista’ tikteb ir-raġuni għall-għażla tiegħek.

Utenti reġistrati biss jistgħu jipparteċipaw fl-istħarriġ. Idħol, ta 'xejn.

Liema pakkett għall-ipproċessar tad-dejta tuża (tista' tagħżel diversi għażliet)

  • 45,2%tidyverse19

  • 33,3%data.table14

  • 54,8%pandas23

42 utent ivvutaw. 9-il utent astjenew.

Sors: www.habr.com

Żid kumment