Dplyr ट्यूटोरियल: उदाहरणों के साथ R में डेटा मर्ज और जॉइन करें

डेटा विश्लेषण का परिचय

डेटा विश्लेषण को तीन भागों में विभाजित किया जा सकता है:

  • निष्कर्षणसबसे पहले, हमें कई स्रोतों से डेटा एकत्र करना होगा और उन्हें संयोजित करना होगा।
  • बदालना: इस चरण में डेटा हेरफेर शामिल है। एक बार जब हम डेटा के सभी स्रोतों को समेकित कर लेते हैं, तो हम डेटा को साफ करना शुरू कर सकते हैं।
  • कल्पनाअंतिम कदम अनियमितता की जांच के लिए हमारे डेटा को दृश्यमान करना है।
डेटा विश्लेषण प्रक्रिया
डेटा विश्लेषण प्रक्रिया

डेटा वैज्ञानिकों के सामने सबसे बड़ी चुनौतियों में से एक डेटा हेरफेर है। डेटा कभी भी वांछित प्रारूप में उपलब्ध नहीं होता है। डेटा वैज्ञानिकों को अपना कम से कम आधा समय डेटा को साफ करने और उसमें हेरफेर करने में लगाना पड़ता है। यह नौकरी में सबसे महत्वपूर्ण कामों में से एक है। यदि डेटा हेरफेर प्रक्रिया पूरी, सटीक और कठोर नहीं है, तो मॉडल सही ढंग से काम नहीं करेगा।

आर डीप्लिर

R में डेटा ट्रांसफ़ॉर्मेशन में मदद करने के लिए dplyr नामक लाइब्रेरी है। dplyr लाइब्रेरी मूल रूप से डेटा में हेरफेर करने के लिए चार फ़ंक्शन और डेटा को साफ़ करने के लिए पाँच क्रियाओं के आसपास बनाई गई है। उसके बाद, हम डेटा का विश्लेषण और विज़ुअलाइज़ करने के लिए ggplot लाइब्रेरी का उपयोग कर सकते हैं।

हम सीखेंगे कि dplyr लाइब्रेरी का उपयोग करके किसी फ़ाइल में हेरफेर कैसे करें। डेटा ढांचा.

R Dplyr के साथ डेटा मर्ज करें

dplyr डेटासेट को संयोजित करने का एक अच्छा और सुविधाजनक तरीका प्रदान करता है। हमारे पास इनपुट डेटा के कई स्रोत हो सकते हैं, और किसी बिंदु पर, हमें उन्हें संयोजित करने की आवश्यकता होती है। dplyr के साथ जुड़ने से मूल डेटासेट के दाईं ओर चर जुड़ जाते हैं।

Dplyr जॉइन्स

दो डेटासेट को मर्ज करने के लिए dplyr में उपयोग किए जाने वाले चार महत्वपूर्ण प्रकार के जॉइन निम्नलिखित हैं:

समारोह उद्देश्य तर्क एकाधिक कुंजी
बाँया जोड़() दो डेटासेट मर्ज करें। मूल तालिका से सभी अवलोकन रखें डेटा, मूल, गंतव्य, द्वारा = “आईडी” मूल, गंतव्य, द्वारा = c(“ID”, “ID2”)
दायाँ_जुड़ना() दो डेटासेट मर्ज करें। गंतव्य तालिका से सभी अवलोकन रखें डेटा, मूल, गंतव्य, द्वारा = “आईडी” मूल, गंतव्य, द्वारा = c(“ID”, “ID2”)
आंतरिक रूप से जुड़ा() दो डेटासेट मर्ज करें। सभी बेमेल पंक्तियों को बाहर करें डेटा, मूल, गंतव्य, द्वारा = “आईडी” मूल, गंतव्य, द्वारा = c(“ID”, “ID2”)
पूर्ण_ज्वाइन() दो डेटासेट मर्ज करें। सभी अवलोकनों को बनाए रखें डेटा, मूल, गंतव्य, द्वारा = “आईडी” मूल, गंतव्य, द्वारा = c(“ID”, “ID2”)

हम एक आसान उदाहरण के माध्यम से सभी जॉइन प्रकारों का अध्ययन करेंगे।

सबसे पहले, हम दो डेटासेट बनाते हैं। तालिका 1 में दो चर, ID और y शामिल हैं, जबकि तालिका 2 में ID और z एकत्र किए गए हैं। प्रत्येक स्थिति में, हमें एक की आवश्यकता है कुंजी-जोड़ी चर। हमारे मामले में, आईडी हमारा है कुंजी चर। फ़ंक्शन दोनों तालिकाओं में समान मानों की तलाश करेगा और लौटाए गए मानों को तालिका 1 के दाईं ओर बाँध देगा।

