आर सेलेक्ट(), फ़िल्टर(), अरेंज(), पाइपलाइन उदाहरण के साथ

dplyr नामक लाइब्रेरी में डेटासेट के अंदर नेविगेट करने के लिए मूल्यवान क्रियाएँ हैं। इस ट्यूटोरियल के माध्यम से, आप यात्रा समय डेटासेट का उपयोग करेंगे। डेटासेट एक ड्राइवर द्वारा अपने घर और कार्यस्थल के बीच की यात्रा के बारे में जानकारी एकत्र करता है। डेटासेट में चौदह चर हैं, जिनमें शामिल हैं:

  • सप्ताह का दिन: सप्ताह के उस दिन की पहचान करें जिस दिन ड्राइवर अपनी कार का उपयोग करता है
  • दूरी: यात्रा की कुल दूरी
  • अधिकतम गति: यात्रा की अधिकतम गति
  • कुल समय: यात्रा की लंबाई मिनटों में

डेटासेट में लगभग 200 अवलोकन हैं, और सवारी के बीच हुआ Monday शुक्रवार को।

सबसे पहले, आपको यह करना होगा:

  • डेटासेट लोड करें
  • डेटा की संरचना की जाँच करें.

dplyr के साथ एक उपयोगी विशेषता झलक() फ़ंक्शन है। यह str() पर एक सुधार है। हम डेटासेट की संरचना को देखने और यह तय करने के लिए झलक() का उपयोग कर सकते हैं कि किस हेरफेर की आवश्यकता है।

library(dplyr) 
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"
df <- read.csv(PATH)
glimpse(df)

आउटपुट:

## Observations: 205
## Variables: 14
## $ X              <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
## $ Date           <fctr> 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20...
## $ StartTime      <fctr> 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3...
## $ DayOfWeek      <fctr> Friday, Friday, Wednesday, Wednesday, Tuesday,...
## $ GoingTo        <fctr> Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS...
## $ Distance       <dbl> 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37...
## $ MaxSpeed       <dbl> 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2...
## $ AvgSpeed       <dbl> 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,...
## $ AvgMovingSpeed <dbl> 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,...
## $ FuelEconomy    <fctr> , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89...
## $ TotalTime      <dbl> 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,...
## $ MovingTime     <dbl> 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,...
## $ Take407All     <fctr> No, No, No, No, No, No, No, No, No, No, No, No...
## $ Comments       <fctr> , , , , , , , , , , , , , , , Put snow tires o...	

यह स्पष्ट है कि वेरिएबल Comments को और अधिक निदान की आवश्यकता है। Comments वेरिएबल के पहले अवलोकन में केवल लुप्त मान हैं।

sum(df$Comments =="")

कोड स्पष्टीकरण

  • sum(df$Comments ==””): df से टिप्पणियों के कॉलम में “” के बराबर टिप्पणियों का योग करें

आउटपुट:

## [1] 181

चुनते हैं()

हम select() क्रिया से शुरू करेंगे। हमें सभी चरों की आवश्यकता नहीं है, और एक अच्छा अभ्यास केवल उन चरों का चयन करना है जो आपको प्रासंगिक लगते हैं।

हमारे पास 181 अवलोकन गायब हैं, जो डेटासेट का लगभग 90 प्रतिशत है। यदि आप उन्हें बाहर करने का निर्णय लेते हैं, तो आप विश्लेषण जारी नहीं रख पाएंगे।

दूसरी संभावना यह है कि select() क्रिया के साथ Comment चर को हटा दिया जाए।

हम select() के साथ अलग-अलग तरीकों से वेरिएबल्स का चयन कर सकते हैं। ध्यान दें कि, पहला तर्क डेटासेट है।

- `select(df, A, B ,C)`: Select the variables A, B and C from df dataset.
- `select(df, A:C)`: Select all variables from A to C from df dataset.
- `select(df, -C)`: Exclude C from the dataset from df dataset.	

आप Comments चर को बाहर करने के लिए तीसरे तरीके का उपयोग कर सकते हैं।

step_1_df <- select(df, -Comments)
dim(df)

आउटपुट:

## [1] 205  14
dim(step_1_df)

आउटपुट:

## [1] 205  13

मूल डेटासेट में 14 विशेषताएं हैं जबकि step_1_df में 13 हैं।

