Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Dengan mencari R atau Python di Internet, Anda akan menemukan jutaan artikel dan diskusi berkilo-kilometer tentang topik mana yang lebih baik, lebih cepat, dan nyaman untuk bekerja dengan data. Namun sayangnya, semua artikel dan perselisihan ini tidak terlalu berguna.

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Tujuan artikel ini adalah untuk membandingkan teknik pemrosesan data dasar dalam paket terpopuler kedua bahasa. Dan membantu pembaca dengan cepat menguasai sesuatu yang belum mereka ketahui. Bagi mereka yang menulis dengan Python, cari tahu cara melakukan hal yang sama di R, dan sebaliknya.

Dalam artikel ini kami akan menganalisis sintaks paket paling populer di R. Ini adalah paket yang disertakan dalam perpustakaan tidyversedan juga paketnya data.table. Dan bandingkan sintaksnya dengan pandas, paket analisis data paling populer dengan Python.

Kami akan menelusuri seluruh jalur analisis data selangkah demi selangkah mulai dari memuatnya hingga menjalankan fungsi jendela analitis menggunakan Python dan R.

kadar

Artikel ini dapat digunakan sebagai lembar contekan jika Anda lupa bagaimana melakukan beberapa operasi pemrosesan data di salah satu paket yang dimaksud.

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

  1. Perbedaan sintaksis utama antara R dan Python
    1.1. Mengakses Fungsi Paket
    1.2. Penugasan
    1.3. Pengindeksan
    1.4. Metode dan OOP
    1.5. Saluran pipa
    1.6. Struktur data
  2. Beberapa kata tentang paket yang akan kami gunakan
    2.1. rapi
    2.2. tabel data
    2.3. panda
  3. Menginstal paket
  4. Memuat Data
  5. Membuat kerangka data
  6. Memilih Kolom yang Anda Butuhkan
  7. Memfilter baris
  8. Pengelompokan dan Agregasi
  9. Penyatuan tabel secara vertikal (UNION)
  10. Gabungan tabel secara horizontal (JOIN)
  11. Fungsi jendela dasar dan kolom terhitung
  12. Tabel korespondensi antara metode pemrosesan data di R dan Python
  13. Kesimpulan
  14. Survei singkat tentang paket mana yang Anda gunakan

Jika Anda tertarik dengan analisis data, Anda dapat menemukan milik saya Telegram и Youtube saluran. Sebagian besar konten didedikasikan untuk bahasa R.

Perbedaan sintaksis utama antara R dan Python

Untuk memudahkan Anda beralih dari Python ke R, atau sebaliknya, saya akan memberikan beberapa poin utama yang perlu Anda perhatikan.

Mengakses Fungsi Paket

Setelah sebuah paket dimuat ke R, Anda tidak perlu menentukan nama paket untuk mengakses fungsinya. Dalam kebanyakan kasus, hal ini tidak umum di R, tetapi dapat diterima. Anda tidak perlu mengimpor paket sama sekali jika Anda memerlukan salah satu fungsinya dalam kode Anda, tetapi cukup memanggilnya dengan menentukan nama paket dan nama fungsinya. Pemisah antara nama paket dan fungsi di R adalah titik dua. package_name::function_name().

Sebaliknya, dalam Python, memanggil fungsi suatu paket dengan menentukan namanya secara eksplisit dianggap klasik. Ketika suatu paket diunduh, biasanya diberi nama yang disingkat, mis. pandas biasanya nama samaran digunakan pd. Fungsi paket diakses melalui titik package_name.function_name().

Penugasan

Di R, biasanya menggunakan panah untuk memberikan nilai pada suatu objek. obj_name <- value, meskipun tanda sama dengan tunggal diperbolehkan, tanda sama dengan tunggal di R digunakan terutama untuk meneruskan nilai ke argumen fungsi.

Dalam Python, penugasan dilakukan secara eksklusif dengan satu tanda sama dengan obj_name = value.

Pengindeksan

Ada juga perbedaan yang cukup signifikan di sini. Di R, pengindeksan dimulai dari satu dan mencakup semua elemen tertentu dalam rentang yang dihasilkan,

