Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Nipa wiwa R tabi Python lori Intanẹẹti, iwọ yoo rii awọn miliọnu awọn nkan ati awọn ibuso ti awọn ijiroro lori koko-ọrọ eyiti ọkan dara julọ, yiyara ati irọrun diẹ sii fun ṣiṣẹ pẹlu data. Ṣugbọn laanu, gbogbo awọn nkan wọnyi ati awọn ariyanjiyan ko wulo paapaa.

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Idi ti nkan yii ni lati ṣe afiwe awọn ilana imuṣiṣẹ data ipilẹ ni awọn idii olokiki julọ ti awọn ede mejeeji. Ati iranlọwọ fun awọn oluka ni kiakia lati ṣakoso nkan ti wọn ko mọ sibẹsibẹ. Fun awọn ti o kọ ni Python, wa bi o ṣe le ṣe ohun kanna ni R, ati ni idakeji.

Lakoko nkan naa a yoo ṣe itupalẹ sintasi ti awọn idii olokiki julọ ni R. Iwọnyi jẹ awọn idii ti o wa ninu ile-ikawe tidyverseati ki o tun awọn package data.table. Ki o si afiwe wọn sintasi pẹlu pandas, package itupalẹ data olokiki julọ ni Python.

A yoo lọ ni igbese nipa igbese nipasẹ gbogbo ọna ti itupalẹ data lati ikojọpọ rẹ si ṣiṣe awọn iṣẹ window itupalẹ nipa lilo Python ati R.

Awọn akoonu

Nkan yii le ṣee lo bi iwe iyanjẹ ti o ba ti gbagbe bi o ṣe le ṣe diẹ ninu awọn iṣẹ ṣiṣe data ninu ọkan ninu awọn idii ti o wa labẹ ero.

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

  1. Awọn iyatọ sintasi akọkọ laarin R ati Python
    1.1. Iwọle si Awọn iṣẹ Package
    1.2. Iṣẹ iyansilẹ
    1.3. Titọka
    1.4. Awọn ọna ati OOP
    1.5. Awọn paipu
    1.6. Data Awọn ẹya
  2. Awọn ọrọ diẹ nipa awọn idii ti a yoo lo
    2.1. tidyverse
    2.2. tabili
    2.3. panda
  3. Awọn idii fifi sori ẹrọ
  4. Gbigba Data
  5. Ṣiṣẹda dataframes
  6. Yiyan awọn ọwọn ti o nilo
  7. Sisẹ awọn ori ila
  8. Iṣakojọpọ ati Iṣakojọpọ
  9. Iṣọkan inaro ti awọn tabili (UNION)
  10. Idarapọ petele ti awọn tabili (darapọ)
  11. Awọn iṣẹ window ipilẹ ati awọn ọwọn iṣiro
  12. Tabili ibaramu laarin awọn ọna ṣiṣe data ni R ati Python
  13. ipari
  14. A kukuru iwadi nipa eyi ti package ti o lo

Ti o ba nifẹ si itupalẹ data, o le rii mi telegram и youtube awọn ikanni. Pupọ julọ akoonu jẹ igbẹhin si ede R.

Awọn iyatọ sintasi akọkọ laarin R ati Python

Lati jẹ ki o rọrun fun ọ lati yipada lati Python si R, tabi idakeji, Emi yoo fun awọn aaye akọkọ diẹ ti o nilo lati san ifojusi si.

Iwọle si Awọn iṣẹ Package

Ni kete ti a ti kojọpọ package sinu R, iwọ ko nilo lati pato orukọ package lati wọle si awọn iṣẹ rẹ. Ni ọpọlọpọ igba eyi ko wọpọ ni R, ṣugbọn o jẹ itẹwọgba. O ko ni lati gbe package kan wọle rara ti o ba nilo ọkan ninu awọn iṣẹ rẹ ninu koodu rẹ, ṣugbọn pe nirọrun nipa sisọ orukọ package ati orukọ iṣẹ naa. Iyapa laarin package ati awọn orukọ iṣẹ ni R jẹ oluṣafihan meji. package_name::function_name().

Ni Python, ni ilodi si, o jẹ pe o jẹ Ayebaye lati pe awọn iṣẹ ti package kan nipa sisọ orukọ rẹ ni gbangba. Nigbati a ba ṣe igbasilẹ package kan, o maa n fun ni orukọ kuru, fun apẹẹrẹ. pandas maa n lo pseudonym pd. Iṣẹ package kan wọle nipasẹ aami kan package_name.function_name().

Iṣẹ iyansilẹ

Ni R, o wọpọ lati lo itọka lati fi iye kan si ohun kan. obj_name <- value, botilẹjẹpe ami dọgba kan ṣoṣo ni a gba laaye, ami dọgbadọgba ẹyọkan ni R ni a lo ni akọkọ lati kọja awọn iye si awọn ariyanjiyan iṣẹ.

Ni Python, iṣẹ iyansilẹ ni a ṣe ni iyasọtọ pẹlu ami dogba kan obj_name = value.

Titọka

