Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

İnternette R veya Python'u aradığınızda, hangisinin daha iyi, daha hızlı ve verilerle çalışmak için daha uygun olduğu konusunda milyonlarca makale ve kilometrelerce tartışma bulacaksınız. Ancak ne yazık ki tüm bu makaleler ve tartışmalar özellikle yararlı değil.

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

Bu makalenin amacı her iki dilin en popüler paketlerindeki temel veri işleme tekniklerini karşılaştırmaktır. Ve okuyucuların henüz bilmedikleri bir konuda hızla uzmanlaşmasına yardımcı olun. Python'da yazanlar için aynı şeyi R'de (ve tam tersini) nasıl yapabileceklerini öğrenin.

Yazı boyunca R'deki en popüler paketlerin sözdizimini analiz edeceğiz. Bunlar kütüphanede yer alan paketlerdir. tidyverseve ayrıca paket data.table. Ve sözdizimlerini şununla karşılaştırın: pandasPython'daki en popüler veri analizi paketi.

Python ve R kullanarak veri analizinin yüklenmesinden analitik pencere işlevlerinin gerçekleştirilmesine kadar tüm yol boyunca adım adım ilerleyeceğiz.

Içerik

Söz konusu paketlerden birinde bazı veri işleme işlemlerinin nasıl gerçekleştirileceğini unuttuysanız, bu makale kısa not olarak kullanılabilir.

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

  1. R ve Python arasındaki temel sözdizimi farklılıkları
    1.1 Paket İşlevlerine Erişim
    1.2 Atama
    1.3 indeksleme
    1.4 Yöntemler ve OOP
    1.5 Boru hatları
    1.6 Veri yapıları
  2. Kullanacağımız paketler hakkında birkaç söz
    2.1 tidyverse
    2.2 veri tablosu
    2.3 pandalar
  3. Paketleri yükleme
  4. Veri yükleniyor
  5. Veri çerçeveleri oluşturma
  6. İhtiyacınız Olan Sütunları Seçme
  7. Satırları filtreleme
  8. Gruplama ve Toplama
  9. Tabloların dikey birleşimi (UNION)
  10. Tabloların yatay birleşimi (JOIN)
  11. Temel pencere işlevleri ve hesaplanan sütunlar
  12. R ve Python'daki veri işleme yöntemleri arasındaki yazışma tablosu
  13. Sonuç
  14. Hangi paketi kullandığınıza dair kısa bir anket

Veri analiziyle ilgileniyorsanız, benim makalemi bulabilirsiniz. telgraf и Youtube kanallar. İçeriğin çoğu R diline ayrılmıştır.

R ve Python arasındaki temel sözdizimi farklılıkları

Python'dan R'ye veya Python'dan R'ye geçişinizi kolaylaştırmak için dikkat etmeniz gereken birkaç ana noktaya değineceğim.

Paket İşlevlerine Erişim

Bir paket R'ye yüklendikten sonra, işlevlerine erişmek için paket adını belirtmenize gerek yoktur. Çoğu durumda bu R'de yaygın değildir, ancak kabul edilebilirdir. Kodunuzda bir işleve ihtiyacınız varsa bir paketi içe aktarmanız gerekmez; yalnızca paketin adını ve işlevin adını belirterek onu çağırmanız yeterlidir. R'de paket ve işlev adları arasındaki ayırıcı çift iki nokta üst üstedir. package_name::function_name().

Python'da ise tam tersine, bir paketin işlevlerini, adını açıkça belirterek çağırmak klasik kabul edilir. Bir paket indirildiğinde genellikle kısaltılmış bir ad verilir; pandas genellikle takma ad kullanılır pd. Bir paket işlevine bir nokta aracılığıyla erişilir package_name.function_name().

Atama

R'de bir nesneye değer atamak için ok kullanılması yaygındır. obj_name <- valueHer ne kadar tek bir eşittir işaretine izin verilse de, R'deki tek eşittir işareti öncelikle değerleri işlev bağımsız değişkenlerine iletmek için kullanılır.

Python'da atama yalnızca tek bir eşittir işaretiyle yapılır obj_name = value.

indeksleme

