Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

Интернетээс R эсвэл Python-ыг хайснаар та өгөгдөлтэй ажиллахад аль нь илүү сайн, хурдан, илүү тохиромжтой вэ гэсэн сэдвээр олон сая нийтлэл, километрийн хэлэлцүүлгийг олох болно. Гэвч харамсалтай нь эдгээр бүх нийтлэл, маргаан нь тийм ч ашигтай биш юм.

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

Энэ нийтлэлийн зорилго нь хоёр хэлний хамгийн алдартай багц дахь өгөгдөл боловсруулах үндсэн аргуудыг харьцуулах явдал юм. Уншигчид хараахан мэдэхгүй зүйлээ хурдан эзэмшихэд нь туслаарай. Python дээр бичдэг хүмүүсийн хувьд R дээр ижил зүйлийг хэрхэн хийх талаар олж мэдээрэй, мөн эсрэгээр.

Өгүүллийн үеэр бид R дахь хамгийн алдартай багцуудын синтаксийг шинжлэх болно. Эдгээр нь номын санд багтсан багцууд юм. tidyverseмөн багц data.table. Мөн тэдгээрийн синтаксийг харьцуул pandas, Python дахь хамгийн алдартай мэдээллийн шинжилгээний багц.

Бид өгөгдлийг ачаалахаас эхлээд Python болон R ашиглан аналитик цонхны функцүүдийг гүйцэтгэх хүртэлх өгөгдлийг шинжлэх бүх замыг алхам алхмаар туулах болно.

Агуулга

Хэрэв та хэлэлцэж буй багцуудын аль нэгэнд өгөгдөл боловсруулах зарим үйлдлийг хэрхэн хийхээ мартсан бол энэ нийтлэлийг хууран мэхлэх хуудас болгон ашиглаж болно.

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

  1. R болон Python хоёрын үндсэн синтакс ялгаа
    1.1. Багцын функцүүдэд хандах
    1.2. Даалгавар
    1.3. Индексжүүлэх
    1.4. Арга ба OOP
    1.5. Дамжуулах хоолой
    1.6. Өгөгдлийн бүтэц
  2. Бидний ашиглах багцуудын талаар хэдэн үг хэлье
    2.1. эмх цэгцтэй
    2.2. мэдээлэл.хүснэгт
    2.3. панда
  3. Багцуудыг суулгаж байна
  4. Өгөгдлийг ачаалж байна
  5. Дата фрейм үүсгэх
  6. Танд хэрэгтэй баганыг сонгох
  7. Мөрүүдийг шүүж байна
  8. Бүлэглэх ба нэгтгэх
  9. Хүснэгтүүдийн босоо нэгдэл (UNION)
  10. Хүснэгтүүдийн хэвтээ холболт (JOIN)
  11. Цонхны үндсэн функцууд ба тооцоолсон баганууд
  12. R болон Python дахь өгөгдөл боловсруулах аргуудын хоорондын захидал харилцааны хүснэгт
  13. дүгнэлт
  14. Та ямар багцыг ашигладаг талаар товч судалгаа

Хэрэв та өгөгдлийн шинжилгээг сонирхож байгаа бол миний цахилгаан мэдээ и YouTube-ийн сувгууд. Ихэнх контент нь R хэлэнд зориулагдсан.

R болон Python хоёрын үндсэн синтакс ялгаа

Python-оос R эсвэл эсрэгээр шилжихэд хялбар болгохын тулд би таны анхаарах ёстой хэд хэдэн гол зүйлийг хэлье.

Багцын функцүүдэд хандах

Багцыг R-д ачаалсны дараа түүний функцэд хандахын тулд багцын нэрийг зааж өгөх шаардлагагүй. Ихэнх тохиолдолд энэ нь R-д түгээмэл биш боловч үүнийг хүлээн зөвшөөрөх боломжтой. Хэрэв танд кодын аль нэг функц хэрэгтэй бол багцыг импортлох шаардлагагүй, харин багцын нэр болон функцийн нэрийг зааж өгөөд л залгана уу. R хэл дээрх багц болон функцийн нэрсийг тусгаарлагч нь давхар хоёр цэг юм. package_name::function_name().

Python-д эсрэгээрээ багцын нэрийг тодорхой зааж өгөх замаар функцийг дуудах нь сонгодог гэж тооцогддог. Багцыг татаж авахдаа ихэвчлэн товчилсон нэр өгдөг, жишээлбэл. pandas ихэвчлэн нууц нэр ашигладаг pd. Багцын функцэд цэгээр ханддаг package_name.function_name().

Даалгавар

R хэл дээр объектод утга оноохдоо сум ашиглах нь түгээмэл байдаг. obj_name <- value, хэдийгээр дан тэнцэх тэмдгийг зөвшөөрдөг ч R дээрх дан тэнцүү тэмдгийг функцийн аргументуудад утгыг дамжуулахад голчлон ашигладаг.

Python хэл дээр даалгаварыг зөвхөн нэг тэнцүү тэмдгээр гүйцэтгэдэг obj_name = value.

Индексжүүлэх

Энд бас нэлээд мэдэгдэхүйц ялгаа бий. R-д индексжүүлэлт нэгээс эхэлж, үүссэн мужид заасан бүх элементүүдийг багтаана.

Python-д индексжүүлэлт тэгээс эхэлдэг бөгөөд сонгосон мужид индекст заасан сүүлийн элементийг оруулаагүй болно. Тиймээс дизайн x[i:j] Python-д j элементийг оруулахгүй.

Мөн сөрөг индексжүүлэлт, R тэмдэглэгээнд ялгаа байдаг x[-1] Сүүлийнхээс бусад векторын бүх элементүүдийг буцаана. Python-д ижил төстэй тэмдэглэгээ нь зөвхөн сүүлчийн элементийг буцаана.

Арга ба OOP

R нь OOP-ийг өөрийнхөөрөө хэрэгжүүлдэг, би энэ тухай нийтлэлдээ бичсэн "R хэл дээрх OOP (1-р хэсэг): S3 анги". Ерөнхийдөө R бол функциональ хэл бөгөөд доторх бүх зүйл функц дээр суурилдаг. Тиймээс, жишээлбэл, Excel-ийн хэрэглэгчид рүү очно уу tydiverse илүү хялбар байх болно pandas. Хэдийгээр энэ нь миний субъектив бодол байж болох юм.

Товчхондоо, R-д байгаа объектуудад аргууд байдаггүй (хэрэв бид S3 ангиудын тухай ярих юм бол бусад OOP хэрэгжүүлэлтүүд бага түгээмэл байдаг). Зөвхөн объектын ангиллаас хамааран тэдгээрийг өөр өөрөөр боловсруулдаг ерөнхий функцүүд байдаг.

Дамжуулах хоолой

Магадгүй энэ нь нэр юм pandas Энэ нь бүрэн зөв биш байх болно, гэхдээ би утгыг тайлбарлахыг хичээх болно.

Завсрын тооцоог хэмнэх, ажлын орчинд шаардлагагүй объектуудыг гаргахгүй байхын тулд та нэг төрлийн дамжуулах хоолойг ашиглаж болно. Тэдгээр. Тооцооллын үр дүнг нэг функцээс нөгөөд шилжүүлэх ба завсрын үр дүнг хадгалахгүй.

Завсрын тооцооллыг тусдаа объектуудад хадгалдаг дараах кодын жишээг авч үзье.

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

Бид 3 үйлдлийг дараалан гүйцэтгэсэн бөгөөд тус бүрийн үр дүнг тусдаа объектод хадгалсан. Гэвч үнэн хэрэгтээ эдгээр завсрын объектууд бидэнд хэрэггүй.

Эсвэл бүр ч дор, гэхдээ Excel-ийн хэрэглэгчдэд илүү танил.

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

Энэ тохиолдолд бид завсрын тооцооллын үр дүнг хадгалаагүй боловч үүрлэсэн функц бүхий кодыг унших нь туйлын тохиромжгүй юм.

Бид R-д өгөгдөл боловсруулах хэд хэдэн аргыг авч үзэх бөгөөд тэдгээр нь ижил төстэй үйлдлүүдийг өөр өөр аргаар гүйцэтгэдэг.

Номын сан дахь дамжуулах хоолой tidyverse оператор хэрэгжүүлдэг %>%.

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

Тиймээс бид ажлын үр дүнг авдаг func1() мөн үүнийг эхний аргумент болгон дамжуулна уу func2(), дараа нь бид энэ тооцооны үр дүнг эхний аргумент болгон дамжуулна func3(). Эцэст нь бид гүйцэтгэсэн бүх тооцоог объектод бичдэг obj <-.

Дээрх бүх зүйлийг энэ дурсамжийн үгсээс илүү сайн дүрсэлсэн болно:
Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

В data.table гинжийг ижил төстэй байдлаар ашигладаг.

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

Дөрвөлжин хаалт бүрт та өмнөх үйлдлийн үр дүнг ашиглаж болно.

В pandas ийм үйлдлүүдийг цэгээр тусгаарлана.

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

Тэдгээр. Бид ширээгээ ав df мөн түүний аргыг ашигла fun1(), дараа нь бид олж авсан үр дүнд аргыг хэрэглэнэ fun2()дараа нь fun3(). Үр дүнг объектод хадгална obj .

Өгөгдлийн бүтэц

R болон Python дээрх өгөгдлийн бүтэц нь ижил төстэй боловч өөр өөр нэртэй байдаг.

Тайлбар
Нэр нь Р
Python/pandas хэл дээрх нэр

Хүснэгтийн бүтэц
data.frame, data.table, tibble
DataFrame

Нэг хэмжээст утгуудын жагсаалт
Вектор
Панда дахь цуврал эсвэл цэвэр Python дээрх жагсаалт

Олон түвшний хүснэгт бус бүтэц
Жагсаалт
Толь бичиг (дикт)

Доор бид синтаксийн бусад онцлог, ялгааг авч үзэх болно.

Бидний ашиглах багцуудын талаар хэдэн үг хэлье

Эхлээд би танд энэ нийтлэлийн үеэр танил болох багцуудын талаар бага зэрэг хэлье.

