Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

İnternetdə R və ya Python-u axtararaq, hansının daha yaxşı, daha sürətli və verilənlərlə işləmək üçün daha əlverişli olduğu mövzusunda milyonlarla məqalə və kilometrlərlə müzakirələr tapa bilərsiniz. Ancaq təəssüf ki, bütün bu məqalələr və mübahisələr xüsusilə faydalı deyil.

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

Bu məqalənin məqsədi hər iki dilin ən populyar paketlərində verilənlərin işlənməsinin əsas üsullarını müqayisə etməkdir. Və oxuculara hələ bilmədiklərini tez mənimsəmələrinə kömək edin. Python-da yazanlar üçün eyni şeyi R-də və əksinə necə edəcəyini öyrənin.

Məqalə zamanı biz R-də ən populyar paketlərin sintaksisini təhlil edəcəyik. Bunlar kitabxanaya daxil olan paketlərdir. tidyversevə həmçinin paket data.table. Və onların sintaksisi ilə müqayisə edin pandas, Python-da ən populyar məlumat təhlili paketi.

Biz Python və R istifadə edərək, onu yükləməkdən tutmuş analitik pəncərə funksiyalarını yerinə yetirməyə qədər bütün məlumat təhlili yolunu addım-addım keçəcəyik.

Məzmun

Əgər nəzərdən keçirilən paketlərdən birində bəzi məlumatların işlənməsi əməliyyatını necə yerinə yetirməyi unutmusunuzsa, bu məqalə fırıldaqçı vərəq kimi istifadə edilə bilər.

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

  1. R və Python arasındakı əsas sintaksis fərqləri
    1.1. Paket funksiyalarına daxil olmaq
    1.2. Tapşırıq
    1.3. İndeksləmə
    1.4. Metodlar və OOP
    1.5. Boru kəmərləri
    1.6. Məlumat strukturları
  2. İstifadə edəcəyimiz paketlər haqqında bir neçə kəlmə
    2.1. səliqə-sahman
    2.2. məlumat cədvəli
    2.3. pandalar
  3. Paketlərin quraşdırılması
  4. Data Yüklənir
  5. Dataframelərin yaradılması
  6. Lazım olan sütunların seçilməsi
  7. Sətirlərin süzülməsi
  8. Qruplaşdırma və Toplama
  9. Cədvəllərin şaquli birliyi (UNION)
  10. Cədvəllərin üfüqi birləşməsi (JOIN)
  11. Əsas pəncərə funksiyaları və hesablanmış sütunlar
  12. R və Python-da məlumatların işlənməsi üsulları arasında yazışma cədvəli
  13. Nəticə
  14. Hansı paketdən istifadə etdiyinizə dair qısa sorğu

Əgər məlumatların təhlili ilə maraqlanırsınızsa, mənim teleqram и youtube kanallar. Məzmununun çoxu R dilinə həsr olunub.

R və Python arasındakı əsas sintaksis fərqləri

Python-dan R-ə və ya əksinə keçidinizi asanlaşdırmaq üçün diqqət etməli olduğunuz bir neçə əsas məqamı verəcəyəm.

Paket funksiyalarına daxil olmaq

Paket R-ə yükləndikdən sonra onun funksiyalarına daxil olmaq üçün paket adını göstərməyə ehtiyac yoxdur. Əksər hallarda bu R-də ümumi deyil, lakin məqbuldur. Əgər kodunuzda onun funksiyalarından birinə ehtiyacınız varsa, paketi idxal etmək məcburiyyətində deyilsiniz, sadəcə olaraq paketin adını və funksiyanın adını göstərərək ona zəng edin. R-də paket və funksiya adları arasındakı ayırıcı qoşa iki nöqtədir. package_name::function_name().

Python-da isə əksinə, paketin adını açıq şəkildə göstərməklə onun funksiyalarını çağırmaq klassik hesab olunur. Paket endirildikdə ona adətən qısaldılmış ad verilir, məs. pandas adətən təxəllüsdən istifadə olunur pd. Paket funksiyasına nöqtə vasitəsilə daxil olur package_name.function_name().

Tapşırıq

R-də obyektə dəyər təyin etmək üçün oxdan istifadə etmək adi haldır. obj_name <- value, tək bərabərlik işarəsinə icazə verilsə də, R-də vahid bərabərlik işarəsi əsasən funksiya arqumentlərinə dəyərlər ötürmək üçün istifadə olunur.

Python-da tapşırıq yalnız bərabər bərabərlik işarəsi ilə həyata keçirilir obj_name = value.

İndeksləmə

Burada da kifayət qədər ciddi fərqlər var. R-də indeksləşdirmə birdən başlayır və nəticədə bütün göstərilən elementləri əhatə edir,

Python-da indeksləşdirmə sıfırdan başlayır və seçilmiş aralığa indeksdə göstərilən sonuncu element daxil deyil. Belə ki, dizayn x[i:j] Python-da j elementi daxil olmayacaq.

R notasiyasında mənfi indeksləşdirmədə də fərqlər var x[-1] sonuncudan başqa vektorun bütün elementlərini qaytaracaq. Python-da oxşar qeyd yalnız sonuncu elementi qaytaracaq.

Metodlar və OOP

R OOP-u özünəməxsus şəkildə həyata keçirir, bu barədə məqalədə yazdım "R dilində OOP (1-ci hissə): S3 sinifləri". Ümumiyyətlə, R funksional dildir və içindəki hər şey funksiyalar üzərində qurulub. Buna görə, məsələn, Excel istifadəçiləri üçün gedin tydiverse daha asan olacaq pandas. Baxmayaraq ki, bu mənim subyektiv fikrim ola bilər.

Bir sözlə, R-dəki obyektlərin metodları yoxdur (əgər biz S3 siniflərindən danışırıqsa, lakin daha az yayılmış digər OOP tətbiqləri var). Yalnız ümumiləşdirilmiş funksiyalar var ki, onları obyektin sinfindən asılı olaraq fərqli şəkildə emal edir.

Boru kəmərləri

Bəlkə də bunun adıdır pandas Tamamilə doğru olmayacaq, amma mənasını izah etməyə çalışacağam.

Aralıq hesablamalara qənaət etməmək və iş mühitində lazımsız obyektlər istehsal etməmək üçün bir növ boru kəmərindən istifadə edə bilərsiniz. Bunlar. hesablamanın nəticəsini bir funksiyadan digərinə keçirin və aralıq nəticələri saxlamayın.

Aşağıdakı kod nümunəsini götürək, burada aralıq hesablamaları ayrı-ayrı obyektlərdə saxlayırıq:

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

Ardıcıl olaraq 3 əməliyyat yerinə yetirdik və hər birinin nəticəsi ayrıca obyektdə saxlandı. Amma əslində bu ara obyektlərə ehtiyacımız yoxdur.

Və ya daha da pis, lakin Excel istifadəçilərinə daha çox tanışdır.

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

Bu halda, biz aralıq hesablama nəticələrini saxlamadıq, lakin daxili funksiyaları olan kodu oxumaq son dərəcə əlverişsizdir.

Biz R-də məlumatların işlənməsi üçün bir neçə yanaşmaya baxacağıq və onlar oxşar əməliyyatları müxtəlif üsullarla yerinə yetirirlər.

Kitabxanada boru kəmərləri tidyverse operator tərəfindən həyata keçirilir %>%.

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

Beləliklə, işin nəticəsini alırıq func1() və bunu ilk arqument kimi keçirin func2(), sonra bu hesablamanın nəticəsini birinci arqument kimi keçirik func3(). Və sonda biz obyektə aparılan bütün hesablamaları yazırıq obj <-.

Yuxarıda göstərilənlərin hamısı bu memın sözlərindən daha yaxşı təsvir edilmişdir:
Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

В data.table zəncirlər də oxşar şəkildə istifadə olunur.

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

Kvadrat mötərizələrin hər birində əvvəlki əməliyyatın nəticəsini istifadə edə bilərsiniz.

В pandas belə əməliyyatlar nöqtə ilə ayrılır.

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

Bunlar. süfrəmizi götürürük df və onun metodundan istifadə edin fun1(), sonra metodu əldə edilən nəticəyə tətbiq edirik fun2(), sonra fun3(). Nəticə obyektdə saxlanılır obj .

Məlumat strukturları

R və Python-da verilənlər strukturları oxşardır, lakin fərqli adlara malikdir.

Təsvir
R-də başlıq
Python/pandalarda ad

Cədvəl quruluşu
data.frame, data.table, tibble
DataFrame

Dəyərlərin birölçülü siyahısı
Vector
Pandalarda seriyalar və ya saf Python-da siyahı

Çoxsəviyyəli cədvəlsiz quruluş
Siyahı
Lüğət (dict)

Aşağıda sintaksisdəki bəzi digər xüsusiyyətlərə və fərqlərə baxacağıq.

İstifadə edəcəyimiz paketlər haqqında bir neçə kəlmə

Əvvəlcə sizə bu məqalə zamanı tanış olacağınız paketlər haqqında bir az məlumat verəcəyəm.

səliqə-sahman

