Dplyr Eğitimi: Örneklerle R'de Verileri Birleştirme ve Birleştirme

Veri Analizine Giriş

Veri analizi üç bölüme ayrılabilir:

  • Çıkarma: Öncelikle birçok kaynaktan veri toplayıp birleştirmemiz gerekiyor.
  • Dönüştürmek: Bu adım veri manipülasyonunu içerir. Tüm veri kaynaklarını birleştirdikten sonra verileri temizlemeye başlayabiliriz.
  • Görselleştirin: Son hamle, düzensizliği kontrol etmek için verilerimizi görselleştirmektir.
Veri Analizi Süreci
Veri Analizi Süreci

Veri bilimcilerin karşılaştığı en önemli zorluklardan biri veri manipülasyonudur. Veriler hiçbir zaman istenilen formatta mevcut olmaz. Veri bilimcilerin zamanlarının en az yarısını verileri temizlemeye ve değiştirmeye harcamaları gerekiyor. Bu, işteki en kritik görevlerden biridir. Veri işleme süreci tam, kesin ve titiz değilse model doğru şekilde çalışmayacaktır.

R Dplyr

R, veri dönüşümüne yardımcı olmak için dplyr adında bir kütüphaneye sahiptir. Dplyr kütüphanesi temel olarak verileri işlemek için dört işlev ve verileri temizlemek için beş fiil etrafında oluşturulmuştur. Bundan sonra verileri analiz etmek ve görselleştirmek için ggplot kütüphanesini kullanabiliriz.

Bir dosyayı işlemek için dplyr kütüphanesini nasıl kullanacağımızı öğreneceğiz. Veri çerçevesi.

Verileri R Dplyr ile Birleştirme

dplyr, veri kümelerini birleştirmenin güzel ve kullanışlı bir yolunu sağlar. Birçok girdi verisi kaynağımız olabilir ve bir noktada bunları birleştirmemiz gerekir. Dplyr ile bir birleştirme, orijinal veri kümesinin sağına değişkenler ekler.

Dplyr Katıldı

Aşağıda dplyr'de iki veri kümesini birleştirmek için kullanılan dört önemli birleştirme türü bulunmaktadır:

işlev Nesnel Argümanlar Birden fazla tuş
sol yönden katılım() İki veri kümesini birleştirin. Tüm gözlemleri orijin tablosundan tutun veri, kaynak, varış yeri, göre = “ID” başlangıç ​​noktası, varış yeri, göre = c(“ID”, “ID2”)
right_join() İki veri kümesini birleştirin. Hedef tablodaki tüm gözlemleri tut veri, kaynak, varış yeri, göre = “ID” başlangıç ​​noktası, varış yeri, göre = c(“ID”, “ID2”)
iç birleşim() İki veri kümesini birleştirin. Eşleşmeyen tüm satırları hariç tutar veri, kaynak, varış yeri, göre = “ID” başlangıç ​​noktası, varış yeri, göre = c(“ID”, “ID2”)
tam_join() İki veri kümesini birleştirin. Tüm gözlemleri tutar veri, kaynak, varış yeri, göre = “ID” başlangıç ​​noktası, varış yeri, göre = c(“ID”, “ID2”)

Kolay bir örnek üzerinden tüm birleştirme türlerini inceleyeceğiz.

Öncelikle iki adet veri seti oluşturuyoruz. Tablo 1, ID ve y olmak üzere iki değişken içerirken Tablo 2, ID ve z'yi toplar. Her durumda, bir şeye sahip olmamız gerekir. anahtar çifti değişken. Bizim durumumuzda kimlik bizim anahtar değişken. İşlev, her iki tabloda da aynı değerleri arayacak ve dönen değerleri tablo 1'in sağına bağlayacaktır.

Verileri R Dplyr ile Birleştirme

library(dplyr)
df_primary <- tribble(
  ~ID, ~y,
   "A", 5,
   "B", 5,
   "C", 8,
   "D", 0,
  "F", 9)
df_secondary <- tribble(
  ~ID, ~z,
   "A", 30,
   "B", 21,
   "C", 22,
   "D", 25,
   "E", 29)

Dplyr left_join()

İki veri kümesini birleştirmenin en yaygın yolu left_join() işlevini kullanmaktır. Aşağıdaki resimde anahtar çiftinin her iki veri kümesindeki A, B, C ve D satırlarıyla mükemmel şekilde eşleştiğini görebiliriz. Ancak geriye E ve F kaldı. Bu iki gözlemi nasıl ele alacağız? left_join() ile tüm değişkenleri orijinal tablodaki tutacağız ve hedef tabloda anahtar eşleşmesi olmayan değişkenleri dikkate almayacağız. Örneğimizde E değişkeni tablo 1'de mevcut değildir. Bu nedenle satır bırakılacaktır. F değişkeni orijin tablosundan gelir; left_join()'dan sonra tutulacak ve z sütununda NA değerini döndürecektir. Aşağıdaki şekil left_join() ile ne olacağını göstermektedir.

dplyr left_join() örneği

dplyr left_join() örneği

left_join(df_primary, df_secondary, by ='ID')

Çıktı:

## 
# A tibble: 5 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>		
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     F     9    NA

Dplyr right_join()

right_join() işlevi tam olarak left_join() gibi çalışır. Tek fark satırın düşmesidir. Hedef veri çerçevesinde mevcut olan E değeri yeni tabloda mevcuttur ve y sütunu için NA değerini alır.

dplyr right_join() örneği

dplyr right_join() örneği

right_join(df_primary, df_secondary, by = 'ID')

Çıktı:

##
# A tibble: 5 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     E    NA    29

Dplyr inner_join()

İki veri kümesinin eşleşmeyeceğinden %100 emin olduğumuzda geri dönmeyi düşünebiliriz bir tek mevcut satırlar her ikisi de veri kümesi. Bu, temiz bir veri kümesine ihtiyacımız olduğunda veya eksik değerleri ortalama veya medyanla ilişkilendirmek istemediğimizde mümkündür.

inner_join() yardıma geliyor. Bu işlev eşleşmeyen satırları hariç tutar.

dplyr inner_join() örneği

dplyr inner_join() örneği

inner_join(df_primary, df_secondary, by ='ID')

Çıktı:

## 
# A tibble: 4 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25

Dplyr full_join()

Son olarak, full_join() işlevi tüm gözlemleri tutar ve eksik değerleri NA ile değiştirir.

dplyr full_join() örneği

dplyr full_join() örneği

full_join(df_primary, df_secondary, by = 'ID')

Çıktı:

## # A tibble: 6 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     F     9    NA
## 6     E    NA    29

Çoklu Anahtar çiftleri

Son olarak, veri setimizde birden fazla anahtar olabilir. Müşterinin satın aldığı yılların veya ürünlerin bir listesinin bulunduğu aşağıdaki veri setini ele alalım.

R'de Çoklu Anahtar çiftleri

Her iki tabloyu birleştirmeye çalışırsak, R bir hata atar. Durumu düzeltmek için iki anahtar çifti değişkeni geçirebiliriz. Yani, her iki veri kümesinde de görünen ID ve yıl. table1 ve table 2'yi birleştirmek için aşağıdaki kodu kullanabiliriz

df_primary <- tribble(
  ~ID, ~year, ~items,
  "A", 2015,3,
  "A", 2016,7,
  "A", 2017,6,
  "B", 2015,4,
  "B", 2016,8,
  "B", 2017,7,
  "C", 2015,4,
  "C", 2016,6,
  "C", 2017,6)
df_secondary <- tribble(
  ~ID, ~year, ~prices,
  "A", 2015,9,
  "A", 2016,8,
  "A", 2017,12,
  "B", 2015,13,
  "B", 2016,14,
  "B", 2017,6,
  "C", 2015,15,
  "C", 2016,15,
  "C", 2017,13)
left_join(df_primary, df_secondary, by = c('ID', 'year'))

Çıktı:

## # A tibble: 9 x 4
##      ID  year items prices
##   <chr> <dbl> <dbl>  <dbl>
## 1     A  2015     3      9
## 2     A  2016     7      8
## 3     A  2017     6     12
## 4     B  2015     4     13
## 5     B  2016     8     14
## 6     B  2017     7      6
## 7     C  2015     4     15
## 8     C  2016     6     15
## 9     C  2017     6     13

R'de Veri Temizleme İşlevleri

Verileri düzenlemek (temizlemek) için dört önemli işlev şunlardır:

işlev Nesnel Argümanlar
toplamak() Verileri genişten uzuna dönüştürün (veri, anahtar, değer, na.rm = YANLIŞ)
yaymak() Verileri uzundan genişe dönüştürün (veri, anahtar, değer)
ayırmak() Bir değişkeni ikiye bölün (veri, sütun, içine, sep= “”, kaldır = DOĞRU)
birim() İki değişkeni bir değişkende birleştirin (veri, sütun, kons, sep= “”, kaldır = DOĞRU)

Tidyr kütüphanesini kullanıyoruz. Bu kütüphane, verileri işlemek, temizlemek ve görselleştirmek için kütüphanenin koleksiyonuna aittir. R'yi anaconda ile kurarsak kütüphane zaten kuruludur. Kütüphaneyi burada bulabiliriz. https://anaconda.org/r/r-tidyr.

Henüz kurulu değilse, tidyr'i kurmak için aşağıdaki komutu girin:

install tidyr : install.packages("tidyr")

toplamak()

Collect() fonksiyonunun amacı, verileri genişten uzuna dönüştürmektir.

Sözdizimi

gather(data, key, value, na.rm = FALSE)
Arguments:
-data: The data frame used to reshape the dataset 
-key: Name of the new column created
-value: Select the columns used to fill the key column
-na.rm: Remove missing values. FALSE by default

Örnek E-posta

Aşağıda genişten uzuna yeniden şekillendirme konseptini görselleştirebiliyoruz. Çeyrek değişkenlerin satırlarıyla doldurulmuş, büyüme adında tek bir sütun oluşturmak istiyoruz.

R'deki toplama() işlevi örneği

library(tidyr)
# Create a messy dataset
messy <- data.frame(
  country = c("A", "B", "C"),
  q1_2017 = c(0.03, 0.05, 0.01),
  q2_2017 = c(0.05, 0.07, 0.02),
  q3_2017 = c(0.04, 0.05, 0.01),
  q4_2017 = c(0.03, 0.02, 0.04))
messy

Çıktı:

##   country q1_2017 q2_2017 q3_2017 q4_2017
## 1       A    0.03    0.05    0.04    0.03
## 2       B    0.05    0.07    0.05    0.02
## 3       C    0.01    0.02    0.01    0.04
# Reshape the data
tidier <-messy %>%
gather(quarter, growth, q1_2017:q4_2017)
tidier

Çıktı:

##    country quarter growth
## 1        A q1_2017   0.03
## 2        B q1_2017   0.05
## 3        C q1_2017   0.01
## 4        A q2_2017   0.05
## 5        B q2_2017   0.07
## 6        C q2_2017   0.02
## 7        A q3_2017   0.04
## 8        B q3_2017   0.05
## 9        C q3_2017   0.01
## 10       A q4_2017   0.03
## 11       B q4_2017   0.02
## 12       C q4_2017   0.04

Collect() fonksiyonunda, orijinal veri setimizin tek bir grup değişkeni olduğundan çeyrek ve büyüme olmak üzere iki yeni değişken oluşturuyoruz: yani ülke ve anahtar-değer çiftleri.

yaymak()

spread() işlevi toplamanın tersini yapar.

Sözdizimi

spread(data, key, value)
arguments: 
data: The data frame used to reshape the dataset
key: Column to reshape long to wide
value: Rows used to fill the new column

Örnek E-posta

Spread() ile daha düzenli veri kümesini dağınık hale getirerek yeniden şekillendirebiliriz.

# Reshape the data
messy_1 <- tidier %>%
  spread(quarter, growth) 
messy_1

Çıktı:

##   country q1_2017 q2_2017 q3_2017 q4_2017
## 1       A    0.03    0.05    0.04    0.03
## 2       B    0.05    0.07    0.05    0.02
## 3       C    0.01    0.02    0.01    0.04

ayırmak()

Different() işlevi, bir sütunu ayırıcıya göre ikiye böler. Bu işlev, değişkenin tarih olduğu bazı durumlarda faydalıdır. Analizimiz ay ve yıla odaklanmayı gerektirebilir ve sütunu iki yeni değişkene ayırmak istiyoruz.

Sözdizimi

separate(data, col, into, sep= "", remove = TRUE)
arguments:
-data: The data frame used to reshape the dataset 
-col: The column to split
-into: The name of the new variables
-sep: Indicates the symbol used that separates the variable, i.e.:  "-", "_", "&"
-remove: Remove the old column. By default sets to TRUE.

Örnek E-posta

Different() işlevini uygulayarak daha derli toplu veri kümesindeki çeyreği yıldan bölebiliriz.

separate_tidier <-tidier %>%
separate(quarter, c("Qrt", "year"), sep ="_")
head(separate_tidier)

Çıktı:

##   country Qrt year growth
## 1       A  q1 2017   0.03
## 2       B  q1 2017   0.05
## 3       C  q1 2017   0.01
## 4       A  q2 2017   0.05
## 5       B  q2 2017   0.07
## 6       C  q2 2017   0.02

birleş()

Unite() işlevi iki sütunu bir sütunda birleştirir.

Sözdizimi

unit(data, col, conc ,sep= "", remove = TRUE)
arguments:
-data: The data frame used to reshape the dataset 
-col: Name of the new column
-conc: Name of the columns to concatenate
-sep: Indicates the symbol used that unites the variable, i.e:  "-", "_", "&"
-remove: Remove the old columns. By default, sets to TRUE

Örnek E-posta

Yukarıdaki örnekte çeyreği yıldan ayırdık. Peki ya bunları birleştirmek istersek? Aşağıdaki kodu kullanırız:

unit_tidier <- separate_tidier %>%
  unite(Quarter, Qrt, year, sep ="_")
head(unit_tidier)

Çıktı:

##   country Quarter growth
## 1       A q1_2017   0.03
## 2       B q1_2017   0.05
## 3       C q1_2017   0.01
## 4       A q2_2017   0.05
## 5       B q2_2017   0.07
## 6       C q2_2017   0.02

ÖZET

  • Veri analizi Üç bölüme ayrılabilir: Çıkarma, Dönüştürme ve Görselleştirme.
  • R, veri dönüşümüne yardımcı olmak için dplyr adında bir kütüphaneye sahiptir. Dplyr kütüphanesi temel olarak verileri işlemek için dört işlev ve verileri temizlemek için beş fiil etrafında oluşturulmuştur.
  • dplyr, veri kümelerini birleştirmenin güzel ve kullanışlı bir yolunu sağlar. Dplyr ile bir birleştirme, orijinal veri kümesinin sağına değişkenler ekler.
  • Dplyr'in güzelliği, aşağıdakine benzer dört tür birleştirme işlemini gerçekleştirmesidir: SQL:
    • sol yönden katılım() – İki veri kümesini birleştirmek ve tüm gözlemleri orijin tablosundan tutmak.
    • right_join() – İki veri kümesini birleştirmek ve tüm gözlemleri hedef tablodan tutmak.
    • iç birleşim() – İki veri kümesini birleştirmek ve eşleşmeyen tüm satırları hariç tutmak için.
    • tam_join() – İki veri kümesini birleştirmek ve tüm gözlemleri saklamak.
  • tidyr Kütüphanesini kullanarak aşağıdaki fonksiyonları kullanarak bir veri setini dönüştürebilirsiniz:
    • toplamak(): Verileri genişten uzuna dönüştürün.
    • yaymak(): Verileri uzundan genişe dönüştürün.
    • ayırmak(): Bir değişkeni ikiye bölün.
    • birim(): İki değişkeni bir değişkende birleştirin.