эмх цэгцтэй

Албан ёсны вэбсайт: tidyverse.org
Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна
номын сан tidyverse RStudio-ийн ахлах судлаач Хедли Викхэм бичсэн. tidyverse нь өгөгдөл боловсруулалтыг хялбаршуулдаг гайхалтай багц багцуудаас бүрдэх бөгөөд 5 нь CRAN репозитороос хамгийн шилдэг 10 татан авалтад багтсан болно.

Номын сангийн цөм нь дараах багцуудаас бүрдэнэ. ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Эдгээр багц бүр нь тодорхой асуудлыг шийдвэрлэхэд чиглэгддэг. Жишээлбэл dplyr өгөгдөл боловсруулахад зориулж бүтээсэн, tidyr өгөгдлийг цэвэр хэлбэрт оруулах, stringr мөртэй ажиллахыг хялбаршуулдаг ба ggplot2 нь өгөгдлийг дүрслэх хамгийн алдартай хэрэгслүүдийн нэг юм.

давуу тал tidyverse нь энгийн бөгөөд уншихад хялбар синтакс бөгөөд энэ нь SQL асуулгын хэлтэй олон талаараа төстэй юм.

мэдээлэл.хүснэгт

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байнаАлбан ёсны вэбсайт: r-datatable.com

Зохиогчоор data.table H2O.ai-ийн Мэтт Доул юм.

Номын сангийн анхны хувилбар 2006 онд болсон.

Багцын синтакс нь өмнөх шиг тийм ч тохиромжтой биш юм tidyverse бөгөөд R хэл дээрх сонгодог өгөгдлийн фреймүүдийг санагдуулдаг боловч нэгэн зэрэг функциональ байдал нь мэдэгдэхүйц өргөжсөн.

Энэ багц дахь хүснэгтийн бүх заль мэхийг дөрвөлжин хаалтанд дүрсэлсэн бөгөөд хэрэв та синтаксийг орчуулбал data.table SQL дээр та иймэрхүү зүйлийг авах болно: data.table[ WHERE, SELECT, GROUP BY ]

Энэ багцын хүч чадал нь их хэмжээний өгөгдлийг боловсруулах хурд юм.

панда

Албан ёсны вэбсайт: pandas.pydata.org Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

Номын сангийн нэр нь олон хэмжээст бүтэцтэй мэдээллийн багцыг тодорхойлоход хэрэглэгддэг эконометрикийн "самбар өгөгдөл" гэсэн нэр томъёоноос гаралтай.

Зохиогчоор pandas Америкийн Уэс МакКинни юм.

Python дээр өгөгдлийн дүн шинжилгээ хийх тухайд тэнцүү байна pandas Үгүй Аливаа эх сурвалжаас өгөгдөл ачаалахаас эхлээд нүдээр харуулах хүртэл өгөгдөлтэй ямар ч үйлдэл хийх боломжийг олгодог маш олон үйлдэлт, өндөр түвшний багц.

Нэмэлт багцуудыг суулгаж байна

Энэ нийтлэлд авч үзсэн багцууд нь R болон Python-ын үндсэн тархалтад ороогүй болно. Хэдийгээр жижиг анхааруулга байгаа ч хэрэв та Anaconda түгээлтийг суулгасан бол нэмж суулгана уу pandas шаардлагагүй.

R-д багцуудыг суулгаж байна

Хэрэв та RStudio хөгжүүлэлтийн орчинг ядаж нэг удаа нээсэн бол R-д шаардлагатай багцыг хэрхэн суулгахаа аль хэдийн мэдэж байгаа байх. Багцуудыг суулгахын тулд стандарт командыг ашиглана уу. install.packages() шууд R дээр ажиллуулснаар.

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

Суулгасны дараа багцуудыг холбох шаардлагатай бөгөөд ихэнх тохиолдолд командыг ашигладаг library().

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

Python дээр багцуудыг суулгаж байна

Тэгэхээр, хэрэв танд цэвэр Python суулгасан бол pandas та үүнийг гараар суулгах хэрэгтэй. Үйлдлийн системээсээ хамааран командын мөр эсвэл терминалыг нээгээд дараах тушаалыг оруулна уу.

pip install pandas

Дараа нь бид Python руу буцаж, суулгасан багцыг тушаалаар импортлоно import.

import pandas as pd

Өгөгдлийг ачаалж байна

Өгөгдөл олборлолт нь өгөгдөлд дүн шинжилгээ хийх хамгийн чухал алхамуудын нэг юм. Хэрэв хүсвэл Python болон R аль аль нь локал файлууд, интернетийн файлууд, вэбсайтууд, бүх төрлийн мэдээллийн сангаас мэдээлэл авах өргөн боломжийг танд олгоно.

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

Нийтлэлийн туршид бид хэд хэдэн өгөгдлийн багцыг ашиглах болно:

  1. Google Analytics-аас хоёр таталт.
  2. Титаник зорчигчийн мэдээллийн багц.

Бүх өгөгдөл миний дээр байна GitHub csv болон tsv файл хэлбэрээр. Бид тэднийг хаанаас хүсэх вэ?

