Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

Circhendu R o Python in Internet, truverete milioni d'articuli è chilometri di discussioni nantu à u tema di quale unu hè megliu, più veloce è più convenientu per travaglià cù dati. Ma sfurtunatamenti, tutti questi articuli è disputi ùn sò micca particularmente utili.

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

U scopu di stu articulu hè di paragunà e tecniche basi di trattamentu di dati in i pacchetti più populari di e duie lingue. È aiutate i lettori à ammaistrà rapidamente qualcosa chì ùn sanu micca ancu. Per quelli chì scrivenu in Python, scopre cumu fà a stessa cosa in R, è vice versa.

Duranti l'articulu avemu da analizà a sintassi di i pacchetti più populari in R. Quessi sò i pacchetti inclusi in a biblioteca tidyverseè ancu u pacchettu data.table. È paragunate a so sintassi cù pandas, u pacchettu di analisi di dati più populari in Python.

Andemu passu à passu per tuttu u percorsu di l'analisi di dati da a carica à a realizazione di funzioni di finestra analitica cù Python è R.

Cuntenuti

Questu articulu pò esse usatu cum'è un fogliu di ingannazione s'ellu avete scurdatu di cumu fà qualchì operazione di trattamentu di dati in unu di i pacchetti in cunsiderà.

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

  1. Principali differenze di sintassi trà R è Python
    1.1. Accessu à e Funzioni di u pacchettu
    1.2. Assignazione
    1.3. Indexazione
    1.4. I metudi è OOP
    1.5. Pipelines
    1.6. Strutture di dati
  2. Uni pochi parolle nantu à i pacchetti chì avemu aduprà
    2.1. ordinatu
    2.2. dati.tavula
    2.3. pandas
  3. Installazione di pacchetti
  4. Caricà Dati
  5. Creazione di dataframes
  6. Selezziunà i Culonni chì avete bisognu
  7. Filtri di fila
  8. Raggruppamentu è Aggregazione
  9. Unione verticale di tavule (UNION)
  10. Unione orizzontale di tavule (JOIN)
  11. Funzioni di finestra di basa è culonni calculati
  12. Tavola di currispundenza trà i metudi di trattamentu di dati in R è Python
  13. cunchiusioni
  14. Un breve sondaghju nantu à quale pacchettu utilizate

Sè vo site interessatu in l'analisi di dati, pudete truvà u mo telegram и fratii canali. A maiò parte di u cuntenutu hè dedicatu à a lingua R.

Principali differenze di sintassi trà R è Python

Per fà più faciule per voi per passà da Python à R, o vice versa, vi daraghju uni pochi di punti principali chì avete bisognu di attentu.

Accessu à e Funzioni di u pacchettu

Una volta chì un pacchettu hè caricatu in R, ùn avete micca bisognu di specificà u nome di u pacchettu per accede à e so funzioni. In a maiò parte di i casi ùn hè micca cumuni in R, ma hè accettabile. Ùn avete micca impurtà un pacchettu in tuttu s'ellu avete bisognu di una di e so funzioni in u vostru còdice, ma simpricimenti chjamà cù specificà u nome di u pacchettu è u nome di a funzione. U separatore trà i pacchetti è i nomi di funzioni in R hè un doppiu colon. package_name::function_name().

In Python, à u cuntrariu, hè cunsideratu classicu per chjamà e funzioni di un pacchettu specificendu esplicitamente u so nome. Quandu un pacchettu hè telecaricatu, hè generalmente datu un nome accurtatu, p.e. pandas di solitu si usa un pseudonimu pd. Una funzione di pacchettu hè accessata per mezu di un puntu package_name.function_name().

Assignazione

In R, hè cumuni di utilizà una freccia per assignà un valore à un oggettu. obj_name <- value, anche se un unicu segnu uguale hè permessu, u segnu uguale unicu in R hè utilizatu principalmente per passà i valori à l'argumenti di funzione.