Burada da oldukça önemli farklılıklar var. R'de indeksleme birden başlar ve sonuç aralığında belirtilen tüm öğeleri içerir.

Python'da indeksleme sıfırdan başlar ve seçilen aralık indekste belirtilen son öğeyi içermez. Yani tasarım x[i:j] Python'da j öğesi bulunmaz.

R gösteriminde negatif indekslemede de farklılıklar vardır. x[-1] sonuncusu hariç vektörün tüm elemanlarını döndürür. Python'da benzer bir gösterim yalnızca son öğeyi döndürür.

Yöntemler ve OOP

R, OOP'yi kendi yöntemiyle uygular, bunu makalede yazdım "R dilinde OOP (bölüm 1): S3 sınıfları". Genel olarak R işlevsel bir dildir ve içindeki her şey işlevler üzerine kuruludur. Bu nedenle, örneğin Excel kullanıcıları için şu adrese gidin: tydiverse bundan daha kolay olacak pandas. Her ne kadar bu benim öznel görüşüm olsa da.

Kısacası R'deki nesnelerin yöntemleri yoktur (S3 sınıflarından bahsedersek, ancak çok daha az yaygın olan başka OOP uygulamaları da vardır). Yalnızca nesnenin sınıfına bağlı olarak bunları farklı şekilde işleyen genelleştirilmiş işlevler vardır.

Boru hatları

Belki de adı budur pandas Tamamen doğru olmayacak ama anlamını açıklamaya çalışacağım.

Ara hesaplamaları kaydetmemek ve çalışma ortamında gereksiz nesneler üretmemek için bir çeşit boru hattı kullanabilirsiniz. Onlar. Bir hesaplamanın sonucunu bir fonksiyondan diğerine aktarın ve ara sonuçları kaydetmeyin.

Ara hesaplamaları ayrı nesnelerde sakladığımız aşağıdaki kod örneğini ele alalım:

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

Art arda 3 işlem gerçekleştirdik ve her birinin sonucu ayrı bir nesneye kaydedildi. Ama aslında bu ara nesnelere ihtiyacımız yok.

Veya daha da kötüsü, ancak Excel kullanıcılarının daha aşina olduğu bir durum.

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

Bu durumda ara hesaplama sonuçlarını kaydetmedik ancak iç içe geçmiş işlevlere sahip kodu okumak son derece sakıncalıdır.

R'de veri işlemeye yönelik çeşitli yaklaşımlara bakacağız ve bunlar benzer işlemleri farklı şekillerde gerçekleştiriyor.

Kütüphanedeki boru hatları tidyverse operatör tarafından uygulanan %>%.

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

Böylece işin sonucunu alıyoruz func1() ve bunu ilk argüman olarak iletin func2(), sonra bu hesaplamanın sonucunu ilk argüman olarak aktarırız func3(). Ve sonunda yapılan tüm hesaplamaları nesneye yazıyoruz obj <-.

Yukarıdakilerin tümü bu memede kelimelerden daha iyi gösterilmiştir:
Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

В data.table zincirler de benzer şekilde kullanılır.

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

Köşeli parantezlerin her birinde önceki işlemin sonucunu kullanabilirsiniz.

В pandas bu tür işlemler bir noktayla ayrılır.

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

Onlar. masamızı alıyoruz df ve onun yöntemini kullan fun1(), daha sonra yöntemi elde edilen sonuca uygularız fun2(), sonra fun3(). Ortaya çıkan sonuç bir nesneye kaydedilir obj .

Veri yapıları

R ve Python'daki veri yapıları benzerdir ancak farklı adlara sahiptir.

Açıklama
R'deki başlık
Python/pandalardaki ad

Tablo yapısı
veri.çerçeve, veri.tablo, tibble
Veri çerçevesi

Tek boyutlu değerler listesi
vektör
Pandalarda seriler veya saf Python'da liste

Çok seviyeli tablo dışı yapı
Liste
Sözlük (dict)

Aşağıda sözdizimindeki diğer bazı özelliklere ve farklılıklara bakacağız.

Kullanacağımız paketler hakkında birkaç söz

Öncelikle bu yazımda aşina olacağınız paketlerden biraz bahsedeceğim.

tidyverse

Resmi sitesi: tidyverse.org
Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş
Kütüphane tidyverse RStudio Kıdemli Araştırma Bilimcisi Hedley Wickham tarafından yazılmıştır. tidyverse veri işlemeyi basitleştiren etkileyici bir paket setinden oluşur; bunlardan 5'i CRAN deposundan ilk 10 indirme arasında yer alır.

Kütüphanenin çekirdeği aşağıdaki paketlerden oluşur: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. Bu paketlerin her biri belirli bir sorunu çözmeyi amaçlamaktadır. Örneğin dplyr Veri manipülasyonu için oluşturulmuş, tidyr Verileri düzgün bir forma getirmek, stringr dizelerle çalışmayı kolaylaştırır ve ggplot2 en popüler veri görselleştirme araçlarından biridir.

Avantajı tidyverse birçok yönden SQL sorgu diline benzeyen basit ve okunması kolay sözdizimidir.

veri tablosu

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçişResmi sitesi: r-datatable.com

Yazar data.table H2O.ai'den Matt Dole.

Kütüphanenin ilk sürümü 2006 yılında gerçekleşti.

Paketin sözdizimi şu şekildeki kadar kullanışlı değil: tidyverse ve R'deki klasik veri çerçevelerini daha çok anımsatır, ancak aynı zamanda işlevsellik açısından önemli ölçüde genişletilmiştir.

Bu paketteki tablodaki tüm değişiklikler köşeli parantez içinde açıklanmıştır ve eğer sözdizimini çevirirseniz data.table SQL'de şöyle bir şey elde edersiniz: data.table[ WHERE, SELECT, GROUP BY ]

Bu paketin gücü, büyük miktarda veriyi işleme hızıdır.

pandalar

Resmi sitesi: pandas.pydata.org Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

Kütüphanenin adı, çok boyutlu yapılandırılmış bilgi kümelerini tanımlamak için kullanılan ekonometrik terim olan “panel veri”den gelmektedir.

Yazar pandas Amerikalı Wes McKinney.

Python'da veri analizi söz konusu olduğunda eşit pandas HAYIR. Herhangi bir kaynaktan veri yüklemekten görselleştirmeye kadar verilerle her türlü manipülasyonu gerçekleştirmenize olanak tanıyan çok işlevli, üst düzey bir paket.

Ek paketlerin kurulumu

Bu makalede ele alınan paketler temel R ve Python dağıtımlarına dahil değildir. Küçük bir uyarı olsa da Anaconda dağıtımını yüklediyseniz ek olarak yükleyin pandas gerekli değil.

Paketleri R'ye yükleme

RStudio geliştirme ortamını en az bir kez açtıysanız, muhtemelen gerekli paketi R'ye nasıl kuracağınızı zaten biliyorsunuzdur. Paketleri kurmak için standart komutu kullanın. install.packages() doğrudan R'nin kendisinde çalıştırarak.

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

Kurulumdan sonra, çoğu durumda komutun kullanıldığı paketlerin bağlanması gerekir. library().

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

Python'da paketleri yükleme

Yani, eğer saf Python'unuz kuruluysa, o zaman pandas manuel olarak yüklemeniz gerekir. İşletim sisteminize bağlı olarak bir komut satırı veya terminal açın ve aşağıdaki komutu girin.

pip install pandas

Daha sonra Python'a dönüyoruz ve kurulu paketi komutla içe aktarıyoruz. import.

import pandas as pd

Veri yükleniyor

Veri madenciliği veri analizinin en önemli adımlarından biridir. İstenirse hem Python hem de R, size herhangi bir kaynaktan veri elde etmek için kapsamlı fırsatlar sunar: yerel dosyalar, İnternet'teki dosyalar, web siteleri, her türlü veri tabanı.

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

Makale boyunca çeşitli veri kümeleri kullanacağız:

  1. Google Analytics'ten iki indirme.
  2. Titanik Yolcu Veri Kümesi.

Bütün veriler benim elimde GitHub csv ve tsv dosyaları şeklinde. Bunları nereden talep edeceğiz?

R'ye veri yükleniyor: tidyverse, vroom, readr

Bir kitaplığa veri yüklemek için tidyverse İki paket var: vroom, readr. vroom daha modern, ancak gelecekte paketler birleştirilebilir.

Dan alıntı resmi belgeler vroom.

vroom vs okuyucu
serbest bırakılması ne işe yarar vroom anlamı için readr? Şimdilik iki paketin ayrı ayrı gelişmesine izin vermeyi planlıyoruz ancak gelecekte paketleri birleştirmemiz muhtemeldir. Vroom'un tembel okumasının bir dezavantajı, bazı veri sorunlarının önceden raporlanamamasıdır; dolayısıyla bunların en iyi şekilde nasıl birleştirileceği biraz düşünmeyi gerektirir.

vroom vs readr
Serbest bırakmak ne anlama geliyor? vroom için readr? Şu anda her iki paketi de ayrı ayrı geliştirmeyi planlıyoruz, ancak muhtemelen gelecekte bunları birleştireceğiz. Tembel okumanın dezavantajlarından biri vroom verilerle ilgili bazı sorunların önceden rapor edilememesi nedeniyle bunları en iyi şekilde nasıl birleştireceğinizi düşünmeniz gerekir.

Bu makalede her iki veri yükleme paketine de bakacağız:

R: vroom paketine veri yükleniyor

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

Verileri R:readr'a yükleme

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

Pakette vroom, csv / tsv veri formatından bağımsız olarak, yükleme aynı isimli işlev tarafından gerçekleştirilir vroom(), paketin içinde readr her format için farklı bir fonksiyon kullanıyoruz read_tsv() и read_csv().

R: data.table'a veri yükleniyor

В data.table veri yüklemek için bir fonksiyon var fread().

Verileri R: data.table paketine yükleme

# 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'a veri yükleniyor: pandalar

R paketleriyle karşılaştırırsak, bu durumda sözdizimi şuna en yakın olanıdır: pandas irade readrçünkü pandas her yerden veri talep edebilir ve bu pakette bir dizi işlev bulunur read_*().

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

Ve çeşitli formatlardaki verileri okumak için tasarlanmış diğer birçok fonksiyon. Ama bizim amaçlarımız açısından bu yeterli read_table() veya read_csv() argüman kullanma Eylül Sütun ayırıcıyı belirtmek için.

Python'a veri yükleniyor: 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")

Veri çerçeveleri oluşturma

Tablo Titanikyüklediğimiz bir alan var SeksYolcunun cinsiyet tanımlayıcısını saklayan.

Ancak verilerin yolcu cinsiyeti açısından daha uygun bir şekilde sunulması için cinsiyet kodu yerine adı kullanmalısınız.

Bunu yapmak için, sırasıyla yalnızca 2 sütunun (kod ve cinsiyet adı) ve 2 satırın olacağı bir tablo olan küçük bir dizin oluşturacağız.

R'de bir veri çerçevesi oluşturma: tidyverse, dplyr

Aşağıdaki kod örneğinde fonksiyonu kullanarak istenen veri çerçevesini oluşturuyoruz. tibble() .

R: dplyr'de veri çerçevesi oluşturma

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

R'de bir veri çerçevesi oluşturma: data.table

R'de bir veri çerçevesi oluşturma: data.table

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

Python'da bir veri çerçevesi oluşturma: pandalar

В pandas çerçeve oluşturma birkaç aşamada gerçekleştirilir, önce bir sözlük oluştururuz, ardından sözlüğü bir veri çerçevesine dönüştürürüz.

Python'da bir veri çerçevesi oluşturma: pandalar

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

Sütunların Seçilmesi

Çalıştığınız tablolar onlarca hatta yüzlerce sütun veri içerebilir. Ancak analiz yapmak için kural olarak kaynak tabloda bulunan tüm sütunlara ihtiyacınız yoktur.

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

Bu nedenle kaynak tabloyla yapacağınız ilk işlemlerden biri, onu gereksiz bilgilerden temizlemek ve bu bilgilerin kapladığı hafızayı boşaltmaktır.

R'de sütun seçme: tidyverse, dplyr

sözdizimi dplyr SQL sorgu diline çok benzer, eğer aşina iseniz bu pakette hızlı bir şekilde uzmanlaşacaksınız.

Sütunları seçmek için işlevi kullanın select().