Awọn iyatọ pataki pupọ tun wa nibi. Ni R, titọka bẹrẹ ni ẹyọkan ati pẹlu gbogbo awọn eroja ti a sọ pato ni sakani abajade,

Ni Python, titọka bẹrẹ lati odo ati pe ibiti o yan ko pẹlu nkan ti o kẹhin ti pato ninu atọka. Nitorina apẹrẹ x[i:j] ni Python yoo ko pẹlu j ano.

Awọn iyatọ tun wa ninu titọka odi, ni akọsilẹ R x[-1] yoo da gbogbo awọn eroja ti fekito pada ayafi ti o kẹhin. Ni Python, aami iru kan yoo pada nikan ni ipin to kẹhin.

Awọn ọna ati OOP

R ṣe OOP ni ọna tirẹ, Mo kowe nipa eyi ninu nkan naa "OOP ni ede R (apakan 1): Awọn kilasi S3". Ni gbogbogbo, R jẹ ede iṣẹ-ṣiṣe, ati pe ohun gbogbo ti o wa ninu rẹ ni a ṣe lori awọn iṣẹ. Nitorina, fun apẹẹrẹ, fun awọn olumulo Excel, lọ si tydiverse yoo rọrun ju pandas. Botilẹjẹpe eyi le jẹ ero ero-ara mi.

Ni kukuru, awọn nkan ni R ko ni awọn ọna (ti a ba sọrọ nipa awọn kilasi S3, ṣugbọn awọn imuṣẹ OOP miiran wa ti o kere pupọ). Awọn iṣẹ gbogbogbo nikan lo wa ti o ṣe ilana wọn yatọ si da lori kilasi ohun naa.

Awọn paipu

Boya eyi ni orukọ fun pandas Kii yoo jẹ deede, ṣugbọn Emi yoo gbiyanju lati ṣalaye itumọ naa.

Ni ibere ki o ma ṣe fipamọ awọn iṣiro agbedemeji ati ki o ma ṣe gbejade awọn nkan ti ko ni dandan ni agbegbe iṣẹ, o le lo iru opo gigun ti epo kan. Awon. ṣe abajade iṣiro kan lati iṣẹ kan si ekeji, ati ma ṣe fipamọ awọn abajade agbedemeji.

Jẹ ki a mu apẹẹrẹ koodu atẹle, nibiti a ti fipamọ awọn iṣiro agbedemeji si awọn nkan lọtọ:

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

A ṣe awọn iṣẹ 3 lẹsẹsẹ, ati abajade ti ọkọọkan ti wa ni fipamọ ni nkan lọtọ. Ṣugbọn ni otitọ, a ko nilo awọn nkan agbedemeji wọnyi.

Tabi paapaa buru, ṣugbọn diẹ sii faramọ si awọn olumulo Excel.

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

Ni ọran yii, a ko ṣafipamọ awọn abajade iṣiro agbedemeji, ṣugbọn koodu kika pẹlu awọn iṣẹ itẹ-ẹiyẹ jẹ airọrun pupọ.

A yoo wo awọn ọna pupọ si sisẹ data ni R, ati pe wọn ṣe awọn iṣẹ ṣiṣe kanna ni awọn ọna oriṣiriṣi.

Pipelines ni ìkàwé tidyverse muse nipasẹ awọn oniṣẹ %>%.

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

Nitorinaa a gba abajade iṣẹ naa func1() ati ki o kọja bi akọkọ ariyanjiyan to func2(), lẹhinna a kọja abajade ti iṣiro yii gẹgẹbi ariyanjiyan akọkọ func3(). Ati ni ipari, a kọ gbogbo awọn iṣiro ti a ṣe sinu nkan naa obj <-.

Gbogbo awọn ti o wa loke ni a ṣe apejuwe dara julọ ju awọn ọrọ lọ nipasẹ meme yii:
Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

В data.table Awọn ẹwọn ni a lo ni ọna kanna.

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

Ninu ọkọọkan awọn biraketi onigun mẹrin o le lo abajade ti iṣiṣẹ iṣaaju.

В pandas iru mosi ti wa ni niya nipa a aami.

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

Awon. a gba tabili wa df ati lo ọna rẹ fun1(), lẹhinna a lo ọna naa si abajade ti o gba fun2(), lẹhin fun3(). Abajade ti wa ni ipamọ sinu nkan kan nkan .

Data Awọn ẹya

Awọn ẹya data ni R ati Python jẹ iru, ṣugbọn ni awọn orukọ oriṣiriṣi.

Apejuwe
Orukọ ni R
Orukọ ni Python / pandas

Ilana tabili
data.fireemu, data.tabili, tibble
DataFrame

Ọkan-onisẹpo akojọ ti awọn iye
Vector
Jara ni pandas tabi atokọ ni Python mimọ

Olona-ipele ti kii-tabular be
Akojọ
Iwe-itumọ (dict)

A yoo wo awọn ẹya miiran ati awọn iyatọ ninu sintasi ni isalẹ.

Awọn ọrọ diẹ nipa awọn idii ti a yoo lo