Dengan Python, pengindeksan dimulai dari nol dan rentang yang dipilih tidak menyertakan elemen terakhir yang ditentukan dalam indeks. Jadi desain x[i:j] dengan Python tidak akan menyertakan elemen j.

Ada juga perbedaan pengindeksan negatif, dalam notasi R x[-1] akan mengembalikan semua elemen vektor kecuali yang terakhir. Di Python, notasi serupa hanya akan mengembalikan elemen terakhir.

Metode dan OOP

R mengimplementasikan OOP dengan caranya sendiri, saya menulis tentang ini di artikel "OOP dalam bahasa R (bagian 1): kelas S3". Secara umum, R adalah bahasa fungsional, dan segala isinya dibangun berdasarkan fungsi. Oleh karena itu, misalnya untuk pengguna Excel, buka tydiverse itu akan lebih mudah dari pandas. Meskipun ini mungkin pendapat subjektif saya.

Singkatnya, objek di R tidak memiliki metode (jika kita berbicara tentang kelas S3, tetapi ada implementasi OOP lain yang kurang umum). Hanya ada fungsi umum yang memprosesnya secara berbeda bergantung pada kelas objek.

Saluran pipa

Mungkin ini adalah nama untuknya pandas Memang tidak sepenuhnya benar, tapi saya akan mencoba menjelaskan maknanya.

Agar tidak menyimpan perhitungan perantara dan tidak menghasilkan objek yang tidak diperlukan di lingkungan kerja, Anda dapat menggunakan semacam pipa. Itu. meneruskan hasil penghitungan dari satu fungsi ke fungsi berikutnya, dan tidak menyimpan hasil antara.

Mari kita ambil contoh kode berikut, di mana kita menyimpan perhitungan perantara dalam objek terpisah:

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

Kami melakukan 3 operasi secara berurutan, dan hasilnya masing-masing disimpan dalam objek terpisah. Namun nyatanya, kita tidak membutuhkan objek perantara tersebut.

Atau lebih buruk lagi, tapi lebih familiar bagi pengguna Excel.

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

Dalam hal ini, kami tidak menyimpan hasil perhitungan antara, tetapi membaca kode dengan fungsi bersarang sangat merepotkan.

Kita akan melihat beberapa pendekatan pemrosesan data di R, dan pendekatan tersebut melakukan operasi serupa dengan cara berbeda.

Saluran pipa di perpustakaan tidyverse dilaksanakan oleh operator %>%.

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

Demikianlah kita ambil hasil pekerjaannya func1() dan meneruskannya sebagai argumen pertama func2(), lalu kita meneruskan hasil perhitungan ini sebagai argumen pertama func3(). Dan pada akhirnya, kami menulis semua perhitungan yang dilakukan ke dalam objek obj <-.

Semua hal di atas diilustrasikan lebih baik daripada kata-kata dalam meme ini:
Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

В data.table rantai digunakan dengan cara yang sama.

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

Di setiap tanda kurung siku Anda dapat menggunakan hasil operasi sebelumnya.

В pandas operasi tersebut dipisahkan oleh sebuah titik.

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

Itu. kami mengambil meja kami df dan gunakan metodenya fun1(), lalu kita terapkan metode tersebut pada hasil yang diperoleh fun2(), setelah fun3(). Hasil yang dihasilkan disimpan ke dalam sebuah objek obj .

Struktur data

Struktur data di R dan Python serupa, tetapi memiliki nama berbeda.

Описание
Judul di R
Nama dengan Python/panda

Struktur tabel
data.frame, data.tabel, tibble
Bingkai Data

Daftar nilai satu dimensi
Vektor
Seri dalam panda atau daftar dengan Python murni

Struktur non-tabel bertingkat
Daftar
Kamus (dikt)

Kami akan melihat beberapa fitur dan perbedaan sintaksis lainnya di bawah.

Beberapa kata tentang paket yang akan kami gunakan

Pertama, saya akan memberi tahu Anda sedikit tentang paket-paket yang akan Anda kenali pada artikel ini.