Aşağıda, sütunları aşağıdaki yollarla seçebileceğiniz kod örnekleri verilmiştir:

  • Gerekli sütunların adlarının listelenmesi
  • Normal ifadeler kullanarak sütun adlarına bakın
  • Veri türüne veya sütunda yer alan verilerin başka herhangi bir özelliğine göre

R'de sütunları seçme: 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'de sütunları seçme: data.table

Aynı operasyonlar data.table biraz farklı şekilde yapılıyor, makalenin başında köşeli parantez içinde hangi argümanların olduğuna dair bir açıklama verdim. data.table.

DT[i,j,by]

Nerede:
ben - nerede, yani satırlara göre filtreleme
j - seç|güncelle|yap, yani Sütunları seçme ve dönüştürme
göre - veri gruplaması

R'de sütunları seçme: 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$")]

değişken .SD tüm sütunlara erişmenizi sağlar ve .SDcols İhtiyacınız olan sütunların adlarını filtrelemek için normal ifadeleri veya diğer işlevleri kullanarak gerekli sütunları filtreleyin.

Python'da sütun seçme, pandalar

Sütunları ada göre seçmek için pandas isimlerinin bir listesini vermeniz yeterlidir. Normal ifadeleri kullanarak sütunları ada göre seçmek veya hariç tutmak için işlevleri kullanmanız gerekir. drop() и filter()ve argüman eksen=1, bununla satırlar yerine sütunların işlenmesi gerektiğini belirtirsiniz.

Veri türüne göre bir alan seçmek için işlevi kullanın select_dtypes()ve tartışmalara dahil veya dışlamak Hangi alanları seçmeniz gerektiğine karşılık gelen veri türlerinin bir listesini iletin.

Python'da sütun seçme: 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'])

Satırları filtreleme

Örneğin kaynak tablo birkaç yıla ait veriler içerebilir ancak yalnızca geçen ayı analiz etmeniz gerekir. Yine fazladan satırlar veri işleme sürecini yavaşlatacak ve PC belleğini tıkayacaktır.

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

R'deki satırları filtreleme: tydyverse, dplyr

В dplyr fonksiyon satırları filtrelemek için kullanılır filter(). İlk argüman olarak bir veri çerçevesi alır, ardından filtreleme koşullarını listelersiniz.

Bir tabloyu filtrelemek için mantıksal ifadeler yazarken, bu durumda, sütun adlarını tırnak işaretleri olmadan ve tablo adını belirtmeden belirtin.

Filtrelemek için birden fazla mantıksal ifade kullanırken aşağıdaki operatörleri kullanın:

  • & veya virgül - mantıksal VE
  • | - mantıksal VEYA

R'deki satırları filtreleme: dplyr

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

R'deki satırları filtreleme: data.table

Zaten yukarıda da yazdığım gibi data.table veri dönüştürme sözdizimi köşeli parantez içine alınmıştır.

DT[i,j,by]

Nerede:
ben - nerede, yani satırlara göre filtreleme
j - seç|güncelle|yap, yani Sütunları seçme ve dönüştürme
göre - veri gruplaması

Argüman satırları filtrelemek için kullanılır i, köşeli parantez içinde ilk konuma sahiptir.

Sütunlara, tırnak işaretleri olmadan ve tablo adı belirtilmeden mantıksal ifadelerle erişilir.

Mantıksal ifadeler birbirleriyle aynı şekilde ilişkilidir. dplyr & ve | operatörleri aracılığıyla.

R'deki satırları filtreleme: data.table

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

Python'da dizeleri filtreleme: pandalar

Satırlara göre filtrele pandas filtrelemeye benzer data.tableve köşeli parantez içinde yapılır.

Bu durumda, sütunlara erişim mutlaka veri çerçevesinin adı belirtilerek gerçekleştirilir; daha sonra sütun adı köşeli parantez içindeki tırnak işaretleri içinde de belirtilebilir (örnek df['col_name']) veya noktadan sonra tırnak işaretleri olmadan (örnek df.col_name).

Bir veri çerçevesini birkaç koşula göre filtrelemeniz gerekiyorsa, her koşulun parantez içine alınması gerekir. Mantıksal koşullar operatörler tarafından birbirine bağlanır & и |.

