Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Internetda R yoki Python-ni qidirish orqali siz ma'lumotlar bilan ishlash uchun qaysi biri yaxshiroq, tezroq va qulayroq bo'lgan mavzu bo'yicha millionlab maqolalar va kilometrlik muhokamalarni topasiz. Ammo, afsuski, bu maqolalar va bahslar unchalik foydali emas.

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Ushbu maqolaning maqsadi ikkala tilning eng mashhur paketlarida ma'lumotlarni qayta ishlashning asosiy usullarini solishtirishdir. Va o'quvchilarga hali bilmagan narsalarni tezda o'zlashtirishga yordam bering. Python-da yozadiganlar uchun xuddi shu narsani R-da qanday qilishni bilib oling va aksincha.

Maqolada R.dagi eng mashhur paketlar sintaksisini tahlil qilamiz. Bular kutubxonaga kiritilgan paketlardir. tidyverseva shuningdek, paket data.table. Va ularning sintaksisini solishtiring pandas, Python-dagi eng mashhur ma'lumotlarni tahlil qilish paketi.

Biz Python va R yordamida ma'lumotlarni yuklashdan to analitik oyna funksiyalarini bajarishgacha bo'lgan butun tahlil yo'lidan bosqichma-bosqich o'tamiz.

Mundarija

Agar siz ko'rib chiqilayotgan paketlardan birida ma'lumotlarni qayta ishlash jarayonini qanday bajarishni unutgan bo'lsangiz, ushbu maqoladan hiyla-nayrang sifatida foydalanish mumkin.

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

  1. R va Python o'rtasidagi asosiy sintaksis farqlari
    1.1. Paket funksiyalariga kirish
    1.2. Topshiriq
    1.3. Indekslash
    1.4. Usullar va OOP
    1.5. Quvurlar
    1.6. Ma'lumotlar tuzilmalari
  2. Biz foydalanadigan paketlar haqida bir necha so'z
    2.1. tartibli
    2.2. ma'lumotlar jadvali
    2.3. pandalar
  3. Paketlarni o'rnatish
  4. Ma'lumotlar yuklanmoqda
  5. Dataframe yaratish
  6. Sizga kerak bo'lgan ustunlarni tanlash
  7. Qatorlarni filtrlash
  8. Guruhlash va birlashtirish
  9. Jadvallarning vertikal birlashmasi (UNION)
  10. Jadvallarni gorizontal ravishda birlashtirish (JOIN)
  11. Oynaning asosiy funktsiyalari va hisoblangan ustunlar
  12. R va Pythonda ma'lumotlarni qayta ishlash usullari o'rtasidagi yozishmalar jadvali
  13. xulosa
  14. Qaysi paketdan foydalanayotganingiz haqida qisqacha so'rov

Agar siz ma'lumotlar tahliliga qiziqsangiz, mening telegramma и youtube kanallar. Kontentning katta qismi R tiliga bag'ishlangan.

R va Python o'rtasidagi asosiy sintaksis farqlari

Python-dan R-ga yoki aksincha o'tishni osonlashtirish uchun men sizga e'tibor berishingiz kerak bo'lgan bir nechta asosiy fikrlarni beraman.

Paket funksiyalariga kirish

Paket R ga yuklangandan so'ng, uning funksiyalariga kirish uchun paket nomini ko'rsatish shart emas. Aksariyat hollarda bu R da keng tarqalgan emas, lekin bu qabul qilinadi. Agar kodingizda uning funksiyalaridan biri kerak bo'lsa, paketni umuman import qilishingiz shart emas, shunchaki paket nomini va funksiya nomini ko'rsatib, uni chaqiring. R dagi paket va funksiya nomlari orasidagi ajratuvchi qo'sh nuqtadir. package_name::function_name().

Pythonda, aksincha, uning nomini aniq ko'rsatib, uning funksiyalarini chaqirish klassik hisoblanadi. Paket yuklab olinganda, odatda, qisqartirilgan nom beriladi, masalan. pandas odatda taxallus ishlatiladi pd. Paket funksiyasiga nuqta orqali kirish mumkin package_name.function_name().

Topshiriq

R da ob'ektga qiymat berish uchun o'qdan foydalanish odatiy holdir. obj_name <- value, bitta tenglik belgisiga ruxsat berilgan bo'lsa-da, R dagi yagona tenglik belgisi birinchi navbatda qiymatlarni funktsiya argumentlariga o'tkazish uchun ishlatiladi.

Pythonda tayinlash faqat bitta tenglik belgisi bilan amalga oshiriladi obj_name = value.

Indekslash

Bu erda ham sezilarli farqlar mavjud. R da indekslash bittadan boshlanadi va natijada olingan diapazondagi barcha belgilangan elementlarni o'z ichiga oladi,