R руу өгөгдөл ачаалж байна: tidyverse, vroom, readr

Номын санд өгөгдөл ачаалах tidyverse Хоёр багц байдаг: vroom, readr. vroom илүү орчин үеийн, гэхдээ ирээдүйд багцуудыг нэгтгэж болно.

ишлэл албан ёсны баримт бичиг vroom.

vroom vs уншигч
Гаргах нь юу вэ vroom төлөө гэсэн үг readr? Одоогоор бид хоёр багцыг тусад нь хөгжүүлэхээр төлөвлөж байгаа ч ирээдүйд багцуудыг нэгтгэх байх. Vroom-ийн залхуу уншлагын нэг сул тал бол өгөгдлийн зарим асуудлуудыг урьдчилан мэдээлэх боломжгүй байдаг тул тэдгээрийг хэрхэн яаж нэгтгэх талаар бодох хэрэгтэй.

vroom vs readr
Суллах гэдэг нь юу гэсэн үг вэ? vroom нь readr? Одоогоор бид хоёр багцыг тусад нь боловсруулахаар төлөвлөж байгаа ч ирээдүйд нэгтгэх байх. Залхуу уншихын нэг сул тал vroom Өгөгдөлтэй холбоотой зарим асуудлуудыг урьдчилан мэдээлэх боломжгүй тул тэдгээрийг хэрхэн хамгийн сайн хослуулах талаар бодох хэрэгтэй.

Энэ нийтлэлд бид өгөгдөл ачаалах хоёр багцыг авч үзэх болно:

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

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

Багцанд vroom, csv / tsv өгөгдлийн форматаас үл хамааран ачааллыг ижил нэртэй функцээр гүйцэтгэдэг. vroom(), багцад readr Бид формат бүрийн хувьд өөр функц ашигладаг read_tsv() и read_csv().

R-д өгөгдөл ачаалж байна: data.table

В data.table өгөгдөл ачаалах функц байдаг fread().

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

Python дээр өгөгдөл ачаалж байна: панда

Хэрэв бид R багцуудтай харьцуулах юм бол энэ тохиолдолд синтакс нь хамгийн ойрхон байна pandas байх болно readr, учир нь pandas хаанаас ч өгөгдөл хүсэх боломжтой бөгөөд энэ багцад бүхэл бүтэн гэр бүлийн функцууд байдаг read_*().

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

Төрөл бүрийн форматаас өгөгдлийг уншихад зориулагдсан бусад олон функцууд. Гэхдээ бидний хувьд энэ нь хангалттай read_table() буюу read_csv() аргумент ашиглах есдүгээр сар сарын багана тусгаарлагчийг зааж өгөх.

Python дээр өгөгдөл ачаалж байна: панда

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

Дата фрейм үүсгэх

Хүснэгт Титаник, бидний ачаалсан талбай байна Биеэ, зорчигчийн хүйсийн тодорхойлогчийг хадгалдаг.

Гэхдээ зорчигчдын хүйсийн хувьд өгөгдлийг илүү тохиромжтой танилцуулахын тулд хүйсийн код гэхээсээ илүү нэрийг ашиглах хэрэгтэй.

Үүнийг хийхийн тулд бид зөвхөн 2 багана (код ба хүйсийн нэр), 2 мөр байх жижиг лавлах хүснэгтийг үүсгэх болно.

R дээр dataframe үүсгэх: tidyverse, dplyr

Доорх кодын жишээн дээр бид функцийг ашиглан хүссэн дата фреймийг үүсгэдэг tibble() .

R: dplyr дээр өгөгдлийн фрейм үүсгэх

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

R дээр dataframe үүсгэх: data.table

R дээр dataframe үүсгэх: data.table

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

Python дээр датафрэйм ​​үүсгэх: панда

В pandas Фрейм үүсгэх нь хэд хэдэн үе шаттайгаар явагддаг бөгөөд эхлээд толь бичиг үүсгэж, дараа нь толь бичгийг дата фрейм болгон хөрвүүлдэг.

Python дээр датафрэйм ​​үүсгэх: панда

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

Багануудыг сонгох

Таны ажилладаг хүснэгтүүд хэдэн арван эсвэл бүр хэдэн зуун багана өгөгдөл агуулж болно. Гэхдээ дүн шинжилгээ хийхийн тулд дүрмээр бол эх хүснэгтэд байгаа бүх багана хэрэггүй.

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

Тиймээс эх хүснэгттэй хийх хамгийн эхний үйлдлүүдийн нэг бол шаардлагагүй мэдээллээс түүнийг цэвэрлэж, санах ойг чөлөөлөх явдал юм.

R дахь багануудыг сонгох: tidyverse, dplyr

синтакс dplyr нь SQL query хэлтэй маш төстэй бөгөөд хэрэв та үүнийг мэддэг бол энэ багцыг хурдан эзэмших болно.

Багануудыг сонгохын тулд функцийг ашиглана уу select().

Дараах аргаар багануудыг сонгож болох кодын жишээг доор харуулав.

  • Шаардлагатай баганын нэрийг жагсааж байна
  • Тогтмол илэрхийлэл ашиглан баганын нэрийг харна уу
  • Өгөгдлийн төрлөөр эсвэл баганад байгаа өгөгдлийн бусад шинж чанараар

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)