Ni akọkọ, Emi yoo sọ fun ọ diẹ nipa awọn idii ti iwọ yoo faramọ pẹlu lakoko nkan yii.

tidyverse

Aaye ayelujara oníṣẹ: tidyverse.org
Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada
ìkàwé tidyverse Ti a kọ nipasẹ Hedley Wickham, Onimọ-jinlẹ Iwadi Agba ni RStudio. tidyverse ni awọn akojọpọ iwunilori ti awọn idii ti o rọrun sisẹ data, 5 eyiti o wa ninu awọn igbasilẹ 10 oke lati ibi ipamọ CRAN.

Pataki ile ikawe naa ni awọn akojọpọ wọnyi: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Ọkọọkan ninu awọn idii wọnyi ni ifọkansi lati yanju iṣoro kan pato. Fun apere dplyr ṣẹda fun ifọwọyi data, tidyr lati mu data wa si fọọmu afinju, stringr simplifies ṣiṣẹ pẹlu awọn okun, ati ggplot2 jẹ ọkan ninu awọn irinṣẹ iworan data olokiki julọ.

Awọn anfani tidyverse jẹ irọrun ati irọrun lati ka sintasi, eyiti o jẹ ni ọpọlọpọ awọn ọna ti o jọra si ede ibeere SQL.

tabili

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o padaAaye ayelujara oníṣẹ: r-datatable.com

Nipasẹ data.table ni Matt Dole of H2O.ai.

Itusilẹ akọkọ ti ile-ikawe naa waye ni ọdun 2006.

Sintasi package ko rọrun bi ninu tidyverse ati ki o jẹ diẹ reminiscent ti Ayebaye dataframes ni R, sugbon ni akoko kanna significantly ti fẹ ni iṣẹ-.

Gbogbo awọn ifọwọyi pẹlu tabili ni package yii ni a ṣe apejuwe ninu awọn biraketi onigun mẹrin, ati ti o ba tumọ sintasi naa data.table ni SQL, o gba nkankan bi eleyi: data.table[ WHERE, SELECT, GROUP BY ]

Agbara ti package yii ni iyara ti sisẹ awọn oye nla ti data.

panda

Aaye ayelujara oníṣẹ: pandas.pydata.org Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Orukọ ile-ikawe naa wa lati ọrọ-ọrọ ọrọ-aje “data nronu”, ti a lo lati ṣapejuwe awọn eto alaye eleto multidimensional.

Nipasẹ pandas jẹ American Wes McKinney.

Nigba ti o ba de si data onínọmbà ni Python, dogba pandas Rara. Ohun elo pupọ pupọ, package ipele giga ti o fun ọ laaye lati ṣe eyikeyi ifọwọyi pẹlu data, lati ikojọpọ data lati awọn orisun eyikeyi si wiwo rẹ.

Fifi awọn idii afikun sii

Awọn idii ti a jiroro ninu nkan yii ko si ninu ipilẹ R ati awọn pinpin Python. Botilẹjẹpe akiyesi kekere kan wa, ti o ba fi sori ẹrọ pinpin Anaconda, lẹhinna fi sii ni afikun pandas ko nilo.

Fifi sori awọn idii ni R

Ti o ba ti ṣii agbegbe idagbasoke RStudio ni o kere ju lẹẹkan, o ṣee ṣe tẹlẹ ti mọ bi o ṣe le fi package ti a beere sori ẹrọ ni R. Lati fi awọn idii sii, lo aṣẹ boṣewa install.packages() nipa ṣiṣe taara ni R funrararẹ.

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

Lẹhin fifi sori ẹrọ, awọn idii nilo lati sopọ, fun eyiti ninu ọpọlọpọ awọn ọran ti lo aṣẹ naa library().

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

Fifi awọn idii ni Python

Nitorinaa, ti o ba ti fi Python mimọ sori ẹrọ, lẹhinna pandas o nilo lati fi sori ẹrọ pẹlu ọwọ. Ṣii laini aṣẹ, tabi ebute, da lori ẹrọ ṣiṣe rẹ ki o tẹ aṣẹ atẹle sii.

pip install pandas

Lẹhinna a pada si Python ati gbejade package ti a fi sii pẹlu aṣẹ naa import.

import pandas as pd

Gbigba Data

Iwakusa data jẹ ọkan ninu awọn igbesẹ pataki julọ ni itupalẹ data. Mejeeji Python ati R, ti o ba fẹ, fun ọ ni awọn aye lọpọlọpọ lati gba data lati awọn orisun eyikeyi: awọn faili agbegbe, awọn faili lati Intanẹẹti, awọn oju opo wẹẹbu, gbogbo iru awọn data data.

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Ninu nkan naa a yoo lo ọpọlọpọ awọn iwe data:

  1. Awọn igbasilẹ meji lati Awọn atupale Google.
  2. Titanic ero Dataset.

Gbogbo data wa lori mi GitHub ni irisi csv ati awọn faili tsv. Nibo ni a yoo beere wọn lati?

Nkojọpọ data sinu R: tidyverse, vroom, RSS