In Python, l'assignazione hè fatta solu cù un unicu signu uguale obj_name = value.

Indexazione

Ci sò ancu differenze abbastanza significative quì. In R, l'indexazione cumencia à unu è include tutti l'elementi specificati in u intervallu risultatu,

In Python, l'indexazione principia da cero è a gamma selezziunata ùn include micca l'ultimu elementu specificatu in l'indici. Cusì cuncepimentu x[i:j] in Python ùn includerà micca l'elementu j.

Ci sò ancu diffirenzii in l'indexazione negativa, in notazione R x[-1] restituverà tutti l'elementi di u vettore eccettu l'ultimu. In Python, una notazione simile restituverà solu l'ultimu elementu.

I metudi è OOP

R implementa OOP in u so modu, aghju scrittu annantu à questu in l'articulu "OOP in a lingua R (parte 1): classi S3". In generale, R hè una lingua funziunale, è tuttu in questu hè custruitu nantu à funzioni. Dunque, per esempiu, per l'utilizatori di Excel, andate à tydiverse serà più faciule ch'è pandas. Ancu s'ellu pò esse a mo opinione subjectiva.

In corta, l'uggetti in R ùn anu micca metudi (se parlemu di classi S3, ma ci sò altre implementazioni OOP chì sò assai menu cumuni). Ci sò solu funzioni generalizati chì i processanu in modu diversu secondu a classa di l'ughjettu.

Pipelines

Forse questu hè u nome pandas Ùn serà micca cumplettamente currettu, ma pruvaraghju di spiegà u significatu.

Per ùn salvà micca i calculi intermedi è micca per pruduce l'uggetti innecessarii in l'ambiente di travagliu, pudete aduprà un tipu di pipeline. Quelli. passà u risultatu di un calculu da una funzione à l'altru, è ùn salvà micca risultati intermedi.

Pigliemu l'esempiu di codice seguente, induve guardemu i calculi intermedi in oggetti separati:

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

Avemu realizatu 3 operazioni sequentially, è u risultatu di ognunu hè salvatu in un oggettu separatu. Ma in fatti, ùn avemu micca bisognu di sti ogetti intermedi.

O ancu peggiu, ma più familiar à l'utilizatori di Excel.

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

In questu casu, ùn avemu micca salvatu i risultati di u calculu intermediu, ma a lettura di codice cù funzioni nidificate hè estremamente inconveniente.

Fighjemu parechji approcci à u trattamentu di dati in R, è facenu operazioni simili in modi diffirenti.

Pipelines in a biblioteca tidyverse implementatu da l'operatore %>%.

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

Cusì pigliamu u risultatu di u travagliu func1() è passà cum'è u primu argumentu à func2(), allora passemu u risultatu di stu calculu cum'è u primu argumentu func3(). È à a fine, scrivemu tutti i calculi realizati in l'ughjettu obj <-.

Tuttu ciò chì sopra hè illustratu megliu cà e parolle da stu meme:
Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

В data.table catene sò usati in modu simili.

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

In ogni parentesi quadrate pudete aduprà u risultatu di l'operazione precedente.

В pandas tali operazioni sò siparati da un puntu.

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

Quelli. pigliemu a nostra tavola df è aduprà u so mètudu fun1(), dopu applicà u metudu à u risultatu ottenutu fun2(), dopu fun3(). U risultatu risultatu hè salvatu in un oggettu ughjettu .

Strutture di dati

Strutture di dati in R è Python sò simili, ma anu nomi diffirenti.

discrizzione
Nome in R
Nome in Python/pandas

Struttura di a tavola
data.frame, data.table, tibble
DataFrame

Lista unidimensionale di valori
Vettore
Serie in panda o lista in pura Python

Struttura multi-livellu non tabulare
Lista
dizziunariu (dict)

Fighjemu alcune altre caratteristiche è differenze in sintassi quì sottu.

Uni pochi parolle nantu à i pacchetti chì avemu aduprà