R-д багана сонгох: data.table

Үүнтэй ижил үйлдлүүд data.table арай өөрөөр хийгдсэн тул өгүүллийн эхэнд би дөрвөлжин хаалтанд ямар аргументууд байгааг тайлбарласан. data.table.

DT[i,j,by]

Хаана:
би - хаана, өөрөөр хэлбэл. мөрөөр шүүх
j - сонгох|шинэчлэх| хийх, өөрөөр хэлбэл. багануудыг сонгох, хөрвүүлэх
өгөгдлийн бүлэглэлээр

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

Хувьсах .SD бүх баганад хандах боломжийг танд олгоно, мөн .SDcols шаардлагатай багануудыг тогтмол илэрхийлэл эсвэл өөр функц ашиглан шүүж, хэрэгтэй баганын нэрийг шүүнэ үү.

Python дээр багана сонгох, панда

Багануудыг нэрээр нь сонгохын тулд pandas тэдний нэрсийн жагсаалтыг өгөхөд хангалттай. Мөн ердийн илэрхийлэл ашиглан багануудыг нэрээр нь сонгох эсвэл хасахын тулд та функцуудыг ашиглах хэрэгтэй drop() и filter(), ба маргаан тэнхлэг=1, үүний тусламжтайгаар та мөр биш баганыг боловсруулах шаардлагатай гэдгийг харуулж байна.

Өгөгдлийн төрлөөр талбарыг сонгохын тулд функцийг ашиглана уу select_dtypes(), болон аргументууд руу оруулах буюу хасах аль талбарт тохирох өгөгдлийн төрлүүдийн жагсаалтыг гаргах.

Python дээр багана сонгох: панда

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

Мөрүүдийг шүүж байна

Жишээлбэл, эх сурвалж хүснэгтэд хэдэн жилийн өгөгдөл агуулагдаж болох ч та зөвхөн өнгөрсөн сард дүн шинжилгээ хийх хэрэгтэй. Дахин хэлэхэд нэмэлт шугамууд нь өгөгдөл боловсруулах процессыг удаашруулж, компьютерийн санах ойг бөглөрөх болно.

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

R дахь мөрүүдийг шүүх: tydyverse, dplyr

В dplyr функц нь мөрүүдийг шүүхэд ашиглагддаг filter(). Энэ нь дата фреймийг эхний аргумент болгон авч, дараа нь шүүлтүүрийн нөхцлийг жагсаана.

Хүснэгтийг шүүх логик илэрхийлэл бичихдээ энэ тохиолдолд баганын нэрийг хашилтгүй, хүснэгтийн нэрийг зарлахгүйгээр зааж өгнө.

Шүүлтүүр хийхэд олон логик илэрхийлэл ашиглахдаа дараах операторуудыг ашиглана.

  • & эсвэл таслал - логик БА
  • | - логик OR

R дахь мөрүүдийг шүүх: dplyr

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

R дахь мөрүүдийг шүүх: data.table

Би дээр аль хэдийн бичсэнчлэн, онд data.table өгөгдөл хувиргах синтаксийг дөрвөлжин хаалтанд оруулсан болно.

DT[i,j,by]

Хаана:
би - хаана, өөрөөр хэлбэл. мөрөөр шүүх
j - сонгох|шинэчлэх| хийх, өөрөөр хэлбэл. багануудыг сонгох, хөрвүүлэх
өгөгдлийн бүлэглэлээр

Аргумент нь мөрүүдийг шүүхэд хэрэглэгддэг i, дөрвөлжин хаалтанд эхний байрлалтай.

Баганууд руу хашилтгүй, хүснэгтийн нэрийг заахгүйгээр логик илэрхийллээр хандана.

Логик илэрхийллүүд нь хоорондоо ижил төстэй байдлаар холбогддог dplyr & болон | операторуудаар дамжуулан.

R дахь мөрүүдийг шүүх: data.table

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

Python дахь мөрүүдийг шүүх: панда

Мөрөөр нь шүүнэ үү pandas шүүлтүүртэй төстэй data.table, мөн дөрвөлжин хаалтанд хийнэ.

Энэ тохиолдолд багананд хандах нь заавал мэдээллийн фреймийн нэрийг зааж хийгдэх бөгөөд дараа нь баганын нэрийг дөрвөлжин хаалтанд хашилтад бичиж болно (жишээ нь df['col_name']), эсвэл хугацааны дараа хашилтгүй (жишээ нь df.col_name).

Хэрэв та өгөгдлийн фреймийг хэд хэдэн нөхцөлөөр шүүх шаардлагатай бол нөхцөл бүрийг хаалтанд оруулах ёстой. Логик нөхцлүүд хоорондоо операторуудаар холбогддог & и |.

Python дахь мөрүүдийг шүүх: панда

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

Мэдээллийг бүлэглэх, нэгтгэх

Өгөгдлийн шинжилгээнд хамгийн түгээмэл хэрэглэгддэг үйлдлүүдийн нэг бол бүлэглэх, нэгтгэх явдал юм.

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

