R में गुम मान (NA) को कैसे बदलें: na.omit & na.rm

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

इस ट्यूटोरियल में, हम सीखेंगे कि dplyr लाइब्रेरी के साथ लुप्त मानों से कैसे निपटें। dplyr लाइब्रेरी डेटा विश्लेषण को साकार करने के लिए एक पारिस्थितिकी तंत्र का हिस्सा है।

R में लुप्त मानों को प्रतिस्थापित करें

इस ट्यूटोरियल में आप सीखेंगे

उत्परिवर्तित ()

चौथी क्रिया dplyr लाइब्रेरी नये चर बनाने या किसी मौजूदा चर के मान को बदलने में सहायक है।

हम दो भागों में आगे बढ़ेंगे। हम सीखेंगे कि कैसे:

  • डेटा फ़्रेम से अनुपलब्ध मानों को बाहर निकालें
  • माध्य और मध्यिका के साथ लुप्त मानों को आरोपित करें

क्रिया mutate() का उपयोग करना बहुत आसान है। हम इस सिंटैक्स का पालन करके एक नया चर बना सकते हैं:

mutate(df, name_variable_1 = condition, ...)
arguments:
-df: Data frame used to create a new variable
-name_variable_1: Name and the formula to create the new variable
-...: No limit constraint. Possibility to create more than one variable inside mutate()

लुप्त मानों को बाहर निकालें (NA)

dplyr लाइब्रेरी से na.omit() विधि गुम अवलोकन को बाहर करने का एक सरल तरीका है। डेटा से सभी NA को हटाना आसान है लेकिन इसका मतलब यह नहीं है कि यह सबसे सुंदर समाधान है। विश्लेषण के दौरान, गुम मानों से निपटने के लिए विभिन्न तरीकों का उपयोग करना बुद्धिमानी है

लापता अवलोकनों की समस्या से निपटने के लिए, हम टाइटैनिक डेटासेट का उपयोग करेंगे। इस डेटासेट में, हमें त्रासदी के दौरान विमान में सवार यात्रियों की जानकारी तक पहुँच प्राप्त है। इस डेटासेट में कई NA हैं जिनका ध्यान रखना आवश्यक है।

हम इंटरनेट से csv फ़ाइल अपलोड करेंगे और फिर जाँचेंगे कि कौन से कॉलम में NA है। गुम डेटा वाले कॉलम को वापस करने के लिए, हम निम्नलिखित कोड का उपयोग कर सकते हैं:

आइए डेटा अपलोड करें और लुप्त डेटा को सत्यापित करें।

PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv"
df_titanic <- read.csv(PATH, sep = ",")
# Return the column names containing missing observations
list_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ]
list_na

आउटपुट:

## [1] "age"  "fare"

यहाँ,

colnames(df_titanic)[apply(df_titanic, 2, anyNA)]

उन स्तंभों का नाम देता है जिनमें डेटा नहीं है.

आयु और किराया स्तंभों में मान लुप्त हैं।

हम उन्हें na.omit() के साथ हटा सकते हैं।

library(dplyr)
# Exclude the missing observations
df_titanic_drop <-df_titanic %>%
na.omit()		
dim(df_titanic_drop)

आउटपुट:

## [1] 1045   13

नए डेटासेट में 1045 पंक्तियाँ हैं, जबकि मूल डेटासेट में 1309 पंक्तियाँ थीं।

लुप्त मानों को बाहर निकालें

माध्य और मध्यिका के साथ लुप्त डेटा को आरोपित करें

हम लापता मानों को माध्यिका या माध्य से भी भर सकते हैं। माध्य और माध्यिका के लिए दो अलग-अलग चर बनाना एक अच्छा अभ्यास है। एक बार बना लेने के बाद, हम लापता मानों को नए बनाए गए चरों से बदल सकते हैं।

हम NA वाले कॉलम का माध्य निकालने के लिए apply विधि का उपयोग करेंगे। आइए एक उदाहरण देखें

चरण 1) ट्यूटोरियल में पहले हमने कॉलम के नाम को लिस्ट_na नामक सूची में गुम मानों के साथ संग्रहीत किया था। हम इस सूची का उपयोग करेंगे

चरण 2) अब हमें तर्क na.rm = TRUE के साथ माध्य की गणना करने की आवश्यकता है। यह तर्क अनिवार्य है क्योंकि स्तंभों में डेटा गायब है, और यह R को उन्हें अनदेखा करने के लिए कहता है।

# Create mean
average_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],
      2,
      mean,
      na.rm =  TRUE)
average_missing

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

हम apply विधि में 4 तर्क पास करते हैं।

  • df: df_titanic[,colnames(df_titanic) %in% list_na]. यह कोड list_na ऑब्जेक्ट से कॉलम का नाम लौटाएगा (यानी “आयु” और “किराया”)
  • 2: कॉलम पर फ़ंक्शन की गणना करें
  • माध्य: माध्य की गणना करें
  • na.rm = सत्य: लुप्त मानों को अनदेखा करें

आउटपुट:

##      age     fare 
## 29.88113 33.29548

हमने लापता प्रेक्षणों वाले स्तंभों का माध्य सफलतापूर्वक बनाया है। इन दो मानों का उपयोग लापता प्रेक्षणों को प्रतिस्थापित करने के लिए किया जाएगा।

चरण 3) NA मान बदलें

dplyr लाइब्रेरी से क्रिया mutate एक नया चर बनाने में उपयोगी है। हम मूल कॉलम को बदलना नहीं चाहते हैं ताकि हम NA के बिना एक नया चर बना सकें। mutate का उपयोग करना आसान है, हम बस एक चर नाम चुनते हैं और परिभाषित करते हैं कि इस चर को कैसे बनाया जाए। यहाँ पूरा कोड है

# Create a new variable with the mean and median
df_titanic_replace <- df_titanic %>%
   mutate(replace_mean_age  = ifelse(is.na(age), average_missing[1], age),
   replace_mean_fare = ifelse(is.na(fare), average_missing[2], fare))

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

हम दो चर बनाते हैं, replace_mean_age और replace_mean_fare इस प्रकार:

  • replace_mean_age = ifelse(is.na(आयु), औसत_अनुपलब्ध[1], आयु)
  • replace_mean_fare = ifelse(is.na(किराया), औसत_लापता[2],किराया)

यदि कॉलम आयु में कोई मान गायब है, तो उसे average_missing (आयु का माध्य) के पहले तत्व से बदलें, अन्यथा मूल मान रखें। किराया के लिए भी यही तर्क लागू होता है

sum(is.na(df_titanic_replace$age))

आउटपुट:

## [1] 263

प्रतिस्थापन करें

sum(is.na(df_titanic_replace$replace_mean_age))

आउटपुट:

## [1] 0

मूल स्तंभ आयु में 263 मान लुप्त हैं, जबकि नव निर्मित चर में उन्हें चर आयु के माध्य से प्रतिस्थापित कर दिया गया है।

चरण 4) हम लुप्त प्रेक्षणों को माध्यिका से भी प्रतिस्थापित कर सकते हैं।

median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],
      2,
      median,
      na.rm =  TRUE)
df_titanic_replace <- df_titanic %>%
            mutate(replace_median_age  = ifelse(is.na(age), median_missing[1], age), 
            replace_median_fare = ifelse(is.na(fare), median_missing[2], fare))
head(df_titanic_replace)

आउटपुट:

माध्य और मध्यिका के साथ लुप्त डेटा को आरोपित करें

चरण 5) एक बड़े डेटा सेट में बहुत सारे लापता मान हो सकते हैं और उपरोक्त विधि बोझिल हो सकती है। हम sapply() विधि का उपयोग करके कोड की एक पंक्ति में उपरोक्त सभी चरणों को निष्पादित कर सकते हैं। हालाँकि हमें माध्य और माध्यिका के मान नहीं पता होंगे।

sapply एक नहीं बनाता है डेटा ढांचा, इसलिए हम डेटा फ़्रेम ऑब्जेक्ट बनाने के लिए sapply() फ़ंक्शन को data.frame() के भीतर लपेट सकते हैं।

# Quick code to replace missing values with the mean
df_titanic_impute_mean < -data.frame(
    sapply(
        df_titanic,
        function(x) ifelse(is.na(x),
            mean(x, na.rm = TRUE),
            x)))

सारांश

लुप्त मानों से निपटने के लिए हमारे पास तीन विधियाँ हैं:

  • सभी लुप्त प्रेक्षणों को बाहर निकालें
  • माध्य के साथ आरोपण करें
  • मध्यिका के साथ आरोपण करें

निम्न तालिका संक्षेप में बताती है कि सभी लुप्त प्रेक्षणों को कैसे हटाया जाए

पुस्तकालय उद्देश्य कोड
आधार लुप्त टिप्पणियों की सूची बनाएं
colnames(df)[apply(df, 2, anyNA)]
दुत्कार सभी लुप्त मान हटाएं
na.omit(df)

माध्य या मध्यिका के साथ आरोपण दो तरीकों से किया जा सकता है

  • लागू करें का उपयोग करना
  • सैप्ली का उपयोग
विधि विवरण फायदे नुकसान
चरण दर चरण आवेदन करें लुप्त स्तंभों की जांच करें, माध्य/माध्यिका की गणना करें, मान संग्रहीत करें, mutate() से प्रतिस्थापित करें आप माध्य/मध्यिका का मूल्य जानते हैं अधिक निष्पादन समय। बड़े डेटासेट के साथ धीमा हो सकता है
सैप्ली के साथ त्वरित तरीका sapply() और data.frame() का उपयोग करके स्वचालित रूप से लुप्त मानों को खोजें और उन्हें माध्य/माध्यिका से बदलें छोटा और तेज़ कोड आरोपण मूल्य नहीं पता