फ़िल्टर()

फ़िल्टर() क्रिया अवलोकनों को मानदंड का पालन करने में मदद करती है। फ़िल्टर() बिल्कुल select() की तरह काम करता है, आप पहले डेटा फ़्रेम पास करते हैं और फिर कॉमा से अलग की गई शर्त:

filter(df, condition)
arguments:
- df: dataset used to filter the data
- condition:  Condition used to filter the data	

एक मापदंड

सबसे पहले, आप किसी कारक चर के प्रत्येक स्तर के भीतर प्रेक्षणों की संख्या गिन सकते हैं।

table(step_1_df$GoingTo)

कोड स्पष्टीकरण

  • तालिका(): स्तर के अनुसार अवलोकनों की संख्या की गणना करें। ध्यान दें, केवल कारक स्तर चर ही स्वीकार किए जाते हैं
  • तालिका (step_1_df $ GoingTo): अंतिम गंतव्य की ओर यात्राओं की संख्या की गणना करें।

आउटपुट:

## 
##  GSK Home 
##  105  100	

फ़ंक्शन टेबल() यह इंगित करता है कि 105 सवारी GSK और 100 होम जा रही हैं।

हम डेटा को फ़िल्टर करके एक डेटासेट को 105 अवलोकनों के साथ तथा दूसरे को 100 अवलोकनों के साथ लौटा सकते हैं।

# Select observations
if GoingTo == Home
select_home <- filter(df, GoingTo == "Home")
dim(select_home)

आउटपुट:

## [1] 100  14
# Select observations
if GoingTo == Work
select_work <- filter(df, GoingTo == "GSK")
dim(select_work)

आउटपुट:

## [1] 105  14

अनेक मानदंड

हम एक से ज़्यादा मानदंडों के साथ डेटासेट को फ़िल्टर कर सकते हैं। उदाहरण के लिए, आप उन अवलोकनों को निकाल सकते हैं जहाँ गंतव्य घर है और बुधवार को हुआ है।

select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")
dim(select_home_wed)

आउटपुट:

## [1] 23 14

23 अवलोकन इस मानदंड से मेल खाते थे।

पाइपलाइन

डेटासेट के निर्माण के लिए बहुत सारे कार्यों की आवश्यकता होती है, जैसे:

  • का आयात
  • विलय
  • का चयन
  • छानने
  • इत्यादि

dplyr लाइब्रेरी एक व्यावहारिक ऑपरेटर, %>%, के साथ आती है, जिसे कहा जाता है पाइपलाइनपाइपलाइन सुविधा हेरफेर को साफ, तेज और त्रुटि की संभावना कम करती है।

यह ऑपरेटर एक कोड है जो मध्यवर्ती चरणों को हार्ड ड्राइव पर सहेजे बिना चरणों को निष्पादित करता है। यदि आप ऊपर से हमारे उदाहरण पर वापस आते हैं, तो आप रुचि के चर का चयन कर सकते हैं और उन्हें फ़िल्टर कर सकते हैं। हमारे पास तीन चरण हैं:

  • चरण 1: डेटा आयात करें: जीपीएस डेटा आयात करें
  • चरण 2: डेटा चुनें: GoingTo और DayOfWeek चुनें
  • चरण 3: डेटा फ़िल्टर करें: केवल होम और बुधवार को ही लौटें

हम इसे करने के लिए कठिन रास्ता अपना सकते हैं:

# Step 1
step_1 <- read.csv(PATH)

# Step 2 
step_2 <- select(step_1, GoingTo, DayOfWeek)

# Step 3 
step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday")

head(step_3)

आउटपुट:

##   GoingTo DayOfWeek
## 1    Home Wednesday
## 2    Home Wednesday
## 3    Home Wednesday
## 4    Home Wednesday
## 5    Home Wednesday
## 6    Home Wednesday	

यह कई ऑपरेशन करने का सुविधाजनक तरीका नहीं है, खासकर ऐसी स्थिति में जब बहुत सारे चरण हों। वातावरण में बहुत सारी वस्तुएँ संग्रहीत हो जाती हैं।

आइए इसके बजाय पाइपलाइन ऑपरेटर %>% का उपयोग करें। हमें केवल शुरुआत में उपयोग किए जाने वाले डेटा फ़्रेम को परिभाषित करने की आवश्यकता है और सभी प्रक्रियाएँ उसी से प्रवाहित होंगी।

पाइपलाइन का मूल सिंटैक्स

New_df <- df %>%
step 1 %>%
step 2 %>%
...
arguments
- New_df: Name of the new data frame 
- df: Data frame used to compute the step
- step: Instruction for each step
- Note: The last instruction does not need the pipe operator `%`, you don't have instructions to pipe anymore
Note: Create a new variable is optional. If not included, the output will be displayed in the console.

आप ऊपर बताए गए चरणों का पालन करके अपना पहला पाइप बना सकते हैं।

# Create the data frame filter_home_wed.It will be the object return at the end of the pipeline
filter_home_wed <- 

#Step 1
read.csv(PATH) % > % 

#Step 2
select(GoingTo, DayOfWeek) % > % 

#Step 3
filter(GoingTo == "Home",DayOfWeek == "Wednesday")
identical(step_3, filter_home_wed)

आउटपुट:

## [1] TRUE

हम पाइपलाइन ऑपरेटर के साथ मिलकर एक शानदार डेटासेट तैयार करने के लिए तैयार हैं।

व्यवस्था ()

में पिछले ट्यूटोरियल, आप सीखते हैं कि फ़ंक्शन sort() के साथ मानों को कैसे सॉर्ट किया जाए। लाइब्रेरी dplyr में इसका सॉर्टिंग फ़ंक्शन है। यह पाइपलाइन के साथ एक आकर्षण की तरह काम करता है। arrange() क्रिया एक या कई पंक्तियों को आरोही (डिफ़ॉल्ट) या अवरोही क्रम में पुनः व्यवस्थित कर सकती है।

- `arrange(A)`: Ascending sort of variable A
- `arrange(A, B)`: Ascending sort of variable A and B
- `arrange(desc(A), B)`: Descending sort of variable A and ascending sort of B

हम दूरी को गंतव्य के अनुसार क्रमबद्ध कर सकते हैं।

# Sort by destination and distance
step_2_df <-step_1_df %>%
	arrange(GoingTo, Distance)
head<step_2_df)

आउटपुट:

##     X       Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed
## 1 193  7/25/2011     08:06    Monday     GSK    48.32    121.2     63.4
## 2 196  7/21/2011     07:59  Thursday     GSK    48.35    129.3     81.5
## 3 198  7/20/2011     08:24 Wednesday     GSK    48.50    125.8     75.7
## 4 189  7/27/2011     08:15 Wednesday     GSK    48.82    124.5     70.4
## 5  95 10/11/2011     08:25   Tuesday     GSK    48.94    130.8     85.7
## 6 171  8/10/2011     08:13 Wednesday     GSK    48.98    124.8     72.8
##   AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All
## 1           78.4        8.45      45.7       37.0         No
## 2           89.0        8.28      35.6       32.6        Yes
## 3           87.3        7.89      38.5       33.3        Yes
## 4           77.8        8.45      41.6       37.6         No
## 5           93.2        7.81      34.3       31.5        Yes
## 6           78.8        8.54      40.4       37.3         No

सारांश

नीचे दी गई तालिका में, आपने ट्यूटोरियल के दौरान सीखे गए सभी ऑपरेशनों का सारांश दिया है।

क्रिया उद्देश्य कोड व्याख्या
झलक df की संरचना की जाँच करें
glimpse(df)
str() के समान
चुनते हैं() चरों का चयन/बहिष्कार करें
select(df, A, B ,C)
चर A, B और C का चयन करें
select(df, A:C)
A से C तक सभी चर चुनें
select(df, -C)
सी को बाहर करें
फिल्टर () एक या अनेक शर्तों के आधार पर df को फ़िल्टर करें
filter(df, condition1)
एक शर्त
filter(df, condition1
शर्त2)
व्यवस्था () डेटासेट को एक या अनेक चरों के साथ क्रमबद्ध करें
arrange(A)
आरोही प्रकार का चर A
arrange(A, B)
आरोही प्रकार के चर A और B
arrange(desc(A), B)
चर A का अवरोही प्रकार और B का आरोही प्रकार
%>% प्रत्येक चरण के बीच एक पाइपलाइन बनाएं
step 1 %>% step 2 %>% step 3