Эдгээр үйлдлийг гүйцэтгэх синтакс нь бидний хянаж буй бүх багцад тархсан байдаг.

Энэ тохиолдолд бид dataframe-г жишээ болгон авах болно Титаник, тасалбарын тоо, дундаж үнийг бүхээгийн ангиллаас хамааруулан тооцно.

R дахь өгөгдлийг бүлэглэх, нэгтгэх: tidyverse, dplyr

В dplyr функцийг бүлэглэхэд ашигладаг group_by(), мөн нэгтгэх зориулалттай summarise(). Үнэндээ, dplyr функцүүдийн бүхэл бүтэн гэр бүл байдаг summarise_*(), гэхдээ энэ нийтлэлийн зорилго нь үндсэн синтаксийг харьцуулах явдал тул бид ийм ширэнгэн ой руу орохгүй.

Үндсэн нэгтгэх функцууд:

  • sum() - нийлбэр
  • min() / max() - хамгийн бага ба хамгийн их утга
  • mean() - дундаж
  • median() - дундаж
  • length() - тоо хэмжээ

R-д бүлэглэх, нэгтгэх: dplyr

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

Функцэд group_by() Бид эхний аргумент болгон хүснэгтийг дамжуулсан Титаник, дараа нь талбарыг зааж өгсөн PC анги, үүгээр бид ширээгээ бүлэглэх болно. Операторыг ашиглан энэ үйлдлийн үр дүн %>% функцийн эхний аргумент болгон дамжуулсан summarise(), мөн өөр 2 талбар нэмсэн: зорчигчид и дундаж_үнэ. Эхний тохиолдолд функцийг ашиглана length() тасалбарын тоог тооцоолж, хоёр дахь нь функцийг ашиглан mean() тасалбарын дундаж үнийг авсан.

R дахь өгөгдлийг бүлэглэх, нэгтгэх: өгөгдөл.хүснэгт

В data.table аргументыг нэгтгэхэд ашигладаг j дөрвөлжин хаалтанд хоёр дахь байрлалтай, бүлэглэх зориулалттай by буюу keyby, гурав дахь байрыг эзэлдэг.

Энэ тохиолдолд нэгтгэх функцуудын жагсаалт нь дээр дурдсантай ижил байна dplyr, учир нь Эдгээр нь үндсэн R синтаксийн функцууд юм.

R-д бүлэглэх, нэгтгэх: өгөгдөл.хүснэгт

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

Python дахь өгөгдлийг бүлэглэх, нэгтгэх: панда

Бүлэглэх pandas тэй төстэй dplyr, гэхдээ нэгтгэх нь төстэй биш юм dplyr огтхон ч биш data.table.

Бүлэглэхийн тулд аргыг ашиглана уу groupby(), үүнд та датафрэймийг бүлэглэх баганын жагсаалтыг дамжуулах шаардлагатай.

Нэгтгэхийн тулд та аргыг ашиглаж болно agg()толь бичгийг хүлээн зөвшөөрдөг. Толь бичгийн товчлуурууд нь нэгтгэх функцийг ашиглах багана бөгөөд утга нь нэгтгэх функцүүдийн нэрс юм.

Нэгтгэх функцууд:

  • sum() - нийлбэр
  • min() / max() - хамгийн бага ба хамгийн их утга
  • mean() - дундаж
  • median() - дундаж
  • count() - тоо хэмжээ

үйл ажиллагаа reset_index() Доорх жишээнд энэ нь үүрлэсэн индексүүдийг дахин тохируулахад хэрэглэгддэг pandas өгөгдөл нэгтгэсний дараа өгөгдмөл нь.

Тэмдэглэгээ дараагийн мөрөнд шилжих боломжийг танд олгоно.

Python дээр бүлэглэх, нэгтгэх: панда

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

Хүснэгтүүдийн босоо холболт

Нэг бүтэцтэй хоёр ба түүнээс дээш хүснэгтийг нэгтгэх үйл ажиллагаа. Бидний ачаалсан өгөгдөлд хүснэгтүүд байна ga_nov и ga_dec. Эдгээр хүснэгтүүд нь бүтцийн хувьд ижил байна, өөрөөр хэлбэл. ижил баганатай байх ба эдгээр баганад байгаа өгөгдлийн төрлүүд.

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

Энэ бол XNUMX, XNUMX-р сарын Google Analytics-аас байршуулсан зүйл бөгөөд энэ хэсэгт бид энэ өгөгдлийг нэг хүснэгтэд нэгтгэх болно.

R-д хүснэгтүүдийг босоогоор холбох: tidyverse, dplyr

В dplyr Та функцийг ашиглан 2 хүснэгтийг нэг болгон нэгтгэж болно bind_rows(), хүснэгтүүдийг аргумент болгон дамжуулах.

R дахь мөрүүдийг шүүх: dplyr

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

R-д хүснэгтүүдийг босоо байдлаар холбох: data.table

Энэ нь бас төвөгтэй зүйл биш, ашиглацгаая rbind().

R дахь мөрүүдийг шүүх: data.table