Prima, vi dicu un pocu nantu à i pacchetti chì vi diventerà familiarizatu durante stu articulu.

ordinatu

Situ web ufficiale: tidyverse.org
Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna
affairs tidyverse scrittu da Hedley Wickham, Senior Research Scientist in RStudio. tidyverse hè custituitu da un inseme impressiunanti di pacchetti chì simplificà l'elaborazione di dati, 5 di quali sò inclusi in u top 10 downloads from the CRAN repository.

U core di a biblioteca hè custituitu da i seguenti pacchetti: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Ognunu di sti pacchetti hè destinatu à risolve un prublema specificu. Per esempiu dplyr creatu per a manipulazione di dati, tidyr per purtà i dati à una forma pulita, stringr simplifies u travagliu cù strings, è ggplot2 hè unu di i strumenti di visualizazione di dati più populari.

U vantaghju tidyverse hè a simplicità è a sintassi faciule da leghje, chì hè in parechje manere simili à a lingua di query SQL.

dati.tavula

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è tornaSitu web ufficiale: r-datatable.com

By data.table hè Matt Dole di H2O.ai.

A prima liberazione di a biblioteca hè accaduta in u 2006.

A sintassi di u pacchettu ùn hè micca cusì cunvene cum'è in tidyverse è hè più reminiscente di i dataframes classici in R, ma à u stessu tempu si sviluppau significativamente in funziunalità.

Tutte e manipulazioni cù a tavula in questu pacchettu sò descritte in parentesi quadrate, è se traduce a sintassi data.table in SQL, avete qualcosa cum'è questu: data.table[ WHERE, SELECT, GROUP BY ]

A forza di stu pacchettu hè a vitezza di trasfurmà grandi quantità di dati.

pandas

Situ web ufficiale: pandas.pydata.org Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

U nome di a biblioteca vene da u terminu ecunometricu "dati di u pannellu", utilizatu per discrìviri setti strutturati multidimensionali di informazioni.

By pandas hè l'American Wes McKinney.

Quandu si tratta di analisi di dati in Python, uguali pandas Innò. Un pacchettu assai multifunzionale, d'altu livellu chì vi permette di fà qualsiasi manipulazione cù dati, da a carica di dati da ogni fonte à a visualizazione.

Installazione di pacchetti supplementari

I pacchetti discututi in questu articulu ùn sò micca inclusi in e distribuzioni basi R è Python. Ancu s'ellu ci hè una piccula avvertenza, se installate a distribuzione Anaconda, installate in più pandas Ùn hè necessariu.

Installazione di pacchetti in R

Sè avete apertu l'ambiente di sviluppu RStudio almenu una volta, probabilmente sapete già cumu installà u pacchettu necessariu in R. Per installà pacchetti, utilizate u cumandimu standard. install.packages() eseguendula direttamente in R stessu.

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

Dopu a stallazione, i pacchetti deve esse cunnessi, per quale in a maiò parte di i casi u cumandamentu hè utilizatu library().

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

Installazione di pacchetti in Python

Allora, se avete installatu Python puru, allora pandas vi tocca à stallà lu manually. Apertura una linea di cumanda, o terminal, secondu u vostru sistema upirativu è entre u cumandimu seguenti.

pip install pandas

Allora vultemu à Python è impurtate u pacchettu installatu cù u cumandimu import.

import pandas as pd

Caricà Dati

Data mining hè unu di i passi più impurtanti in l'analisi di dati. Sia Python è R, se vulete, vi furniscenu vaste opportunità per ottene dati da qualsiasi fonti: schedarii lucali, schedarii da Internet, siti web, ogni tipu di basa di dati.

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

In tuttu l'articulu avemu aduprà parechji datasets:

  1. Dui scaricamenti da Google Analytics.
  2. Dataset di u Passeggeru Titanic.

Tutti i dati sò nantu à u mo GitHub in forma di file csv è tsv. Da induve li dumanderemu ?

Caricamentu di dati in R: tidyverse, vroom, readr