Lati kojọpọ data sinu ile-ikawe kan tidyverse Awọn akopọ meji wa: vroom, readr. vroom diẹ igbalode, sugbon ni ojo iwaju awọn idii le wa ni idapo.

Sọ lati osise iwe aṣẹ vroom.

vroom vs olukawe
Kí ni awọn Tu ti vroom tumosi fun readr? Ni bayi a gbero lati jẹ ki awọn idii meji naa dagbasoke lọtọ, ṣugbọn o ṣee ṣe a yoo ṣọkan awọn idii ni ọjọ iwaju. Aila-nfani kan si kika ọlẹ vroom ni awọn iṣoro data kan ko le ṣe ijabọ ni iwaju, nitorinaa bii o ṣe dara julọ lati ṣọkan wọn nilo diẹ ninu ero.

vroom vs olukawe
Kini itusilẹ tumọ si? vroom fun readr? Ni akoko ti a gbero lati se agbekale mejeeji jo lọtọ, sugbon a yoo jasi darapọ wọn ni ojo iwaju. Ọkan ninu awọn alailanfani ti kika ọlẹ vroom ni pe diẹ ninu awọn iṣoro pẹlu data ko le ṣe ijabọ ni ilosiwaju, nitorinaa o nilo lati ronu bi o ṣe dara julọ lati darapo wọn.

Ninu nkan yii a yoo wo awọn idii ikojọpọ data mejeeji:

Ikojọpọ data sinu R: vroom package

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

Nkojọpọ data sinu R: oluka

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

Ninu package vroom, laibikita ọna kika data csv / tsv, ikojọpọ ni a ṣe nipasẹ iṣẹ ti orukọ kanna vroom(), ninu apo readr a lo kan ti o yatọ iṣẹ fun kọọkan kika read_tsv() и read_csv().

Nkojọpọ data sinu R: data.table

В data.table iṣẹ kan wa fun ikojọpọ data fread().

Nkojọpọ data sinu 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")

Ikojọpọ data ni Python: pandas

Ti a ba ṣe afiwe pẹlu awọn idii R, lẹhinna ninu ọran yii sintasi naa sunmọ julọ pandas yoo jẹ readr, nitori pandas le beere data lati ibikibi, ati pe gbogbo idile awọn iṣẹ wa ninu package yii read_*().

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

Ati ọpọlọpọ awọn iṣẹ miiran ti a ṣe lati ka data lati awọn ọna kika pupọ. Ṣugbọn fun awọn idi wa o ti to read_table() tabi read_csv() lilo ariyanjiyan Sep lati pato awọn iwe separator.

Ikojọpọ data ni 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")

Ṣiṣẹda dataframes

Tabili titanic, ti a kojọpọ, aaye kan wa ibalopo, èyí tí ó tọ́jú ìdánimọ̀ ìbálòpọ̀ ti èrò.

Ṣugbọn fun igbejade irọrun diẹ sii ti data ni awọn ofin ti abo ero, o yẹ ki o lo orukọ kuku ju koodu akọ lọ.

Lati ṣe eyi, a yoo ṣẹda iwe kekere kan, tabili kan ninu eyiti awọn ọwọn 2 nikan yoo wa (koodu ati orukọ abo) ati awọn ori ila 2, lẹsẹsẹ.

Ṣiṣẹda dataframe ni R: tidyverse, dplyr

Ni apẹẹrẹ koodu ni isalẹ, a ṣẹda dataframe ti o fẹ nipa lilo iṣẹ naa tibble() .

Ṣiṣẹda dataframe ni R: dplyr

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

Ṣiṣẹda dataframe ni R: data.table

Ṣiṣẹda dataframe ni R: data.table

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

Ṣiṣẹda dataframe ni Python: pandas

В pandas Ṣiṣẹda awọn fireemu ni a ṣe ni awọn ipele pupọ, akọkọ a ṣẹda iwe-itumọ kan, lẹhinna a yi iwe-itumọ pada sinu fireemu data kan.

Ṣiṣẹda dataframe ni Python: pandas

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

Yiyan Awọn ọwọn

Awọn tabili ti o ṣiṣẹ pẹlu le ni awọn dosinni tabi paapaa awọn ọgọọgọrun awọn ọwọn data ninu. Ṣugbọn lati ṣe itupalẹ, bi ofin, iwọ ko nilo gbogbo awọn ọwọn ti o wa ni tabili orisun.

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Nitorinaa, ọkan ninu awọn iṣẹ akọkọ ti iwọ yoo ṣe pẹlu tabili orisun ni lati ko kuro ninu alaye ti ko wulo ati laaye iranti ti alaye yii wa.

Yiyan awọn ọwọn ni R: tidyverse, dplyr

Syntax dplyr jẹ iru pupọ si ede ibeere SQL, ti o ba faramọ pẹlu rẹ iwọ yoo yara ṣakoso package yii.

Lati yan awọn ọwọn, lo iṣẹ naa select().

Ni isalẹ wa awọn apẹẹrẹ ti koodu pẹlu eyiti o le yan awọn ọwọn ni awọn ọna wọnyi:

  • Kikojọ awọn orukọ ti awọn ọwọn ti a beere
  • Tọkasi awọn orukọ ọwọn nipa lilo awọn ikosile deede
  • Nipa iru data tabi eyikeyi ohun-ini miiran ti data ti o wa ninu iwe

Yiyan awọn ọwọn ni 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)

Yiyan awọn ọwọn ni R: data.table

Awọn iṣẹ kanna ni data.table ti wa ni ošišẹ ti die-die otooto, ni ibẹrẹ ti awọn article Mo ti pese apejuwe kan ti ohun ti ariyanjiyan ni o wa inu square biraketi ni data.table.

DT[i,j,by]

Nibo ni:
i - ibo, i.e. sisẹ nipasẹ awọn ori ila
j - yan|imudojuiwọn|ṣe, i.e. yiyan awọn ọwọn ati iyipada wọn
nipasẹ - data akojọpọ

Yiyan awọn ọwọn ni 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$")]

Oniyipada .SD faye gba o lati wọle si gbogbo awọn ọwọn, ati .SDcols ṣe àlẹmọ awọn ọwọn ti a beere nipa lilo awọn ikosile deede, tabi awọn iṣẹ miiran lati ṣe àlẹmọ awọn orukọ ti awọn ọwọn ti o nilo.

Yiyan awọn ọwọn ni Python, pandas

Lati yan awọn ọwọn nipasẹ orukọ ninu pandas o ti to lati pese akojọ awọn orukọ wọn. Ati lati yan tabi yọkuro awọn ọwọn nipasẹ orukọ nipa lilo awọn ikosile deede, o nilo lati lo awọn iṣẹ naa drop() и filter(), ati ariyanjiyan apa = 1, pẹlu eyiti o fihan pe o jẹ dandan lati ṣe ilana awọn ọwọn ju awọn ori ila.

Lati yan aaye kan nipa iru data, lo iṣẹ naa select_dtypes(), ati sinu awọn ariyanjiyan ni tabi aiṣe ṣe atokọ ti awọn oriṣi data ti o baamu awọn aaye wo ni o nilo lati yan.

Yiyan awọn ọwọn ni 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'])

Sisẹ awọn ori ila

Fun apẹẹrẹ, tabili orisun le ni awọn ọdun pupọ ti data, ṣugbọn iwọ nikan nilo lati ṣe itupalẹ oṣu to kọja. Lẹẹkansi, awọn laini afikun yoo fa fifalẹ ilana ṣiṣe data ati dina iranti PC.

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Sisẹ awọn ori ila ni R: tydyverse, dplyr

В dplyr iṣẹ naa ni a lo lati ṣe àlẹmọ awọn ori ila filter(). O gba dataframe bi ariyanjiyan akọkọ, lẹhinna o ṣe atokọ awọn ipo sisẹ.

Nigbati o ba nkọ awọn ikosile ọgbọn lati ṣe àlẹmọ tabili kan, ninu ọran yii, pato awọn orukọ ọwọn laisi awọn agbasọ ati laisi sisọ orukọ tabili naa.

Nigbati o ba nlo awọn ikosile ọgbọn pupọ lati ṣe àlẹmọ, lo awọn oniṣẹ wọnyi:

  • & tabi koma - mogbonwa AND
  • | - mogbonwa OR

Sisẹ awọn ori ila ni R: dplyr

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

Sisẹ awọn ori ila ni R: data.table

Bi mo ti kọ tẹlẹ loke, ni data.table data iyipada sintasi ti wa ni paade ni square biraketi.

DT[i,j,by]

Nibo ni:
i - ibo, i.e. sisẹ nipasẹ awọn ori ila
j - yan|imudojuiwọn|ṣe, i.e. yiyan awọn ọwọn ati iyipada wọn
nipasẹ - data akojọpọ

A lo ariyanjiyan lati ṣe àlẹmọ awọn ori ila i, eyi ti o ni akọkọ ipo ni square biraketi.

Wọle si awọn ọwọn ni awọn ikosile ọgbọn laisi awọn ami asọye ati laisi pato orukọ tabili.

Mogbonwa expressions ti wa ni jẹmọ si kọọkan miiran ni ni ọna kanna bi ni dplyr nipasẹ awọn & ati | awọn oniṣẹ.

Sisẹ awọn ori ila ni R: data.table

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

Sisẹ awọn gbolohun ọrọ ni Python: pandas

Ṣe àlẹmọ nipasẹ awọn ori ila pandas iru si sisẹ ni data.table, ati pe a ṣe ni awọn biraketi onigun mẹrin.

Ni ọran yii, iraye si awọn ọwọn ni a ṣe ni pataki nipasẹ afihan orukọ dataframe; lẹhinna orukọ ọwọn le tun tọka si ni awọn ami asọye ni awọn biraketi onigun mẹrin (apẹẹrẹ df['col_name']), tabi laisi awọn agbasọ lẹhin akoko naa (apẹẹrẹ df.col_name).

