ProHoster > Blog > İdarə > 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ə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.
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.
Ə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:
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:
В data.table zəncirlər də oxşar şəkildə istifadə olunur.
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
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.
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.
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əqalə boyu bir neçə məlumat dəstindən istifadə edəcəyik:
Google Analytics-dən iki endirmə.
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?
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:
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().
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 çə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.
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ı
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.
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 (misaldf['col_name']) və ya müddətdən sonra dırnaqsız (misaldf.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.
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.
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.
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)
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.
Bir neçə növ birləşmə var:
Ə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).
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.
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ə.
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.
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()
Ə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.