## data.table
rbind(ga_nov, ga_dec)

Python дээр хүснэгтүүдийг босоо байдлаар холбох: панда

В pandas функцийг хүснэгтүүдийг нэгтгэхэд ашигладаг concat(), та тэдгээрийг нэгтгэхийн тулд хүрээнүүдийн жагсаалтыг дамжуулах хэрэгтэй.

Python дахь мөрүүдийг шүүх: панда

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

Хүснэгтүүдийн хэвтээ холболт

Эхний хүснэгтэд хоёр дахь багануудыг товчлуураар нэмэх үйлдэл. Энэ нь баримтын хүснэгтийг (жишээлбэл, борлуулалтын мэдээлэл бүхий хүснэгт) зарим лавлагаа мэдээллээр (жишээлбэл, бүтээгдэхүүний өртөг) баяжуулахад ихэвчлэн ашиглагддаг.

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

Хэд хэдэн төрлийн холболтууд байдаг:

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

Өмнө нь ачаалагдсан хүснэгтэд Титаник бидэнд багана байна Биеэ, энэ нь зорчигчийн хүйсийн кодтой тохирч байна:

1 - эмэгтэй
2 - эрэгтэй

Мөн бид хүснэгт - лавлах номыг бүтээсэн хүйс. Зорчигчдын хүйсийн талаархи мэдээллийг илүү тохиромжтой танилцуулахын тулд бид лавлахаас хүйсийн нэрийг нэмэх хэрэгтэй. хүйс ширээ рүү Титаник.

R-д хэвтээ хүснэгт нэгдэх: tidyverse, dplyr

В dplyr Хэвтээ холболтын бүхэл бүтэн гэр бүл байдаг:

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

Миний практикт хамгийн түгээмэл хэрэглэгддэг left_join().

Эхний хоёр аргументын хувьд дээр дурдсан функцүүд нэгдэхийн тулд хоёр хүснэгт, гурав дахь аргументыг авна. by та нэгдэх баганыг зааж өгөх ёстой.

R-д хэвтээ хүснэгтийг нэгтгэх: dplyr

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

R дахь хүснэгтүүдийн хэвтээ холболт: data.table

В data.table Та функцийг ашиглан хүснэгтүүдийг нэгдэх шаардлагатай merge().

data.table дахь нэгтгэх() функцийн аргументууд

  • x, y — Нэгдэх хүснэгтүүд
  • by — Хоёр хүснэгтэд ижил нэртэй бол нэгдэх түлхүүр болох багана
  • by.x, by.y — Хүснэгтэд өөр нэртэй байвал нэгтгэх баганын нэр.
  • all, all.x, all.y — Join type, all all хоёр хүснэгтээс бүх мөрийг буцаана, all.x нь ЗҮҮН НЭГДСЭН үйлдэлтэй тохирч (эхний хүснэгтийн бүх мөрийг орхих), all.y — RIGHT JOIN үйлдэл (хоёр дахь хүснэгтийн бүх мөрийг орхих болно).

R дахь хүснэгтүүдийн хэвтээ холболт: data.table

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

Python-д хэвтээ хүснэгт нэгдэх: панда

Түүнчлэн дотор data.table, in pandas функцийг хүснэгтүүдийг нэгтгэхэд ашигладаг merge().

Панда дахь merge() функцын аргументууд

  • хэрхэн — Холболтын төрөл: зүүн, баруун, гадна, дотор
  • on — Хоёр хүснэгтэд ижил нэртэй бол түлхүүр болох багана
  • left_on, right_on — Хүснэгтэнд өөр өөр нэртэй бол гол баганын нэрс

Python-д хэвтээ хүснэгт нэгдэх: панда

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

Цонхны үндсэн функцууд ба тооцоолсон баганууд

Цонхны функцууд нь нэгтгэх функцтэй утгаараа төстэй бөгөөд мөн өгөгдөлд дүн шинжилгээ хийхэд ихэвчлэн ашиглагддаг. Гэхдээ нэгтгэх функцээс ялгаатай нь цонхны функцууд нь гарч буй дата фреймийн мөрийн тоог өөрчилдөггүй.

Өгөгдөлтэй ажиллахын тулд R эсвэл Python аль хэлийг сонгох вэ? Хоёулаа! Пандагаас tidyverse болон data.table болон буцаж нүүж байна

Үндсэндээ цонхны функцийг ашиглан бид ирж буй өгөгдлийн фреймийг зарим шалгуурын дагуу хэсэг болгон хуваадаг. талбар эсвэл хэд хэдэн талбарын утгаар. Мөн бид цонх бүр дээр арифметик үйлдлүүд хийдэг. Эдгээр үйлдлийн үр дүнг мөр бүрт буцаана, i.e. хүснэгтийн нийт мөрийн тоог өөрчлөхгүйгээр.

Жишээлбэл, хүснэгтийг авч үзье Титаник. Бид тасалбар бүрийн үнэ хэдэн хувьтай тэнцэж байсныг тооцоолж болно.