R Dplyr के साथ डेटा मर्ज करें

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()

दो डेटासेट को मर्ज करने का सबसे आम तरीका left_join() फ़ंक्शन का उपयोग करना है। हम नीचे दिए गए चित्र से देख सकते हैं कि कुंजी-युग्म दोनों डेटासेट से पंक्तियों A, B, C और D से पूरी तरह मेल खाता है। हालाँकि, E और F बचे हुए हैं। हम इन दो अवलोकनों का कैसे इलाज करते हैं? left_join() के साथ, हम मूल तालिका में सभी चर रखेंगे और उन चरों पर विचार नहीं करेंगे जिनके पास गंतव्य तालिका में कुंजी-युग्मित नहीं है। हमारे उदाहरण में, चर E तालिका 1 में मौजूद नहीं है। इसलिए, पंक्ति को हटा दिया जाएगा। चर F मूल तालिका से आता है; इसे left_join() के बाद रखा जाएगा और कॉलम z में NA लौटाएगा। नीचे दिया गया चित्र पुन: प्रस्तुत करता है कि left_join() के साथ क्या होगा।

dplyr left_join() का उदाहरण

dplyr left_join() का उदाहरण

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

आउटपुट:

## 
# 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() फ़ंक्शन बिल्कुल left_join() की तरह काम करता है। एकमात्र अंतर यह है कि पंक्ति हटा दी गई है। गंतव्य डेटा फ़्रेम में उपलब्ध मान E, नई तालिका में मौजूद है और कॉलम y के लिए मान NA लेता है।

dplyr right_join() का उदाहरण

dplyr right_join() का उदाहरण

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

आउटपुट:

##
# 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 इनर_जॉइन()

जब हमें 100% यकीन हो जाए कि दोनों डेटासेट मेल नहीं खाएंगे, तो हम वापसी पर विचार कर सकते हैं केवल में मौजूद पंक्तियाँ के छात्रों डेटासेट। यह तब संभव है जब हमें एक साफ डेटासेट की आवश्यकता होती है या जब हम माध्य या माध्यिका के साथ लुप्त मानों को आरोपित नहीं करना चाहते हैं।

inner_join() मदद के लिए आता है। यह फ़ंक्शन बेमेल पंक्तियों को बाहर कर देता है।

dplyr inner_join() का उदाहरण

dplyr inner_join() का उदाहरण

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

आउटपुट:

## 
# 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() फ़ंक्शन सभी अवलोकनों को रखता है और लुप्त मानों को NA से प्रतिस्थापित करता है।

dplyr full_join() का उदाहरण

dplyr full_join() का उदाहरण

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

आउटपुट:

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

एकाधिक कुंजी जोड़े

अंतिम लेकिन महत्वपूर्ण बात यह है कि हमारे डेटासेट में कई कुंजियाँ हो सकती हैं। निम्नलिखित डेटासेट पर विचार करें जहाँ हमारे पास वर्ष या ग्राहक द्वारा खरीदे गए उत्पादों की सूची है।

आर में एकाधिक कुंजी जोड़े

यदि हम दोनों तालिकाओं को मर्ज करने का प्रयास करते हैं, तो R एक त्रुटि फेंकता है। स्थिति को सुधारने के लिए, हम दो कुंजी-युग्म चर पास कर सकते हैं। यानी, आईडी और वर्ष जो दोनों डेटासेट में दिखाई देते हैं। हम टेबल 1 और टेबल 2 को मर्ज करने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं

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'))

आउटपुट:

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

आर में डेटा क्लीनिंग फ़ंक्शन

डेटा को साफ-सुथरा रखने के लिए चार महत्वपूर्ण कार्य निम्नलिखित हैं:

समारोह उद्देश्य तर्क
इकट्ठा करना() डेटा को चौड़े से लंबे में बदलें (डेटा, कुंजी, मान, na.rm = गलत)
फैलाना() डेटा को लंबे से चौड़े में बदलें (डेटा, कुंजी, मान)
अलग करना() एक चर को दो भागों में विभाजित करें (डेटा, कॉलम, इनटू, सेप = “”, हटाएँ = सत्य)
इकाई() दो चरों को एक में इकाई करें (डेटा, कॉल, सांद्र, सेप = “”, हटाएँ = सत्य)

हम tidyr लाइब्रेरी का उपयोग करते हैं। यह लाइब्रेरी डेटा को मैनिपुलेट, क्लीन और विज़ुअलाइज़ करने के लिए लाइब्रेरी के संग्रह से संबंधित है। यदि हम एनाकोंडा के साथ R इंस्टॉल करते हैं, तो लाइब्रेरी पहले से इंस्टॉल हो जाती है। हम लाइब्रेरी यहाँ पा सकते हैं, https://anaconda.org/r/r-tidyr.