Официальный сайт: tidyverse.org
Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya
kitabxana tidyverse RStudio-nun baş tədqiqatçısı Hedley Wickham tərəfindən yazılmışdır. tidyverse məlumatların işlənməsini sadələşdirən təsirli paketlər toplusundan ibarətdir, onlardan 5-i CRAN repozitoriyasından ilk 10 endirmə siyahısına daxildir.

Kitabxananın əsasını aşağıdakı paketlər təşkil edir: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Bu paketlərin hər biri konkret problemin həllinə yönəlib. Misal üçün dplyr məlumatların manipulyasiyası üçün yaradılmışdır, tidyr məlumatları səliqəli formaya gətirmək, stringr simlərlə işləməyi asanlaşdırır və ggplot2 ən məşhur məlumat vizuallaşdırma vasitələrindən biridir.

Üstünlük tidyverse bir çox cəhətdən SQL sorğu dilinə bənzəyən sadəlik və oxunması asan sintaksisdir.

məlumat cədvəli

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiyaОфициальный сайт: r-datatable.com

Tərəfindən data.table H2O.ai-dən Matt Dole.

Kitabxananın ilk buraxılışı 2006-cı ildə baş tutdu.

Paket sintaksisi əvvəlki kimi rahat deyil tidyverse və daha çox R-də klassik dataframeləri xatırladır, lakin eyni zamanda funksionallıq baxımından əhəmiyyətli dərəcədə genişlənmişdir.

Bu paketdəki cədvəllə bütün manipulyasiyalar kvadrat mötərizədə təsvir edilmişdir və sintaksisi tərcümə etsəniz data.table SQL-də belə bir şey əldə edirsiniz: data.table[ WHERE, SELECT, GROUP BY ]

Bu paketin gücü böyük həcmli məlumatların emal sürətidir.

pandalar

Официальный сайт: pandas.pydata.org Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

Kitabxananın adı çoxölçülü strukturlaşdırılmış məlumat dəstlərini təsvir etmək üçün istifadə edilən “panel data” ekonometrik terminindən gəlir.

Tərəfindən pandas Amerikalı Wes McKinneydir.

Python-da məlumatların təhlilinə gəldikdə, bərabərdir pandas Yox. İstənilən mənbədən məlumatların yüklənməsindən tutmuş vizuallaşdırılmasına kimi verilənlərlə istənilən manipulyasiyanı həyata keçirməyə imkan verən çox funksiyalı, yüksək səviyyəli paket.

Əlavə paketlərin quraşdırılması

Bu məqalədə müzakirə olunan paketlər əsas R və Python paylamalarına daxil edilmir. Kiçik bir xəbərdarlıq olsa da, Anaconda paylamasını quraşdırmısınızsa, əlavə olaraq quraşdırın pandas tələb olunmur.

R-də paketlərin quraşdırılması

Ən azı bir dəfə RStudio inkişaf mühitini açmısınızsa, yəqin ki, R-də tələb olunan paketi necə quraşdıracağınızı artıq bilirsiniz. Paketləri quraşdırmaq üçün standart əmrdən istifadə edin. install.packages() onu birbaşa R-də işlətməklə.

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

Quraşdırıldıqdan sonra paketləri bağlamaq lazımdır, bunun üçün əksər hallarda əmr istifadə olunur library().

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

Pythonda paketlərin quraşdırılması

Beləliklə, əgər sizdə təmiz Python quraşdırılıbsa, onda pandas onu əl ilə quraşdırmaq lazımdır. Əməliyyat sisteminizdən asılı olaraq komanda xəttini və ya terminalı açın və aşağıdakı əmri daxil edin.

pip install pandas

Sonra Python-a qayıdırıq və komanda ilə quraşdırılmış paketi idxal edirik import.

import pandas as pd

Data Yüklənir

Data mining məlumat analizində ən vacib addımlardan biridir. İstənilən halda həm Python, həm də R sizə istənilən mənbədən məlumat əldə etmək üçün geniş imkanlar təqdim edir: yerli fayllar, İnternetdən fayllar, vebsaytlar, hər cür verilənlər bazası.

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

Məqalə boyu bir neçə məlumat dəstindən istifadə edəcəyik:

  1. Google Analytics-dən iki endirmə.
  2. Titanic Sərnişin Məlumat Seti.

Bütün məlumatlar məndədir Github csv və tsv faylları şəklində. Onları haradan tələb edəcəyik?

Məlumatların R-yə yüklənməsi: tidyverse, vroom, readr

Məlumatları kitabxanaya yükləmək üçün tidyverse İki paket var: vroom, readr. vroom daha müasir, lakin gələcəkdə paketlər birləşdirilə bilər.

-dən sitat rəsmi sənədlər vroom.

