Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Kanthi nggoleki R utawa Python ing Internet, sampeyan bakal nemokake jutaan artikel lan kilometer diskusi babagan topik sing luwih apik, luwih cepet lan luwih trep kanggo nggarap data. Nanging sayangé, kabeh artikel lan perselisihan iki ora utamané migunani.

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Tujuan artikel iki yaiku kanggo mbandhingake teknik pangolahan data dhasar ing paket sing paling populer saka loro basa kasebut. Lan mbantu para pamaca kanthi cepet nguwasani bab sing durung dingerteni. Kanggo sing nulis ing Python, mangerteni carane nindakake bab sing padha ing R, lan kosok balene.

Sajrone artikel, kita bakal nganalisa sintaks paket sing paling populer ing R. Iki minangka paket sing kalebu ing perpustakaan. tidyverselan uga paket data.table. Lan mbandhingake sintaks karo pandas, paket analisis data paling populer ing Python.

Kita bakal pindhah langkah demi langkah liwat kabeh path analisis data saka loading menyang nindakake fungsi jendhela analitis nggunakake Python lan R.

Isi

Artikel iki bisa digunakake minangka sheet cheat yen sampeyan wis lali carane nindakake sawetara operasi pangolahan data ing salah siji paket sing dianggep.

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

  1. Beda sintaks utama antarane R lan Python
    1.1. Ngakses Fungsi Paket
    1.2. Assignment
    1.3. Pengindeksan
    1.4. Metode lan OOP
    1.5. Pipa-pipa
    1.6. Struktur data
  2. Sawetara tembung babagan paket sing bakal digunakake
    2.1. tidyverse
    2.2. data.tabel
    2.3. panda
  3. Nginstal paket
  4. Loading Data
  5. Nggawe dataframes
  6. Milih Kolom sing Sampeyan Perlu
  7. Nyaring baris
  8. Pengelompokan lan Agregasi
  9. Gabungan tabel vertikal (UNION)
  10. Gabungan tabel horisontal (JOIN)
  11. Fungsi jendhela dhasar lan kolom sing diwilang
  12. Tabel Correspondence antarane cara Processing data ing R lan Python
  13. kesimpulan
  14. Survei singkat babagan paket sing sampeyan gunakake

Yen sampeyan kasengsem ing analisis data, sampeyan bisa nemokake sandi telegram и youtube saluran. Sebagéyan gedhé isiné dikhususaké kanggo basa R.

Beda sintaks utama antarane R lan Python

Kanggo nggawe luwih gampang kanggo sampeyan ngalih saka Python kanggo R, utawa kosok balene, Aku bakal menehi sawetara TCTerms utama sing kudu mbayar manungsa waé kanggo.

Ngakses Fungsi Paket

Sawise paket dimuat menyang R, sampeyan ora perlu nemtokake jeneng paket kanggo ngakses fungsi kasebut. Ing kasus paling iki ora umum ing R, nanging ditrima. Sampeyan ora kudu ngimpor paket yen sampeyan butuh salah sawijining fungsi ing kode sampeyan, nanging mung nelpon kanthi nemtokake jeneng paket lan jeneng fungsi kasebut. Pemisah antarane jeneng paket lan fungsi ing R minangka titik loro. package_name::function_name().

Ing Python, ing nalisir, iku dianggep klasik kanggo nelpon fungsi paket kanthi tegas nemtokake jeneng sawijining. Nalika paket diundhuh, biasane diwenehi jeneng shortened, f.eks. pandas biasane nganggo jeneng samaran pd. Fungsi paket diakses liwat titik package_name.function_name().

Assignment

Ing R, iku umum nggunakake panah kanggo nemtokake nilai kanggo obyek. obj_name <- value, sanajan tandha siji padha diijini, tandha siji padha ing R digunakake utamané kanggo pass nilai kanggo fungsi argumen.

Ing Python, tugas ditindakake kanthi eksklusif kanthi tandha sing padha obj_name = value.

Pengindeksan

Ana uga beda sing cukup signifikan ing kene. Ing R, indeksasi diwiwiti saka siji lan kalebu kabeh unsur sing ditemtokake ing sawetara asil,