Pythonda indekslash noldan boshlanadi va tanlangan diapazon indekslashda ko'rsatilgan oxirgi elementni o'z ichiga olmaydi. Shunday qilib, dizayn x[i:j] Python da j elementini o'z ichiga olmaydi.

Salbiy indekslashda, R belgisida ham farqlar mavjud x[-1] oxirgisidan tashqari vektorning barcha elementlarini qaytaradi. Pythonda shunga o'xshash belgi faqat oxirgi elementni qaytaradi.

Usullar va OOP

R OOPni o'ziga xos tarzda amalga oshiradi, men bu haqda maqolada yozganman "R tilida OOP (1-qism): S3 sinflari". Umuman olganda, R funktsional til bo'lib, undagi hamma narsa funksiyalar asosida qurilgan. Shuning uchun, masalan, Excel foydalanuvchilari uchun o'ting tydiverse dan osonroq bo'ladi pandas. Garchi bu mening sub'ektiv fikrim bo'lishi mumkin.

Muxtasar qilib aytganda, R-dagi ob'ektlarda usullar mavjud emas (agar biz S3 sinflari haqida gapiradigan bo'lsak, lekin kamroq tarqalgan boshqa OOP ilovalari mavjud). Ob'ekt sinfiga qarab ularni turlicha qayta ishlovchi faqat umumlashtirilgan funksiyalar mavjud.

Quvurlar

Ehtimol, bu nom pandas Bu mutlaqo to'g'ri bo'lmaydi, lekin men ma'nosini tushuntirishga harakat qilaman.

Oraliq hisob-kitoblarni saqlamaslik va ish sharoitida keraksiz narsalarni ishlab chiqarmaslik uchun siz quvur liniyasining bir turidan foydalanishingiz mumkin. Bular. hisoblash natijasini bir funktsiyadan ikkinchisiga o'tkazing va oraliq natijalarni saqlamang.

Keling, oraliq hisoblarni alohida ob'ektlarda saqlaydigan quyidagi kod misolini olaylik:

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

Biz ketma-ket 3 ta operatsiyani bajardik va har birining natijasi alohida ob'ektda saqlangan. Lekin, aslida, bizga bu oraliq ob'ektlar kerak emas.

Yoki undan ham yomoni, lekin Excel foydalanuvchilariga ko'proq tanish.

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

Bunday holda, biz oraliq hisob-kitob natijalarini saqlamadik, lekin o'rnatilgan funktsiyalar bilan kodni o'qish juda noqulay.

R-da ma'lumotlarni qayta ishlashning bir nechta yondashuvlarini ko'rib chiqamiz va ular o'xshash operatsiyalarni turli usullarda bajaradilar.

Kutubxonadagi quvurlar tidyverse operator tomonidan amalga oshiriladi %>%.

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

Shunday qilib, biz ishning natijasini olamiz func1() va uni birinchi argument sifatida o'tkazing func2(), keyin biz ushbu hisobning natijasini birinchi argument sifatida o'tkazamiz func3(). Va oxirida, biz ob'ektga amalga oshirilgan barcha hisob-kitoblarni yozamiz obj <-.

Yuqoridagilarning barchasi ushbu mem so'zlaridan ko'ra yaxshiroq tasvirlangan:
Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

В data.table zanjirlar shunga o'xshash tarzda qo'llaniladi.

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

Kvadrat qavslarning har birida siz oldingi operatsiya natijasidan foydalanishingiz mumkin.

В pandas bunday operatsiyalar nuqta bilan ajratiladi.

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

Bular. stolimizni olamiz df va uning usulidan foydalaning fun1(), keyin usulni olingan natijaga qo'llaymiz fun2()keyin fun3(). Olingan natija ob'ektga saqlanadi ob'ekt .

Ma'lumotlar tuzilmalari

R va Python-dagi ma'lumotlar tuzilmalari o'xshash, ammo turli nomlarga ega.

tavsifi
R.dagi ism
Python/pandalarda nom

Jadval tuzilishi
data.frame, data.table, tibble
DataFrame

Bir o'lchovli qiymatlar ro'yxati
vector
Pandalardagi seriyalar yoki sof Pythondagi ro'yxat

Ko'p darajali jadvalsiz tuzilma
Roʻyxat
Lug'at (dict)

Quyida sintaksisning boshqa xususiyatlari va farqlarini ko'rib chiqamiz.

Biz foydalanadigan paketlar haqida bir necha so'z

Birinchidan, men sizga ushbu maqola davomida tanish bo'ladigan paketlar haqida bir oz gapirib beraman.

tartibli

Rasmiy veb-sayt: tidyverse.org
Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish
kutubxona tidyverse RStudio kompaniyasining katta tadqiqotchi olimi Xedli Uikxem tomonidan yozilgan. tidyverse ma'lumotlarni qayta ishlashni soddalashtiradigan ta'sirchan paketlar to'plamidan iborat bo'lib, ulardan 5 tasi CRAN omboridan yuklab olingan eng yaxshi 10 talikka kiritilgan.

Kutubxonaning yadrosi quyidagi paketlardan iborat: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Ushbu paketlarning har biri muayyan muammoni hal qilishga qaratilgan. Masalan dplyr ma'lumotlarni manipulyatsiya qilish uchun yaratilgan; tidyr ma'lumotlarni toza shaklga keltirish, stringr satrlar bilan ishlashni soddalashtiradi va ggplot2 ma'lumotlarni vizualizatsiya qilishning eng mashhur vositalaridan biridir.

Afzallik tidyverse soddaligi va o‘qilishi oson sintaksis bo‘lib, u ko‘p jihatdan SQL so‘rovlar tiliga o‘xshaydi.

ma'lumotlar jadvali

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tishRasmiy veb-sayt: r-datatable.com

Muallif data.table H2O.ai kompaniyasidan Mett Doul.

Kutubxonaning birinchi nashri 2006 yilda bo'lib o'tdi.

Paket sintaksisi avvalgidek qulay emas tidyverse va R-dagi klassik dataframelarni ko'proq eslatadi, lekin ayni paytda funksionallikda sezilarli darajada kengaytirilgan.

Ushbu paketdagi jadval bilan barcha manipulyatsiyalar kvadrat qavs ichida tasvirlangan va agar siz sintaksisni tarjima qilsangiz data.table SQL-da siz shunga o'xshash narsani olasiz: data.table[ WHERE, SELECT, GROUP BY ]

Ushbu paketning kuchi katta hajmdagi ma'lumotlarni qayta ishlash tezligidir.

pandalar

Rasmiy veb-sayt: pandas.pydata.org Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Kutubxona nomi ko'p o'lchovli tuzilgan ma'lumotlar to'plamini tavsiflash uchun ishlatiladigan "panel ma'lumotlari" ekonometrik atamasidan kelib chiqqan.

Muallif pandas Amerikalik Ues MakKinni.

Python-da ma'lumotlarni tahlil qilish haqida gap ketganda, teng pandas Yo'q. Har qanday manbadan ma'lumotlarni yuklashdan tortib uni vizualizatsiya qilishgacha bo'lgan ma'lumotlar bilan har qanday manipulyatsiyani amalga oshirishga imkon beruvchi juda ko'p funksiyali, yuqori darajali paket.

Qo'shimcha paketlarni o'rnatish

Ushbu maqolada muhokama qilingan paketlar asosiy R va Python tarqatishlariga kiritilmagan. Kichkina ogohlantirish bo'lsa-da, agar siz Anaconda distributivini o'rnatgan bo'lsangiz, qo'shimcha ravishda o'rnating pandas talab qilinmaydi.

R-da paketlarni o'rnatish

Agar siz kamida bir marta RStudio ishlab chiqish muhitini ochgan bo'lsangiz, ehtimol siz R-ga kerakli paketni qanday o'rnatishni allaqachon bilasiz. Paketlarni o'rnatish uchun standart buyruqdan foydalaning. install.packages() uni to'g'ridan-to'g'ri R-da ishga tushirish orqali.

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

O'rnatishdan so'ng paketlarni ulash kerak, buning uchun ko'p hollarda buyruq ishlatiladi library().

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

Pythonda paketlarni o'rnatish

Shunday qilib, agar sizda sof Python o'rnatilgan bo'lsa, unda pandas uni qo'lda o'rnatishingiz kerak. Operatsion tizimingizga qarab buyruq qatorini yoki terminalni oching va quyidagi buyruqni kiriting.

pip install pandas

Keyin biz Python-ga qaytamiz va o'rnatilgan paketni buyruq bilan import qilamiz import.

import pandas as pd

Ma'lumotlar yuklanmoqda

Ma'lumotlarni qazib olish ma'lumotlarni tahlil qilishning eng muhim bosqichlaridan biridir. Agar so'ralsa, Python ham, R ham har qanday manbadan ma'lumotlarni olish uchun keng imkoniyatlarni taqdim etadi: mahalliy fayllar, Internetdagi fayllar, veb-saytlar, barcha turdagi ma'lumotlar bazalari.

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Maqolada biz bir nechta ma'lumotlar to'plamidan foydalanamiz:

  1. Google Analytics-dan ikkita yuklab olish.
  2. Titanik yo'lovchi ma'lumotlar to'plami.

Barcha ma'lumotlar menda GitHub csv va tsv fayllari ko'rinishida. Biz ularni qayerdan talab qilamiz?

R ga ma'lumotlarni yuklash: tidyverse, vroom, readr

Kutubxonaga ma'lumotlarni yuklash uchun tidyverse Ikkita paket mavjud: vroom, readr. vroom zamonaviyroq, ammo kelajakda paketlar birlashtirilishi mumkin.