Ti o ba nilo lati ṣe àlẹmọ dataframe kan nipasẹ awọn ipo pupọ, ipo kọọkan gbọdọ wa ni gbe sinu akomo. Mogbonwa ipo ti wa ni ti sopọ pẹlu kọọkan miiran nipa awọn oniṣẹ & и |.

Sisẹ awọn gbolohun ọrọ ni 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)]

Iṣakojọpọ ati akojọpọ data

Ọkan ninu awọn iṣẹ ṣiṣe ti o wọpọ julọ ti a lo ni itupalẹ data jẹ kikojọ ati akojọpọ.

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Sintasi fun ṣiṣe awọn iṣẹ wọnyi ti tuka kaakiri gbogbo awọn idii ti a ṣe ayẹwo.

Ni idi eyi, a yoo gba dataframe bi apẹẹrẹ titanic, ati iṣiro nọmba ati iye owo apapọ ti awọn tikẹti ti o da lori kilasi agọ.

Iṣakojọpọ ati akojọpọ data ni R: tidyverse, dplyr

В dplyr iṣẹ naa ni a lo fun akojọpọ group_by(), ati fun akojọpọ summarise(). Ni pato, dplyr nibẹ ni kan gbogbo ebi ti awọn iṣẹ summarise_*(), ṣugbọn idi ti nkan yii ni lati ṣe afiwe sintasi ipilẹ, nitorinaa a kii yoo lọ sinu iru igbo bẹẹ.

Awọn iṣẹ iṣakojọpọ ipilẹ:

  • sum() - akopọ
  • min() / max() – kere ati ki o pọju iye
  • mean() - apapọ
  • median() - agbedemeji
  • length() - opoiye

Iṣakojọpọ ati akojọpọ ni R: dplyr

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

Lati ṣiṣẹ group_by() a koja tabili bi akọkọ ariyanjiyan titanic, ati lẹhinna tọka aaye naa Pclass, nipasẹ eyiti a yoo ṣe akojọpọ tabili wa. Abajade ti isẹ yii nipa lilo oniṣẹ %>% kọja bi ariyanjiyan akọkọ si iṣẹ naa summarise(), o si fi awọn aaye meji kun: awọn arinrin-ajo и iye owo. Ni akọkọ, lilo iṣẹ naa length() iṣiro awọn nọmba ti tiketi, ati ninu awọn keji lilo awọn iṣẹ mean() gba iye owo tikẹti apapọ.

Iṣakojọpọ ati akojọpọ data ni R: data.table

В data.table ariyanjiyan ni a lo fun apapọ j eyi ti o ni ipo keji ni awọn biraketi onigun mẹrin, ati fun akojọpọ by tabi keyby, ti o ni ipo kẹta.

Atokọ awọn iṣẹ akojọpọ ninu ọran yii jẹ aami si eyiti a ṣalaye ninu dplyr, nitori wọnyi ni awọn iṣẹ lati ipilẹ R sintasi.

Iṣakojọpọ ati akojọpọ ni R: data.table

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

Iṣakojọpọ ati akojọpọ data ni Python: pandas

Iṣakojọpọ ni pandas iru si dplyr, ṣugbọn awọn alaropo ni ko iru si dplyr ko lori data.table.

Lati ṣe akojọpọ, lo ọna naa groupby(), sinu eyiti o nilo lati ṣe atokọ ti awọn ọwọn nipasẹ eyiti a yoo ṣe akojọpọ dataframe.

Fun akojọpọ o le lo ọna naa agg()eyi ti o gba a dictionary. Awọn bọtini iwe-itumọ jẹ awọn ọwọn eyiti iwọ yoo lo awọn iṣẹ apapọ, ati awọn iye jẹ awọn orukọ ti awọn iṣẹ akojọpọ.

Awọn iṣẹ akojọpọ:

  • sum() - akopọ
  • min() / max() – kere ati ki o pọju iye
  • mean() - apapọ
  • median() - agbedemeji
  • count() - opoiye

Išẹ reset_index() ninu apẹẹrẹ ti o wa ni isalẹ o ti lo lati tun awọn atọka itẹle ti pandas awọn aseku si lẹhin apapọ data.

Символ faye gba o lati gbe si tókàn ila.

Iṣakojọpọ ati akojọpọ ni Python: pandas

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

Inaro parapo ti awọn tabili

Iṣiṣẹ ninu eyiti o darapọ mọ awọn tabili meji tabi diẹ sii ti eto kanna. Awọn data ti a kojọpọ ni awọn tabili ninu ga_nov и ga_dec. Awọn tabili wọnyi jẹ aami kanna ni eto, i.e. ni awọn ọwọn kanna, ati awọn iru data ninu awọn ọwọn wọnyi.

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Eyi jẹ ikojọpọ lati Awọn atupale Google fun oṣu Oṣu kọkanla ati Oṣu kejila, ni apakan yii a yoo darapọ data yii sinu tabili kan.

Ni inaro dida awọn tabili ni R: tidyverse, dplyr

В dplyr O le darapọ awọn tabili 2 sinu ọkan nipa lilo iṣẹ naa bind_rows(), Awọn tabili ti o kọja bi awọn ariyanjiyan rẹ.