vroom və oxucu
Buraxılış nə edir vroom üçün nəzərdə tutulur readr? Hələlik biz iki paketin ayrı-ayrılıqda inkişaf etdirilməsinə icazə verməyi planlaşdırırıq, lakin ehtimal ki, gələcəkdə paketləri birləşdirəcəyik. Vroom-un tənbəl oxumasının bir dezavantajı, müəyyən məlumat problemlərinin əvvəlcədən bildirilməməsidir, buna görə də onları ən yaxşı şəkildə necə birləşdirmək bir az düşünməyi tələb edir.

vroom vs readr
Buraxılış nə deməkdir? vroom uğrunda readr? Hazırda hər iki paketi ayrı-ayrılıqda inkişaf etdirməyi planlaşdırırıq, lakin yəqin ki, gələcəkdə onları birləşdirəcəyik. Tənbəl oxumağın mənfi cəhətlərindən biri vroom odur ki, məlumatlarla bağlı bəzi problemlər əvvəlcədən bildirilə bilməz, ona görə də onları ən yaxşı şəkildə necə birləşdirəcəyinizi düşünməlisiniz.

Bu yazıda hər iki məlumat yükləmə paketinə baxacağıq:

Məlumatların R: vroom paketinə yüklənməsi

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

Məlumatların R-yə yüklənməsi: 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")

Paketdə vroom, csv / tsv məlumat formatından asılı olmayaraq, yükləmə eyni adlı funksiya ilə həyata keçirilir vroom(), paketdə readr hər format üçün fərqli funksiyadan istifadə edirik read_tsv() и read_csv().

Məlumatların R-yə yüklənməsi: data.table

В data.table məlumatların yüklənməsi funksiyası var fread().

Məlumatların R-yə yüklənməsi: 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 məlumat yüklənir: pandalar

R paketləri ilə müqayisə etsək, bu halda sintaksis ən yaxındır pandas iradə readr, çünki pandas hər yerdən məlumat tələb edə bilər və bu paketdə bütün funksiyalar ailəsi mövcuddur read_*().

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

Və müxtəlif formatlardan məlumatları oxumaq üçün nəzərdə tutulmuş bir çox digər funksiyalar. Amma bizim məqsədlərimiz üçün bu kifayətdir read_table() və ya read_csv() arqumentdən istifadə edir sep sütun ayırıcısını təyin etmək üçün.

Python-da məlumat yüklənir: 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")

Dataframelərin yaradılması

Cədvəl nəhəng, yüklədiyimiz sahə var Cinsi, sərnişinin cinsi identifikatorunu saxlayan.

Lakin sərnişinlərin cinsi baxımından məlumatların daha rahat təqdim edilməsi üçün siz gender kodundan çox addan istifadə etməlisiniz.

Bunu etmək üçün kiçik bir kataloq, müvafiq olaraq yalnız 2 sütun (kod və cinsiyyət adı) və 2 sətir olacaq bir cədvəl yaradacağıq.

R-də dataframe yaratmaq: tidyverse, dplyr

Aşağıdakı kod nümunəsində biz funksiyadan istifadə edərək istədiyiniz dataframe yaradırıq tibble() .

R-də məlumat çərçivəsinin yaradılması: dplyr

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

R-də dataframe yaradılması: data.table

R-də dataframe yaradılması: data.table

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

Python-da məlumat çərçivəsinin yaradılması: pandalar

В pandas Çərçivələrin yaradılması bir neçə mərhələdə həyata keçirilir, əvvəlcə lüğət yaradırıq, sonra lüğəti dataframe çeviririk.

Python-da məlumat çərçivəsinin yaradılması: pandalar

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

Sütunların seçilməsi

İşlədiyiniz cədvəllər onlarla, hətta yüzlərlə verilənlər sütunundan ibarət ola bilər. Ancaq təhlil aparmaq üçün, bir qayda olaraq, mənbə cədvəlində mövcud olan bütün sütunlara ehtiyacınız yoxdur.

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

Buna görə də mənbə cədvəli ilə həyata keçirəcəyiniz ilk əməliyyatlardan biri onu lazımsız məlumatlardan təmizləmək və bu məlumatın tutduğu yaddaşı boşaltmaqdır.

R-də sütunların seçilməsi: tidyverse, dplyr

sintaksis dplyr SQL sorğu dilinə çox bənzəyir, əgər siz onunla tanışsınızsa, bu paketi tez mənimsəyəcəksiniz.

Sütunları seçmək üçün funksiyadan istifadə edin select().

Aşağıda sütunları aşağıdakı yollarla seçə biləcəyiniz kod nümunələri verilmişdir:

  • Tələb olunan sütunların adlarının sadalanması
  • Normal ifadələrdən istifadə edərək sütun adlarına müraciət edin
  • Məlumat növü və ya sütunda olan məlumatların hər hansı digər xüsusiyyəti ilə

R-də sütunların seçilməsi: 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-də sütunların seçilməsi: data.table

Eyni əməliyyatlar data.table bir az fərqli şəkildə yerinə yetirilir, məqalənin əvvəlində kvadrat mötərizədə hansı arqumentlərin olduğunu təsvir etdim. data.table.

DT[i,j,by]

Harada:
mən - harada, yəni. sətirlər üzrə filtrləmə
j - seçin|yenilət|edin, yəni. sütunların seçilməsi və onların çevrilməsi
tərəfindən - məlumatların qruplaşdırılması

R-də sütunların seçilməsi: 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$")]

Dəyişən .SD bütün sütunlara daxil olmağa imkan verir və .SDcols Sizə lazım olan sütunların adlarını süzgəcdən keçirmək üçün müntəzəm ifadələrdən və ya digər funksiyalardan istifadə edərək tələb olunan sütunları süzün.

Python, pandalarda sütunların seçilməsi

Sütunları ada görə seçmək üçün pandas adlarının siyahısını təqdim etmək kifayətdir. Normal ifadələrdən istifadə edərək sütunları ada görə seçmək və ya istisna etmək üçün funksiyalardan istifadə etməlisiniz drop() и filter(), və mübahisə ox=1, onunla sətirləri deyil, sütunları emal etməyin lazım olduğunu bildirirsiniz.

Məlumat növünə görə sahə seçmək üçün funksiyadan istifadə edin select_dtypes(), və arqumentlərə daxil və ya istisna seçməli olduğunuz sahələrə uyğun məlumat növlərinin siyahısını keçirin.

Python-da sütunların seçilməsi: 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'])

Sətirlərin süzülməsi

Məsələn, mənbə cədvəlində bir neçə illik məlumatlar ola bilər, ancaq siz yalnız ötən ayı təhlil etməlisiniz. Yenə əlavə xətlər məlumatların işlənməsi prosesini ləngidir və PC yaddaşını tıxayır.

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

R-də sıraların süzülməsi: tydyverse, dplyr

В dplyr funksiya sətirləri süzmək üçün istifadə olunur filter(). İlk arqument kimi dataframe götürür, sonra siz filtrləmə şərtlərini sadalayırsınız.

Cədvəli süzgəcdən keçirmək üçün məntiqi ifadələr yazarkən, bu halda sütun adlarını dırnaqsız və cədvəlin adını elan etmədən qeyd edin.

Filtr etmək üçün çoxlu məntiqi ifadələrdən istifadə edərkən aşağıdakı operatorlardan istifadə edin:

  • & və ya vergül - məntiqi VƏ
  • | - məntiqi OR

R-də sətirlərin süzülməsi: dplyr

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

R-də sətirlərin süzülməsi: data.table

Yuxarıda yazdığım kimi, in data.table məlumatların çevrilməsi sintaksisi kvadrat mötərizə içərisindədir.

DT[i,j,by]

Harada:
mən - harada, yəni. sətirlər üzrə filtrləmə
j - seçin|yenilət|edin, yəni. sütunların seçilməsi və onların çevrilməsi
tərəfindən - məlumatların qruplaşdırılması

Arqument sətirləri süzmək üçün istifadə olunur i, kvadrat mötərizədə birinci mövqeyə malikdir.

Sütunlara məntiqi ifadələrlə dırnaq işarəsi olmadan və cədvəlin adı göstərilmədən daxil olur.

Məntiqi ifadələr bir-biri ilə eyni şəkildə bağlıdır dplyr & və | operatorları vasitəsilə.

R-də sətirlərin süzülməsi: data.table

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

Python-da sətirlərin süzülməsi: pandalar

Sətirlərə görə süzün pandas filtrləməyə bənzəyir data.table, və kvadrat mötərizədə edilir.

Bu halda, sütunlara giriş mütləq məlumat çərçivəsinin adını göstərməklə həyata keçirilir; sonra sütun adı kvadrat mötərizədə dırnaq işarələrində də göstərilə bilər (misal df['col_name']) və ya müddətdən sonra dırnaqsız (misal df.col_name).

Əgər dataframeni bir neçə şərtlə filtrləmək lazımdırsa, hər bir şərt mötərizədə yerləşdirilməlidir. Məntiqi şərtlər bir-biri ilə operatorlar vasitəsilə əlaqələndirilir & и |.

Python-da sətirlərin süzülməsi: 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)]

Məlumatların qruplaşdırılması və yığılması

Məlumatların təhlilində ən çox istifadə edilən əməliyyatlardan biri qruplaşdırma və toplamadır.

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

Bu əməliyyatları yerinə yetirmək üçün sintaksis nəzərdən keçirdiyimiz bütün paketlərə səpələnmişdir.

Bu halda biz nümunə olaraq dataframe götürəcəyik nəhəng, və kabin sinfindən asılı olaraq biletlərin sayını və orta qiymətini hesablayın.

R-də məlumatların qruplaşdırılması və yığılması: səliqəli, dplyr

В dplyr funksiya qruplaşdırmaq üçün istifadə olunur group_by(), və toplamaq üçün summarise(). Faktiki olaraq, dplyr bütün funksiyalar ailəsi var summarise_*(), lakin bu məqalənin məqsədi əsas sintaksisi müqayisə etməkdir, ona görə də belə cəngəlliyə girməyəcəyik.

Əsas toplama funksiyaları:

  • sum() - ümumiləşdirmə
  • min() / max() - minimum və maksimum dəyər
  • mean() - orta
  • median() - median
  • length() - kəmiyyət

R-də qruplaşdırma və toplama: dplyr

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

Fəaliyyət göstərmək group_by() birinci arqument kimi masadan keçdik nəhəng, sonra sahəni göstərdi Pcclass, bunun əsasında masamızı qruplaşdıracağıq. Operatordan istifadə edərək bu əməliyyatın nəticəsi %>% funksiyaya ilk arqument kimi ötürülür summarise(), və daha 2 sahə əlavə etdi: sərnişinlər и orta_qiymət. Birincisi, funksiyadan istifadə etməklə length() biletlərin sayını hesabladı, ikincisində isə funksiyadan istifadə etdi mean() orta bilet qiyməti aldı.

R-də verilənlərin qruplaşdırılması və yığılması: data.table

В data.table arqument toplamaq üçün istifadə olunur j kvadrat mötərizədə ikinci mövqeyə malik olan və qruplaşdırma üçün by və ya keyby, üçüncü mövqeyə sahib olanlar.

Bu halda toplama funksiyalarının siyahısı bənddə təsvir edilənlə eynidir dplyr, çünki bunlar əsas R sintaksisinin funksiyalarıdır.

R-də qruplaşdırma və aqreqasiya: data.table

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

Python-da məlumatların qruplaşdırılması və yığılması: pandalar

Qruplaşma pandas oxşar dplyr, lakin toplama oxşar deyil dplyr deyil data.table.

Qruplaşdırmaq üçün metoddan istifadə edin groupby(), dataframe-nin qruplaşdırılacağı sütunların siyahısını daxil etməlisiniz.

Toplama üçün metoddan istifadə edə bilərsiniz agg()lüğəti qəbul edən. Lüğət düymələri toplama funksiyalarını tətbiq edəcəyiniz sütunlardır, dəyərlər isə toplama funksiyalarının adlarıdır.

Toplama funksiyaları:

  • sum() - ümumiləşdirmə
  • min() / max() - minimum və maksimum dəyər
  • mean() - orta
  • median() - median
  • count() - kəmiyyət

Function reset_index() aşağıdakı misalda iç içə indeksləri sıfırlamaq üçün istifadə olunur pandas məlumatların toplanmasından sonra standartdır.

Rəmz növbəti sətirə keçməyə imkan verir.

Python-da qruplaşdırma və toplama: pandalar

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

Cədvəllərin şaquli birləşməsi

Eyni strukturun iki və ya daha çox cədvəlini birləşdirdiyiniz əməliyyat. Yüklədiyimiz məlumatlar cədvəllərdən ibarətdir ga_nov и ga_dec. Bu cədvəllər struktur baxımından eynidir, yəni. eyni sütunlara və bu sütunlardakı məlumat növlərinə malikdir.

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

Bu, Google Analytics-dən noyabr və dekabr ayı üçün yükləmədir, bu bölmədə biz bu məlumatları bir cədvəldə birləşdirəcəyik.

R-də cədvəlləri şaquli olaraq birləşdirən: tidyverse, dplyr

В dplyr Funksiyadan istifadə edərək 2 cədvəli birinə birləşdirə bilərsiniz bind_rows(), onun arqumentləri kimi cədvəllərin ötürülməsi.

R-də sətirlərin süzülməsi: dplyr

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

R-də cədvəllərin şaquli birləşdirilməsi: data.table

Bu da mürəkkəb bir şey deyil, istifadə edək rbind().

R-də sətirlərin süzülməsi: data.table

## data.table
rbind(ga_nov, ga_dec)

Python-da cədvəlləri şaquli şəkildə birləşdirən: pandalar

В pandas funksiyası cədvəlləri birləşdirmək üçün istifadə olunur concat(), onları birləşdirmək üçün çərçivələrin siyahısını daxil etməlisiniz.

Python-da sətirlərin süzülməsi: pandalar

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

Cədvəllərin üfüqi birləşməsi

İkincidən olan sütunların açarla birinci cədvələ əlavə olunduğu əməliyyat. Tez-tez fakt cədvəlini (məsələn, satış məlumatları olan cədvəl) bəzi istinad məlumatları (məsələn, məhsulun dəyəri) ilə zənginləşdirərkən istifadə olunur.

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

Bir neçə növ birləşmə var:

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

Əvvəllər yüklənmiş cədvəldə nəhəng sütunumuz var Cinsi, sərnişinin cins koduna uyğundur:

1 - qadın
2 - kişi

Həmçinin, biz bir cədvəl yaratdıq - məlumat kitabçası cins. Sərnişinlərin cinsinə dair məlumatların daha rahat təqdimatı üçün kataloqdan cinsin adını əlavə etməliyik. cins masaya nəhəng.

Üfüqi masa R-də birləşir: səliqəli, dplyr

В dplyr Üfüqi birləşmə üçün bütün funksiyalar ailəsi var:

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

Mənim praktikamda ən çox istifadə ediləndir left_join().

İlk iki arqument kimi yuxarıda sadalanan funksiyalar qoşulmaq üçün iki cədvəl və üçüncü arqument kimi by qoşulmaq üçün sütunları göstərməlisiniz.

R-də üfüqi cədvəl birləşdirilir: dplyr

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

R-də cədvəllərin üfüqi birləşməsi: data.table

В data.table Funksiyadan istifadə edərək, cədvəlləri düymə ilə birləşdirməlisiniz merge().

data.table-də birləşmə() funksiyası üçün arqumentlər

  • x, y — Qoşulmaq üçün cədvəllər
  • by — Hər iki cədvəldə eyni ada malik olduğu halda qoşulmaq üçün açar olan sütun
  • by.x, by.y — Cədvəllərdə fərqli adlar varsa, birləşdiriləcək sütunların adları
  • all, all.x, all.y — Qoşulma növü, hamısı hər iki cədvəldən bütün sətirləri qaytaracaq, all.x LEFT JOIN əməliyyatına uyğundur (birinci cədvəlin bütün sətirlərini tərk edəcək), all.y — uyğundur RIGHT JOIN əməliyyatı (ikinci cədvəlin bütün sətirlərini tərk edəcək).

R-də cədvəllərin üfüqi birləşməsi: data.table

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

Python-da üfüqi masa birləşir: pandalar

Eləcə də içində data.table, in pandas funksiyası cədvəlləri birləşdirmək üçün istifadə olunur merge().

Pandalarda merge() funksiyasının arqumentləri

  • necə — Bağlantı növü: sol, sağ, xarici, daxili
  • on — Hər iki cədvəldə eyni ada malik olan sütun açardır
  • left_on, right_on — Cədvəllərdə fərqli adlar varsa, əsas sütunların adları

Python-da üfüqi masa birləşir: pandalar

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

Əsas pəncərə funksiyaları və hesablanmış sütunlar

Pəncərə funksiyaları mənaca aqreqasiya funksiyalarına bənzəyir və məlumatların təhlilində də tez-tez istifadə olunur. Lakin toplama funksiyalarından fərqli olaraq, pəncərə funksiyaları gedən dataframenin sətirlərinin sayını dəyişmir.

Məlumatlarla işləmək üçün hansı dili seçmək lazımdır - R və ya Python? Hər ikisi! Pandalardan səliqəli evrenə və data.table və geriyə miqrasiya

Prinsipcə, pəncərə funksiyasından istifadə edərək, daxil olan məlumat çərçivəsini bəzi meyarlara görə hissələrə bölürük, yəni. sahənin və ya bir neçə sahənin dəyəri ilə. Və hər bir pəncərədə hesab əməliyyatları həyata keçiririk. Bu əməliyyatların nəticəsi hər bir sətirdə qaytarılacaq, yəni. cədvəldəki sətirlərin ümumi sayını dəyişmədən.

Məsələn, masanı götürək nəhəng. Hər bir biletin qiymətinin onun kabin sinfində neçə faiz olduğunu hesablaya bilərik.

Bunu etmək üçün hər bir sətirdə bu sətirdəki biletin aid olduğu cari kabin sinfi üçün biletin ümumi dəyərini almalıyıq, sonra hər bir biletin dəyərini eyni kabin sinfinin bütün biletlərinin ümumi dəyərinə bölmək lazımdır. .

R-də pəncərə funksiyaları: tidyverse, dplyr

Satır qruplaşdırmasından istifadə etmədən yeni sütunlar əlavə etmək üçün dplyr funksiyasını yerinə yetirir mutate().

Məlumatları sahələr üzrə qruplaşdırmaqla yuxarıda təsvir olunan problemi həll edə bilərsiniz Pcclass və sahənin yeni sütunda cəmlənməsi Gediş haqqı. Sonra cədvəli qrupdan çıxarın və sahə dəyərlərini bölün Gediş haqqı əvvəlki addımda baş verənlərə.

R-də pəncərə funksiyaları: dplyr

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

R-də pəncərə funksiyaları: data.table

Həll alqoritmi əvvəlki kimi qalır dplyr, cədvəli sahələrə görə pəncərələrə bölmək lazımdır Pcclass. Yeni sütunda hər bir sıraya uyğun olan qrup üçün məbləği çıxarın və onun qrupunda hər bir biletin dəyərinin payını hesabladığımız bir sütun əlavə edin.

Yeni sütunlar əlavə etmək üçün data.table operator mövcuddur :=. Aşağıda paketdən istifadə edərək problemin həlli nümunəsidir data.table

R-də pəncərə funksiyaları: data.table

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

Python-da pəncərə funksiyaları: pandalar

Yeni sütun əlavə etməyin bir yolu pandas - funksiyadan istifadə edin assign(). Biletlərin qiymətini sıralar qruplaşdırmadan kabin sinfinə görə ümumiləşdirmək üçün funksiyadan istifadə edəcəyik transform().

Aşağıda cədvələ əlavə etdiyimiz bir həll nümunəsidir nəhəng eyni 2 sütun.

Python-da pəncərə funksiyaları: pandalar

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

Funksiya və metodların yazışma cədvəli

Aşağıda nəzərdən keçirdiyimiz paketlərdə verilənlərlə müxtəlif əməliyyatların yerinə yetirilməsi üsulları arasında uyğunluq cədvəli verilmişdir.

Təsvir
səliqə-sahman
məlumat cədvəli
pandalar

Data Yüklənir
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Dataframelərin yaradılması
tibble()
data.table()
dict() + from_dict()

Sütunların seçilməsi
select()
bir arqument j, kvadrat mötərizədə ikinci mövqe
tələb olunan sütunların siyahısını kvadrat mötərizədə keçirik / drop() / filter() / select_dtypes()

Sətirlərin süzülməsi
filter()
bir arqument i, kvadrat mötərizədə ilk mövqe
Filtrləmə şərtlərini kvadrat mötərizədə sadalayırıq / filter()

Qruplaşdırma və Toplama
group_by() + summarise()
arqumentlər j + by
groupby() + agg()

Cədvəllərin şaquli birliyi (UNION)
bind_rows()
rbind()
concat()

Cədvəllərin üfüqi birləşməsi (JOIN)
left_join() / *_join()
merge()
merge()

Əsas pəncərə funksiyaları və hesablanmış sütunların əlavə edilməsi
group_by() + mutate()
bir arqument j operatordan istifadə etməklə := + mübahisə by
transform() + assign()

Nəticə

Bəlkə də məqalədə məlumatların işlənməsinin ən optimal tətbiqlərini təsvir etməmişəm, buna görə də şərhlərdəki səhvlərimi düzəltsəniz və ya məqalədə verilən məlumatları R / Python-da məlumatlarla işləmək üçün digər üsullarla əlavə etsəniz, şad olaram.

Yuxarıda yazdığım kimi, məqalənin məqsədi hansı dilin daha yaxşı olduğu barədə fikir söyləmək deyil, hər iki dili öyrənmək və ya lazım gələrsə, onlar arasında miqrasiya etmək imkanını sadələşdirmək idi.

Məqaləni bəyənmisinizsə, yeni abunəçilərimin olmasına şad olaram youtube и teleqram kanallar.

Опрос

İşinizdə aşağıdakı paketlərdən hansını istifadə edirsiniz?

Şərhlərdə seçiminizin səbəbini yaza bilərsiniz.

Sorğuda yalnız qeydiyyatdan keçmiş istifadəçilər iştirak edə bilər. Daxil olunxahiş edirəm.

Hansı məlumat emal paketindən istifadə edirsiniz (bir neçə variant seçə bilərsiniz)

  • 45,2%səliqəli 19

  • 33,3%data.cədvəl 14

  • 54,8%pandalar23

42 istifadəçi səs verib. 9 istifadəçi bitərəf qalıb.

Mənbə: www.habr.com

Добавить комментарий