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 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.
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
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
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
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
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.
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.
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.