Үүнийг хийхийн тулд бид мөр бүрт энэ шугамын тасалбар хамаарах одоогийн бүхээгийн ангиллын тасалбарын нийт үнийг авч, тасалбар бүрийн үнийг ижил төрлийн бүхээгийн бүх тасалбарын нийт үнэд хуваах хэрэгтэй. .

R дахь цонхны функцууд: tidyverse, dplyr

Мөр бүлэглэл ашиглахгүйгээр шинэ багана нэмэхийн тулд dplyr функцийг гүйцэтгэдэг mutate().

Та өгөгдлийг талбараар нь бүлэглэх замаар дээр дурдсан асуудлыг шийдэж болно PC анги талбарыг шинэ баганад нэгтгэн дүгнэнэ Төлбөр. Дараа нь хүснэгтийн бүлгийг задалж, талбарын утгуудыг хуваана Төлбөр өмнөх алхамд юу болсон талаар.

R дахь цонхны функцууд: dplyr

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

R дахь цонхны функцууд: data.table

Шийдлийн алгоритм нь өмнөхтэй ижил хэвээр байна dplyr, бид хүснэгтийг талбараар нь цонх болгон хуваах хэрэгтэй PC анги. Мөр бүрт тохирох бүлгийн дүнг шинэ баганад оруулаад, бүлэгт тасалбар бүрийн зардлын эзлэх хувийг тооцоолох баганыг нэмнэ үү.

Шинэ багана нэмэхийн тулд data.table оператор байгаа :=. Багцыг ашиглан асуудлыг шийдэх жишээг доор харуулав data.table

R дахь цонхны функцууд: data.table

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

Python дахь цонхны функцууд: панда

Шинэ багана нэмэх нэг арга pandas - функцийг ашиглах assign(). Тасалбарын үнийг бүхээгийн ангиллаар нь нэгтгэн дүгнэхийн тулд эгнээ бүлэглэхгүйгээр бид функцийг ашиглана transform().

Хүснэгтэд нэмж оруулах шийдлийн жишээг доор харуулав Титаник ижил 2 багана.

Python дахь цонхны функцууд: панда

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

Чиг үүрэг, аргуудын захидал харилцааны хүснэгт

Бидний авч үзсэн багц дахь өгөгдөлтэй янз бүрийн үйлдэл хийх аргуудын хоорондын захидал харилцааны хүснэгтийг доор харуулав.

Тайлбар
эмх цэгцтэй
мэдээлэл.хүснэгт
панда

Өгөгдлийг ачаалж байна
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Дата фрейм үүсгэх
tibble()
data.table()
dict() + from_dict()

Багануудыг сонгох
select()
маргаан j, дөрвөлжин хаалтанд хоёр дахь байрлал
Бид шаардлагатай баганын жагсаалтыг дөрвөлжин хаалтанд оруулдаг / drop() / filter() / select_dtypes()

Мөрүүдийг шүүж байна
filter()
маргаан i, дөрвөлжин хаалтанд эхний байрлал
Бид шүүлтүүрийн нөхцлийг дөрвөлжин хаалтанд жагсаав. filter()

Бүлэглэх ба нэгтгэх
group_by() + summarise()
аргументууд j + by
groupby() + agg()

Хүснэгтүүдийн босоо нэгдэл (UNION)
bind_rows()
rbind()
concat()

Хүснэгтүүдийн хэвтээ холболт (JOIN)
left_join() / *_join()
merge()
merge()

Цонхны үндсэн функцууд болон тооцоолсон багана нэмэх
group_by() + mutate()
маргаан j оператор ашиглан := + маргаан by
transform() + assign()

дүгнэлт

Магадгүй энэ нийтлэлд би өгөгдөл боловсруулах хамгийн оновчтой шийдлүүдийг тайлбарлаагүй байгаа тул та миний тайлбар дахь алдааг засч, эсвэл нийтлэлд өгсөн мэдээллийг R / Python дээр өгөгдөлтэй ажиллах бусад техникээр нэмж оруулбал би баяртай байх болно.

Би дээр бичсэнчлэн, нийтлэлийн зорилго нь аль хэл нь илүү дээр вэ гэсэн үзэл бодлыг тулгах биш, харин хоёр хэлийг сурах боломжийг хялбарчлах эсвэл шаардлагатай бол тэдгээрийн хооронд шилжих явдал байв.

Хэрэв танд нийтлэл таалагдсан бол би шинэ захиалагчтай болсондоо баяртай байх болно YouTube-ийн и цахилгаан утас сувгууд.

Санал асуулга

Та ажилдаа дараах багцуудын алийг нь ашигладаг вэ?

Сэтгэгдэл дээр та сонгосон шалтгаанаа бичиж болно.

Зөвхөн бүртгэлтэй хэрэглэгчид санал асуулгад оролцох боломжтой. Нэвтрэх, гуйя.

Та ямар өгөгдөл боловсруулах багц ашигладаг вэ (та хэд хэдэн сонголтыг сонгож болно)

  • 45,2%эмх цэгцтэй байдал19

  • 33,3%өгөгдөл.хүснэгт 14

  • 54,8%панда 23

42 хэрэглэгч санал өгсөн. 9 хэрэглэгч түдгэлзсэн.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх