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.

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.

1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
2.1.
2.2.
2.3.
Jekk inti interessat fl-analiżi tad-dejta, tista' ssib tiegħi и 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 . 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:

В 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
Официальный сайт:
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
Официальный сайт:
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
Официальный сайт:
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 pandasImbagħad nerġgħu lura lejn Python u nimportaw il-pakkett installat bil-kmand import.
import pandas as pdTagħ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.

Matul l-artikolu se nużaw diversi settijiet ta' dejta:
- Żewġ downloads minn Google Analytics.
- Sett tad-Data tal-Passiġġieri tat-Titanic.
Id-dejta kollha tinsab fuq tiegħi 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 vroom.
vroom vs qarrej
X'jagħmel ir-rilaxx ta 'vroomtfisser għalreadr? 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?vroomgħ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żżienvroomhija 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.

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.

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.

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()— sommamin()/max()– valur minimu u massimumean()- medjamedian()— medjanlength()- 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()— sommamin()/max()– valur minimu u massimumean()- medjamedian()— medjancount()- 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.

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

Hemm diversi tipi ta’ tingħaqad:

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ġ.

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 и 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ġ. , 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