rapi

Официальный сайт: rapiverse.org
Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya
perpustakaan tidyverse ditulis oleh Hedley Wickham, Ilmuwan Riset Senior di RStudio. tidyverse terdiri dari serangkaian paket mengesankan yang menyederhanakan pemrosesan data, 5 di antaranya termasuk dalam 10 unduhan teratas dari repositori CRAN.

Inti dari perpustakaan terdiri dari paket-paket berikut: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Masing-masing paket ini ditujukan untuk memecahkan masalah tertentu. Misalnya dplyr dibuat untuk manipulasi data, tidyr untuk membawa data ke bentuk yang rapi, stringr menyederhanakan bekerja dengan string, dan ggplot2 adalah salah satu alat visualisasi data paling populer.

keuntungan tidyverse adalah kesederhanaan dan sintaksis yang mudah dibaca, yang dalam banyak hal mirip dengan bahasa kueri SQL.

tabel data

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknyaОфициальный сайт: r-datatable.com

Oleh penulis data.table adalah Matt Dole dari H2O.ai.

Rilis pertama perpustakaan berlangsung pada tahun 2006.

Sintaks paket tidak senyaman di tidyverse dan lebih mengingatkan pada kerangka data klasik di R, tetapi pada saat yang sama memperluas fungsinya secara signifikan.

Semua manipulasi dengan tabel dalam paket ini dijelaskan dalam tanda kurung siku, dan jika Anda menerjemahkan sintaksnya data.table di SQL, Anda mendapatkan sesuatu seperti ini: data.table[ WHERE, SELECT, GROUP BY ]

Kelebihan paket ini adalah kecepatan pemrosesan data dalam jumlah besar.

panda

Официальный сайт: pandas.pydata.org Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Nama perpustakaan berasal dari istilah ekonometrik “data panel”, yang digunakan untuk menggambarkan kumpulan informasi terstruktur multidimensi.

Oleh penulis pandas adalah orang Amerika Wes McKinney.

Dalam hal analisis data dengan Python, sama saja pandas TIDAK. Paket tingkat tinggi yang sangat multifungsi yang memungkinkan Anda melakukan manipulasi apa pun dengan data, mulai dari memuat data dari sumber apa pun hingga memvisualisasikannya.

Menginstal paket tambahan

Paket yang dibahas dalam artikel ini tidak termasuk dalam distribusi dasar R dan Python. Meskipun ada sedikit peringatan, jika Anda menginstal distribusi Anaconda, maka instal tambahan pandas tidak diperlukan.

Menginstal paket di R

Jika Anda telah membuka lingkungan pengembangan RStudio setidaknya sekali, Anda mungkin sudah mengetahui cara menginstal paket yang diperlukan di R. Untuk menginstal paket, gunakan perintah standar install.packages() dengan menjalankannya langsung di R itu sendiri.

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

Setelah instalasi, paket-paket harus dihubungkan, yang dalam banyak kasus perintah tersebut digunakan library().

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

Menginstal paket dengan Python

Jadi, jika Anda sudah menginstal Python murni pandas Anda perlu menginstalnya secara manual. Buka baris perintah, atau terminal, tergantung pada sistem operasi Anda dan masukkan perintah berikut.

pip install pandas

Kemudian kita kembali ke Python dan mengimpor paket yang diinstal dengan perintah import.

import pandas as pd

Memuat Data

Penambangan data adalah salah satu langkah terpenting dalam analisis data. Baik Python dan R, jika diinginkan, memberi Anda peluang luas untuk memperoleh data dari sumber apa pun: file lokal, file dari Internet, situs web, semua jenis database.

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Sepanjang artikel ini kami akan menggunakan beberapa kumpulan data:

  1. Dua unduhan dari Google Analytics.
  2. Kumpulan Data Penumpang Titanic.

Semua data ada di saya GitHub dalam bentuk file csv dan tsv. Dari mana kami akan memintanya?

Memuat data ke R: rapiverse, vroom, readr

Untuk memuat data ke perpustakaan tidyverse Ada dua paket: vroom, readr. vroom lebih modern, namun kedepannya paket-paket tersebut dapat digabungkan.

Kutipan dari dokumentasi resmi vroom.

vroom vs pembaca
Apa rilisnya vroom berarti untuk readr? Untuk saat ini kami berencana untuk membiarkan kedua paket tersebut berkembang secara terpisah, namun kemungkinan besar kami akan menggabungkan paket-paket tersebut di masa mendatang. Salah satu kelemahan vroom yang malas membaca adalah masalah data tertentu tidak dapat dilaporkan terlebih dahulu, jadi cara terbaik untuk menyatukannya memerlukan pemikiran.

vroom vs pembaca
Apa yang dimaksud dengan pelepasan? vroom untuk readr? Saat ini kami berencana untuk mengembangkan kedua paket secara terpisah, namun kami mungkin akan menggabungkan keduanya di masa mendatang. Salah satu dampak buruk dari malas membaca vroom adalah beberapa masalah pada data tidak dapat dilaporkan sebelumnya, jadi Anda perlu memikirkan cara terbaik untuk menggabungkannya.

Pada artikel ini kita akan melihat kedua paket pemuatan data:

Memuat data ke dalam paket R: 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")

Memuat data ke 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")

Dalam paket vroom, apa pun format data csv/tsv, pemuatan dilakukan dengan fungsi dengan nama yang sama vroom(), di dalam paket readr kami menggunakan fungsi berbeda untuk setiap format read_tsv() и read_csv().

Memuat data ke R: data.table

В data.table ada fungsi untuk memuat data fread().

Memuat data ke dalam paket R: 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")

Memuat data dengan Python: pandas

Jika kita bandingkan dengan paket R, maka dalam hal ini sintaksnya paling dekat pandas akan readr, karena pandas dapat meminta data dari mana saja, dan terdapat berbagai fungsi dalam paket ini read_*().

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

Dan masih banyak fungsi lainnya yang dirancang untuk membaca data dari berbagai format. Tapi untuk tujuan kita, itu sudah cukup read_table() или read_csv() menggunakan argumen September untuk menentukan pemisah kolom.

Memuat data dengan 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")

Membuat kerangka data

Meja raksasa, yang kami muat, ada bidang Seks, yang menyimpan pengenal gender penumpang.

Namun untuk penyajian data gender penumpang yang lebih mudah, sebaiknya gunakan nama, bukan kode gender.

Untuk melakukan ini, kita akan membuat direktori kecil, sebuah tabel yang di dalamnya hanya akan ada 2 kolom (kode dan nama gender) dan 2 baris, masing-masing.

Membuat kerangka data di R: rapiverse, dplyr

Pada contoh kode di bawah ini, kita membuat kerangka data yang diinginkan menggunakan fungsi tersebut tibble() .

Membuat kerangka data di R: dplyr

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

Membuat kerangka data di R: data.table

Membuat kerangka data di R: data.table

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

Membuat kerangka data dengan Python: pandas

В pandas Pembuatan frame dilakukan dalam beberapa tahap, pertama kita membuat kamus, kemudian kamus tersebut diubah menjadi dataframe.

Membuat kerangka data dengan Python: pandas

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

Memilih Kolom

Tabel yang Anda gunakan mungkin berisi lusinan atau bahkan ratusan kolom data. Namun untuk melakukan analisis, biasanya Anda tidak memerlukan semua kolom yang tersedia di tabel sumber.

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Oleh karena itu, salah satu operasi pertama yang akan Anda lakukan dengan tabel sumber adalah menghapus informasi yang tidak perlu dan mengosongkan memori yang ditempati informasi ini.

Memilih kolom di R: rapiverse, dplyr

sintaksis dplyr sangat mirip dengan bahasa query SQL, jika Anda sudah familiar dengannya Anda akan segera menguasai paket ini.

Untuk memilih kolom, gunakan fungsi select().

Di bawah ini adalah contoh kode yang dapat Anda gunakan untuk memilih kolom dengan cara berikut:

  • Mencantumkan nama kolom yang diperlukan
  • Lihat nama kolom menggunakan ekspresi reguler
  • Berdasarkan tipe data atau properti lain dari data yang terdapat dalam kolom

Memilih kolom di 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)

Memilih kolom di R: data.table

Operasi yang sama di data.table dilakukan sedikit berbeda, di awal artikel saya memberikan penjelasan tentang argumen apa yang ada di dalam tanda kurung siku data.table.

DT[i,j,by]

Dimana:
saya - di mana, mis. memfilter berdasarkan baris
j - pilih|perbarui|lakukan, mis. memilih kolom dan mengonversinya
oleh - pengelompokan data

Memilih kolom di 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$")]

Variabel .SD memungkinkan Anda mengakses semua kolom, dan .SDcols memfilter kolom yang diperlukan menggunakan ekspresi reguler, atau fungsi lain untuk memfilter nama kolom yang Anda perlukan.

Memilih kolom dengan Python, pandas

Untuk memilih kolom berdasarkan nama di pandas cukup dengan memberikan daftar nama mereka. Dan untuk memilih atau mengecualikan kolom berdasarkan nama menggunakan ekspresi reguler, Anda perlu menggunakan fungsinya drop() и filter(), dan argumen sumbu = 1, yang dengannya Anda menunjukkan bahwa kolom perlu diproses, bukan baris.

Untuk memilih bidang berdasarkan tipe data, gunakan fungsi select_dtypes(), dan menjadi argumen memasukkan или mengecualikan meneruskan daftar tipe data yang sesuai dengan bidang mana yang perlu Anda pilih.

Memilih kolom dengan 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'])

Memfilter baris

Misalnya, tabel sumber mungkin berisi data beberapa tahun, namun Anda hanya perlu menganalisis sebulan terakhir. Sekali lagi, jalur tambahan akan memperlambat proses pemrosesan data dan menyumbat memori PC.

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Memfilter baris di R: tydyverse, dplyr

В dplyr fungsinya digunakan untuk memfilter baris filter(). Dibutuhkan kerangka data sebagai argumen pertama, lalu Anda mencantumkan kondisi pemfilteran.

Saat menulis ekspresi logika untuk memfilter tabel, dalam hal ini, tentukan nama kolom tanpa tanda kutip dan tanpa mendeklarasikan nama tabel.

Saat menggunakan beberapa ekspresi logika untuk memfilter, gunakan operator berikut:

  • & atau koma - logis DAN
  • | - logis ATAU

Memfilter baris di R: dplyr

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

Memfilter baris di R: data.table

Seperti yang sudah saya tulis di atas, di data.table sintaks konversi data diapit tanda kurung siku.

DT[i,j,by]

Dimana:
saya - di mana, mis. memfilter berdasarkan baris
j - pilih|perbarui|lakukan, mis. memilih kolom dan mengonversinya
oleh - pengelompokan data

Argumennya digunakan untuk memfilter baris i, yang mempunyai posisi pertama dalam tanda kurung siku.

Kolom diakses dalam ekspresi logis tanpa tanda kutip dan tanpa menentukan nama tabel.

Ekspresi logis berhubungan satu sama lain dengan cara yang sama seperti di dplyr melalui operator & dan |.

Memfilter baris di R: data.table

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

Memfilter string dengan Python: pandas

Filter menurut baris di pandas mirip dengan memfilter data.table, dan dilakukan dalam tanda kurung siku.

Dalam hal ini, akses ke kolom harus dilakukan dengan menunjukkan nama kerangka data; kemudian nama kolom juga dapat ditunjukkan dalam tanda kutip dalam tanda kurung siku (contoh df['col_name']), atau tanpa tanda kutip setelah titik (contoh df.col_name).

Jika Anda perlu memfilter kerangka data berdasarkan beberapa kondisi, setiap kondisi harus ditempatkan dalam tanda kurung. Kondisi logika dihubungkan satu sama lain oleh operator & и |.

Memfilter string dengan 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)]

Pengelompokan dan agregasi data

Salah satu operasi yang paling umum digunakan dalam analisis data adalah pengelompokan dan agregasi.

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Sintaks untuk melakukan operasi ini tersebar di semua paket yang kami ulas.

Dalam hal ini, kita akan mengambil kerangka data sebagai contoh raksasa, dan menghitung jumlah dan harga rata-rata tiket tergantung pada kelas kabin.

Pengelompokan dan agregasi data di R: rapiverse, dplyr

В dplyr fungsinya digunakan untuk pengelompokan group_by(), dan untuk agregasi summarise(). Nyatanya, dplyr ada seluruh rangkaian fungsi summarise_*(), tetapi tujuan artikel ini adalah untuk membandingkan sintaks dasar, jadi kita tidak akan membahas hal tersebut.

Fungsi agregasi dasar:

  • sum() — penjumlahan
  • min() / max() – nilai minimum dan maksimum
  • mean() - rata-rata
  • median() — median
  • length() - kuantitas

Pengelompokan dan agregasi di R: dplyr

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

Dalam fungsi group_by() kami melewati tabel sebagai argumen pertama raksasa, lalu menunjukkan bidangnya Kelas P, yang dengannya kita akan mengelompokkan tabel kita. Hasil dari operasi ini menggunakan operator %>% diteruskan sebagai argumen pertama ke fungsi tersebut summarise(), dan menambahkan 2 bidang lagi: penumpang и rata-rata_harga. Yang pertama, menggunakan fungsi length() menghitung jumlah tiket, dan yang kedua menggunakan fungsi mean() menerima harga tiket rata-rata.

Pengelompokan dan agregasi data di R: data.table

В data.table argumennya digunakan untuk agregasi j yang memiliki posisi kedua dalam tanda kurung siku, dan untuk pengelompokan by или keyby, yang memiliki posisi ketiga.

Daftar fungsi agregasi dalam hal ini identik dengan yang dijelaskan dalam dplyr, Karena ini adalah fungsi dari sintaks dasar R.

Pengelompokan dan agregasi di R: data.table

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

Pengelompokan dan agregasi data dengan Python: pandas

Pengelompokan dalam pandas mirip dengan dplyr, tetapi agregasinya tidak mirip dengan dplyr sama sekali tidak data.table.

Untuk mengelompokkan, gunakan metode groupby(), di mana Anda harus memasukkan daftar kolom yang akan digunakan untuk mengelompokkan kerangka data.

Untuk agregasi Anda dapat menggunakan metode ini agg()yang menerima kamus. Kunci kamus adalah kolom tempat Anda akan menerapkan fungsi agregasi, dan nilainya adalah nama fungsi agregasi.

Fungsi agregasi:

  • sum() — penjumlahan
  • min() / max() – nilai minimum dan maksimum
  • mean() - rata-rata
  • median() — median
  • count() - kuantitas

Fungsi reset_index() pada contoh di bawah ini digunakan untuk mereset indeks bersarang itu pandas defaultnya adalah setelah agregasi data.

simbol memungkinkan Anda untuk pindah ke baris berikutnya.

Pengelompokan dan agregasi dengan Python: pandas

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

Gabungan tabel secara vertikal

Operasi yang menggabungkan dua tabel atau lebih dengan struktur yang sama. Data yang kami muat berisi tabel ga_nov и ga_des. Tabel-tabel ini memiliki struktur yang identik, yaitu. memiliki kolom yang sama, dan tipe data di kolom tersebut.

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Ini merupakan upload dari Google Analytics bulan November dan Desember, pada bagian ini kami akan menggabungkan data tersebut menjadi satu tabel.

Menggabungkan tabel secara vertikal di R: rapiverse, dplyr

В dplyr Anda dapat menggabungkan 2 tabel menjadi satu menggunakan fungsi tersebut bind_rows(), meneruskan tabel sebagai argumennya.

Memfilter baris di R: dplyr

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

Menggabungkan tabel secara vertikal di R: data.table

Juga tidak ada yang ribet, yuk kita manfaatkan rbind().

Memfilter baris di R: data.table

## data.table
rbind(ga_nov, ga_dec)

Menggabungkan tabel secara vertikal dengan Python: pandas

В pandas fungsinya digunakan untuk menggabungkan tabel concat(), di mana Anda harus meneruskan daftar bingkai untuk menggabungkannya.

Memfilter string dengan Python: pandas

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

Gabungan tabel secara horizontal

Operasi di mana kolom dari tabel kedua ditambahkan ke tabel pertama dengan kunci. Ini sering digunakan saat memperkaya tabel fakta (misalnya, tabel dengan data penjualan) dengan beberapa data referensi (misalnya, harga pokok suatu produk).

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Ada beberapa jenis gabungan:

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Di tabel yang dimuat sebelumnya raksasa kami memiliki kolom Seks, yang sesuai dengan kode jenis kelamin penumpang:

1 - perempuan
2 - laki-laki

Kami juga telah membuat tabel - buku referensi jenis kelamin. Untuk penyajian data jenis kelamin penumpang yang lebih mudah, kita perlu menambahkan nama jenis kelamin dari direktori jenis kelamin Ke meja raksasa.

Tabel horizontal bergabung di R: rapiverse, dplyr

В dplyr Ada seluruh rangkaian fungsi untuk penyambungan horizontal:

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

Yang paling umum digunakan dalam latihan saya adalah left_join().

Sebagai dua argumen pertama, fungsi yang tercantum di atas memerlukan dua tabel untuk digabungkan, dan sebagai argumen ketiga by Anda harus menentukan kolom untuk bergabung.

Tabel horizontal bergabung di R: dplyr

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

Gabungan tabel secara horizontal di R: data.table

В data.table Anda perlu menggabungkan tabel dengan kunci menggunakan fungsi tersebut merge().

Argumen untuk menggabungkan() fungsi di data.tabel

  • x, y — Tabel untuk digabungkan
  • by — Kolom yang menjadi kunci untuk bergabung jika memiliki nama yang sama di kedua tabel
  • by.x, by.y — Nama kolom yang akan digabungkan, jika memiliki nama berbeda di tabel
  • all, all.x, all.y — Tipe join, all akan mengembalikan semua baris dari kedua tabel, all.x berhubungan dengan operasi LEFT JOIN (akan meninggalkan semua baris pada tabel pertama), all.y — berhubungan dengan operasi Operasi GABUNG KANAN (akan meninggalkan semua baris tabel kedua).

Gabungan tabel secara horizontal di R: data.table

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

Tabel horizontal bergabung dengan Python: pandas

Serta di data.tableDi pandas fungsinya digunakan untuk menggabungkan tabel merge().

Argumen fungsi merge() di pandas

  • caranya — Jenis koneksi: kiri, kanan, luar, dalam
  • on — Kolom yang merupakan kunci jika memiliki nama yang sama di kedua tabel
  • left_on, right_on — Nama kolom kunci, jika memiliki nama berbeda dalam tabel

Tabel horizontal bergabung dengan Python: pandas

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

Fungsi jendela dasar dan kolom terhitung

Fungsi jendela memiliki arti yang mirip dengan fungsi agregasi, dan juga sering digunakan dalam analisis data. Namun tidak seperti fungsi agregasi, fungsi jendela tidak mengubah jumlah baris kerangka data keluar.

Bahasa mana yang harus dipilih untuk bekerja dengan data - R atau Python? Keduanya! Bermigrasi dari pandas ke rapiverse dan data.table dan sebaliknya

Intinya, dengan menggunakan fungsi jendela, kami membagi kerangka data yang masuk menjadi beberapa bagian menurut beberapa kriteria, yaitu. dengan nilai suatu bidang, atau beberapa bidang. Dan kami melakukan operasi aritmatika di setiap jendela. Hasil dari operasi ini akan dikembalikan di setiap baris, mis. tanpa mengubah jumlah total baris dalam tabel.

Sebagai contoh, mari kita ambil tabelnya raksasa. Kita bisa menghitung berapa persentase harga setiap tiket dalam kelas kabinnya.

Untuk melakukan ini, kita perlu mendapatkan di setiap baris total harga tiket untuk kelas kabin saat ini yang termasuk dalam tiket di jalur ini, lalu membagi biaya setiap tiket dengan total biaya semua tiket di kelas kabin yang sama. .