dan iqtibos rasmiy hujjatlar vroom.

vroom va o'quvchi
Chiqarish nimani anglatadi vroom uchun degani readr? Hozircha biz ikkita paketning alohida rivojlanishiga ruxsat berishni rejalashtirmoqdamiz, ammo kelajakda paketlarni birlashtiramiz. Vroom dangasa o'qishning kamchiliklaridan biri shundaki, ma'lumotlar bilan bog'liq ba'zi muammolarni oldindan aytib bo'lmaydi, shuning uchun ularni qanday qilib yaxshiroq birlashtirish haqida biroz o'ylash kerak.

vroom va readr
Chiqarish nimani anglatadi? vroom uchun readr? Ayni paytda biz ikkala paketni alohida ishlab chiqishni rejalashtirmoqdamiz, ammo kelajakda ularni birlashtiramiz. Dangasa o'qishning kamchiliklaridan biri vroom ba'zi ma'lumotlar bilan bog'liq muammolarni oldindan aytib bo'lmaydi, shuning uchun ularni qanday qilib eng yaxshi tarzda birlashtirish haqida o'ylashingiz kerak.

Ushbu maqolada biz ikkala ma'lumotlarni yuklash paketlarini ko'rib chiqamiz:

R: vroom paketiga ma'lumotlarni yuklash

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

R-ga ma'lumotlarni yuklash: 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")

Paketda vroom, csv / tsv ma'lumotlar formatidan qat'i nazar, yuklash bir xil nomdagi funktsiya tomonidan amalga oshiriladi vroom(), paketda readr biz har bir format uchun boshqa funksiyadan foydalanamiz read_tsv() и read_csv().

R ga ma'lumotlarni yuklash: data.table

В data.table ma'lumotlarni yuklash funksiyasi mavjud fread().

R ga ma'lumotlarni yuklash: data.table paketi

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

Python-da ma'lumotlarni yuklash: pandalar

Agar biz R paketlari bilan solishtirsak, unda bu holda sintaksis eng yaqin pandas bo'ladi readr, chunki pandas istalgan joydan ma'lumotlarni so'rashi mumkin va bu paketda butun funksiyalar oilasi mavjud read_*().

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

Va boshqa ko'plab funktsiyalar turli formatlardagi ma'lumotlarni o'qish uchun mo'ljallangan. Ammo bizning maqsadlarimiz uchun bu etarli read_table() yoki read_csv() argument yordamida Sep ustun ajratgichni belgilash uchun.

Python-da ma'lumotlarni yuklash: pandalar

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

Dataframe yaratish

Jadval Titanik, biz yuklagan, maydon bor jins, bu yo'lovchining jinsi identifikatorini saqlaydi.

Ammo yo'lovchi jinsi bo'yicha ma'lumotlarni yanada qulayroq taqdim etish uchun siz jins kodini emas, balki ismni ishlatishingiz kerak.

Buning uchun biz kichik katalog yaratamiz, jadvalda mos ravishda faqat 2 ta ustun (kod va jins nomi) va 2 qator bo'ladi.

R da dataframe yaratish: tidyverse, dplyr

Quyidagi kod misolida funksiya yordamida kerakli dataframe yaratamiz tibble() .

R da dataframe yaratish: dplyr

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

R da dataframe yaratish: data.table

R da dataframe yaratish: data.table

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

Python-da dataframe yaratish: pandalar

В pandas ramkalar yaratish bir necha bosqichda amalga oshiriladi, avval biz lug'at yaratamiz, so'ngra lug'atni dataframega aylantiramiz.

Python-da dataframe yaratish: pandalar

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

Ustunlarni tanlash

Siz ishlaydigan jadvallar o'nlab yoki hatto yuzlab ma'lumotlar ustunlarini o'z ichiga olishi mumkin. Ammo tahlil qilish uchun, qoida tariqasida, manba jadvalida mavjud bo'lgan barcha ustunlar kerak emas.

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Shuning uchun, manba jadvali bilan bajaradigan birinchi operatsiyalardan biri uni keraksiz ma'lumotlardan tozalash va ushbu ma'lumot egallagan xotirani bo'shatishdir.

R da ustunlarni tanlash: tidyverse, dplyr

sintaktik dplyr SQL so'rovlar tiliga juda o'xshaydi, agar siz u bilan tanish bo'lsangiz, ushbu paketni tezda o'zlashtirasiz.

Ustunlarni tanlash uchun funksiyadan foydalaning select().

Quyida ustunlarni quyidagi usullarda tanlashingiz mumkin bo'lgan kod misollari keltirilgan:

  • Kerakli ustunlar nomlarini sanab o'tish
  • Oddiy iboralar yordamida ustun nomlariga murojaat qiling
  • Ma'lumotlar turi yoki ustundagi ma'lumotlarning boshqa xususiyati bo'yicha

R da ustunlarni tanlash: 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)

R da ustunlarni tanlash: data.table

Xuddi shu operatsiyalar ichida data.table bir oz boshqacha bajariladi, maqolaning boshida men kvadrat qavs ichida qanday argumentlar mavjudligini tavsiflab berdim. data.table.

DT[i,j,by]

Qaerda:
i - qayerda, ya'ni. qatorlar bo'yicha filtrlash
j - tanlash|yangilash|do, ya'ni. ustunlarni tanlash va ularni aylantirish
bo'yicha ma'lumotlarni guruhlash

R da ustunlarni tanlash: 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$")]

Argumentlar .SD barcha ustunlarga kirish imkonini beradi va .SDcols kerakli ustunlar nomlarini filtrlash uchun oddiy iboralar yoki boshqa funksiyalar yordamida kerakli ustunlarni filtrlang.

Python, pandalarda ustunlarni tanlash

Ustunlarni nomi bo'yicha tanlash uchun pandas ularning nomlari ro'yxatini taqdim etish kifoya. Muntazam iboralar yordamida ustunlarni nomi bo'yicha tanlash yoki chiqarib tashlash uchun siz funktsiyalardan foydalanishingiz kerak drop() и filter(), va argument eksa=1, bu bilan siz satrlarni emas, balki ustunlarni qayta ishlash kerakligini ko'rsatasiz.

Ma'lumotlar turi bo'yicha maydonni tanlash uchun funksiyadan foydalaning select_dtypes(), va argumentlarga o'z ichiga oladi yoki chiqarib tashlash qaysi maydonlarni tanlashingiz kerak bo'lgan ma'lumotlar turlari ro'yxatini o'tkazing.

Python-da ustunlarni tanlash: pandalar

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

Qatorlarni filtrlash

Misol uchun, manba jadvali bir necha yillik ma'lumotlarni o'z ichiga olishi mumkin, ammo siz faqat oxirgi oyni tahlil qilishingiz kerak. Shunga qaramay, qo'shimcha chiziqlar ma'lumotlarni qayta ishlash jarayonini sekinlashtiradi va kompyuter xotirasini yopib qo'yadi.

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Rdagi qatorlarni filtrlash: tydyverse, dplyr

В dplyr funksiya qatorlarni filtrlash uchun ishlatiladi filter(). Birinchi argument sifatida dataframe olinadi, keyin siz filtrlash shartlarini sanab o'tasiz.

Jadvalni filtrlash uchun mantiqiy ifodalarni yozishda, bu holda ustun nomlarini tirnoqsiz va jadval nomini e'lon qilmasdan belgilang.

Filtrlash uchun bir nechta mantiqiy ifodalardan foydalanganda quyidagi operatorlardan foydalaning:

  • & yoki vergul - mantiqiy VA
  • | - mantiqiy OR

R dagi qatorlarni filtrlash: dplyr

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

R dagi qatorlarni filtrlash: data.table

Yuqorida yozganimdek, ichida data.table ma'lumotlarni konvertatsiya qilish sintaksisi kvadrat qavs ichiga olingan.

DT[i,j,by]

Qaerda:
i - qayerda, ya'ni. qatorlar bo'yicha filtrlash
j - tanlash|yangilash|do, ya'ni. ustunlarni tanlash va ularni aylantirish
bo'yicha ma'lumotlarni guruhlash

Argument qatorlarni filtrlash uchun ishlatiladi i, bu kvadrat qavs ichida birinchi o'ringa ega.

Ustunlarga mantiqiy iboralar qo'shtirnoqsiz va jadval nomi ko'rsatilmagan holda kirish mumkin.

Mantiqiy ifodalar bir-biri bilan xuddi shu tarzda bog'lanadi dplyr & va | operatorlari orqali.

R dagi qatorlarni filtrlash: data.table

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

Python-da satrlarni filtrlash: pandalar

Satrlar bo'yicha filtrlang pandas filtrlashga o'xshaydi data.table, va kvadrat qavs ichida bajariladi.

Bunday holda, ustunlarga kirish majburiy ravishda ma'lumotlar ramkasining nomini ko'rsatish orqali amalga oshiriladi; keyin ustun nomi kvadrat qavslar ichida qo'shtirnoq ichida ham ko'rsatilishi mumkin (misol df['col_name']) yoki davrdan keyin tirnoqsiz (misol df.col_name).

Agar siz ma'lumotlar ramkasini bir nechta shartlar bo'yicha filtrlashingiz kerak bo'lsa, har bir shart qavs ichiga joylashtirilishi kerak. Mantiqiy shartlar bir-biri bilan operatorlar orqali bog'lanadi & и |.

Python-da satrlarni filtrlash: pandalar

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

Ma'lumotlarni guruhlash va yig'ish

Ma'lumotlarni tahlil qilishda eng ko'p qo'llaniladigan operatsiyalardan biri guruhlash va yig'ishdir.

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Ushbu operatsiyalarni bajarish uchun sintaksis biz ko'rib chiqadigan barcha paketlar bo'ylab tarqalgan.

Bunday holda, biz misol sifatida dataframe olamiz Titanik, va salon sinfiga qarab chiptalar soni va o'rtacha narxini hisoblang.

R da ma'lumotlarni guruhlash va yig'ish: tidyverse, dplyr

В dplyr funktsiya guruhlash uchun ishlatiladi group_by(), va birlashtirish uchun summarise(). Aslida, dplyr funktsiyalarning butun oilasi mavjud summarise_*(), ammo ushbu maqolaning maqsadi asosiy sintaksisni solishtirishdir, shuning uchun biz bunday o'rmonga kirmaymiz.

Birlashtirishning asosiy funktsiyalari:

  • sum() - yig'ish
  • min() / max() - minimal va maksimal qiymat
  • mean() - o'rta arifmetik
  • median() - median
  • length() - miqdori

R da guruhlash va birlashtirish: dplyr

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

Funktsiyada group_by() biz birinchi dalil sifatida jadvaldan o'tdik Titanik, va keyin maydonni ko'rsatdi Kompyuter sinfi, bu orqali biz stolimizni guruhlaymiz. Operator yordamida ushbu operatsiya natijasi %>% funksiyaning birinchi argumenti sifatida uzatiladi summarise(), va yana 2 ta maydon qo'shildi: yo'lovchilar и o'rtacha_narx. Birinchisida, funksiyadan foydalanish length() chiptalar sonini hisoblab chiqdi, ikkinchisida esa funksiya yordamida mean() o'rtacha chipta narxini oldi.

R da ma'lumotlarni guruhlash va yig'ish: data.table

В data.table argument jamlash uchun ishlatiladi j kvadrat qavs ichida ikkinchi o'ringa ega bo'lgan va guruhlash uchun by yoki keybyuchinchi o'rinni egallagan.

Bu holda yig'ish funktsiyalari ro'yxati maqolada tasvirlangan bilan bir xil dplyr, chunki bular asosiy R sintaksisidagi funksiyalardir.

R da guruhlash va yig'ish: ma'lumotlar.jadval

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

Python-da ma'lumotlarni guruhlash va yig'ish: pandalar

Guruhlash pandas o'xshash dplyr, lekin yig'ish o'xshash emas dplyr yoqilmagan data.table.

Guruhlash uchun usuldan foydalaning groupby(), unga dataframe guruhlanadigan ustunlar ro'yxatini kiritishingiz kerak.

Birlashtirish uchun siz usuldan foydalanishingiz mumkin agg()lug'atni qabul qiladigan. Lug'at tugmalari - bu siz yig'ish funktsiyalarini qo'llaydigan ustunlar va qiymatlar - yig'ish funktsiyalarining nomlari.

Birlashtirish funktsiyalari:

  • sum() - yig'ish
  • min() / max() - minimal va maksimal qiymat
  • mean() - o'rta arifmetik
  • median() - median
  • count() - miqdori

vazifa reset_index() Quyidagi misolda u ichki o'rnatilgan indekslarni tiklash uchun ishlatiladi pandas ma'lumotlar yig'ilgandan keyin standart bo'ladi.

Ramz keyingi qatorga o'tish imkonini beradi.

Python-da guruhlash va yig'ish: pandalar

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

Jadvallarni vertikal birlashtirish

Bir xil tuzilishdagi ikki yoki undan ortiq jadvallarni birlashtirgan operatsiya. Biz yuklagan ma'lumotlar jadvallarni o'z ichiga oladi ga_nov и ga_dec. Ushbu jadvallar tuzilishi jihatidan bir xil, ya'ni. bir xil ustunlarga va ushbu ustunlardagi ma'lumotlar turlariga ega.

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Bu Google Analytics-dan noyabr va dekabr oylari uchun yuklash, ushbu bo'limda biz ushbu ma'lumotlarni bitta jadvalga birlashtiramiz.

Rdagi jadvallarni vertikal ravishda birlashtirish: tidyverse, dplyr

В dplyr Funksiyadan foydalanib 2 ta jadvalni bittaga birlashtira olasiz bind_rows(), uning argumentlari sifatida jadvallarni o'tkazish.

R dagi qatorlarni filtrlash: dplyr

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

R da jadvallarni vertikal ravishda birlashtirish: data.table

Bundan tashqari, hech qanday murakkab narsa yo'q, keling, foydalanaylik rbind().

R dagi qatorlarni filtrlash: data.table

## data.table
rbind(ga_nov, ga_dec)

Pythonda jadvallarni vertikal ravishda birlashtirish: pandalar

В pandas funksiya jadvallarni birlashtirish uchun ishlatiladi concat(), unda siz ularni birlashtirish uchun ramkalar ro'yxatini kiritishingiz kerak.

Python-da satrlarni filtrlash: pandalar

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

Jadvallarni gorizontal ravishda birlashtirish

Ikkinchidan ustunlar birinchi jadvalga kalit yordamida qo'shiladigan operatsiya. U ko'pincha faktlar jadvalini (masalan, savdo ma'lumotlari bilan jadval) ba'zi ma'lumotnomalar (masalan, mahsulot tannarxi) bilan boyitishda qo'llaniladi.

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Birlashmalarning bir nechta turlari mavjud:

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Oldin yuklangan jadvalda Titanik bizda ustun bor jins, bu yo'lovchining jinsi kodiga mos keladi:

1 - ayol
2 - erkak

Shuningdek, biz jadval yaratdik - ma'lumotnoma jinsi. Yo'lovchilarning jinsi to'g'risidagi ma'lumotlarni yanada qulayroq taqdim etish uchun biz katalogdan jins nomini qo'shishimiz kerak. jinsi stolga Titanik.

Gorizontal stol R da qo'shiladi: tidyverse, dplyr

В dplyr Gorizontal ulanish uchun funktsiyalarning butun oilasi mavjud:

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

Mening amaliyotimda eng ko'p ishlatiladigan left_join().

Birinchi ikkita argument sifatida yuqorida sanab o'tilgan funktsiyalar qo'shilish uchun ikkita jadvalni oladi va uchinchi argument sifatida by qo'shilish uchun ustunlarni belgilashingiz kerak.

Gorizontal jadval R da qo'shiladi: dplyr

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

R dagi jadvallarning gorizontal birikmasi: data.table

В data.table Funktsiyadan foydalanib, jadvallarni kalit bilan birlashtirishingiz kerak merge().

data.table da birlashtirish() funktsiyasi uchun argumentlar

  • x, y - qo'shilish uchun jadvallar
  • by — Agar ikkala jadvalda bir xil nomga ega boʻlsa, qoʻshilish kaliti boʻlgan ustun
  • by.x, by.y - Agar jadvallarda turli nomlar bo'lsa, birlashtiriladigan ustun nomlari
  • all, all.x, all.y — Qo‘shilish turi, hammasi ikkala jadvaldagi barcha qatorlarni qaytaradi, all.x LEFT JOIN operatsiyasiga mos keladi (birinchi jadvalning barcha qatorlarini tark etadi), all.y — mos keladi RIGHT JOIN operatsiyasi (ikkinchi jadvalning barcha qatorlarini qoldiradi).

R dagi jadvallarning gorizontal birikmasi: data.table

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

Python-da gorizontal jadval qo'shiladi: pandalar

Shuningdek, ichida data.table, in pandas funksiya jadvallarni birlashtirish uchun ishlatiladi merge().

Pandalarda merge() funksiyasining argumentlari

  • qanday — Ulanish turi: chap, o'ng, tashqi, ichki
  • on — Agar ikkala jadvalda bir xil nomga ega bo'lsa, kalit bo'lgan ustun
  • left_on, right_on — Agar jadvallarda turli nomlar bo'lsa, asosiy ustunlar nomlari

Python-da gorizontal jadval qo'shiladi: pandalar

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

Oynaning asosiy funktsiyalari va hisoblangan ustunlar

Oyna funksiyalari maʼno jihatidan yigʻish funksiyalariga oʻxshaydi va koʻpincha maʼlumotlarni tahlil qilishda ham qoʻllaniladi. Ammo yig'ish funktsiyalaridan farqli o'laroq, oyna funktsiyalari chiquvchi ma'lumotlar ramkasining qatorlar sonini o'zgartirmaydi.

Ma'lumotlar bilan ishlash uchun qaysi tilni tanlash kerak - R yoki Python? Ikkalasi ham! Pandalardan tidyverse va data.table va orqaga o'tish

Asosan, oyna funktsiyasidan foydalanib, biz kiruvchi ma'lumotlar ramkasini ba'zi bir mezon bo'yicha qismlarga ajratamiz, ya'ni. maydon yoki bir nechta maydon qiymati bo'yicha. Va har bir oynada arifmetik amallarni bajaramiz. Ushbu operatsiyalarning natijasi har bir satrda qaytariladi, ya'ni. jadvaldagi satrlarning umumiy sonini o'zgartirmasdan.

Masalan, jadvalni olaylik Titanik. Biz har bir chipta narxi uning kabina sinfiga qancha foiz bo'lganini hisoblashimiz mumkin.

Buni amalga oshirish uchun biz har bir satrda ushbu yo'nalishdagi chipta tegishli bo'lgan joriy salon klassi uchun chiptaning umumiy qiymatini olishimiz kerak, so'ngra har bir chipta narxini bir xil salon toifasidagi barcha chiptalarning umumiy qiymatiga bo'lish kerak. .

R da oyna funksiyalari: tidyverse, dplyr

Qatorlarni guruhlashdan foydalanmasdan yangi ustunlar qo'shish uchun dplyr vazifasini bajaradi mutate().

Yuqorida tavsiflangan muammoni ma'lumotlarni maydonlar bo'yicha guruhlash orqali hal qilishingiz mumkin Kompyuter sinfi va maydonni yangi ustunga jamlash Narxlar. Keyin jadvalni guruhdan ajratib oling va maydon qiymatlarini ajrating Narxlar oldingi bosqichda nima sodir bo'lganiga.

R da oyna funksiyalari: dplyr

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

R da oyna funksiyalari: data.table

Yechim algoritmi avvalgidek qoladi dplyr, biz jadvalni maydonlar bo'yicha oynalarga bo'lishimiz kerak Kompyuter sinfi. Yangi ustunda har bir qatorga mos keladigan guruh uchun summani chiqaring va uning guruhidagi har bir chipta narxining ulushini hisoblaydigan ustunni qo'shing.

Yangi ustunlar qo'shish uchun data.table operator mavjud :=. Quyida paket yordamida muammoni hal qilish misoli keltirilgan data.table

R da oyna funksiyalari: data.table

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

Pythonda oyna funksiyalari: pandalar

Yangi ustun qo'shishning bir usuli pandas - funksiyadan foydalaning assign(). Chiptalar narxini kabina sinfi bo'yicha umumlashtirish uchun qatorlarni guruhlamasdan, biz funktsiyadan foydalanamiz transform().

Quyida biz jadvalga qo'shadigan yechimning namunasi keltirilgan Titanik bir xil 2 ustun.

Pythonda oyna funksiyalari: pandalar

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

Funktsiyalar va usullar yozishmalar jadvali

Quyida biz ko'rib chiqqan paketlardagi ma'lumotlar bilan turli operatsiyalarni bajarish usullari o'rtasidagi yozishmalar jadvali keltirilgan.

tavsifi
tartibli
ma'lumotlar jadvali
pandalar

Ma'lumotlar yuklanmoqda
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Dataframe yaratish
tibble()
data.table()
dict() + from_dict()

Ustunlarni tanlash
select()
bir dalil j, kvadrat qavs ichida ikkinchi pozitsiya
biz kvadrat qavs ichida kerakli ustunlar ro'yxatini o'tkazamiz / drop() / filter() / select_dtypes()

Qatorlarni filtrlash
filter()
bir dalil i, kvadrat qavs ichidagi birinchi pozitsiya
Biz filtrlash shartlarini kvadrat qavs ichida keltiramiz / filter()

Guruhlash va birlashtirish
group_by() + summarise()
dalillar j + by
groupby() + agg()

Jadvallarning vertikal birlashmasi (UNION)
bind_rows()
rbind()
concat()

Jadvallarni gorizontal ravishda birlashtirish (JOIN)
left_join() / *_join()
merge()
merge()

Oynaning asosiy funktsiyalari va hisoblangan ustunlarni qo'shish
group_by() + mutate()
bir dalil j operator yordamida := + argument by
transform() + assign()

xulosa

Ehtimol, maqolada men ma'lumotlarni qayta ishlashning eng maqbul usullarini tasvirlab bermaganman, shuning uchun sharhlardagi xatolarimni tuzatsangiz yoki maqolada keltirilgan ma'lumotlarni R / Python-da ma'lumotlar bilan ishlashning boshqa usullari bilan to'ldirsangiz xursand bo'laman.

Yuqorida yozganimdek, maqolaning maqsadi qaysi til yaxshiroq ekanligi haqida o'z fikrini yuklash emas, balki ikkala tilni o'rganish yoki kerak bo'lganda ular o'rtasida ko'chib o'tish imkoniyatini soddalashtirish edi.

Agar sizga maqola yoqqan bo'lsa, men yangi obunachilarga ega bo'lishdan xursand bo'laman youtube и telegram kanallar.

So'rov

Ishingizda quyidagi paketlardan qaysi birini ishlatasiz?

Izohlarda siz tanlaganingiz sababini yozishingiz mumkin.

So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin. tizimga kirishiltimos.

Qaysi ma'lumotlarni qayta ishlash paketidan foydalanasiz (bir nechta variantni tanlashingiz mumkin)

  • 45,2%tartibli 19

  • 33,3%ma'lumotlar.jadval14

  • 54,8%pandalar23

42 foydalanuvchi ovoz berdi. 9 nafar foydalanuvchi betaraf qoldi.

Manba: www.habr.com

a Izoh qo'shish