Ing Python, indeksasi diwiwiti saka nol lan sawetara sing dipilih ora kalebu unsur pungkasan sing ditemtokake ing indeks kasebut. Dadi desain x[i:j] ing Python ora bakal kalebu unsur j.

Ana uga beda ing indeksasi negatif, ing notasi R x[-1] bakal ngasilake kabeh unsur vektor kajaba sing pungkasan. Ing Python, notasi sing padha bakal ngasilake mung unsur pungkasan.

Metode lan OOP

R ngleksanakake OOP kanthi cara dhewe, aku nulis babagan iki ing artikel kasebut "OOP ing basa R (bagean 1): kelas S3". Umumé, R minangka basa fungsional, lan kabeh sing ana ing kono dibangun ing fungsi. Mulane, contone, kanggo pangguna Excel, pindhah menyang tydiverse iku bakal luwih gampang saka pandas. Senajan iki bisa dadi pendapat subjektifku.

Ing cendhak, obyek ing R ora duwe cara (yen kita pirembagan bab kelas S3, nanging ana implementasine OOP liyane sing kurang umum). Mung ana fungsi umum sing ngolah kanthi beda-beda gumantung saka kelas obyek kasebut.

Pipa-pipa

Mbok menawa iki jenenge pandas Iku ora kabeh bener, nanging aku bakal nyoba kanggo nerangake makna.

Supaya ora nyimpen kalkulasi penengah lan ora ngasilake obyek sing ora perlu ing lingkungan kerja, sampeyan bisa nggunakake jinis pipa. Sing. pass asil pitungan saka siji fungsi kanggo sabanjuré, lan ora nyimpen asil penengah.

Ayo njupuk conto kode ing ngisor iki, ing ngendi kita nyimpen kalkulasi penengah ing obyek sing kapisah:

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

We nindakake 3 operasi sequentially, lan asil saben disimpen ing obyek kapisah. Nanging nyatane, kita ora butuh obyek penengah iki.

Utawa malah luwih elek, nanging luwih akrab karo pangguna Excel.

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

Ing kasus iki, kita ora nyimpen asil pitungan penengah, nanging maca kode karo fungsi nested arang banget trep.

Kita bakal ndeleng sawetara pendekatan kanggo ngolah data ing R, lan nindakake operasi sing padha kanthi cara sing beda-beda.

Pipeline ing perpustakaan tidyverse dileksanakake dening operator %>%.

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

Mangkono kita njupuk asil karya func1() lan pass minangka argumen pisanan kanggo func2(), banjur kita ngliwati asil pitungan iki minangka argumen pisanan func3(). Lan ing pungkasan, kita nulis kabeh kalkulasi sing ditindakake ing obyek kasebut obj <-.

Kabeh ing ndhuwur digambarake luwih apik tinimbang tembung dening meme iki:
Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

В data.table rentengan digunakake ing cara sing padha.

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

Ing saben kurung kothak sampeyan bisa nggunakake asil saka operasi sadurungé.

В pandas operasi kuwi dipisahake dening titik.

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

Sing. kita njupuk meja kita df lan nggunakake metode dheweke fun1(), banjur kita aplikasi cara kanggo asil dijupuk fun2()sawise fun3(). Asil asil disimpen ing obyek obj .

Struktur data

Struktur data ing R lan Python padha, nanging duwe jeneng beda.

Description
Jeneng ing R
Jeneng ing Python/pandas

Struktur tabel
data.frame, data.tabel, data
DataFrame

Dhaptar nilai siji-dimensi
Vector
Seri ing panda utawa dhaptar ing Python murni

Struktur non-tabular multi-level
Dhaptar
Kamus (dict)

Kita bakal ndeleng sawetara fitur liyane lan bedane sintaksis ing ngisor iki.

Sawetara tembung babagan paket sing bakal digunakake

Pisanan, aku bakal ngandhani sethithik babagan paket sing bakal sampeyan kenal sajrone artikel iki.

tidyverse

Situs web resmi: tidyverse.org
Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali
perpustakaan tidyverse ditulis dening Hedley Wickham, Ilmuwan Riset Senior ing RStudio. tidyverse kasusun saka pesawat nyengsemaken paket sing menakake Processing data, 5 kang kalebu ing ndhuwur 10 downloads saka gudang CRAN.

Inti perpustakaan kasusun saka paket ing ngisor iki: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Saben paket kasebut ditujokake kanggo ngrampungake masalah tartamtu. Tuladhane dplyr digawe kanggo manipulasi data, tidyr kanggo nggawa data menyang wangun sing rapi, stringr simplifies nggarap strings, lan ggplot2 minangka salah sawijining alat visualisasi data sing paling populer.

Kauntungan tidyverse yaiku sintaksis sing gampang lan gampang diwaca, sing meh padha karo basa query SQL.

data.tabel

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan baliSitus web resmi: r-datatable.com

Pengarang data.table yaiku Matt Dole saka H2O.ai.

Rilis pisanan perpustakaan kasebut ditindakake ing taun 2006.

Sintaks paket ora trep kaya ing tidyverse lan luwih kaya dataframes klasik ing R, nanging ing wektu sing padha Ngartekno ditambahi ing fungsi.

Kabeh manipulasi karo tabel ing paket iki diterangake ing kurung kothak, lan yen sampeyan nerjemahake sintaks data.table ing SQL, sampeyan entuk kaya iki: data.table[ WHERE, SELECT, GROUP BY ]

Kekuwatan paket iki yaiku kacepetan ngolah data sing akeh.

panda

Situs web resmi: pandas.pydata.org Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Jeneng perpustakaan asalé saka istilah ekonometrik "data panel", digunakake kanggo njlèntrèhaké set multidimensi kabentuk informasi.

Pengarang pandas yaiku Amerika Wes McKinney.

Nalika nerangake analisis data ing Python, witjaksono pandas Ora. Paket tingkat dhuwur banget multifungsi sing ngidini sampeyan nindakake manipulasi apa wae karo data, saka ngemot data saka sumber apa wae kanggo nggambarake.

Nginstal paket tambahan

Paket sing dibahas ing artikel iki ora kalebu ing distribusi R lan Python dhasar. Sanajan ana caveat cilik, yen sampeyan wis nginstal distribusi Anaconda, banjur nginstal tambahan pandas ora dibutuhake.

Nginstal paket ing R

Yen sampeyan wis mbukak lingkungan pangembangan RStudio paling sethithik sapisan, sampeyan mbokmenawa wis ngerti carane nginstal paket sing dibutuhake ing R. Kanggo nginstal paket, gunakake printah standar. install.packages() kanthi mbukak langsung ing R dhewe.

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

Sawise instalasi, paket kudu disambungake, sing biasane digunakake printah library().

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

Nginstal Paket ing Python

Dadi, yen sampeyan wis nginstal Python murni, banjur pandas sampeyan kudu nginstal kanthi manual. Bukak baris perintah, utawa terminal, gumantung saka sistem operasi sampeyan lan ketik printah ing ngisor iki.

pip install pandas

Banjur kita bali menyang Python lan ngimpor paket sing diinstal kanthi printah kasebut import.

import pandas as pd

Loading Data

Data mining minangka salah sawijining langkah paling penting ing analisis data. Loro-lorone Python lan R, yen dikarepake, menehi sampeyan kesempatan sing akeh kanggo njupuk data saka sumber apa wae: file lokal, file saka Internet, situs web, kabeh jinis database.

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Saindhenging artikel kita bakal nggunakake sawetara set data:

  1. Loro download saka Google Analytics.
  2. Dataset Penumpang Titanic.

Kabeh data ana ing sandi GitHub ing wangun file csv lan tsv. Saka ngendi kita bakal njaluk wong-wong mau?

Ngunggah data menyang R: tidyverse, vroom, readr

Kanggo mbukak data menyang perpustakaan tidyverse Ana rong paket: vroom, readr. vroom luwih modern, nanging ing mangsa ngarep paket bisa digabungake.

Kutipan saka dokumentasi resmi vroom.