Python'da dizeleri filtreleme: 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)]

Verilerin gruplandırılması ve toplanması

Veri analizinde en sık kullanılan işlemlerden biri gruplama ve birleştirmedir.

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

Bu işlemleri gerçekleştirmeye yönelik sözdizimi, incelediğimiz tüm paketlere dağılmıştır.

Bu durumda örnek olarak bir veri çerçevesini alacağız Titanikkabin sınıfına göre bilet sayısını ve ortalama maliyetini hesaplayabilirsiniz.

Verilerin R'de gruplandırılması ve toplanması: tidyverse, dplyr

В dplyr fonksiyon gruplama için kullanılır group_by()ve toplama için summarise(). Aslında, dplyr bütün bir işlevler ailesi var summarise_*(), ancak bu makalenin amacı temel söz dizimini karşılaştırmak olduğundan bu tür ormanlara girmeyeceğiz.

Temel toplama işlevleri:

  • sum() — toplam
  • min() / max() – minimum ve maksimum değer
  • mean() - ortalama
  • median() — medyan
  • length() - miktar

R: dplyr'de gruplama ve toplama

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

işlevde group_by() tabloyu ilk argüman olarak geçtik Titanikve ardından alanı gösterdi P sınıfı, buna göre tablomuzu gruplandıracağız. Operatör kullanılarak yapılan bu işlemin sonucu %>% işleve ilk argüman olarak iletildi summarise()ve 2 alan daha ekledi: yolcular и avg_price. İlk olarak, işlevi kullanarak length() bilet sayısını hesapladı ve ikincisinde işlevi kullanarak mean() ortalama bilet fiyatını aldı.

R: data.table'da verilerin gruplanması ve toplanması

В data.table argüman toplama için kullanılır j köşeli parantez içinde ikinci bir konuma sahip olan ve gruplandırma için by veya keybyüçüncü konuma sahip olanlardır.

Bu durumda toplama işlevlerinin listesi, burada açıklananlarla aynıdır. dplyr, Çünkü bunlar temel R sözdizimindeki işlevlerdir.

R: data.table'da gruplama ve toplama

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

Python'da verilerin gruplanması ve toplanması: pandalar

Gruplandırma pandas benzer dplyr, ancak toplama şuna benzemiyor: dplyr açık değil data.table.

Gruplamak için yöntemi kullanın groupby()veri çerçevesinin gruplandırılacağı sütunların bir listesini iletmeniz gerekir.

Toplama için yöntemi kullanabilirsiniz agg()bir sözlüğü kabul eder. Sözlük anahtarları toplama fonksiyonlarını uygulayacağınız sütunlardır, değerler ise toplama fonksiyonlarının adlarıdır.

Toplama işlevleri:

  • sum() — toplam
  • min() / max() – minimum ve maksimum değer
  • mean() - ortalama
  • median() — medyan
  • count() - miktar

Fonksiyon reset_index() aşağıdaki örnekte iç içe dizinleri sıfırlamak için kullanılır pandas veri toplama sonrasında varsayılan olarak kullanılır.

Sembol bir sonraki satıra geçmenizi sağlar.

Python'da gruplama ve toplama: pandalar

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

Tabloların dikey birleşimi

Aynı yapıdaki iki veya daha fazla tabloyu birleştirdiğiniz bir işlem. Yüklediğimiz veriler tablolar içeriyor ga_nov и ga_dec. Bu tablolar yapı olarak aynıdır; aynı sütunlara ve bu sütunlardaki veri türlerine sahiptir.

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

Bu, Kasım ve Aralık ayları için Google Analytics'ten yapılan bir yüklemedir; bu bölümde bu verileri tek bir tabloda birleştireceğiz.

R'de tabloları dikey olarak birleştirme: tidyverse, dplyr

В dplyr Fonksiyonu kullanarak 2 tabloyu tek tablo halinde birleştirebilirsiniz. bind_rows(), tabloları argüman olarak iletmek.

R'deki satırları filtreleme: dplyr

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

R: data.table'da tabloları dikey olarak birleştirme

Ayrıca karmaşık bir şey değil, hadi kullanalım rbind().

R'deki satırları filtreleme: data.table

## data.table
rbind(ga_nov, ga_dec)

Python'da tabloları dikey olarak birleştirmek: pandalar

В pandas fonksiyon tabloları birleştirmek için kullanılır concat(), bunları birleştirmek için çerçevelerin bir listesini iletmeniz gerekir.

Python'da dizeleri filtreleme: pandalar

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

Tabloların yatay birleşimi

İkinci tablodaki sütunların anahtarla birinci tabloya eklendiği bir işlem. Genellikle bir olgu tablosunu (örneğin satış verilerini içeren bir tablo) bazı referans verilerle (örneğin bir ürünün maliyeti) zenginleştirirken kullanılır.

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

Birkaç tür birleştirme vardır:

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

Daha önce yüklenen tabloda Titanik bir sütunumuz var Seks, yolcunun cinsiyet koduna karşılık gelir:

1 - kadın
2 - erkek

Ayrıca bir tablo oluşturduk - bir referans kitabı cinsiyet. Yolcuların cinsiyetine ilişkin verilerin daha uygun bir şekilde sunulması için cinsiyetin adını dizinden eklememiz gerekir. cinsiyet masaya Titanik.

R'de yatay tablo birleşimi: tidyverse, dplyr

В dplyr Yatay birleştirme için bir dizi işlev vardır:

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

Uygulamamda en sık kullanılanı left_join().

Yukarıda listelenen işlevler, ilk iki argüman olarak iki tabloyu birleştirir ve üçüncü argüman olarak by birleştirilecek sütunları belirtmeniz gerekir.

R'de yatay tablo birleşimi: dplyr

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

R: data.table'daki tabloların yatay birleşimi

В data.table İşlevi kullanarak tabloları anahtarla birleştirmeniz gerekir merge().

data.table'daki merge() işlevine ilişkin argümanlar

  • x, y — Birleştirilecek tablolar
  • by — Her iki tabloda da aynı ada sahipse birleştirme anahtarı olan sütun
  • by.x, by.y — Tablolarda farklı adlara sahiplerse birleştirilecek sütun adları
  • all, all.x, all.y — Birleştirme türü, all her iki tablodaki tüm satırları döndürür, all.x LEFT JOIN işlemine karşılık gelir (ilk tablonun tüm satırlarından ayrılır), all.y — şuna karşılık gelir: RIGHT JOIN işlemi (ikinci tablonun tüm satırlarını bırakacaktır).

R: data.table'daki tabloların yatay birleşimi

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

Python'da yatay tablo birleşimi: pandalar

yanı sıra data.tableIçinde pandas fonksiyon tabloları birleştirmek için kullanılır merge().

Pandalarda merge() fonksiyonunun argümanları

  • nasıl — Bağlantı türü: sol, sağ, dış, iç
  • on — Her iki tabloda da aynı ada sahipse anahtar olan sütun
  • left_on, right_on — Tablolarda farklı adlara sahiplerse, anahtar sütunların adları

Python'da yatay tablo birleşimi: pandalar

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

Temel pencere işlevleri ve hesaplanan sütunlar

Pencere işlevleri anlam bakımından toplama işlevlerine benzer ve ayrıca veri analizinde sıklıkla kullanılır. Ancak toplama işlevlerinden farklı olarak pencere işlevleri, giden veri çerçevesinin satır sayısını değiştirmez.

Verilerle çalışmak için hangi dili seçmelisiniz - R mi yoksa Python mu? İkisi birden! Pandalardan tidyverse'ye ve data.table'a ve geriye geçiş

Esasen, pencere fonksiyonunu kullanarak, gelen veri çerçevesini bazı kriterlere göre parçalara ayırıyoruz; bir alanın veya birkaç alanın değerine göre. Ve her pencerede aritmetik işlemler yapıyoruz. Bu işlemlerin sonucu her satırda döndürülecektir; tablodaki toplam satır sayısını değiştirmeden.

Mesela masayı ele alalım Titanik. Her biletin maliyetinin yüzde kaçının kabin sınıfında olduğunu hesaplayabiliyoruz.

Bunu yapmak için her satıra, o satırdaki biletin ait olduğu mevcut kabin sınıfına ait bir biletin toplam maliyetini almamız, ardından her bir biletin maliyetini aynı kabin sınıfındaki tüm biletlerin toplam maliyetine bölmemiz gerekir. .

