Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Með því að leita að R eða Python á netinu finnurðu milljónir greina og kílómetra af umræðum um efnið hver er betri, hraðari og þægilegri til að vinna með gögn. En því miður eru allar þessar greinar og deilur ekkert sérstaklega gagnlegar.

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Tilgangur þessarar greinar er að bera saman helstu gagnavinnsluaðferðir í vinsælustu pökkunum beggja tungumála. Og hjálpaðu lesendum fljótt að ná tökum á einhverju sem þeir vita ekki ennþá. Fyrir þá sem skrifa í Python, finna út hvernig á að gera það sama í R, og öfugt.

Í greininni munum við greina setningafræði vinsælustu pakkana í R. Þetta eru pakkarnir sem eru í safninu tidyverseog líka pakkann data.table. Og bera saman setningafræði þeirra við pandas, vinsælasti gagnagreiningarpakkinn í Python.

Við munum fara skref fyrir skref í gegnum alla leið gagnagreiningar frá því að hlaða þeim til að framkvæma greiningargluggaaðgerðir með Python og R.

efni

Þessa grein er hægt að nota sem svindlblað ef þú hefur gleymt hvernig á að framkvæma einhverja gagnavinnsluaðgerð í einum af pakkanum sem eru til skoðunar.

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

  1. Helsti setningafræðimunur á R og Python
    1.1. Aðgangur að pakkaaðgerðum
    1.2. Verkefni
    1.3. Flokkun
    1.4. Aðferðir og OOP
    1.5. Leiðslur
    1.6. Gagnauppbyggingar
  2. Nokkur orð um pakkana sem við munum nota
    2.1. snyrtilegur
    2.2. gögn.tafla
    2.3. pöndur
  3. Að setja upp pakka
  4. Hleður gögnum
  5. Að búa til gagnaramma
  6. Að velja dálkana sem þú þarft
  7. Sía raðir
  8. Flokkun og söfnun
  9. Lóðrétt samruni taflna (UNION)
  10. Lárétt sameining töflur (JOIN)
  11. Grunnaðgerðir glugga og reiknaðar dálkar
  12. Samsvörunartafla milli gagnavinnsluaðferða í R og Python
  13. Ályktun
  14. Stutt könnun um hvaða pakka þú notar

Ef þú hefur áhuga á gagnagreiningu gætirðu fundið mitt símskeyti и YouTube rásir. Mest af efninu er tileinkað R tungumálinu.

Helsti setningafræðimunur á R og Python

Til að auðvelda þér að skipta úr Python yfir í R, eða öfugt, mun ég nefna nokkur meginatriði sem þú þarft að huga að.

Aðgangur að pakkaaðgerðum

Þegar pakki hefur verið hlaðið inn í R þarftu ekki að tilgreina pakkanafnið til að fá aðgang að aðgerðum hans. Í flestum tilfellum er þetta ekki algengt í R, en það er ásættanlegt. Þú þarft alls ekki að flytja inn pakka ef þú þarft eina af aðgerðum hans í kóðanum þínum, heldur einfaldlega hringdu í það með því að tilgreina nafn pakkans og heiti aðgerðarinnar. Skiljan á milli pakka- og fallheita í R er tvöfaldur tvípunktur. package_name::function_name().

Í Python er þvert á móti talið klassískt að kalla föll pakka með því að tilgreina nafn hans sérstaklega. Þegar pakki er hlaðið niður er honum venjulega gefið stytt nafn, t.d. pandas venjulega er notað dulnefni pd. Hægt er að nálgast pakkaaðgerð með punkti package_name.function_name().

Verkefni

Í R er algengt að nota ör til að úthluta gildi á hlut. obj_name <- value, þó að eitt jafngildi sé leyfilegt, þá er staka jafngildismerkið í R notað fyrst og fremst til að senda gildi til að virka rök.

Í Python er úthlutun eingöngu gerð með einu jafnaðarmerki obj_name = value.

Flokkun

Hér er líka töluverður munur. Í R byrjar flokkun á einum og inniheldur alla tilgreinda þætti á bilinu sem myndast,

Í Python byrjar flokkun frá núlli og valið svið inniheldur ekki síðasta þáttinn sem tilgreindur er í skránni. Svo hönnun x[i:j] í Python mun ekki innihalda j þáttinn.

Það er líka munur á neikvæðri verðtryggingu, í R-tákn x[-1] mun skila öllum þáttum vigursins nema þeim síðasta. Í Python mun svipuð nótnaskrift aðeins skila síðasta þættinum.

Aðferðir og OOP

R útfærir OOP á sinn hátt, ég skrifaði um þetta í greininni "OOP á R tungumálinu (hluti 1): S3 flokkar". Almennt séð er R starfhæft tungumál og allt í því er byggt á föllum. Þess vegna, til dæmis, fyrir Excel notendur, farðu til tydiverse það verður auðveldara en pandas. Þó þetta sé kannski huglæg skoðun mín.

Í stuttu máli þá hafa hlutir í R ekki aðferðir (ef við tölum um S3 flokka, en það eru aðrar OOP útfærslur sem eru mun sjaldgæfari). Það eru aðeins almennar aðgerðir sem vinna úr þeim á mismunandi hátt eftir flokki hlutarins.

Leiðslur

Kannski er þetta nafnið á pandas Það verður ekki alveg rétt, en ég skal reyna að útskýra merkinguna.

Til að spara ekki milliútreikninga og ekki framleiða óþarfa hluti í vinnuumhverfinu er hægt að nota eins konar leiðslu. Þeir. færa niðurstöðu útreiknings frá einni aðgerð til annarrar og vista ekki milliniðurstöður.

Tökum eftirfarandi kóðadæmi, þar sem við geymum milliútreikninga í aðskildum hlutum:

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

Við framkvæmdum 3 aðgerðir í röð og niðurstaða hverrar var vistuð í sérstökum hlut. En í raun þurfum við ekki þessa millihluta.

Eða jafnvel verra, en kunnugri Excel notendum.

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

Í þessu tilviki vistuðum við ekki milliútreikningsniðurstöður, en lestur kóða með hreiðri aðgerðum er afar óþægilegt.

Við munum skoða nokkrar aðferðir við gagnavinnslu í R og þær framkvæma svipaðar aðgerðir á mismunandi hátt.

Lagnir í bókasafni tidyverse útfært af rekstraraðila %>%.

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

Þannig tökum við afrakstur vinnunnar func1() og afgreiða það sem fyrstu röksemd til func2(), þá sendum við niðurstöðu þessa útreiknings sem fyrstu rök func3(). Og á endanum skrifum við alla útreikninga sem framkvæmdir eru í hlutinn obj <-.

Allt ofangreint er lýst betur en orð með þessu meme:
Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

В data.table keðjur eru notaðar á svipaðan hátt.

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

Í hverjum hornklofa er hægt að nota niðurstöðu fyrri aðgerðarinnar.

В pandas slíkar aðgerðir eru aðskildar með punkti.

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

Þeir. við tökum borðið okkar df og nota hennar aðferð fun1(), þá beitum við aðferðinni til að fá niðurstöðu fun2()eftir fun3(). Niðurstaðan sem myndast er vistuð í hlut obj .

Gagnauppbyggingar

Gagnauppbygging í R og Python eru svipuð, en bera mismunandi nöfn.

Lýsing
Nafn í R
Nafn í Python/pandas

Uppbygging borðs
data.frame, data.table, tibble
DataFrame

Einvíddar gildislisti
Vigur
Röð í pöndum eða listi í hreinum Python

Fjölþrepa uppbygging án töflu
Listi
Orðabók (dict)

Við munum skoða nokkra aðra eiginleika og mun á setningafræði hér að neðan.

Nokkur orð um pakkana sem við munum nota

Í fyrsta lagi mun ég segja þér aðeins frá pakkanum sem þú munt kynnast í þessari grein.

snyrtilegur

Официальный сайт: tidyverse.org
Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka
Bókasafnið tidyverse skrifað af Hedley Wickham, yfirrannsóknarfræðingi við RStudio. tidyverse samanstendur af glæsilegu setti af pökkum sem einfalda gagnavinnslu, 5 þeirra eru innifalin í 10 efstu niðurhalunum frá CRAN geymslunni.

Kjarni bókasafnsins samanstendur af eftirfarandi pökkum: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Hver þessara pakka miðar að því að leysa ákveðið vandamál. Til dæmis dplyr búið til til að vinna með gögn, tidyr að koma gögnunum á snyrtilegt form, stringr einfaldar vinnu með strengi, og ggplot2 er eitt af vinsælustu gagnasjónunartækjunum.

Kosturinn tidyverse er einfaldleikinn og auðlesinn setningafræði, sem er að mörgu leyti lík SQL fyrirspurnarmálinu.

gögn.tafla

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til bakaОфициальный сайт: r-datatable.com

Eftir höfundinn data.table er Matt Dole hjá H2O.ai.

Fyrsta útgáfa bókasafnsins fór fram árið 2006.

Setningafræði pakkans er ekki eins þægileg og í tidyverse og minnir meira á klassíska gagnaramma í R, en á sama tíma verulega stækkað í virkni.

Öllum meðhöndlun með töflunni í þessum pakka er lýst í hornklofa, og ef þú þýðir setningafræði data.table í SQL færðu eitthvað á þessa leið: data.table[ WHERE, SELECT, GROUP BY ]

Styrkur þessa pakka er hraði vinnslu á miklu magni af gögnum.

pöndur

Официальный сайт: pandas.pydata.org Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Nafn bókasafnsins kemur frá hagfræðihugtakinu „spjaldsgögn“, notað til að lýsa margvíða skipulögðum upplýsingum.

Eftir höfundinn pandas er Bandaríkjamaðurinn Wes McKinney.

Þegar kemur að gagnagreiningu í Python, jöfn pandas Nei. Mjög fjölvirkur, háþróaður pakki sem gerir þér kleift að framkvæma hvaða meðferð sem er með gögn, allt frá því að hlaða gögnum frá hvaða heimildum sem er til að sjá þau.

Að setja upp viðbótarpakka

Pakkarnir sem fjallað er um í þessari grein eru ekki innifalin í grunndreifingum R og Python. Þó að það sé lítill fyrirvari, ef þú settir upp Anaconda dreifinguna, settu þá upp til viðbótar pandas ekki krafist.

Að setja upp pakka í R

Ef þú hefur opnað RStudio þróunarumhverfið að minnsta kosti einu sinni, veistu líklega nú þegar hvernig á að setja upp nauðsynlegan pakka í R. Til að setja upp pakka skaltu nota staðlaða skipunina install.packages() með því að keyra það beint í R sjálft.

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

Eftir uppsetningu þarf að tengja pakkana, sem í flestum tilfellum er skipunin notuð fyrir library().

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

Að setja upp pakka í Python

Svo, ef þú ert með hreint Python uppsett, þá pandas þú þarft að setja það upp handvirkt. Opnaðu skipanalínu, eða flugstöð, allt eftir stýrikerfinu þínu og sláðu inn eftirfarandi skipun.

pip install pandas

Síðan snúum við aftur til Python og flytjum inn uppsetta pakkann með skipuninni import.

import pandas as pd

Hleður gögnum

Gagnanám er eitt mikilvægasta skrefið í gagnagreiningu. Bæði Python og R, ef þess er óskað, veita þér víðtæk tækifæri til að fá gögn frá hvaða aðilum sem er: staðbundnum skrám, skrám af internetinu, vefsíðum, alls kyns gagnagrunnum.

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Í gegnum greinina munum við nota nokkur gagnapakka:

  1. Tvö niðurhal frá Google Analytics.
  2. Titanic farþegagagnasett.

Öll gögn eru á mínum GitHub í formi csv og tsv skráa. Hvaðan munum við biðja um þá?

Hleður gögnum inn í R: tidyverse, vroom, readr

Til að hlaða gögnum inn í bókasafn tidyverse Það eru tveir pakkar: vroom, readr. vroom nútímalegri, en í framtíðinni gætu pakkarnir verið sameinaðir.

Tilvitnun í opinber skjöl vroom.

vroom vs lesandi
Hvað þýðir útgáfa af vroom meina fyrir readr? Í bili ætlum við að láta pakkana tvo þróast í sitt hvoru lagi, en líklega munum við sameina pakkana í framtíðinni. Einn ókostur við latan lestur vroom er að ekki er hægt að tilkynna um ákveðin gagnavandamál fyrirfram, svo hvernig best er að sameina þau þarfnast umhugsunar.

vroom vs lesandi
Hvað þýðir losun? vroom í readr? Eins og er ætlum við að þróa báða pakkana sérstaklega, en við munum líklega sameina þá í framtíðinni. Einn af ókostunum við letilegan lestur vroom er að ekki er hægt að tilkynna um einhver vandamál með gögnin fyrirfram og því þarf að hugsa um hvernig best sé að sameina þau.

Í þessari grein munum við skoða báða gagnahleðslupakkana:

Hleður gögnum í R: vroom pakkann

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

Hleður gögnum inn í 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")

Í pakkanum vroom, óháð csv / tsv gagnasniði, fer hleðsla fram með aðgerðinni með sama nafni vroom(), í pakkanum readr við notum mismunandi aðgerð fyrir hvert snið read_tsv() и read_csv().

Hleður gögnum inn í R: data.table

В data.table það er aðgerð til að hlaða gögnum fread().

Hleður gögnum í R: data.table pakkann

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

Hleður gögnum í Python: pandas

Ef við berum saman við R pakka, þá er í þessu tilfelli setningafræði næst pandas mun readr, vegna þess pandas getur beðið um gögn hvaðan sem er, og það er heil fjölskylda af aðgerðum í þessum pakka read_*().

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

Og margar aðrar aðgerðir sem eru hannaðar til að lesa gögn frá ýmsum sniðum. En í okkar tilgangi er það nóg read_table() eða read_csv() nota rök september til að tilgreina dálkaskil.

Hleður gögnum í 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")

Að búa til gagnaramma

Tafla Titanic, sem við hlóðum, þar er akur Kynlíf, sem geymir kynauðkenni farþega.

En til að fá þægilegri framsetningu á gögnum með tilliti til kynferðis farþega ættirðu að nota nafnið frekar en kynkóðann.

Til að gera þetta munum við búa til litla möppu, töflu þar sem aðeins verða 2 dálkar (kóði og nafn kyns) og 2 línur, í sömu röð.

Að búa til gagnaramma í R: tidyverse, dplyr

Í kóðadæminu hér að neðan búum við til viðkomandi gagnaramma með því að nota aðgerðina tibble() .

Að búa til gagnaramma í R: dplyr

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

Að búa til gagnaramma í R: data.table

Að búa til gagnaramma í R: data.table

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

Að búa til gagnaramma í Python: pandas

В pandas Gerð ramma fer fram í nokkrum áföngum, fyrst búum við til orðabók og síðan umbreytum við orðabókinni í gagnaramma.

Að búa til gagnaramma í Python: pandas

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

Að velja dálka

Töflurnar sem þú vinnur með geta innihaldið tugi eða jafnvel hundruð dálka af gögnum. En til að framkvæma greiningu þarftu að jafnaði ekki alla dálkana sem eru tiltækar í upprunatöflunni.

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Þess vegna er ein af fyrstu aðgerðunum sem þú framkvæmir með upprunatöflunni að hreinsa hana af óþarfa upplýsingum og losa um minni sem þessar upplýsingar taka.

Val á dálkum í R: tidyverse, dplyr

Setningafræði dplyr er mjög líkt SQL fyrirspurnarmálinu, ef þú þekkir það muntu fljótt ná góðum tökum á þessum pakka.

Notaðu aðgerðina til að velja dálka select().

Hér að neðan eru dæmi um kóða sem þú getur valið dálka með á eftirfarandi hátt:

  • Listi yfir nöfn nauðsynlegra dálka
  • Vísa til dálkaheita með því að nota regluleg segð
  • Eftir gagnategund eða öðrum eiginleikum gagnanna í dálknum

Velja dálka í 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)

Val á dálkum í R: data.table

Sömu aðgerðir í data.table eru gerðar nokkuð öðruvísi, í upphafi greinarinnar gaf ég lýsingu á því hvaða rök eru innan hornklofa í data.table.

DT[i,j,by]

Hvar:
i - hvar, þ.e. síun eftir línum
j - veldu|uppfæra|gera, þ.e. velja dálka og breyta þeim
eftir - gagnaflokkun

Val á dálkum í 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$")]

Breytilegt .SD gerir þér kleift að fá aðgang að öllum dálkum, og .SDcols síaðu nauðsynlega dálka með því að nota regluleg segð, eða aðrar aðgerðir til að sía nöfnin á dálkunum sem þú þarft.

Velja dálka í Python, panda

Til að velja dálka eftir nafni í pandas það er nóg að koma með lista yfir nöfn þeirra. Og til að velja eða útiloka dálka eftir nafni með því að nota reglulegar segðir þarftu að nota aðgerðirnar drop() и filter(), og rök ás=1, þar sem þú gefur til kynna að nauðsynlegt sé að vinna dálka frekar en línur.

Notaðu aðgerðina til að velja reit eftir gagnategund select_dtypes(), og í rökræður fela eða útiloka sendu lista yfir gagnategundir sem samsvara hvaða reiti þú þarft að velja.

Velja dálka í 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'])

Sía raðir

Til dæmis getur upprunataflan innihaldið nokkur ár af gögnum, en þú þarft aðeins að greina síðasta mánuð. Aftur munu aukalínur hægja á gagnavinnsluferlinu og stífla tölvuminni.

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Sía raðir í R: tydyverse, dplyr

В dplyr aðgerðin er notuð til að sía raðir filter(). Það tekur gagnaramma sem fyrstu rök, síðan listar þú upp síunarskilyrðin.

Þegar þú skrifar rökrænar tjáningar til að sía töflu, í þessu tilviki, tilgreindu dálknöfnin án gæsalappa og án þess að gefa upp töfluheitið.

Þegar þú notar margar rökfræðilegar tjáningar til að sía skaltu nota eftirfarandi rekstraraðila:

  • & eða kommu - rökrétt OG
  • | - rökrétt OR

Sía raðir í R: dplyr

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

Sía raðir í R: data.table

Eins og ég skrifaði þegar hér að ofan, í data.table setningafræði umbreytingar gagna er innan hornklofa.

DT[i,j,by]

Hvar:
i - hvar, þ.e. síun eftir línum
j - veldu|uppfæra|gera, þ.e. velja dálka og breyta þeim
eftir - gagnaflokkun

Rökin eru notuð til að sía línur i, sem hefur fyrstu stöðu innan hornklofa.

Hægt er að nálgast dálka í rökrænum segðum án gæsalappa og án þess að tilgreina töfluheiti.

Rökfræðileg tjáning tengjast hvert öðru á sama hátt og í dplyr í gegnum & og | rekstraraðila.

Sía raðir í R: data.table

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

Sía strengi í Python: pandas

Sía eftir línum í pandas svipað og að sía inn data.table, og er gert innan hornklofa.

Í þessu tilviki er aðgangur að dálkum nauðsynlegur gerður með því að tilgreina heiti gagnarammans; þá er einnig hægt að tilgreina dálknafnið innan gæsalappa innan hornklofa (Dæmi df['col_name']), eða án tilvitnana eftir tímabilið (Dæmi df.col_name).

Ef þú þarft að sía gagnaramma eftir nokkrum skilyrðum verður hvert skilyrði að vera sett innan sviga. Rökfræðileg skilyrði eru tengd hvert öðru af rekstraraðilum & и |.

Sía strengi í 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)]

Flokkun og samansöfnun gagna

Ein algengasta aðgerðin í gagnagreiningu er flokkun og samansöfnun.

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Setningafræðin til að framkvæma þessar aðgerðir er á víð og dreif um alla pakka sem við skoðum.

Í þessu tilviki munum við taka gagnaramma sem dæmi Titanic, og reikna út fjölda og meðalkostnað miða eftir farþegaflokki.

Flokkun og samansöfnun gagna í R: tidyverse, dplyr

В dplyr fallið er notað til að flokka group_by(), og til samsöfnunar summarise(). Reyndar, dplyr það er heil fjölskylda af aðgerðum summarise_*(), en tilgangur þessarar greinar er að bera saman grunnsetningafræðina, svo við förum ekki inn í slíkan frumskóg.

Grunnuppsöfnunaraðgerðir:

  • sum() — samantekt
  • min() / max() – lágmarks- og hámarksgildi
  • mean() - meðaltal
  • median() — miðgildi
  • length() - magn

Flokkun og samsöfnun í R: dplyr

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

Í virkni group_by() við fórum framhjá borðinu sem fyrstu rök Titanic, og tilgreindi síðan reitinn Pclass, sem við munum flokka borðið okkar eftir. Niðurstaðan af þessari aðgerð með því að nota rekstraraðila %>% send sem fyrstu rök fyrir fallinu summarise(), og bætti við 2 reitum í viðbót: farþega и meðalverð. Í fyrsta lagi með því að nota aðgerðina length() reiknað út fjölda miða, og í seinni með því að nota aðgerðina mean() fengið meðalmiðaverð.

Flokkun og samansöfnun gagna í R: data.table

В data.table rökin eru notuð til að safna saman j sem hefur aðra stöðu innan hornklofa, og til að flokka by eða keyby, sem hafa þriðja sæti.

Listinn yfir söfnunaraðgerðir í þessu tilfelli er eins og lýst er í dplyr, vegna þess þetta eru aðgerðir úr grunn R setningafræði.

Flokkun og samansöfnun í R: data.table

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

Flokkun og samansöfnun gagna í Python: pandas

Flokkun inn pandas svipað dplyr, en samansöfnunin er ekki svipuð og dplyr ekki á data.table.

Til að hópa, notaðu aðferðina groupby(), þar sem þú þarft að senda lista yfir dálka sem gagnaramminn verður flokkaður eftir.

Til að safna saman er hægt að nota aðferðina agg()sem tekur við orðabók. Orðabókarlyklarnir eru dálkarnir sem þú notar söfnunaraðgerðirnar á og gildin eru nöfn söfnunaraðgerðanna.

Söfnunaraðgerðir:

  • sum() — samantekt
  • min() / max() – lágmarks- og hámarksgildi
  • mean() - meðaltal
  • median() — miðgildi
  • count() - magn

Virka reset_index() í dæminu hér að neðan er það notað til að endurstilla hreiður vísitölur sem pandas sjálfgefið eftir gagnasöfnun.

Táknið gerir þér kleift að fara í næstu línu.

Flokkun og samsöfnun í Python: pandas

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

Lóðrétt samsetning borða

Aðgerð þar sem þú sameinar tvær eða fleiri töflur með sömu uppbyggingu. Gögnin sem við hlóðum innihalda töflur ga_nov и ga_des. Þessar töflur eru eins að uppbyggingu, þ.e. hafa sömu dálka og gagnategundirnar í þessum dálkum.

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Þetta er upphleðsla frá Google Analytics fyrir nóvember og desember, í þessum hluta munum við sameina þessi gögn í eina töflu.

Lóðrétt sameinuð töflur í R: tidyverse, dplyr

В dplyr Þú getur sameinað 2 töflur í eina með því að nota aðgerðina bind_rows(), framhjá töflum sem rök.

Sía raðir í R: dplyr

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

Lóðrétt sameining töflur í R: data.table

Það er líka ekkert flókið, við skulum nota rbind().

Sía raðir í R: data.table

## data.table
rbind(ga_nov, ga_dec)

Lóðrétt sameinuð töflur í Python: pandas

В pandas fallið er notað til að sameina töflur concat(), þar sem þú þarft að senda lista yfir ramma til að sameina þá.

Sía strengi í Python: pandas

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

Lárétt sameining borða

Aðgerð þar sem dálkum úr annarri er bætt við fyrstu töfluna með lykli. Það er oft notað þegar staðreyndatöflu (til dæmis töflu með sölugögnum) er auðgað með einhverjum viðmiðunargögnum (til dæmis kostnaði við vöru).

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Það eru nokkrar gerðir af tengingum:

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Í áður hlaðinni töflu Titanic við erum með dálk Kynlíf, sem samsvarar kynnúmeri farþega:

1 - kvenkyns
2 - karlkyns

Einnig höfum við búið til töflu - uppflettibók kyn. Til að fá þægilegri framsetningu á gögnum um kyn farþega þurfum við að bæta við nafni kynsins úr skránni. kyn að borðinu Titanic.

Lárétt borð sameinast í R: tidyverse, dplyr

В dplyr Það er heil fjölskylda af aðgerðum fyrir lárétta tengingu:

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

Það sem oftast er notað á mínum æfingum er left_join().

Sem fyrstu tvær rökin þurfa föllin sem talin eru upp hér að ofan tvær töflur til að sameinast og sem þriðja rökin by þú verður að tilgreina dálkana til að taka þátt í.

Lárétt borð sameinast í R: dplyr

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

Lárétt samtenging taflna í R: data.table

В data.table Þú þarft að tengja töflur með lykli með því að nota aðgerðina merge().

Rök til að sameina() virka í data.table

  • x, y — Töflur til að sameina
  • eftir — Dálkur sem er lykillinn til að sameinast ef hann hefur sama nafn í báðum töflunum
  • by.x, by.y — Dálknöfn sem á að sameina, ef þau hafa önnur nöfn í töflunum
  • all, all.x, all.y — Join tegund, all mun skila öllum línum úr báðum töflum, all.x samsvarar LEFT JOIN aðgerðinni (mun yfirgefa allar raðir fyrstu töflunnar), all.y — samsvarar RIGHT JOIN aðgerð (mun yfirgefa allar raðir seinni töflunnar).

Lárétt samtenging taflna í R: data.table

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

Lárétt borð sameinast í Python: pandas

Eins og í data.tableÍ pandas fallið er notað til að sameina töflur merge().

Rök samruna() virka í pöndum

  • hvernig — Tengingartegund: vinstri, hægri, ytri, innri
  • on — Dálkur sem er lykill ef hann hefur sama nafn í báðum töflunum
  • left_on, right_on — Nöfn lykildálka, ef þeir hafa mismunandi nöfn í töflum

Lárétt borð sameinast í Python: pandas

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

Grunnaðgerðir glugga og reiknaðar dálkar

Gluggaaðgerðir eru svipaðar að merkingu og samsöfnunaraðgerðir og eru einnig oft notaðar í gagnagreiningu. En ólíkt samansafnunaraðgerðum breyta gluggaaðgerðir ekki fjölda raða í útgefandi gagnarammanum.

Hvaða tungumál á að velja til að vinna með gögn - R eða Python? Bæði! Flutningur frá pöndum yfir í tidyverse og data.table og til baka

Í meginatriðum, með því að nota gluggaaðgerðina, skiptum við komandi gagnaramma í hluta samkvæmt einhverjum viðmiðum, þ.e. með gildi svæðis, eða nokkurra reita. Og við gerum reikniaðgerðir á hverjum glugga. Niðurstaða þessara aðgerða kemur til baka í hverri línu, þ.e. án þess að breyta heildarfjölda lína í töflunni.

Tökum til dæmis töfluna Titanic. Við getum reiknað út hversu hátt hlutfall kostnaður við hvern miða var innan klefaflokks síns.

Til þess þurfum við að fá í hverja línu heildarkostnað miða fyrir núverandi farþegaflokk sem miðinn í þessari línu tilheyrir, deila síðan kostnaði hvers miða með heildarkostnaði allra miða í sama farþegaflokki. .

Gluggaaðgerðir í R: tidyverse, dplyr

Til að bæta við nýjum dálkum, án þess að nota línuflokkun, í dplyr þjónar hlutverki mutate().

Þú getur leyst vandamálið sem lýst er hér að ofan með því að flokka gögn eftir reit Pclass og dregur völlinn saman í nýjum dálki Fare. Næst skaltu taka upp töfluna og deila reitgildunum Fare við það sem gerðist í fyrra skrefi.

Gluggaaðgerðir í R: dplyr

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

Gluggaaðgerðir í R: data.table

Lausnaralgrímið er það sama og í dplyr, við þurfum að skipta töflunni í glugga eftir reit Pclass. Setjið út í nýjan dálk upphæðina fyrir hópinn sem samsvarar hverri línu og bætið við dálki þar sem við reiknum út kostnaðarhlutdeild hvers miða í hópnum sínum.

Til að bæta nýjum dálkum við data.table rekstraraðili viðstaddur :=. Hér að neðan er dæmi um að leysa vandamál með því að nota pakkann data.table

Gluggaaðgerðir í R: data.table

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

Gluggaaðgerðir í Python: pandas

Ein leið til að bæta nýjum dálki við pandas - notaðu aðgerðina assign(). Til að draga saman kostnað við miða eftir klefaflokkum, án þess að flokka raðir, munum við nota aðgerðina transform().

Hér að neðan er dæmi um lausn þar sem við bætum við töfluna Titanic sömu 2 dálkarnir.

Gluggaaðgerðir í Python: pandas

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

Samsvarstafla fyrir aðgerðir og aðferðir

Hér að neðan er samsvörunartafla á milli aðferða til að framkvæma ýmsar aðgerðir með gögnum í pökkunum sem við höfum skoðað.

Lýsing
snyrtilegur
gögn.tafla
pöndur

Hleður gögnum
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Að búa til gagnaramma
tibble()
data.table()
dict() + from_dict()

Að velja dálka
select()
rök j, önnur sæti í hornklofa
við sendum listann yfir nauðsynlega dálka í hornklofa / drop() / filter() / select_dtypes()

Sía raðir
filter()
rök i, fyrsta staðan innan hornklofa
Við skráum síunarskilyrðin í hornklofa / filter()

Flokkun og söfnun
group_by() + summarise()
rök j + by
groupby() + agg()

Lóðrétt samruni taflna (UNION)
bind_rows()
rbind()
concat()

Lárétt sameining töflur (JOIN)
left_join() / *_join()
merge()
merge()

Grunnaðgerðir glugga og bæta við reiknuðum dálkum
group_by() + mutate()
rök j með því að nota símafyrirtækið := + rök by
transform() + assign()

Ályktun

Kannski í greininni lýsti ég ekki bestu útfærslum gagnavinnslu, svo ég mun vera ánægður ef þú leiðréttir mistök mín í athugasemdunum, eða einfaldlega bætir við upplýsingarnar sem gefnar eru í greininni með öðrum aðferðum til að vinna með gögn í R / Python.

Eins og ég skrifaði hér að ofan, var tilgangur greinarinnar ekki að setja skoðun manns á því hvaða tungumál er betra, heldur að einfalda tækifærið til að læra bæði tungumálin, eða, ef nauðsyn krefur, flytja á milli þeirra.

Ef þér líkaði við greinina mun ég vera ánægður með að hafa nýja áskrifendur að minni YouTube и símskeyti rásir.

Опрос

Hvaða af eftirfarandi pakka notar þú í vinnunni þinni?

Í athugasemdum geturðu skrifað ástæðuna fyrir vali þínu.

Aðeins skráðir notendur geta tekið þátt í könnuninni. Skráðu þig inn, takk.

Hvaða gagnavinnslupakka notar þú (þú getur valið nokkra valkosti)

  • 45,2%snyrtilegur 19

  • 33,3%gagna.tafla14

  • 54,8%pöndur 23

42 notendur kusu. 9 notendur sátu hjá.

Heimild: www.habr.com

Bæta við athugasemd