vroom vs maca
Apa release saka vroom tegese kanggo readr? Saiki, kita rencana supaya loro paket kasebut berkembang kanthi kapisah, nanging kemungkinan bakal nggabungake paket kasebut ing mangsa ngarep. Siji kerugian kanggo maca kesed vroom yaiku masalah data tartamtu ora bisa dilapurake ing ngarep, mula kudu dipikirake kanthi apik.

vroom vs maca
Apa tegese release? vroom kanggo readr? Ing wayahe, kita rencana ngembangake loro paket kasebut kanthi kapisah, nanging bisa uga bakal digabungake ing mangsa ngarep. Salah sijine kekurangane males maca vroom iku sawetara masalah karo data ora bisa kacarita ing advance, supaya sampeyan kudu mikir bab carane paling apik kanggo gabungke.

Ing artikel iki, kita bakal ndeleng loro paket loading data:

Loading data menyang R: paket 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")

Loading data menyang 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")

Ing paket vroom, preduli saka format data csv / tsv, loading ditindakake kanthi fungsi kanthi jeneng sing padha vroom(), ing paket readr kita nggunakake fungsi beda kanggo saben format read_tsv() и read_csv().

Loading data menyang R: data.tabel

В data.table ana fungsi kanggo loading data fread().

Loading data menyang R: paket 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")

Loading data ing Python: panda

Yen kita mbandhingake karo paket R, banjur ing kasus iki sintaks paling cedhak pandas bakal readr, amarga pandas bisa njaluk data saka ngendi wae, lan ana kulawarga kabèh fungsi ing paket iki read_*().

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

Lan akeh fungsi liyane sing dirancang kanggo maca data saka macem-macem format. Nanging kanggo tujuan kita wis cukup read_table() utawa read_csv() nggunakake argumentasi Sep kanggo nemtokake pemisah kolom.

Loading data ing Python: panda

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

Nggawe dataframes

Tabel Titanic, kang kita dimuat, ana lapangan sex, sing nyimpen pengenal jender penumpang.

Nanging kanggo presentasi data sing luwih trep babagan jinis penumpang, sampeyan kudu nggunakake jeneng tinimbang kode gender.

Kanggo nindakake iki, kita bakal nggawe direktori cilik, tabel sing mung ana 2 kolom (kode lan jeneng jender) lan 2 baris.

Nggawe dataframe ing R: tidyverse, dplyr

Ing conto kode ing ngisor iki, kita nggawe dataframe sing dikarepake nggunakake fungsi kasebut tibble() .

Nggawe dataframe ing R: dplyr

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

Nggawe dataframe ing R: data.table

Nggawe dataframe ing R: data.table

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

Nggawe dataframe ing Python: panda

В pandas nggawe pigura digawa metu ing sawetara orane tumrap sekolah, pisanan kita nggawe kamus, lan banjur kita Ngonversi kamus menyang dataframe.

Nggawe dataframe ing Python: panda

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

Milih Kolom

Tabel sing sampeyan gunakake bisa ngemot puluhan utawa malah atusan kolom data. Nanging kanggo nindakake analisis, minangka aturan, sampeyan ora perlu kabeh kolom sing kasedhiya ing tabel sumber.

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Mulane, salah sawijining operasi pisanan sing bakal ditindakake karo tabel sumber yaiku mbusak informasi sing ora perlu lan mbebasake memori sing ana ing informasi kasebut.

Milih kolom ing R: tidyverse, dplyr

sintaks dplyr meh padha karo basa query SQL, yen sampeyan ngerti sampeyan bakal cepet nguwasani paket iki.

Kanggo milih kolom, gunakake fungsi kasebut select().

Ing ngisor iki conto kode sing sampeyan bisa milih kolom kanthi cara ing ngisor iki:

  • Dhaptar jeneng kolom sing dibutuhake
  • Deleng jeneng kolom nggunakake ekspresi reguler
  • Miturut jinis data utawa properti liyane saka data sing ana ing kolom

Milih kolom ing 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)

Milih kolom ing R: data.tabel

Operasi sing padha ing data.table dileksanakake rada beda, ing wiwitan artikel aku menehi katrangan babagan argumen apa sing ana ing jero kurung data.table.

DT[i,j,by]

Ngendi:
i - ngendi, i.e. nyaring miturut larik
j - pilih|update|do, i.e. milih kolom lan ngowahi
dening - data klompok

Milih kolom ing R: data.tabel

## data.table
### выбрать по названию столбцов
ga_nov[ , .(date, source, sessions) ]
### исключь по названию столбцов
ga_nov[ , .SD, .SDcols = ! names(ga_nov) %like% "medium|bounces" ]
### выбрать по регулярному выражению
ga_nov[, .SD, .SDcols = patterns("s$")]

Variabel .SD ngijini sampeyan kanggo ngakses kabeh kolom, lan .SDcols nyaring kolom sing dibutuhake nggunakake ekspresi biasa, utawa fungsi liyane kanggo nyaring jeneng kolom sing dibutuhake.

Milih kolom ing Python, panda

Kanggo milih kolom miturut jeneng ing pandas iku cukup kanggo nyedhiyani dhaftar jeneng sing. Lan kanggo milih utawa ngilangi kolom kanthi jeneng nggunakake ekspresi biasa, sampeyan kudu nggunakake fungsi kasebut drop() и filter(), lan argumentasi sumbu = 1, sing nuduhake yen sampeyan kudu ngolah kolom tinimbang baris.

Kanggo milih kolom miturut jinis data, gunakake fungsi kasebut select_dtypes(), lan dadi argumentasi kalebu utawa ngilangi ngliwati dhaptar jinis data sing cocog karo lapangan sing kudu sampeyan pilih.

Milih kolom ing Python: panda

# Выбор полей по названию
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'])

Nyaring baris

Contone, tabel sumber bisa ngemot sawetara taun data, nanging sampeyan mung kudu nganalisa sasi pungkasan. Maneh, garis ekstra bakal alon proses pangolahan data lan clog munggah memori PC.

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Nyaring larik ing R: tydyverse, dplyr

В dplyr fungsi digunakake kanggo nyaring larik filter(). Butuh dataframe minangka argumen pisanan, banjur sampeyan dhaptar kahanan nyaring.

Nalika nulis ekspresi logis kanggo nyaring tabel, ing kasus iki, nemtokake jeneng kolom tanpa kuotasi lan tanpa nyatakake jeneng tabel.

Nalika nggunakake macem-macem ekspresi logis kanggo nyaring, gunakake operator ing ngisor iki:

  • & utawa koma - logis AND
  • | - logika OR

Nyaring baris ing R: dplyr

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

Nyaring larik ing R: data.table

Kaya sing wis daktulis ing ndhuwur, ing data.table sintaks konversi data wis dilampirake ing kurung kothak.

DT[i,j,by]

Ngendi:
i - ngendi, i.e. nyaring miturut larik
j - pilih|update|do, i.e. milih kolom lan ngowahi
dening - data klompok

Argumentasi digunakake kanggo nyaring baris i, sing nduweni posisi pisanan ing kurung kothak.

Kolom diakses kanthi ekspresi logis tanpa tandha petik lan tanpa nemtokake jeneng tabel.

Ekspresi logis ana hubungane karo saben liyane kanthi cara sing padha dplyr liwat operator & lan |.

Nyaring larik ing R: data.table

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

Nyaring strings ing Python: panda

Filter miturut baris ing pandas padha karo nyaring ing data.table, lan rampung ing kurung kothak.

Ing kasus iki, akses menyang kolom kudu ditindakake kanthi nuduhake jeneng kerangka data; banjur jeneng kolom uga bisa dituduhake ing tandha petik ing kurung kothak (conto df['col_name']), utawa tanpa kuotasi sawise periode (conto df.col_name).

Yen sampeyan kudu nyaring dataframe miturut sawetara kahanan, saben kondisi kudu diselehake ing kurung. Kondisi logis disambungake karo siji liyane dening operator & и |.

Nyaring strings ing Python: panda

# Фильтрация строк таблицы
### фильтрация строк по одному условию
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)]

Pengelompokan lan panggabungan data

Salah sawijining operasi sing paling umum digunakake ing analisis data yaiku klompok lan agregasi.

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Sintaks kanggo nindakake operasi kasebut kasebar ing kabeh paket sing dideleng.

Ing kasus iki, kita bakal njupuk dataframe minangka conto Titanic, lan ngetung nomer lan biaya rata-rata tiket gumantung ing kelas kabin.

Panglompokan lan panggabungan data ing R: tidyverse, dplyr

В dplyr fungsi digunakake kanggo kelompok group_by(), lan kanggo agregasi summarise(). Nyatane, dplyr ana kulawarga kabèh fungsi summarise_*(), nanging tujuan artikel iki yaiku kanggo mbandhingake sintaksis dhasar, supaya kita ora bakal mlebu ing alas kaya ngono.

Fungsi agregasi dhasar:

  • sum() - penjumlahan
  • min() / max() - nilai minimal lan maksimum
  • mean() - rata-rata
  • median() - median
  • length() - jumlah

Pengelompokan lan panggabungan ing R: dplyr

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

Ing fungsi group_by() kita ngliwati meja minangka argumen pisanan Titanic, banjur nuduhake lapangan Pkelas, kang kita bakal grup meja kita. Asil saka operasi iki nggunakake operator %>% liwati minangka argumen pisanan kanggo fungsi kasebut summarise(), lan ditambahake 2 lapangan liyane: wong liwat и rega_rata. Ing kawitan, nggunakake fungsi length() diwilang nomer karcis, lan ing kaloro nggunakake fungsi mean() nampa rega tiket rata-rata.

Ngelompokake lan nglumpukake data ing R: data.tabel

В data.table argumentasi digunakake kanggo nglumpukake j sing nduweni posisi kapindho ing kurung kothak, lan kanggo klompok by utawa keyby, sing duwe posisi katelu.

Dhaptar fungsi agregasi ing kasus iki padha karo sing diterangake ing dplyr, amarga iki minangka fungsi saka sintaks R dhasar.

Pengelompokan lan panggabungan ing R: data.tabel

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

Panglompokan lan panggabungan data ing Python: panda

Pengelompokan ing pandas padha karo dplyr, nanging panggabungan ora padha karo dplyr ora on data.table.

Kanggo klompok, gunakake metode groupby(), ing ngendi sampeyan kudu ngliwati dhaptar kolom sing bakal diklompokaké pigura data.

Kanggo agregasi sampeyan bisa nggunakake cara agg()kang nampa kamus. Tombol kamus yaiku kolom sing bakal digunakake kanggo fungsi agregasi, lan nilai kasebut minangka jeneng fungsi agregasi.

Fungsi agregasi:

  • sum() - penjumlahan
  • min() / max() - nilai minimal lan maksimum
  • mean() - rata-rata
  • median() - median
  • count() - jumlah

fungsi reset_index() ing conto ing ngisor iki digunakake kanggo ngreset indeks nested sing pandas gawan sawise nglumpukake data.

Simbol ngidini sampeyan pindhah menyang baris sabanjure.

Pengelompokan lan panggabungan ing Python: panda

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

Gabungan vertikal saka tabel

Operasi sing nggabungake loro utawa luwih tabel saka struktur sing padha. Data sing kita muat ngemot tabel ga_nov и ga_dec. Tabel iki padha ing struktur, i.e. duwe kolom sing padha, lan jinis data ing kolom kasebut.

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Iki minangka unggahan saka Google Analytics kanggo sasi November lan Desember, ing bagean iki kita bakal nggabungake data iki dadi siji tabel.

Vertikal nggabungake tabel ing R: tidyverse, dplyr

В dplyr Sampeyan bisa gabungke 2 tabel dadi siji nggunakake fungsi kasebut bind_rows(), ngliwati tabel minangka argumen.

Nyaring baris ing R: dplyr

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

Vertikal nggabungake tabel ing R: data.table

Iku uga ora rumit, ayo nggunakake rbind().

Nyaring larik ing R: data.table

## data.table
rbind(ga_nov, ga_dec)

Vertikal nggabungake tabel ing Python: panda

В pandas fungsi digunakake kanggo nggabungake tabel concat(), ing ngendi sampeyan kudu ngliwati dhaptar pigura kanggo nggabungake.

Nyaring strings ing Python: panda

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

Gabungan tabel horisontal

Operasi ing ngendi kolom saka kaloro ditambahake menyang tabel pisanan kanthi tombol. Asring digunakake nalika nambah tabel fakta (contone, tabel kanthi data dodolan) kanthi sawetara data referensi (contone, biaya produk).

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Ana sawetara jinis gabungan:

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Ing tabel sadurunge dimuat Titanic kita duwe kolom sex, sing cocog karo kode gender penumpang:

1 - wadon
2 - lanang

Uga, kita wis nggawe tabel - buku referensi jender. Kanggo presentasi data sing luwih trep babagan jender penumpang, kita kudu nambah jeneng jender saka direktori kasebut jender menyang meja Titanic.

Tabel horisontal gabung ing R: tidyverse, dplyr

В dplyr Ana kulawarga kabeh fungsi kanggo gabung horisontal:

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

Sing paling umum digunakake ing praktikku yaiku left_join().

Minangka rong argumen pisanan, fungsi sing kadhaptar ing ndhuwur njupuk rong tabel kanggo gabung, lan minangka argumen katelu by sampeyan kudu nemtokake kolom kanggo gabung.

Tabel horisontal gabung ing R: dplyr

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

Gabungan horisontal saka tabel ing R: data.table

В data.table Sampeyan kudu nggabungake tabel kanthi tombol nggunakake fungsi kasebut merge().

Argumen kanggo nggabungake () fungsi ing data.table

  • x, y - Tabel kanggo gabung
  • dening - Column sing tombol kanggo nggabungake yen wis jeneng padha ing loro tabel
  • by.x, by.y - Jeneng kolom sing bakal digabung, yen padha duwe jeneng beda ing tabel
  • kabeh, all.x, all.y - Gabung jinis, kabeh bakal bali kabeh larik saka loro tabel, all.x cocog karo operasi LEFT JOIN (bakal ninggalake kabeh larik saka tabel pisanan), all.y - cocog karo RIGHT JOIN operasi (bakal ninggalake kabeh larik saka tabel kapindho).

Gabungan horisontal saka tabel ing R: data.table

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

Tabel horisontal gabung ing Python: panda

Uga ing data.tableing pandas fungsi digunakake kanggo nggabungake tabel merge().

Argumen saka merge() fungsi ing panda

  • carane - Jinis sambungan: kiwa, tengen, njaba, njero
  • on - Column sing tombol yen wis jeneng padha ing loro tabel
  • left_on, right_on - Jeneng kolom tombol, yen padha duwe jeneng beda ing tabel

Tabel horisontal gabung ing Python: panda

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

Fungsi jendhela dhasar lan kolom sing diwilang

Fungsi jendhela padha ing makna kanggo fungsi agregasi, lan uga asring digunakake ing analisis data. Nanging ora kaya fungsi agregasi, fungsi jendhela ora ngganti jumlah larik saka dataframe metu.

Basa sing kudu dipilih kanggo nggarap data - R utawa Python? Loro-lorone! Migrasi saka panda kanggo tidyverse lan data.table lan bali

Ateges, nggunakake fungsi jendhela, kita pamisah dataframe mlebu menyang bagean miturut sawetara kritéria, i.e. kanthi nilai lapangan, utawa sawetara kolom. Lan kita nindakake operasi aritmetika ing saben jendhela. Asil saka operasi iki bakal bali ing saben baris, i.e. tanpa ngganti jumlah total larik ing meja.

Contone, ayo njupuk meja Titanic. Kita bisa ngetung apa persentasi biaya saben tiket ing kelas kabin sawijining.

Kanggo nindakake iki, kita kudu entuk ing saben baris biaya total tiket kanggo kelas kabin saiki sing tiket ing baris iki belongs, banjur dibagi biaya saben tiket karo total biaya kabeh tiket saka kelas kabin padha. .

Fungsi jendhela ing R: tidyverse, dplyr

Kanggo nambah kolom anyar, tanpa nggunakake klompok baris, ing dplyr serves fungsi mutate().

Sampeyan bisa ngatasi masalah sing diterangake ing ndhuwur kanthi nglumpukake data miturut lapangan Pkelas lan summing kolom ing kolom anyar apa. Sabanjure, ungroup tabel lan dibagi nilai lapangan apa kanggo apa sing kedadeyan ing langkah sadurunge.

Fungsi jendhela ing R: dplyr

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

Fungsi jendhela ing R: data.table

Algoritma solusi tetep padha karo ing dplyr, kita kudu pamisah tabel menyang jendhela dening lapangan Pkelas. Output ing kolom anyar jumlah kanggo klompok cocog kanggo saben baris, lan nambah kolom kang kita ngetung nuduhake biaya saben tiket ing sawijining klompok.

Kanggo nambah kolom anyar kanggo data.table operator saiki :=. Ing ngisor iki minangka conto kanggo ngrampungake masalah nggunakake paket kasebut data.table

Fungsi jendhela ing R: data.table

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

Fungsi jendhela ing Python: panda

Salah siji cara kanggo nambah kolom anyar pandas - nggunakake fungsi assign(). Kanggo ngringkes biaya karcis dening kelas kabin, tanpa klompok larik, kita bakal nggunakake fungsi transform().

Ing ngisor iki minangka conto solusi sing ditambahake ing meja Titanic padha 2 kolom.

Fungsi jendhela ing Python: panda

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

Tabel korespondensi fungsi lan metode

Ing ngisor iki minangka tabel korespondensi antarane cara kanggo nindakake macem-macem operasi kanthi data ing paket sing wis kita nimbang.

Description
tidyverse
data.tabel
panda

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

Nggawe dataframes
tibble()
data.table()
dict() + from_dict()

Milih Kolom
select()
padudon j, posisi kapindho ing kurung kothak
kita ngliwati dhaptar kolom sing dibutuhake ing tanda kurung / drop() / filter() / select_dtypes()

Nyaring baris
filter()
padudon i, posisi pisanan ing kurung kothak
Kita dhaptar kahanan nyaring ing kurung kothak / filter()

Pengelompokan lan Agregasi
group_by() + summarise()
bantahan j + by
groupby() + agg()

Gabungan tabel vertikal (UNION)
bind_rows()
rbind()
concat()

Gabungan tabel horisontal (JOIN)
left_join() / *_join()
merge()
merge()

Fungsi jendhela dhasar lan nambah kolom sing diwilang
group_by() + mutate()
padudon j nggunakake operator := + argumentasi by
transform() + assign()

kesimpulan

Mungkin ing artikel sing dakgambarake minangka implementasine paling optimal saka pangolahan data, mula aku bakal bungah yen sampeyan mbenerake kesalahanku ing komentar, utawa mung nambah informasi sing diwenehake ing artikel kasebut kanthi teknik liya kanggo nggarap data ing R / Python.

Kaya sing dakcritakake ing ndhuwur, tujuan artikel kasebut ora kanggo ngetrapake pendapat babagan basa sing luwih apik, nanging kanggo nyederhanakake kesempatan kanggo sinau basa loro kasebut, utawa, yen perlu, migrasi ing antarane.

Yen sampeyan seneng karo artikel kasebut, aku bakal seneng duwe pelanggan anyar youtube и telegram saluran.

Jajak Pendapat

Endi saka paket ing ngisor iki sing sampeyan gunakake ing karya sampeyan?

Ing komentar sampeyan bisa nulis alesan kanggo pilihan sampeyan.

Mung pangguna pangguna sing bisa melu survey. mlebunggih.

Paket pangolahan data endi sing sampeyan gunakake (sampeyan bisa milih sawetara opsi)

  • 45,2%resik-resik19

  • 33,3%data.tabel14

  • 54,8%pandha23

42 pangguna milih. 9 pangguna abstain.

Source: www.habr.com

Add a comment