R'deki pencere işlevleri: tidyverse, dplyr

Satır gruplandırmayı kullanmadan yeni sütunlar eklemek için dplyr işlev görür mutate().

Verileri alana göre gruplandırarak yukarıda açıklanan sorunu çözebilirsiniz. P sınıfı ve alanı yeni bir sütunda toplamak do. Daha sonra tablonun grubunu çözün ve alan değerlerini bölün do önceki adımda olanlara.

R'deki pencere işlevleri: dplyr

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

R'deki pencere işlevleri: data.table

Çözüm algoritması aynı kalır dplyrtabloyu alanlara göre pencerelere ayırmamız gerekiyor P sınıfı. Her satıra karşılık gelen grup tutarını yeni bir sütunda görüntüleyin ve her biletin maliyetinin kendi grubundaki payını hesapladığımız bir sütun ekleyin.

Yeni sütunlar eklemek için data.table operatör mevcut :=. Aşağıda paketi kullanarak bir sorunu çözme örneği verilmiştir data.table

R'deki pencere işlevleri: data.table

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

Python'da pencere işlevleri: pandalar

Yeni bir sütun eklemenin bir yolu pandas - işlevi kullanın assign(). Biletlerin maliyetini satırları gruplamadan kabin sınıfına göre özetlemek için bu işlevi kullanacağız. transform().

Aşağıda tabloya ekleyeceğimiz bir çözüm örneği verilmiştir Titanik aynı 2 sütun.

Python'da pencere işlevleri: pandalar

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

İşlevler ve yöntemler yazışma tablosu

Aşağıda, ele aldığımız paketlerdeki verilerle çeşitli işlemleri gerçekleştirme yöntemleri arasındaki yazışma tablosu bulunmaktadır.

Açıklama
tidyverse
veri tablosu
pandalar

Veri yükleniyor
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

Veri çerçeveleri oluşturma
tibble()
data.table()
dict() + from_dict()

Sütunların Seçilmesi
select()
tartışma j, köşeli parantez içinde ikinci konum
gerekli sütunların listesini köşeli parantez içinde iletiyoruz / drop() / filter() / select_dtypes()

Satırları filtreleme
filter()
tartışma i, köşeli parantez içindeki ilk konum
Filtreleme koşullarını köşeli parantez içinde listeliyoruz / filter()

Gruplama ve Toplama
group_by() + summarise()
argümanlar j + by
groupby() + agg()

Tabloların dikey birleşimi (UNION)
bind_rows()
rbind()
concat()

Tabloların yatay birleşimi (JOIN)
left_join() / *_join()
merge()
merge()

Temel pencere işlevleri ve hesaplanan sütunların eklenmesi
group_by() + mutate()
tartışma j operatörü kullanma := + argüman by
transform() + assign()

Sonuç

Belki de makalede veri işlemenin en uygun uygulamalarını tanımlamadım, bu nedenle yorumlardaki hatalarımı düzeltirseniz veya makalede verilen bilgileri R / Python'da verilerle çalışmaya yönelik diğer tekniklerle tamamlarsanız sevinirim.

Yukarıda da yazdığım gibi yazının amacı hangi dilin daha iyi olduğuna dair fikri empoze etmek değil, her iki dili de öğrenme veya gerekirse ikisi arasında geçiş yapma fırsatını basitleştirmekti.

Makaleyi beğendiyseniz, kanalıma yeni aboneler kazandırmaktan mutluluk duyacağım. Youtube и telgraf kanallar.

Опрос

Çalışmalarınızda aşağıdaki paketlerden hangisini kullanıyorsunuz?

Yorumlara tercihinizin nedenini yazabilirsiniz.

Ankete sadece kayıtlı kullanıcılar katılabilir. Giriş yapLütfen.

Hangi veri işleme paketini kullanıyorsunuz (birkaç seçenek belirleyebilirsiniz)

  • %45,2düzenlievren19

  • %33,3veri.table14

  • %54,8pandalar23

42 kullanıcı oy kullandı. 9 kişi çekimser kaldı.

Kaynak: habr.com

Yorum ekle