Fungsi jendela di R: rapiverse, dplyr

Untuk menambahkan kolom baru, tanpa menggunakan pengelompokan baris, di dplyr melayani fungsi mutate().

Anda dapat mengatasi masalah yang dijelaskan di atas dengan mengelompokkan data berdasarkan bidang Kelas P dan menjumlahkan bidang di kolom baru melakukan. Selanjutnya, pisahkan grup tabel dan bagi nilai bidang melakukan dengan apa yang terjadi pada langkah sebelumnya.

Fungsi jendela di R: dplyr

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

Fungsi jendela di R: data.table

Algoritma solusinya tetap sama seperti pada dplyr, kita perlu membagi tabel menjadi jendela berdasarkan bidang Kelas P. Keluarkan di kolom baru jumlah grup yang sesuai dengan setiap baris, dan tambahkan kolom tempat kita menghitung bagian biaya setiap tiket dalam grupnya.

Untuk menambahkan kolom baru data.table operator hadir :=. Di bawah ini adalah contoh penyelesaian masalah menggunakan paket data.table

Fungsi jendela di R: data.table

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

Fungsi jendela dengan Python: pandas

Salah satu cara untuk menambahkan kolom baru pandas - gunakan fungsinya assign(). Untuk menjumlahkan harga tiket berdasarkan kelas kabin, tanpa mengelompokkan baris, kita akan menggunakan fungsi tersebut transform().

Di bawah ini adalah contoh solusi yang kami tambahkan ke tabel raksasa 2 kolom yang sama.

Fungsi jendela dengan Python: pandas

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

Tabel korespondensi fungsi dan metode

Di bawah ini adalah tabel korespondensi antara metode melakukan berbagai operasi dengan data dalam paket yang telah kami pertimbangkan.

Описание
rapi
tabel data
panda

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

Membuat kerangka data
tibble()
data.table()
dict() + from_dict()

Memilih Kolom
select()
argumen j, posisi kedua dalam tanda kurung siku
kami meneruskan daftar kolom yang diperlukan dalam tanda kurung siku / drop() / filter() / select_dtypes()

Memfilter baris
filter()
argumen i, posisi pertama dalam tanda kurung siku
Kami mencantumkan kondisi pemfilteran dalam tanda kurung siku / filter()

Pengelompokan dan Agregasi
group_by() + summarise()
argumen j + by
groupby() + agg()

Penyatuan tabel secara vertikal (UNION)
bind_rows()
rbind()
concat()

Gabungan tabel secara horizontal (JOIN)
left_join() / *_join()
merge()
merge()

Fungsi jendela dasar dan menambahkan kolom terhitung
group_by() + mutate()
argumen j menggunakan operatornya := + argumen by
transform() + assign()

Kesimpulan

Mungkin dalam artikel yang saya jelaskan bukan implementasi pemrosesan data yang paling optimal, jadi saya akan senang jika Anda memperbaiki kesalahan saya di komentar, atau sekadar melengkapi informasi yang diberikan dalam artikel dengan teknik lain untuk bekerja dengan data dalam R/Python.

Seperti yang saya tulis di atas, tujuan artikel ini bukan untuk memaksakan pendapat seseorang tentang bahasa mana yang lebih baik, tetapi untuk menyederhanakan kesempatan mempelajari kedua bahasa tersebut, atau, jika perlu, bermigrasi di antara keduanya.

Jika Anda menyukai artikel ini, saya akan senang memiliki pelanggan baru di artikel saya Youtube и telegram saluran.

Опрос

Manakah dari paket berikut yang Anda gunakan dalam pekerjaan Anda?

Di kolom komentar Anda dapat menulis alasan pilihan Anda.

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Paket pemrosesan data mana yang Anda gunakan (Anda dapat memilih beberapa opsi)

  • 45,2%rapiverse19

  • 33,3%data.tabel14

  • 54,8%panda23

42 pengguna memilih. 9 pengguna abstain.

Sumber: www.habr.com

Tambah komentar