Sisẹ awọn ori ila ni R: dplyr

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

Ni inaro dida awọn tabili ni R: data.table

Ko tun jẹ ohunkohun idiju, jẹ ki a lo rbind().

Sisẹ awọn ori ila ni R: data.table

## data.table
rbind(ga_nov, ga_dec)

Ni inaro dida awọn tabili ni Python: pandas

В pandas iṣẹ ti lo lati da awọn tabili concat(), sinu eyiti o nilo lati kọja atokọ ti awọn fireemu lati darapo wọn.

Sisẹ awọn gbolohun ọrọ ni Python: pandas

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

Petele parapo ti awọn tabili

Išišẹ ninu eyiti awọn ọwọn lati keji ti wa ni afikun si tabili akọkọ nipasẹ bọtini. Nigbagbogbo a lo nigbati o nmu tabili otitọ pọ (fun apẹẹrẹ, tabili kan pẹlu data tita) pẹlu data itọkasi diẹ (fun apẹẹrẹ, idiyele ọja kan).

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Oriṣiriṣi awọn oriṣi ti awọn akojọpọ wa:

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Ninu tabili ti kojọpọ tẹlẹ titanic a ni ọwọn ibalopo, tí ó bá koodu akọ-abo ti ero-ọkọ̀ náà mu:

1 - obinrin
2 - akọ

Pẹlupẹlu, a ti ṣẹda tabili kan - iwe itọkasi abo. Fun igbejade irọrun diẹ sii ti data lori akọ-abo ti awọn arinrin-ajo, a nilo lati ṣafikun orukọ akọ-abo lati inu itọsọna naa abo si tabili titanic.

Petele tabili da ni R: tidyverse, dplyr

В dplyr Gbogbo ẹbi ti awọn iṣẹ wa fun isọdọmọ petele:

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

Awọn julọ commonly lo ninu mi asa ni left_join().

Gẹgẹbi awọn ariyanjiyan akọkọ meji, awọn iṣẹ ti a ṣe akojọ loke gba awọn tabili meji lati darapọ mọ, ati bi ariyanjiyan kẹta by o gbọdọ pato awọn ọwọn lati da.

Petele tabili parapo ni R: dplyr

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

Petele parapo ti awọn tabili ni R: data.table

В data.table O nilo lati darapọ mọ awọn tabili nipasẹ bọtini lilo iṣẹ naa merge().

Awọn ariyanjiyan lati dapọ () iṣẹ ni data.table

  • x, y - Awọn tabili fun didapọ
  • nipasẹ - Ọwọn ti o jẹ bọtini lati darapo ti o ba ni orukọ kanna ni awọn tabili mejeeji
  • by.x, by.y - Awọn orukọ ọwọn lati dapọ, ti wọn ba ni awọn orukọ oriṣiriṣi ninu awọn tabili
  • gbogbo. IṢẸ DARA RIGHT (yoo fi gbogbo awọn ori ila ti tabili keji silẹ).

Petele parapo ti awọn tabili ni R: data.table

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

Petele tabili da ni Python: pandas

Bi daradara bi ninu data.tableninu pandas iṣẹ ti lo lati da awọn tabili merge().

Awọn ariyanjiyan ti iṣẹ iṣọpọ () ni pandas

  • bawo - Iru asopọ: osi, ọtun, lode, inu
  • lori - Iwe ti o jẹ bọtini ti o ba ni orukọ kanna ni awọn tabili mejeeji
  • left_on, right_on - Awọn orukọ ti awọn ọwọn bọtini, ti wọn ba ni awọn orukọ oriṣiriṣi ninu awọn tabili

Petele tabili da ni Python: pandas

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

Awọn iṣẹ window ipilẹ ati awọn ọwọn iṣiro

Awọn iṣẹ ferese jọra ni itumọ si awọn iṣẹ akojọpọ, ati pe a tun lo nigbagbogbo ni itupalẹ data. Ṣugbọn ko dabi awọn iṣẹ akojọpọ, awọn iṣẹ window ko yipada nọmba awọn ori ila ti dataframe ti njade.

Ede wo ni lati yan fun ṣiṣẹ pẹlu data - R tabi Python? Mejeeji! Iṣipo lati pandas to tidyverse ati data.table ati ki o pada

Ni pataki, lilo iṣẹ window, a pin awọn fireemu data ti nwọle si awọn apakan ni ibamu si diẹ ninu awọn ami-ami, ie. nipa iye aaye kan, tabi awọn aaye pupọ. Ati pe a ṣe awọn iṣẹ iṣiro lori ferese kọọkan. Abajade awọn iṣẹ wọnyi yoo pada ni laini kọọkan, i.e. laisi iyipada nọmba lapapọ ti awọn ori ila ninu tabili.

Fun apẹẹrẹ, jẹ ki a ya tabili titanic. A le ṣe iṣiro ipin kini idiyele ti tikẹti kọọkan wa laarin kilasi agọ rẹ.

Lati ṣe eyi, a nilo lati gba ni laini kọọkan lapapọ iye owo tikẹti kan fun kilasi agọ lọwọlọwọ eyiti tikẹti ninu laini yii jẹ, lẹhinna pin idiyele ti tikẹti kọọkan nipasẹ idiyele lapapọ ti gbogbo awọn tikẹti ti kilasi agọ kanna. .

Window awọn iṣẹ ni R: tidyverse, dplyr

Lati fi awọn ọwọn titun kun, laisi lilo akojọpọ ila, ni dplyr sìn iṣẹ mutate().

O le yanju iṣoro ti a ṣalaye loke nipa ṣiṣe akojọpọ data nipasẹ aaye Pclass ati summing awọn aaye ni titun kan iwe ṣe. Nigbamii, yọ tabili kuro ki o pin awọn iye aaye ṣe si ohun to sele ni išaaju igbese.

Awọn iṣẹ Window ni R: dplyr

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

Awọn iṣẹ window ni R: data.table

Alugoridimu ojutu si maa wa kanna bi ni dplyr, a nilo lati pin tabili si awọn window nipasẹ aaye Pclass. Jade ni titun kan iwe iye fun awọn ẹgbẹ bamu si kọọkan kana, ki o si fi a iwe ninu eyi ti a ṣe iṣiro awọn ipin ti iye owo ti kọọkan tiketi ninu awọn oniwe-ẹgbẹ.

Lati fi awọn ọwọn titun kun si data.table onišẹ bayi :=. Ni isalẹ jẹ apẹẹrẹ ti ipinnu iṣoro kan nipa lilo package data.table

Awọn iṣẹ window ni R: data.table

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

Awọn iṣẹ window ni Python: pandas

Ọna kan lati ṣafikun iwe tuntun si pandas - lo iṣẹ naa assign(). Lati ṣe akopọ idiyele ti awọn tikẹti nipasẹ kilasi agọ, laisi akojọpọ awọn ori ila, a yoo lo iṣẹ naa transform().

Ni isalẹ jẹ apẹẹrẹ ti ojutu kan ninu eyiti a ṣafikun si tabili titanic kanna 2 ọwọn.

Awọn iṣẹ window ni Python: pandas

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

Awọn iṣẹ ati awọn ọna tabili tabili

Ni isalẹ ni tabili ti ifọrọranṣẹ laarin awọn ọna fun ṣiṣe ọpọlọpọ awọn iṣẹ pẹlu data ninu awọn idii ti a ti gbero.

Apejuwe
tidyverse
tabili
panda

Gbigba Data
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Ṣiṣẹda dataframes
tibble()
data.table()
dict() + from_dict()

Yiyan Awọn ọwọn
select()
ariyanjiyan j, keji ipo ni square biraketi
a kọja atokọ ti awọn ọwọn ti a beere ni awọn biraketi onigun mẹrin / drop() / filter() / select_dtypes()

Sisẹ awọn ori ila
filter()
ariyanjiyan i, akọkọ ipo ni square biraketi
A ṣe atokọ awọn ipo sisẹ ni awọn biraketi onigun mẹrin / filter()

Iṣakojọpọ ati Iṣakojọpọ
group_by() + summarise()
awọn ariyanjiyan j + by
groupby() + agg()

Iṣọkan inaro ti awọn tabili (UNION)
bind_rows()
rbind()
concat()

Idarapọ petele ti awọn tabili (darapọ)
left_join() / *_join()
merge()
merge()

Awọn iṣẹ window ipilẹ ati fifi awọn ọwọn iṣiro kun
group_by() + mutate()
ariyanjiyan j lilo onišẹ := + ariyanjiyan by
transform() + assign()

ipari

Boya ninu nkan ti Mo ṣe apejuwe kii ṣe awọn imuse ti o dara julọ ti sisẹ data, nitorinaa Emi yoo dun ti o ba ṣatunṣe awọn aṣiṣe mi ninu awọn asọye, tabi nirọrun ṣafikun alaye ti a fun ni nkan naa pẹlu awọn imuposi miiran fun ṣiṣẹ pẹlu data ni R / Python.

Gẹgẹ bi mo ti kọ loke, idi ti nkan naa kii ṣe lati fa ero eniyan lori ede wo ni o dara julọ, ṣugbọn lati jẹ ki aye rọrun lati kọ awọn ede mejeeji, tabi, ti o ba jẹ dandan, lọ laarin wọn.

Ti o ba fẹran nkan naa, Emi yoo dun lati ni awọn alabapin tuntun si mi youtube и telegram awọn ikanni.

Iwọn didi

Ewo ninu awọn akojọpọ atẹle ni o lo ninu iṣẹ rẹ?

Ninu awọn asọye o le kọ idi fun yiyan rẹ.

Awọn olumulo ti o forukọsilẹ nikan le kopa ninu iwadi naa. wọle, Jowo.

Iru package processing data wo ni o lo (o le yan awọn aṣayan pupọ)

  • 45,2%tidyverse19

  • 33,3%data.table14

  • 54,8%pandas23

42 olumulo dibo. 9 olumulo abstained.

orisun: www.habr.com

Fi ọrọìwòye kun