Per carica dati in una biblioteca tidyverse Ci sò dui pacchetti: vroom, readr. vroom più mudernu, ma in u futuru i pacchetti ponu esse cumminati.

Citazione da documentazione ufficiale vroom.

vroom vs lettore
Cosa significa a liberazione vroom significa per readr? Per avà pensamu di lascià i dui pacchetti evoluzione separatamente, ma prubabilmente uniscemu i pacchetti in u futuru. Un svantaghju per a lettura pigra di vroom hè chì certi prublemi di dati ùn ponu micca esse signalati in anticipu, cusì u megliu per unificalli richiede un pocu di pensamentu.

vroom vs readr
Chì significa liberazione? vroom di readr? À u mumentu avemu pensatu à sviluppà i dui pacchetti per separatamente, ma prubabilmente li combineremu in u futuru. Unu di i svantaghji di a lettura pigra vroom hè chì certi prublemi cù i dati ùn ponu esse signalati in anticipu, cusì avete bisognu di pensà à cumu megliu cumminà.

In questu articulu, guardemu i dui pacchetti di carica di dati:

Caricamentu di dati in R: pacchettu vroom

# install.packages("vroom")
library(vroom)

# Чтение данных
## vroom
ga_nov  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

Caricamentu di dati in 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")

In u pacchettu vroom, indipendentemente da u formatu di dati csv / tsv, u caricamentu hè realizatu da a funzione di u listessu nome vroom(), in u pacchettu readr Avemu aduprà una funzione differente per ogni furmatu read_tsv() и read_csv().

Carica dati in R: data.table

В data.table ci hè una funzione per carica dati fread().

Caricà dati in R: pacchettu data.table

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

Caricamentu di dati in Python: pandas

Se paragunemu cù i pacchetti R, allora in questu casu a sintassi hè più vicinu à pandas sarà readr, perchè pandas pò dumandà dati da ogni locu, è ci hè una famiglia sana di funzioni in stu pacchettu read_*().

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

È parechje altre funzioni pensate per leghje dati da diversi formati. Ma per i nostri scopi hè abbastanza read_table() o read_csv() usendu argumentu Sep per specificà u separatore di colonna.

Caricamentu di dati in 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")

Creazione di dataframes

Table Association, chì avemu caricatu, ci hè un campu Sex, chì guarda l'identificatore di sessu di u passageru.

Ma per una presentazione più còmuda di e dati in quantu à u sessu di u passageru, duvete aduprà u nome invece di u codice di genere.

Per fà questu, creeremu un picculu repertoriu, una tavula in quale ci saranu solu 2 colonne (codice è nome di sessu) è 2 fila, rispettivamente.

Creazione di un dataframe in R: tidyverse, dplyr

In l'esempiu di codice sottu, creamu u dataframe desideratu cù a funzione tibble() .

Creazione di un dataframe in R: dplyr

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

Crià un dataframe in R: data.table

Crià un dataframe in R: data.table

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

Creazione di un dataframe in Python: pandas

В pandas A creazione di frames hè realizatu in parechje tappe, prima creamu un dizziunariu, è dopu cunvertisce u dizziunariu in un dataframe.

Creazione di un dataframe in Python: pandas

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

Selezzione di e Culonne

I tavule cù quale travagliate ponu cuntene decine o ancu centinaie di culonni di dati. Ma per fà l'analisi, in regula, ùn avete micca bisognu di tutte e colonne chì sò dispunibili in a tavola fonte.

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

Dunque, una di e prime operazioni chì avete da esse realizatu cù a tavola fonte hè di sguassà l'infurmazioni innecessarii è liberà a memoria chì sta infurmazione occupa.

Selezzione di e colonne in R: tidyverse, dplyr

fuori dplyr hè assai simili à a lingua di query SQL, se l'avete familiarizatu cun ellu, mastruverà rapidamente stu pacchettu.

Per selezziunà e culonne, utilizate a funzione select().

Quì sottu sò esempi di codice cù quale pudete selezziunà e colonne in i seguenti modi:

  • Elencu i nomi di e colonne richieste
  • Riferite à i nomi di colonna cù espressioni regulari
  • Per tipu di dati o qualsiasi altra pruprietà di e dati cuntenuti in a colonna

Selezzione di e colonne in 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)

Selezzione di culonni in R: data.table

E stesse operazioni in data.table sò realizati un pocu sfarente, à u principiu di l'articulu aghju furnitu una descrizzione di quali argumenti sò in parentesi quadrate in data.table.

DT[i,j,by]

Dove:
i - induve, i.e. filtrazione per fila
j - selezziunà|aghjurnà|fà, i.e. selezziunà e culonne è li cunvertisce
per - raggruppamentu di dati

Selezzione di culonni in 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$")]

Variable .SD permette di accede à tutte e culonne, è .SDcols filtrà i culonni richiesti utilizendu espressioni rigulari, o altre funzioni per filtrà i nomi di e colonne chì avete bisognu.

Selezzione di colonne in Python, pandas

Per selezziunà e colonne per nome in pandas hè abbastanza per furnisce una lista di i so nomi. È per selezziunà o esclude e colonne per nome cù espressioni regulari, avete bisognu di utilizà e funzioni drop() и filter(), è argumentu assi = 1, cù quale avete indicatu chì hè necessariu di processà e culonni piuttostu chè e fila.

Per selezziunà un campu per tipu di dati, utilizate a funzione select_dtypes(), è in argumenti include o escludiri passate una lista di tipi di dati chì currispondenu à quali campi avete bisognu di selezziunà.

Selezzione di colonne in 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'])

Filtri di fila

Per esempiu, a tavula fonte pò cuntene parechji anni di dati, ma solu bisognu di analizà u mesi passatu. À novu, e linee extra rallentaranu u prucessu di trasfurmazioni di dati è ostruiscenu a memoria di u PC.

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

Filtrazione di righe in R: tydyverse, dplyr

В dplyr a funzione hè usata per filtrà e fila filter(). Piglia un dataframe cum'è u primu argumentu, dopu elencu e cundizioni di filtrazione.

Quandu scrivite espressioni lògichi per filtrà una tavula, in questu casu, specificate i nomi di colonna senza virgulette è senza dichjarà u nome di a tavola.

Quandu utilizate parechje espressioni logiche per filtrà, utilizate l'operatori seguenti:

  • & o virgola - AND logicu
  • | - OR logicu

Filtrazione di file in R: dplyr

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

Filtrazione di fila in R: data.table

Cume aghju digià scrittu sopra, in data.table A sintassi di cunversione di dati hè chjusa in parentesi quadrate.

DT[i,j,by]

Dove:
i - induve, i.e. filtrazione per fila
j - selezziunà|aghjurnà|fà, i.e. selezziunà e culonne è li cunvertisce
per - raggruppamentu di dati

L'argumentu hè utilizatu per filtrà e fila i, chì hà a prima pusizioni in parentesi quadrate.

I culonni sò accessu in espressioni lògichi senza virgulette è senza specificà u nome di a tavola.

L'espressioni lògichi sò ligati l'una à l'altru in u listessu modu cum'è in dplyr attraversu l'operatori & è |.

Filtrazione di fila in R: data.table

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

Filtrazione di stringhe in Python: pandas

Filtra per fila in pandas simile à u filtru data.table, è hè fattu in parentesi quadrate.

In questu casu, l'accessu à e culonne hè realizatu necessariamente indichendu u nome di u dataframe; allora u nome di a colonna pò ancu esse indicatu trà virgolette in parentesi quadrate (esempiu df['col_name']), o senza virgulette dopu à u periodu (esempiu df.col_name).

Sè avete bisognu di filtrà un dataframe per parechje cundizioni, ogni cundizione deve esse piazzata in parentesi. I cundizioni lògichi sò cunnessi cù l'altri da l'operatori & и |.

Filtrazione di stringhe in 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)]

Raggruppamentu è aggregazione di dati

Unu di l'operazioni più cumunimenti utilizati in l'analisi di dati hè u raggruppamentu è l'aggregazione.

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

A sintassi per eseguisce queste operazioni hè spargugliata in tutti i pacchetti chì rivisemu.

In questu casu, avemu da piglià un dataframe per esempiu Association, è calculate u numeru è u costu mediu di i biglietti secondu a classe di cabina.

Raggruppamentu è aggregazione di dati in R: tidyverse, dplyr

В dplyr a funzione hè aduprata per u raggruppamentu group_by(), è per aggregazione summarise(). In fattu, dplyr ci hè una famiglia sana di funzioni summarise_*(), Ma u scopu di stu articulu hè di paragunà a sintassi di basa, perchè ùn andemu micca in una tale jungla.

Funzioni basi di aggregazione:

  • sum() - summa
  • min() / max() - valore minimu è massimu
  • mean() - mediu
  • median() - mediana
  • length() - quantità

Raggruppamentu è aggregazione in R: dplyr

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

Per funziunà group_by() avemu passatu a tavula cum'è u primu argumentu Association, è dopu hà indicatu u campu Pclass, da quale avemu da raggruppà a nostra tavola. U risultatu di sta operazione cù l'operatore %>% passatu cum'è u primu argumentu à a funzione summarise(), è aghjunghje 2 campi più: passageri и avg_price. In u primu, usendu a funzione length() calculate u numeru di biglietti, è in u sicondu cù a funzione mean() ricevutu u prezzu mediu di u bigliettu.

Raggruppamentu è aggregazione di dati in R: data.table

В data.table l'argumentu hè utilizatu per aggregazione j chì hà una seconda pusizioni in parentesi, è per raggruppamenti by o keyby, chì anu a terza pusizione.

A lista di e funzioni di aggregazione in questu casu hè identica à quella descritta in dplyr, perchè Quessi sò funzioni da a sintassi R basica.

Raggruppamentu è aggregazione in R : data.table

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

Raggruppamentu è aggregazione di dati in Python: pandas

Grouping in pandas simile à dplyr, ma l'agregazione ùn hè micca simile à dplyr micca nantu data.table.

Per gruppu, utilizate u metudu groupby(), in quale avete bisognu di passà una lista di culonni da quale u dataframe serà raggruppatu.

Per aggregazione pudete aduprà u metudu agg()chì accetta un dizziunariu. I chjavi di dizziunariu sò e culonne nantu à quale applicà e funzioni di aggregazione, è i valori sò i nomi di e funzioni di aggregazione.

Funzioni di aggregazione:

  • sum() - summa
  • min() / max() - valore minimu è massimu
  • mean() - mediu
  • median() - mediana
  • count() - quantità

funziunava reset_index() in l'esempiu sottu hè utilizatu per resettate l'indici nidificati chì pandas predeterminatu dopu à l'agregazione di dati.

Simbulu permette di passà à a linea dopu.

Raggruppamentu è aggregazione in Python: pandas

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

Cunghjunzione verticale di tavule

Un'operazione in quale unite dui o più tavule di a listessa struttura. I dati chì avemu caricatu cuntenenu tavule ga_nov и ga_dec. Sti tavulini sò idèntica in struttura, i.e. hannu li stissi culonni, è i tipi di dati in sti culonni.

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

Questu hè un upload da Google Analytics per u mese di nuvembre è dicembre, in questa sezione cumminà sti dati in una sola tabella.

Unisce verticalmente e tabelle in R: tidyverse, dplyr

В dplyr Pudete cunghjuntà 2 tavule in una cù a funzione bind_rows(), passendu tavule cum'è i so argumenti.

Filtrazione di file in R: dplyr

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

Unisce verticalmente e tabelle in R: data.table

Ùn hè ancu nunda cumplicatu, usemu rbind().