यदि यह पहले से स्थापित नहीं है, तो tidyr को स्थापित करने के लिए निम्नलिखित कमांड दर्ज करें:

install tidyr : install.packages("tidyr")

इकट्ठा करना()

gather() फ़ंक्शन का उद्देश्य डेटा को वाइड से लॉन्ग में बदलना है।

वाक्य - विन्यास

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

उदाहरण

नीचे, हम चौड़े से लंबे आकार में बदलाव की अवधारणा को देख सकते हैं। हम ग्रोथ नामक एक एकल कॉलम बनाना चाहते हैं, जिसे क्वार्टर वैरिएबल की पंक्तियों से भरा जाएगा।

R में gather() फ़ंक्शन का उदाहरण

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

आउटपुट:

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

आउटपुट:

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

gather() फ़ंक्शन में, हम दो नए चर quarter और growth बनाते हैं क्योंकि हमारे मूल डेटासेट में एक समूह चर है: अर्थात country और कुंजी-मान युग्म।

फैलाना()

spread() फ़ंक्शन gather के विपरीत कार्य करता है।

वाक्य - विन्यास

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

उदाहरण

हम spread() की सहायता से सुव्यवस्थित डेटासेट को पुनः अव्यवस्थित बना सकते हैं

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

आउटपुट:

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

अलग करना()

सेपरेटर के अनुसार कॉलम को दो भागों में विभाजित करने के लिए सेपरेट() फ़ंक्शन का इस्तेमाल किया जाता है। यह फ़ंक्शन कुछ स्थितियों में मददगार होता है, जहाँ चर एक तिथि है। हमारे विश्लेषण में महीने और वर्ष पर ध्यान केंद्रित करने की आवश्यकता हो सकती है और हम कॉलम को दो नए चर में विभाजित करना चाहते हैं।

वाक्य - विन्यास

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.

उदाहरण

हम separate() फ़ंक्शन को लागू करके वर्ष से तिमाही को अधिक सुव्यवस्थित डेटासेट में विभाजित कर सकते हैं।

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

आउटपुट:

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

एकजुट()

unite() फ़ंक्शन दो कॉलमों को एक में जोड़ता है।

वाक्य - विन्यास

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

उदाहरण

ऊपर दिए गए उदाहरण में, हमने तिमाही को वर्ष से अलग किया है। अगर हम उन्हें मर्ज करना चाहें तो क्या होगा। हम निम्नलिखित कोड का उपयोग करते हैं:

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

आउटपुट:

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

सारांश

  • डेटा विश्लेषण इसे तीन भागों में विभाजित किया जा सकता है: निष्कर्षण, रूपांतरण, और दृश्यीकरण।
  • डेटा ट्रांसफ़ॉर्मेशन में मदद के लिए R में dplyr नामक लाइब्रेरी है। dplyr लाइब्रेरी मूल रूप से डेटा में हेरफेर करने के लिए चार फ़ंक्शन और डेटा को साफ़ करने के लिए पाँच क्रियाओं के इर्द-गिर्द बनाई गई है।
  • dplyr डेटासेट को संयोजित करने का एक अच्छा और सुविधाजनक तरीका प्रदान करता है। dplyr के साथ जुड़ने से मूल डेटासेट के दाईं ओर चर जुड़ जाते हैं।
  • dplyr की खूबसूरती यह है कि यह चार प्रकार के जोड़ों को संभालता है एसक्यूएल:
    • बाँया जोड़() - दो डेटासेट को मर्ज करना और मूल तालिका से सभी अवलोकनों को रखना।
    • दायाँ_जुड़ना() - दो डेटासेट को मर्ज करना और गंतव्य तालिका से सभी अवलोकनों को रखना।
    • आंतरिक रूप से जुड़ा() - दो डेटासेट को मर्ज करने और सभी बेमेल पंक्तियों को बाहर करने के लिए।
    • पूर्ण_ज्वाइन() – दो डेटासेटों को मर्ज करना और सभी अवलोकनों को रखना।
  • tidyr लाइब्रेरी का उपयोग करके, आप निम्नलिखित फ़ंक्शन का उपयोग करके डेटासेट को रूपांतरित कर सकते हैं:
    • इकट्ठा करना(): डेटा को चौड़े से लंबे में बदलें।
    • फैलाना(): डेटा को लंबे से चौड़े में बदलें।
    • अलग करना(): एक चर को दो भागों में विभाजित करें.
    • इकाई()दो चरों को एक में इकाई करें।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: