ProHoster > Blog > Bestjoer > Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom
Hokker taal te kiezen foar wurkjen mei gegevens - R of Python? Beide! Migrearjen fan panda's nei tidyverse en data.table en werom
Troch te sykjen nei R of Python op it ynternet, sille jo miljoenen artikels en kilometers oan diskusjes fine oer it ûnderwerp wêrfan ien better, rapper en handiger is foar it wurkjen mei gegevens. Mar spitigernôch binne al dizze artikels en disputen net bysûnder nuttich.
It doel fan dit artikel is om de basisgegevensferwurkingstechniken te fergelykjen yn 'e populêrste pakketten fan beide talen. En helpe lêzers gau wat te behearskjen wat se noch net witte. Foar dyjingen dy't skriuwe yn Python, fine út hoe't te dwaan itselde ding yn R, en oarsom.
Tidens it artikel sille wy analysearje de syntaksis fan de meast populêre pakketten yn R. Dit binne de pakketten opnommen yn 'e bibleteek tidyverseen ek it pakket data.table. En fergelykje harren syntaksis mei pandas, it populêrste pakket foar gegevensanalyse yn Python.
Wy sille stap foar stap troch it heule paad fan gegevensanalyse gean fan it laden oant it útfieren fan analytyske finsterfunksjes mei Python en R.
Ynhâld
Dit artikel kin brûkt wurde as cheat sheet as jo fergetten binne hoe't jo wat gegevensferwurkingsoperaasje kinne útfiere yn ien fan 'e pakketten dy't wurde beskôge.
As jo ynteressearre binne yn gegevens analyze, kinne jo fine myn telegram и youtube kanalen. It grutste part fan de ynhâld is wijd oan de R-taal.
Main syntaksis ferskillen tusken R en Python
Om it makliker te meitsjen foar jo om te wikseljen fan Python nei R, of oarsom, sil ik in pear haadpunten jaan dy't jo oandacht moatte jaan.
Tagong ta pakketfunksjes
Ienris in pakket is laden yn R, hoege jo de pakketnamme net op te jaan om tagong te krijen ta syn funksjes. Yn de measte gefallen is dit net gewoan yn R, mar it is akseptabel. Jo hoege jo hielendal net in pakket te ymportearjen as jo ien fan syn funksjes yn jo koade nedich hawwe, mar neame it gewoan troch de namme fan it pakket en de namme fan 'e funksje op te jaan. De skieding tusken pakket- en funksjenammen yn R is in dûbele kolon. package_name::function_name().
Yn Python, krekt oarsom, wurdt it klassyk beskôge om de funksjes fan in pakket te neamen troch de namme eksplisyt oan te jaan. As in pakket wurdt ynladen, wurdt it meastentiids in ferkoarte namme jûn, bgl. pandas meastentiids wurdt in pseudonym brûkt pd. In pakketfunksje is tagonklik fia in punt package_name.function_name().
Opdracht
Yn R is it gewoanlik om in pylk te brûken om in wearde oan in objekt te jaan. obj_name <- value, hoewol in inkeld lykweardich teken is tastien, wurdt it ienige lykweardich teken yn R primêr brûkt om wearden troch te jaan om arguminten te funksjonearjen.
Yn Python wurdt opdracht eksklusyf dien mei ien lykweardich teken obj_name = value.
Yndeksearje
D'r binne hjir ek frij wichtige ferskillen. Yn R begjint yndeksearring by ien en befettet alle oantsjutte eleminten yn it resultearjende berik,
Yn Python begjint yndeksearring fan nul en it selektearre berik befettet net it lêste elemint oantsjutte yn 'e yndeks. Design dus x[i:j] yn Python sil net befetsje de j elemint.
D'r binne ek ferskillen yn negative yndeksearring, yn R-notaasje x[-1] sil alle eleminten fan 'e fektor weromjaan útsein de lêste. Yn Python sil in ferlykbere notaasje allinich it lêste elemint weromjaan.
Metoaden en OOP
R ymplemintearret OOP op syn eigen manier, ik skreau oer dit yn it artikel "OOP yn 'e R-taal (diel 1): S3-klassen". Yn it algemien is R in funksjonele taal, en alles dêryn is boud op funksjes. Dêrom, bygelyks, foar Excel-brûkers, gean nei tydiverse it sil wêze makliker as pandas. Hoewol dit myn subjektive miening kin wêze.
Koartsein, foarwerpen yn R hawwe gjin metoaden (as wy prate oer S3 klassen, mar der binne oare OOP ymplemintaasjes dy't folle minder faak). D'r binne allinich generalisearre funksjes dy't se oars ferwurkje ôfhinklik fan 'e klasse fan it objekt.
Pipelines
Miskien is dit de namme foar pandas It sil net hielendal korrekt wêze, mar ik sil besykje de betsjutting út te lizzen.
Om tuskenlizzende berekkeningen net te bewarjen en gjin ûnnedige objekten yn 'e wurkomjouwing te produsearjen, kinne jo in soarte fan pipeline brûke. Dy. trochjaan it resultaat fan in berekkening fan de iene funksje nei de folgjende, en net bewarje tuskenlizzende resultaten.
Litte wy it folgjende koadefoarbyld nimme, wêr't wy tuskenlizzende berekkeningen opslaan yn aparte objekten:
Wy hawwe 3 operaasjes sequentially útfierd, en it resultaat fan elk waard bewarre yn in apart objekt. Mar feitlik hawwe wy dizze tuskenobjekten net nedich.
Of noch slimmer, mar mear fertroud foar Excel-brûkers.
obj <- func3(func2(func1()))
Yn dit gefal hawwe wy gjin tuskenlizzende berekkeningsresultaten bewarre, mar it lêzen fan koade mei nestele funksjes is ekstreem ûngemaklik.
Wy sille sjen nei ferskate oanpak fan gegevens ferwurking yn R, en se fiere ferlykbere operaasjes op ferskillende wizen.
Pipelines yn 'e biblioteek tidyverse útfierd troch de operator %>%.
obj <- func1() %>%
func2() %>%
func3()
Sa nimme wy it resultaat fan it wurk func1() en trochjaan it as it earste argumint oan func2(), dan passe wy it resultaat fan dizze berekkening as it earste argumint func3(). En op it lêst skriuwe wy alle berekkeningen útfierd yn it objekt obj <-.
Al it boppesteande wurdt better yllustrearre dan wurden troch dizze meme:
В data.table keatlingen wurde op in fergelykbere manier brûkt.
Yn elk fan 'e fjouwerkante heakjes kinne jo it resultaat fan' e foarige operaasje brûke.
В pandas sokke operaasjes wurde skieden troch in stip.
obj = df.fun1().fun2().fun3()
Dy. wy nimme ús tafel df en brûk har metoade fun1(), dan tapasse wy de metoade oan it krigen resultaat fun2()nei fun3(). It resultearjende resultaat wurdt bewarre yn in objekt objekt .
Data Struktueren
Gegevensstruktueren yn R en Python binne ferlykber, mar hawwe ferskillende nammen.
Iendiminsjonale list fan wearden
Vector
Searjes yn pandas of list yn suver Python
Multi-level non-tabel struktuer
List
Wurdboek (dik)
Wy sille hjirûnder wat oare funksjes en ferskillen yn syntaksis besjen.
In pear wurden oer de pakketten dy't wy sille brûke
Earst sil ik jo in bytsje fertelle oer de pakketten wêrmei jo yn dit artikel sille wurde fertroud.
tidyverse
Offisjele webside: tidyverse.org
Bibleteek tidyverse skreaun troch Hedley Wickham, Senior Research Scientist by RStudio. tidyverse bestiet út in yndrukwekkende set pakketten dy't gegevensferwurking ferienfâldigje, wêrfan 5 binne opnommen yn 'e top 10 downloads fan it CRAN-repository.
De kearn fan 'e bibleteek bestiet út de folgjende pakketten: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Elk fan dizze pakketten is rjochte op it oplossen fan in spesifyk probleem. Bygelyks dplyr makke foar gegevensmanipulaasje, tidyr om de gegevens yn in nette foarm te bringen, stringr simplifies wurkje mei snaren, en ggplot2 is ien fan 'e populêrste ark foar gegevensfisualisaasje.
It foardiel tidyverse is de ienfâld en maklik te lêzen syntaksis, dy't op in protte manieren fergelykber is mei de SQL-fraachtaal.
De earste útjefte fan de biblioteek fûn plak yn 2006.
De pakketsyntaksis is net sa handich as yn tidyverse en docht tinken oan klassike dataframes yn R, mar tagelyk signifikant útwreide yn funksjonaliteit.
Alle manipulaasjes mei de tabel yn dit pakket wurde beskreaun yn fjouwerkante heakjes, en as jo de syntaksis oersette data.table yn SQL krije jo wat as dit: data.table[ WHERE, SELECT, GROUP BY ]
De krêft fan dit pakket is de snelheid fan it ferwurkjen fan grutte hoemannichten gegevens.
De namme fan 'e bibleteek komt fan' e ekonometryske term "panielgegevens", brûkt om multydinsjonele strukturearre sets fan ynformaasje te beskriuwen.
Troch pandas is Amerikaansk Wes McKinney.
As it giet om gegevens analyze yn Python, gelyk pandas Nee. In heul multyfunksjoneel pakket op heech nivo wêrmei jo elke manipulaasje mei gegevens kinne útfiere, fan it laden fan gegevens fan elke boarne oant it visualisearjen.
Ynstallearje ekstra pakketten
De pakketten besprutsen yn dit artikel binne net opnommen yn 'e basis R- en Python-distribúsjes. Hoewol d'r in lyts warskôging is, as jo de Anaconda-distribúsje ynstalleare, ynstallearje dan ekstra pandas net nedich.
Ynstallaasje fan pakketten yn R
As jo de RStudio-ûntwikkelingsomjouwing op syn minst ien kear iepene hawwe, witte jo wierskynlik al hoe't jo it fereaske pakket yn R kinne ynstallearje. Om pakketten te ynstallearjen, brûk it standert kommando install.packages() troch it direkt yn R sels te rinnen.
# установка пакетов
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")
Nei ynstallaasje moatte de pakketten ferbûn wurde, wêrfoar't yn 'e measte gefallen it kommando brûkt wurdt library().
# подключение или импорт пакетов в рабочее окружение
library(vroom)
library(readr)
library(dplyr)
library(data.table)
Ynstallaasje fan pakketten yn Python
Dus, as jo pure Python ynstalleare hawwe, dan pandas jo moatte it manuell ynstallearje. Iepenje in kommandorigel, as terminal, ôfhinklik fan jo bestjoeringssysteem en fier it folgjende kommando yn.
pip install pandas
Dan geane wy werom nei Python en ymportearje it ynstalleare pakket mei it kommando import.
import pandas as pd
It laden fan gegevens
Data mining is ien fan 'e wichtichste stappen yn gegevensanalyse. Sawol Python as R, as jo wolle, jouwe jo wiidweidige mooglikheden om gegevens te krijen fan alle boarnen: lokale bestannen, bestannen fan it ynternet, websiden, alle soarten databases.
Yn it heule artikel sille wy ferskate datasets brûke:
Twa downloads fan Google Analytics.
Titanic Passenger Dataset.
Alle gegevens binne op myn GitHub yn 'e foarm fan csv- en tsv-bestannen. Wêr sille wy se freegje?
Laden fan gegevens yn R: tidyverse, vroom, readr
Om gegevens yn in bibleteek te laden tidyverse Der binne twa pakketten: vroom, readr. vroom moderner, mar yn 'e takomst kinne de pakketten kombineare wurde.
vroom vs lêzer
Wat docht de útjefte fan vroom betsjutte foar readr? Foar no binne wy fan plan de twa pakketten apart te litten evoluearje, mar wierskynlik sille wy de pakketten yn 'e takomst ferienigje. Ien neidiel foar it luie lêzen fan vroom is dat bepaalde gegevensproblemen net foarôf kinne wurde rapportearre, dus hoe't se it bêste kinne ferienigje, freget wat gedachte.
vroom vs lêzer
Wat betsjut frijlitting? vroom foar readr? Op it stuit binne wy fan plan om beide pakketten apart te ûntwikkeljen, mar wy sille se wierskynlik yn 'e takomst kombinearje. Ien fan de neidielen fan loai lêzen vroom is dat guon problemen mei de gegevens net fan tefoaren kinne wurde rapportearre, dus jo moatte tinke oer hoe't jo se it bêste kinne kombinearje.
Yn dit artikel sille wy sjen nei beide pakketten foar it laden fan gegevens:
Yn it pakket vroom, nettsjinsteande it csv / tsv-gegevensformaat, wurdt it laden útfierd troch de funksje mei deselde namme vroom(), yn it pakket readr wy brûke in oare funksje foar elk formaat read_tsv() и read_csv().
Laden fan gegevens yn R: data.table
В data.table der is in funksje foar it laden fan gegevens fread().
As wy fergelykje mei R-pakketten, dan is yn dit gefal de syntaksis it tichtst by pandas sil wêze readr, omdat pandas kin freegje gegevens fan oeral, en der is in hiele famylje fan funksjes yn dit pakket read_*().
read_csv()
read_excel()
read_sql()
read_json()
read_html()
En in protte oare funksjes ûntworpen om gegevens út ferskate formaten te lêzen. Mar foar ús doelen is it genôch read_table() of read_csv() mei help fan argumint Sep om de kolomskieding oan te jaan.
В pandas It meitsjen fan frames wurdt útfierd yn ferskate stadia, earst meitsje wy in wurdboek, en dan konvertearje wy it wurdboek yn in dataframe.
It meitsjen fan in dataframe yn Python: pandas
# создаём дата фрейм
gender_dict = {'id': [1, 2],
'gender': ["female", "male"]}
# преобразуем словарь в датафрейм
gender = pd.DataFrame.from_dict(gender_dict)
Selektearje Kolommen
De tabellen wêrmei jo wurkje kinne tsientallen of sels hûnderten kolommen mei gegevens befetsje. Mar om analyse út te fieren, hawwe jo yn 'e regel net alle kolommen nedich dy't beskikber binne yn' e boarnetabel.
Dêrom is ien fan 'e earste operaasjes dy't jo sille útfiere mei de boarnetabel om it te wiskjen fan ûnnedige ynformaasje en it ûnthâld frij te meitsjen dat dizze ynformaasje ynnimt.
Selektearje kolommen yn R: tidyverse, dplyr
syntaksis dplyr is tige ferlykber mei de SQL-query-taal, as jo der mei bekend binne, sille jo dit pakket fluch behearskje.
Om kolommen te selektearjen, brûk de funksje select().
Hjirûnder binne foarbylden fan koade wêrmei jo kolommen op 'e folgjende manieren kinne selektearje:
List fan de nammen fan de fereaske kolommen
Ferwize nei kolomnammen mei reguliere útdrukkingen
Troch gegevenstype of in oare eigenskip fan 'e gegevens yn' e kolom
Selektearje kolommen yn 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)
Selektearje kolommen yn R: data.table
Deselde operaasjes yn data.table wurde wat oars útfierd, oan it begjin fan it artikel joech ik in beskriuwing fan hokker arguminten binnen fjouwerkante heakjes binne data.table.
DT[i,j,by]
Wêr:
ik - wêr, d.w.s. filterjen troch rigen
j - selektearje|update|do, d.w.s. kolommen selektearje en se konvertearje
troch - gegevens groepearring
Variable .SD kinne jo tagong ta alle kolommen, en .SDcols filterje de fereaske kolommen mei reguliere útdrukkingen, of oare funksjes om de nammen fan de kolommen te filterjen dy't jo nedich binne.
Selektearje kolommen yn Python, pandas
Om kolommen op namme yn te selektearjen pandas it is genôch om in list fan har nammen te jaan. En om kolommen mei namme te selektearjen of út te sluten mei reguliere útdrukkingen, moatte jo de funksjes brûke drop() и filter(), en argumint as=1, wêrmei jo oanjaan dat it nedich is om kolommen te ferwurkjen ynstee fan rigen.
Om in fjild te selektearjen op gegevenstype, brûk de funksje select_dtypes(), en yn arguminten ynklusyf of útslute pass in list mei gegevenstypen oerienkommende mei hokker fjilden jo moatte selektearje.
Selektearje kolommen yn 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'])
Filtering rigen
Bygelyks, de boarne tabel kin befetsje ferskate jierren fan gegevens, mar jo moatte allinne analysearje de lêste moanne. Nochris sille ekstra rigels it gegevensferwurkingsproses fertrage en it PC-ûnthâld ferstoppe.
Filtering rigen yn R: tydyverse, dplyr
В dplyr de funksje wurdt brûkt om rigen te filterjen filter(). It nimt in dataframe as it earste argumint, dan listje jo de filterbetingsten.
By it skriuwen fan logyske útdrukkingen om in tabel te filterjen, spesifisearje yn dit gefal de kolomnammen sûnder quotes en sûnder de tabelnamme te ferklearjen.
As jo meardere logyske útdrukkingen brûke om te filterjen, brûk dan de folgjende operators:
& of komma - logysk EN
| - logyske OR
Filtering rigen yn R: dplyr
# фильтрация строк
## dplyr
### фильтрация строк по одному условию
filter(ga_nov, source == "google")
### фильтр по двум условиям соединённым логическим и
filter(ga_nov, source == "google" & sessions >= 10)
### фильтр по двум условиям соединённым логическим или
filter(ga_nov, source == "google" | sessions >= 10)
Filtering rigen yn R: data.table
Lykas ik hjirboppe al skreau, yn data.table data konverzje syntaksis wurdt omsletten yn fjouwerkante heakjes.
DT[i,j,by]
Wêr:
ik - wêr, d.w.s. filterjen troch rigen
j - selektearje|update|do, d.w.s. kolommen selektearje en se konvertearje
troch - gegevens groepearring
It argumint wurdt brûkt om rigen te filterjen i, dy't de earste posysje hat tusken fjouwerkante heakjes.
Kolommen binne tagonklik yn logyske útdrukkingen sûnder oanhalingstekens en sûnder de tabelnamme op te jaan.
Logyske útdrukkingen binne besibbe oan inoar op deselde wize as yn dplyr troch de & en | operators.
Filtering rigen yn R: data.table
## data.table
### фильтрация строк по одному условию
ga_nov[source == "google"]
### фильтр по двум условиям соединённым логическим и
ga_nov[source == "google" & sessions >= 10]
### фильтр по двум условиям соединённым логическим или
ga_nov[source == "google" | sessions >= 10]
Stringen filterjen yn Python: pandas
Filterje op rigen yn pandas fergelykber mei filterjen yn data.table, en wurdt dien yn fjouwerkante heakjes.
Yn dit gefal wurdt tagong ta kolommen needsaaklikerwize útfierd troch de namme fan it dataframe oan te jaan; dan kin de kolomnamme ek oanjûn wurde tusken oanhalingstekens yn fjouwerkante heakjes (foarbylddf['col_name']), of sûnder quotes nei de perioade (foarbylddf.col_name).
As jo in dataframe moatte filterje troch ferskate betingsten, moat elke betingst tusken heakjes pleatst wurde. Logyske betingsten binne ferbûn mei elkoar troch operators & и |.
Stringen filterjen yn 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)]
Groepearjen en aggregaasje fan gegevens
Ien fan 'e meast brûkte operaasjes yn gegevensanalyse is groepearring en aggregaasje.
De syntaksis foar it útfieren fan dizze operaasjes is ferspraat oer alle pakketten dy't wy besjogge.
Yn dit gefal sille wy in dataframe as foarbyld nimme titanich, en berekkenje it oantal en gemiddelde kosten fan kaartsjes ôfhinklik fan de kabine klasse.
Groepearjen en aggregaasje fan gegevens yn R: tidyverse, dplyr
В dplyr de funksje wurdt brûkt foar groepearring group_by(), en foar aggregaasje summarise(). Yn feite, dplyr der is in hiele famylje fan funksjes summarise_*(), mar it doel fan dit artikel is om de basissyntaksis te fergelykjen, dus wy sille net yn sa'n jungle gean.
Funksjonearje group_by() wy passe de tafel as it earste argumint titanich, en dan it fjild oanjûn Pclass, wêrmei't wy ús tabel groepearje. It resultaat fan dizze operaasje mei help fan de operator %>% trochjûn as it earste argumint foar de funksje summarise(), en hat noch 2 fjilden tafoege: passazjiers и avg_priis. Yn 'e earste, mei help fan de funksje length() berekkene it oantal kaartsjes, en yn de twadde mei help fan de funksje mean() krige de gemiddelde ticketpriis.
Groepearjen en aggregaasje fan gegevens yn R: data.table
В data.table it argumint wurdt brûkt foar aggregaasje j dat hat in twadde posysje yn fjouwerkante heakjes, en foar groepearring by of keyby, dy't de tredde posysje hawwe.
De list fan aggregaasjefunksjes yn dit gefal is identyk oan dy beskreaun yn dplyr, omdat dit binne funksjes fan 'e basis R-syntaksis.
Groepearjen en aggregaasje yn R: data.table
## data.table
### фильтрация строк по одному условию
titanic[, .(passangers = length(PassengerId),
avg_price = mean(Fare)),
by = Pclass]
Groepearjen en aggregaasje fan gegevens yn Python: pandas
Groepearje yn pandas gelyk oan dplyr, mar de aggregaasje is net gelyk oan dplyr net oan data.table.
Brûk de metoade om te groepearjen groupby(), wêryn jo in list mei kolommen trochjaan moatte wêrmei't it dataframe groepearre wurdt.
Foar aggregaasje kinne jo de metoade brûke agg()dy't in wurdboek akseptearret. De wurdboekkaaien binne de kolommen wêrop jo de aggregaasjefunksjes sille tapasse, en de wearden binne de nammen fan 'e aggregaasjefunksjes.
Aggregaasjefunksjes:
sum() - gearfetting
min() / max() - minimum en maksimum wearde
mean() - gemiddeld
median() - mediaan
count() - kwantiteit
function reset_index() yn it foarbyld hjirûnder wurdt it brûkt om geneste yndeksen werom te setten dat pandas standert nei dataaggregaasje.
Symbol kinne jo ferhúzje nei de folgjende rigel.
Groepearjen en aggregaasje yn Python: pandas
# группировка и агрегация данных
titanic.groupby(["Pclass"]).
agg({'PassengerId': 'count', 'Fare': 'mean'}).
reset_index()
Fertikale join fan tabellen
In operaasje wêryn jo by twa of mear tabellen fan deselde struktuer meidwaan. De gegevens dy't wy laden befetsje tabellen ga_nov и ga_dec. Dizze tabellen binne identyk yn struktuer, d.w.s. hawwe deselde kolommen, en de gegevenstypen yn dizze kolommen.
Dit is in upload fan Google Analytics foar de moanne novimber en desimber, yn dizze seksje sille wy dizze gegevens kombinearje yn ien tabel.
Fertikaal joining tabellen yn R: tidyverse, dplyr
В dplyr Jo kinne 2 tabellen yn ien kombinearje mei de funksje bind_rows(), trochjaan tabellen as syn arguminten.
Filtering rigen yn R: dplyr
# Вертикальное объединение таблиц
## dplyr
bind_rows(ga_nov, ga_dec)
Fertikaal joining tabellen yn R: data.table
It is ek neat yngewikkeld, lit ús brûke rbind().
Filtering rigen yn R: data.table
## data.table
rbind(ga_nov, ga_dec)
Fertikaal joining tabellen yn Python: pandas
В pandas de funksje wurdt brûkt om oan tabellen te kommen concat(), wêryn jo in list mei frames moatte trochjaan om se te kombinearjen.
Stringen filterjen yn Python: pandas
# вертикальное объединение таблиц
pd.concat([ga_nov, ga_dec])
Horizontale gearfoeging fan tabellen
In operaasje wêryn kolommen fan 'e twadde wurde tafoege oan' e earste tabel troch kaai. It wurdt faak brûkt by it ferrykjen fan in feittabel (bygelyks in tabel mei ferkeapgegevens) mei guon referinsjegegevens (bygelyks de kosten fan in produkt).
D'r binne ferskate soarten joins:
Yn de earder laden tabel titanich wy hawwe in kolom Seks, dy't oerienkomt mei de geslachtskoade fan 'e passazjier:
1 - frou
2 - man
Ek hawwe wy in tabel makke - in referinsjeboek gender. Foar in handiger presintaasje fan gegevens oer it geslacht fan passazjiers, moatte wy de namme fan it geslacht tafoegje út 'e map gender oan tafel titanich.
Horizontale tabel join yn R: tidyverse, dplyr
В dplyr D'r is in hiele famylje fan funksjes foar horizontale gearfoeging:
inner_join()
left_join()
right_join()
full_join()
semi_join()
nest_join()
anti_join()
De meast brûkte yn myn praktyk is left_join().
As de earste twa arguminten nimme de hjirboppe neamde funksjes twa tabellen om mei te dwaan, en as it tredde argumint by jo moatte de kolommen opjaan om mei te dwaan.
Horizontale tabel join yn R: dplyr
# объединяем таблицы
left_join(titanic, gender,
by = c("Sex" = "id"))
Horizontale join fan tabellen yn R: data.table
В data.table Jo moatte meidwaan oan tabellen mei de kaai mei de funksje merge().
Arguminten te fusearjen () funksje yn data.table
x, y - Tabellen foar joining
troch - Kolom dat is de kaai om mei te dwaan as it hat deselde namme yn beide tabellen
by.x, by.y - Kolomnammen dy't moatte wurde gearfoege, as se ferskillende nammen hawwe yn 'e tabellen
all.x RIGHT JOIN-operaasje (sil alle rigen fan 'e twadde tabel ferlitte).
on - Kolom dat is in kaai as it hat deselde namme yn beide tabellen
left_on, right_on - Nammen fan kaai kolommen, as se hawwe ferskillende nammen yn tabellen
Horizontale tabel meidwaan yn Python: pandas
# объединяем по ключу
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")
Basis finsterfunksjes en berekkene kolommen
Finsterfunksjes binne yn betsjutting fergelykber mei aggregaasjefunksjes, en wurde ek faak brûkt yn gegevensanalyse. Mar oars as aggregaasjefunksjes feroarje finsterfunksjes it oantal rigen fan it útgeande dataframe net.
Yn essinsje, mei help fan de finsterfunksje, spjalte wy it ynkommende dataframe yn dielen neffens guon kritearia, d.w.s. troch de wearde fan in fjild, of ferskate fjilden. En wy fiere arithmetic operaasjes op elk finster. It resultaat fan dizze operaasjes wurdt weromjûn yn elke rigel, d.w.s. sûnder it feroarjen fan it totale oantal rigen yn 'e tabel.
Litte wy bygelyks de tafel nimme titanich. Wy kinne berekkenje hokker persintaazje de kosten fan elk ticket wie binnen syn kabine klasse.
Om dit te dwaan, moatte wy yn elke rigel de totale kosten fan in kaartsje krije foar de hjoeddeistige kabineklasse dêr't it kaartsje yn dizze line ta heart, en dan de kosten fan elk ticket te dielen troch de totale kosten fan alle kaartsjes fan deselde kabineklasse .
Finster funksjes yn R: tidyverse, dplyr
Om nije kolommen ta te foegjen, sûnder rigelgroepearring te brûken, yn dplyr tsjinnet funksje mutate().
Jo kinne it hjirboppe beskreaune probleem oplosse troch gegevens per fjild te groepearjen Pclass en gearfette it fjild yn in nije kolom do. Folgjende, ûntgroepearje de tabel en diele de fjildwearden do nei wat der barde yn 'e foarige stap.
It oplossingsalgoritme bliuwt itselde as yn dplyr, wy moatte de tabel splitst yn finsters foar fjild Pclass. Utfier yn in nije kolom it bedrach foar de groep dy't oerienkomt mei elke rige, en heakje in kolom ta wêryn wy it oandiel fan 'e kosten fan elk kaartsje yn syn groep berekkenje.
Om nije kolommen ta te foegjen data.table operator oanwêzich :=. Hjirûnder is in foarbyld fan it oplossen fan in probleem mei it pakket data.table
Finster funksjes yn R: data.table
titanic[,c("Pclass_cost","ticket_fare_rate") := .(sum(Fare), Fare / Pclass_cost),
by = Pclass]
Finsterfunksjes yn Python: pandas
Ien manier om in nije kolom ta te foegjen pandas - brûk de funksje assign(). Om de kosten fan kaartsjes troch kabineklasse te gearfetsje, sûnder rigen te groepearjen, sille wy de funksje brûke transform().
Hjirûnder is in foarbyld fan in oplossing wêryn wy tafoegje oan 'e tabel titanich deselde 2 kolommen.
Hjirûnder is in tabel fan korrespondinsje tusken metoaden foar it útfieren fan ferskate operaasjes mei gegevens yn 'e pakketten dy't wy hawwe beskôge.
beskriuwing
tidyverse
data.table
pandas
It laden fan gegevens vroom()/ readr::read_csv() / readr::read_tsv() fread() read_csv()
It meitsjen fan dataframes tibble() data.table() dict() + from_dict()
Selektearje Kolommen select()
argumint j, twadde posysje yn fjouwerkante heakjes
wy passe de list mei fereaske kolommen yn fjouwerkante heakjes / drop() / filter() / select_dtypes()
Filtering rigen filter()
argumint i, earste posysje yn fjouwerkante heakjes
Wy listje de filterbetingsten yn fjouwerkante heakjes / filter()
Groepearring en Aggregaasje group_by() + summarise()
arguminten j + by groupby() + agg()
Fertikale feriening fan tabellen (UNION) bind_rows() rbind() concat()
Horizontale gearfoeging fan tabellen (JOIN) left_join() / *_join() merge() merge()
Basis finsterfunksjes en it tafoegjen fan berekkene kolommen group_by() + mutate()
argumint j mei help fan de operator := + argumint by transform() + assign()
konklúzje
Miskien yn it artikel beskreau ik net de meast optimale ymplemintaasjes fan gegevensferwurking, dus ik sil bliid wêze as jo myn flaters yn 'e opmerkingen korrigearje, of gewoan de ynformaasje jûn yn it artikel oanfolje mei oare techniken foar wurkjen mei gegevens yn R / Python.
Sa't ik hjirboppe skreau, wie it doel fan it artikel net om jins miening op te lizzen oer hokker taal better is, mar om de kâns te ferienfâldigjen om beide talen te learen, of, as it nedich is, tusken har te migrearjen.
As jo it artikel leuk fine, sil ik bliid wêze om nije abonnees te hawwen op myn youtube и telegram kanalen.
Poll
Hokker fan de folgjende pakketten brûke jo yn jo wurk?
Yn 'e opmerkings kinne jo de reden foar jo kar skriuwe.
Allinnich registrearre brûkers kinne meidwaan oan 'e enkête. Ynlogge, asjebleaft.
Hokker gegevensferwurkingspakket brûke jo (jo kinne ferskate opsjes selektearje)