Filtrazione di fila in R: data.table

## data.table
rbind(ga_nov, ga_dec)

Unisce verticalmente e tabelle in Python: pandas

В pandas a funzione hè aduprata per unisce e tavule concat(), in quale avete bisognu di passà una lista di frames per cumminà.

Filtrazione di stringhe in Python: pandas

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

Cunghjunzione horizontale di tavule

Una operazione in quale e culonne da u sicondu sò aghjuntu à a prima tavola per chjave. Hè spessu usatu quandu arricchisce una tabella di fatti (per esempiu, una tavula cù dati di vendita) cù qualchi dati di riferimentu (per esempiu, u costu di un pruduttu).

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

Ci sò parechji tippi di unione:

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

In a tavola caricata prima Association avemu una colonna Sex, chì currisponde à u codice di sessu di u passageru:

1 - femina
2 - masciu

Inoltre, avemu creatu una tavola - un libru di riferimentu genere. Per una presentazione più còmuda di e dati nantu à u sessu di i passageri, avemu bisognu di aghjunghje u nome di u genere da u repertoriu. genere à a tavula Association.

Tavola horizontale join in R: tidyverse, dplyr

В dplyr Ci hè una famiglia sana di funzioni per l'unione horizontale:

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

U più cumunimenti usatu in a mo pratica hè left_join().

Cum'è i primi dui argumenti, e funzioni elencate sopra piglianu dui tavule per unisce, è cum'è u terzu argumentu by duvete specificà e culonne per unisce.

Tavola horizontale join in R: dplyr

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

Unisce horizontale di e tavule in R: data.table

В data.table Avete bisognu di unisce à e tavule per chjave cù a funzione merge().

Argumenti per merge () funzione in data.table

  • x, y - Tavule per unisce
  • by - Colonna chì hè a chjave per unisce s'ellu hà u stessu nome in i dui tavulini
  • by.x, by.y - I nomi di colonna per esse uniti, s'ellu anu nomi diffirenti in e tavule
  • all, all.x, all.y — U tipu di unisce, tutti restituverà tutte e fila da e duie tavule, all.x currisponde à l'operazione LEFT JOIN (lasciarà tutte e fila di a prima tavola), all.y — currisponde à l'operazione LEFT JOIN. L'operazione RIGHT JOIN (lasciarà tutte e fila di a seconda tavola).

Unisce horizontale di e tavule in R: data.table

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

Tavola horizontale unisce in Python: pandas

Cum'è in data.tablein pandas a funzione hè aduprata per unisce e tavule merge().

Argumenti di a funzione merge() in pandas

  • cumu - Tipu di cunnessione: manca, diritta, esterna, interna
  • on - Colonna chì hè una chjave s'ellu hà u stessu nome in i dui tavulini
  • left_on, right_on - Nomi di e culonne chjave, s'ellu anu nomi diffirenti in tavule

Tavola horizontale unisce in Python: pandas

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

Funzioni di finestra di basa è culonni calculati

E funzioni di a finestra sò simili in u significatu à e funzioni di aggregazione, è sò spessu usati in l'analisi di dati. Ma à u cuntrariu di e funzioni di aggregazione, e funzioni di a finestra ùn cambianu micca u numeru di fila di u dataframe in uscita.

Quale lingua di sceglie per travaglià cù dati - R o Python? Tutti dui ! Migrazione da panda à tidyverse è data.table è torna

Essenzialmente, aduprendu a funzione di a finestra, dividemu u dataframe in entrata in parti secondu qualchì criteriu, i.e. da u valore di un campu, o parechji campi. E facemu operazioni aritmetiche nantu à ogni finestra. U risultatu di sti operazioni serà tornatu in ogni linea, i.e. senza cambià u numeru tutale di fila in a tavula.

Per esempiu, andemu à piglià a tavula Association. Pudemu calculà quale percentuale u costu di ogni bigliettu era in a so classe di cabina.

Per fà questu, avemu bisognu di ottene in ogni linea u costu tutale di un bigliettu per a classe di cabina attuale à quale appartene u bigliettu in questa linea, dopu dividite u costu di ogni bigliettu per u costu tutale di tutti i biglietti di a stessa classe di cabina. .

Funzioni di a finestra in R: tidyverse, dplyr

Per aghjunghje novi colonne, senza aduprà raggruppamentu di fila, in dplyr serve a funzione mutate().

Pudete risolve u prublema discritta sopra raggruppendu dati per campu Pclass è summing u campu in una nova colonna . In seguitu, ungroup the table and divide the field values à ciò chì hè accadutu in u passu precedente.

Funzioni di a finestra in R: dplyr

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

Funzioni di a finestra in R: data.table

L'algoritmu di suluzione resta u listessu cum'è in dplyr, avemu bisognu di split the table in windows by field Pclass. Output in una nova colonna a quantità per u gruppu chì currisponde à ogni fila, è aghjunghje una colonna in quale calculemu a parte di u costu di ogni bigliettu in u so gruppu.

Per aghjunghje novi colonne à data.table operatore presente :=. Quì sottu hè un esempiu di risolve un prublema cù u pacchettu data.table

Funzioni di a finestra in R: data.table

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

Funzioni di a finestra in Python: pandas

Una manera di aghjunghje una nova colonna pandas - aduprà a funzione assign(). Per sintetizà u costu di i biglietti per classi di cabina, senza raggruppamenti di fila, useremu a funzione transform().

Quì sottu hè un esempiu di una suluzione in quale aghjunghje à a tavula Association i stessi 2 culonni.

Funzioni di a finestra in Python: pandas

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

Funzioni è metudi tabella di currispundenza

A sottu hè una tavola di currispundenza trà i metudi per fà diverse operazioni cù dati in i pacchetti chì avemu cunsideratu.

discrizzione
ordinatu
dati.tavula
pandas

Caricà Dati
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Creazione di dataframes
tibble()
data.table()
dict() + from_dict()

Selezzione di e Culonne
select()
argumentu j, seconda posizione tra parentesi quadrate
passemu a lista di e colonne necessarie in parentesi quadrate / drop() / filter() / select_dtypes()

Filtri di fila
filter()
argumentu i, prima posizione tra parentesi quadre
Elenchemu e cundizioni di filtrazione in parentesi quadrate / filter()

Raggruppamentu è Aggregazione
group_by() + summarise()
argumenti j + by
groupby() + agg()

Unione verticale di tavule (UNION)
bind_rows()
rbind()
concat()

Unione orizzontale di tavule (JOIN)
left_join() / *_join()
merge()
merge()

Funzioni di a finestra di basa è aghjunghje colonne calculate
group_by() + mutate()
argumentu j usendu l'operatore := + argumentu by
transform() + assign()

cunchiusioni

Forsi in l'articulu ch'e aghju descrittu micca l'implementazione più ottimali di u trattamentu di dati, per quessa, seraghju cuntentu se correggete i mo sbagli in i cumenti, o simpricimenti cumplementari l'infurmazioni datu in l'articulu cù altre tecniche per travaglià cù dati in R / Python.

Cumu l'aghju scrittu sopra, u scopu di l'articulu ùn era micca di impone l'opinione di quale lingua hè megliu, ma di simplificà l'uppurtunità di amparà e duie lingue, o, se ne necessariu, migrate trà elli.

Se ti piace l'articulu, saraghju cuntentu di avè novi abbonati à u mo fratii и telegramma canali.

Poll

Qualessu di i seguenti pacchetti utilizate in u vostru travagliu?

In i cumenti pudete scrive u mutivu di a vostra scelta.

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Quale pacchettu di trattamentu di dati aduprate (pudete selezziunate parechje opzioni)

  • 45,2%tidyverse19

  • 33,3%dati.table14

  • 54,8%panda23

42 utilizatori anu vutatu. 9 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment