आर एग्रीगेट फ़ंक्शन: सारांश और ग्रुप_बाय() उदाहरण

डेटा के बारे में जानकारी प्राप्त करने के लिए चर का सारांश महत्वपूर्ण है। हालाँकि, समूह द्वारा चर का सारांश डेटा के वितरण के बारे में बेहतर जानकारी देता है।

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

इस ट्यूटोरियल के लिए, आप बैटिंग डेटासेट का उपयोग करेंगे। मूल डेटासेट में 102816 अवलोकन और 22 चर शामिल हैं। आप इस डेटासेट का केवल 20 प्रतिशत उपयोग करेंगे और निम्नलिखित चर का उपयोग करेंगे:

  • playerID: खिलाड़ी आईडी कोड. फ़ैक्टर
  • yearID: वर्ष. फ़ैक्टर
  • टीमआईडी: टीम. फैक्टर
  • एलजीआईडी: लीग। कारक: एए अल एफएल एनएल पीएल यूए
  • एबी: बल्लेबाजी पर। संख्यात्मक
  • G: खेल: एक खिलाड़ी द्वारा खेले गए खेलों की संख्या। संख्यात्मक
  • आर: रन. संख्यात्मक
  • एचआर: होमरन्स। संख्यात्मक
  • SH: बलिदान हिट। संख्यात्मक

सारांश तैयार करने से पहले, आप डेटा तैयार करने के लिए निम्नलिखित चरण अपनाएंगे:

  • चरण 1: डेटा आयात करें
  • चरण 2: प्रासंगिक चर का चयन करें
  • चरण 3: डेटा को सॉर्ट करें
library(dplyr)

# Step 1
data <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/lahman-batting.csv") % > %

# Step 2
select(c(playerID, yearID, AB, teamID, lgID, G, R, HR, SH))  % > % 

# Step 3
arrange(playerID, teamID, yearID)

डेटासेट आयात करते समय एक अच्छा अभ्यास यह है कि डेटासेट की संरचना के बारे में विचार प्राप्त करने के लिए झलक() फ़ंक्शन का उपयोग करें।

# Structure of the data
glimpse(data)

आउटपुट:

Observations: 104,324
Variables: 9
$ playerID <fctr> aardsda01, aardsda01, aardsda01, aardsda01, aardsda01, a...
$ yearID   <int> 2015, 2008, 2007, 2006, 2012, 2013, 2009, 2010, 2004, 196...
$ AB       <int> 1, 1, 0, 2, 0, 0, 0, 0, 0, 603, 600, 606, 547, 516, 495, ...
$ teamID   <fctr> ATL, BOS, CHA, CHN, NYA, NYN, SEA, SEA, SFN, ATL, ATL, A...
$ lgID     <fctr> NL, AL, AL, NL, AL, NL, AL, AL, NL, NL, NL, NL, NL, NL, ...
$ G        <int> 33, 47, 25, 45, 1, 43, 73, 53, 11, 158, 155, 160, 147, 15...
$ R        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 113, 84, 100, 103, 95, 75...
$ HR       <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 39, 29, 44, 38, 47, 34, 40...
$ SH       <int> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, ...

संक्षेप()

summarise() का वाक्यविन्यास बुनियादी है और dplyr लाइब्रेरी में शामिल अन्य क्रियाओं के अनुरूप है।

summarise(df, variable_name=condition) 
arguments: 
- `df`: Dataset used to construct the summary statistics 
- `variable_name=condition`: Formula to create the new variable

नीचे दिए गए कोड को देखें:

summarise(data, mean_run =mean(R))

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

  • summarise(data, mean_run = mean(R)): mean_run नामक एक चर बनाता है जो डेटासेट डेटा से चलाए गए कॉलम का औसत है।

आउटपुट:

##   mean_run
## 1 19.20114

आप जितने चाहें उतने चर जोड़ सकते हैं। आप खेले गए औसत खेल और औसत बलिदान हिट लौटाते हैं।

summarise(data, mean_games = mean(G),
    mean_SH = mean(SH, na.rm = TRUE))

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

  • mean_SH = mean(SH, na.rm = TRUE): दूसरे चर का सारांश बनाएँ। आपने na.rm = TRUE सेट किया है क्योंकि SH कॉलम में कुछ अवलोकन गायब हैं।

आउटपुट:

##   mean_games  mean_SH
## 1   51.98361 2.340085

ग्रुप_बाय बनाम कोई ग्रुप_बाय नहीं

बिना group_by() के समराइज़() फ़ंक्शन का कोई मतलब नहीं बनता। यह समूह के अनुसार सारांश सांख्यिकी बनाता है। लाइब्रेरी दुत्कार क्रिया group_by के अंदर आपके द्वारा पारित समूह पर स्वचालित रूप से एक फ़ंक्शन लागू करता है।

ध्यान दें कि, group_by अन्य सभी क्रियाओं (अर्थात mutate(), filter(), arrange(), ...) के साथ पूरी तरह से काम करता है।

जब आपके पास एक से ज़्यादा चरण हों तो पाइपलाइन ऑपरेटर का इस्तेमाल करना सुविधाजनक होता है। आप बेसबॉल लीग के हिसाब से औसत होमरन की गणना कर सकते हैं।

data % > %
	group_by(lgID) % > %
	summarise(mean_run = mean(HR))

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

  • डेटा: सारांश सांख्यिकी बनाने के लिए उपयोग किया जाने वाला डेटासेट
  • group_by(lgID): चर `lgID` को समूहीकृत करके सारांश की गणना करें
  • summarise(mean_run = mean(HR)): औसत होमरन की गणना करें

आउटपुट:

## 
# A tibble: 7 x 2
##     lgID  mean_run
##   <fctr>     <dbl>
## 1     AA 0.9166667
## 2     AL 3.1270988
## 3     FL 1.3131313
## 4     NL 2.8595953
## 5     PL 2.5789474
## 6     UA 0.6216216
## 7   <NA> 0.2867133	

पाइप ऑपरेटर ggplot() के साथ भी काम करता है। आप आसानी से सारांश सांख्यिकी को ग्राफ के साथ दिखा सकते हैं। जब तक ग्राफ प्लॉट नहीं हो जाता, तब तक सभी चरणों को पाइपलाइन के अंदर धकेल दिया जाता है। बार चार के साथ लीग द्वारा औसत होमरन देखना अधिक दृश्य लगता है। नीचे दिया गया कोड group_by(), summarise() और ggplot() को एक साथ संयोजित करने की शक्ति को प्रदर्शित करता है।

आप निम्नलिखित चरण अपनाएंगे:

  • चरण 1: डेटा फ़्रेम चुनें
  • चरण 2: डेटा समूहित करें
  • चरण 3: डेटा का सारांश बनाएँ
  • चरण 4: सारांश आँकड़े प्लॉट करें
library(ggplot2)
# Step 1
data % > % 
#Step 2
group_by(lgID) % > % 
#Step 3
summarise(mean_home_run = mean(HR)) % > % 
#Step 4
ggplot(aes(x = lgID, y = mean_home_run, fill = lgID)) +
    geom_bar(stat = "identity") +
    theme_classic() +
    labs(
        x = "baseball league",
        y = "Average home run",
        title = paste(
            "Example group_by() with summarise()"
        )
    )

आउटपुट:

समूह_द्वारा उदाहरण सारांश के साथ

summarise() में फ़ंक्शन

क्रिया summarise() R में लगभग सभी फ़ंक्शन के साथ संगत है। यहां उपयोगी फ़ंक्शन की एक छोटी सूची दी गई है, जिन्हें आप summarise() के साथ उपयोग कर सकते हैं:

उद्देश्य समारोह विवरण
बुनियादी अर्थ() सदिश x का औसत
माध्यिका() सदिश x का माध्यिका
योग () सदिश x का योग
परिवर्तन एसडी() सदिश x का मानक विचलन
आईक्यूआर() सदिश x का अंतरचतुर्थक
रेंज मिनट () सदिश x का न्यूनतम मान
अधिकतम () सदिश x का अधिकतम
मात्रा() सदिश x का क्वांटाइल
पद पहला() group_by() के साथ प्रयोग करें समूह का पहला अवलोकन
अंतिम() group_by() के साथ प्रयोग करें। समूह का अंतिम अवलोकन
एनएचटी() group_by() के साथ प्रयोग करें। समूह का nवाँ अवलोकन
गिनती एन() group_by() के साथ प्रयोग करें। पंक्तियों की संख्या गिनें
n_विशिष्ट() group_by() के साथ प्रयोग करें। अलग-अलग प्रेक्षणों की संख्या गिनें

हम तालिका 1 के प्रत्येक फ़ंक्शन के उदाहरण देखेंगे।

बुनियादी काम

पिछले उदाहरण में, आपने सारांश सांख्यिकी को डेटा फ़्रेम में संग्रहीत नहीं किया था।

आप सारांश से दिनांक फ़्रेम बनाने के लिए दो चरणों में आगे बढ़ सकते हैं:

  • चरण 1: आगे उपयोग के लिए डेटा फ़्रेम को संग्रहीत करें
  • चरण 2: लाइन प्लॉट बनाने के लिए डेटासेट का उपयोग करें

चरण 1) आप प्रत्येक वर्ष खेले गए खेलों की औसत संख्या की गणना करते हैं।

## Mean
ex1 <- data % > %
	group_by(yearID) % > %
	summarise(mean_game_year = mean(G))
head(ex1)

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

  • बल्लेबाजी डेटासेट का सारांश सांख्यिकी डेटा फ्रेम ex1 में संग्रहीत किया जाता है।

आउटपुट:

## # A tibble: 6 x 2
##   yearID mean_game_year
##    <int>          <dbl>
## 1   1871       23.42308
## 2   1872       18.37931
## 3   1873       25.61538
## 4   1874       39.05263
## 5   1875       28.39535
## 6   1876       35.90625	

चरण 2) आप सारांश सांख्यिकी को एक रेखाचित्र के माध्यम से दिखाते हैं और प्रवृत्ति देखते हैं।

# Plot the graph
ggplot(ex1, aes(x = yearID, y = mean_game_year)) +
    geom_line() +
    theme_classic() +
    labs(
        x = "Year",
        y = "Average games played",
        title = paste(
            "Average games played from 1871 to 2016"
        )
    )

आउटपुट:

मूल फ़ंक्शन उदाहरण

सबसेटिंग

फ़ंक्शन summarise() सबसेटिंग के साथ संगत है।

## Subsetting + Median
data % > %
group_by(lgID) % > %
summarise(median_at_bat_league = median(AB), 
	#Compute the median without the zero 
	median_at_bat_league_no_zero = median(AB[AB > 0]))

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

  • median_at_bat_league_no_zero = median(AB[AB > 0]): चर AB में 0 के बहुत सारे हैं। आप की माध्यिका की तुलना कर सकते हैं बल्ले पर 0 के साथ और बिना चर.

आउटपुट:

## # A tibble: 7 x 3
##     lgID median_at_bat_league median_at_bat_league_no_zero
##   <fctr>                <dbl>                        <dbl>
## 1     AA                  130                          131
## 2     AL                   38                           85
## 3     FL                   88                           97
## 4     NL                   56                           67
## 5     PL                  238                          238
## 6     UA                   35                           35
## 7   <NA>                  101                          101	

राशि

चर को एकत्रित करने के लिए एक अन्य उपयोगी फ़ंक्शन sum() है।

आप यह देख सकते हैं कि किस लीग में अधिक होम रन हैं।

## Sum
data % > %
	group_by(lgID) % > %
	summarise(sum_homerun_league = sum(HR))

आउटपुट:

## # A tibble: 7 x 2
##     lgID sum_homerun_league
##   <fctr>              <int>
## 1     AA                341
## 2     AL              29426
## 3     FL                130
## 4     NL              29817
## 5     PL                 98
## 6     UA                 46
## 7   <NA>                 41	

मानक विचलन

डेटा में प्रसार की गणना R में मानक विचलन या sd() के साथ की जाती है।

# Spread
data % > %
	group_by(teamID) % > %
	summarise(sd_at_bat_league = sd(HR))

आउटपुट:

## # A tibble: 148 x 2
##    teamID sd_at_bat_league
##    <fctr>            <dbl>
##  1    ALT               NA
##  2    ANA        8.7816395
##  3    ARI        6.0765503
##  4    ATL        8.5363863
##  5    BAL        7.7350173
##  6    BFN        1.3645163
##  7    BFP        0.4472136
##  8    BL1        0.6992059
##  9    BL2        1.7106757
## 10    BL3        1.0000000
## # ... with 138 more rows		

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

न्यूनतम और अधिकतम

आप min() और max() फ़ंक्शन के साथ किसी वेक्टर के न्यूनतम और अधिकतम मान तक पहुँच सकते हैं।

नीचे दिया गया कोड किसी खिलाड़ी द्वारा एक सत्र में खेले गए खेलों की न्यूनतम और अधिकतम संख्या बताता है।

# Min and max
data % > %
	group_by(playerID) % > %
	summarise(min_G = min(G),
    max_G = max(G))

आउटपुट:

## # A tibble: 10,395 x 3
##     playerID min_G max_G
##       <fctr>       <int>
##  1 aardsda01    53    73
##  2 aaronha01   120   156
##  3  aasedo01    24    66
##  4  abadfe01    18    18
##  5 abadijo01    11    11
##  6 abbated01     3   153
##  7 abbeybe01    11    11
##  8 abbeych01    80   132
##  9 abbotgl01     5    23
## 10 abbotji01    13    29
## # ... with 10,385 more rows

गिनती

समूह के अनुसार अवलोकनों की गणना करना हमेशा एक अच्छा विचार है। R के साथ, आप n() के साथ घटनाओं की संख्या को एकत्रित कर सकते हैं।

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

# count observations
data % > %
	group_by(playerID) % > %
	summarise(number_year = n()) % > %
	arrange(desc(number_year))

आउटपुट:

## # A tibble: 10,395 x 2
##     playerID number_year
##       <fctr>       <int>
##  1 pennohe01          11
##  2 joosted01          10
##  3 mcguide01          10
##  4  rosepe01          10
##  5 davisha01           9
##  6 johnssi01           9
##  7  kaatji01           9
##  8 keelewi01           9
##  9 marshmi01           9
## 10 quirkja01           9
## # ... with 10,385 more rows

प्रथम और अंतिम

आप किसी समूह का प्रथम, अंतिम या nवां स्थान चुन सकते हैं।

उदाहरण के लिए, आप प्रत्येक खिलाड़ी का पहला और अंतिम वर्ष जान सकते हैं।

# first and last
data % > %
	group_by(playerID) % > %
	summarise(first_appearance = first(yearID),
		last_appearance = last(yearID))

आउटपुट:

## # A tibble: 10,395 x 3
##     playerID first_appearance last_appearance
##       <fctr>            <int>           <int>
##  1 aardsda01             2009            2010
##  2 aaronha01             1973            1975
##  3  aasedo01             1986            1990
##  4  abadfe01             2016            2016
##  5 abadijo01             1875            1875
##  6 abbated01             1905            1897
##  7 abbeybe01             1894            1894
##  8 abbeych01             1895            1897
##  9 abbotgl01             1973            1979
## 10 abbotji01             1992            1996
## # ... with 10,385 more rows

nवां अवलोकन

फ़ंक्शन nth() first() और last() का पूरक है। आप इंडेक्स के साथ किसी समूह के भीतर nth अवलोकन तक पहुँच सकते हैं।

उदाहरण के लिए, आप केवल उस दूसरे वर्ष को फ़िल्टर कर सकते हैं जिसमें टीम खेली थी।

# nth
data % > %
	group_by(teamID) % > %
	summarise(second_game = nth(yearID, 2)) % > %
	arrange(second_game)

आउटपुट:

## # A tibble: 148 x 2
##    teamID second_game
##    <fctr>       <int>
##  1    BS1        1871
##  2    CH1        1871
##  3    FW1        1871
##  4    NY2        1871
##  5    RC1        1871
##  6    BR1        1872
##  7    BR2        1872
##  8    CL1        1872
##  9    MID        1872
## 10    TRO        1872
## # ... with 138 more rows

अवलोकन की विशिष्ट संख्या

फ़ंक्शन n() किसी मौजूदा समूह में अवलोकनों की संख्या लौटाता है। n() का एक बंद फ़ंक्शन n_distinct() है, जो अद्वितीय मानों की संख्या की गणना करता है।

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

# distinct values
data % > %
	group_by(teamID) % > %
	summarise(number_player = n_distinct(playerID)) % > %
	arrange(desc(number_player))

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

  • group_by(teamID): वर्ष के अनुसार समूह बनाएं और टीम
  • सारांश(number_player = n_विशिष्ट(playerID)): टीम के अनुसार खिलाड़ियों की अलग-अलग संख्या की गणना करें
  • व्यवस्थित करें(desc(number_player)): खिलाड़ियों की संख्या के अनुसार डेटा को क्रमबद्ध करें

आउटपुट:

## # A tibble: 148 x 2
##    teamID number_player
##    <fctr>         <int>
##  1    CHN           751
##  2    SLN           729
##  3    PHI           699
##  4    PIT           683
##  5    CIN           679
##  6    BOS           647
##  7    CLE           646
##  8    CHA           636
##  9    DET           623
## 10    NYA           612
## # ... with 138 more rows

एकाधिक समूह

एक सारांश सांख्यिकी को अनेक समूहों के बीच साकार किया जा सकता है।

# Multiple groups
data % > %
	group_by(yearID, teamID) % > %
	summarise(mean_games = mean(G)) % > %
	arrange(desc(teamID, yearID))

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

  • group_by(yearID, teamID): वर्ष के अनुसार समूह बनाएं और टीम
  • summarise(mean_games = mean(G)): गेम प्लेयर की संख्या का सारांश दें
  • व्यवस्थित करें(desc(teamID, yearID)): टीम और वर्ष के अनुसार डेटा को क्रमबद्ध करें

आउटपुट:

## # A tibble: 2,829 x 3
## # Groups:   yearID [146]
##    yearID teamID mean_games
##     <int> <fctr>      <dbl>
##  1   1884    WSU   20.41667
##  2   1891    WS9   46.33333
##  3   1886    WS8   22.00000
##  4   1887    WS8   51.00000
##  5   1888    WS8   27.00000
##  6   1889    WS8   52.42857
##  7   1884    WS7    8.00000
##  8   1875    WS6   14.80000
##  9   1873    WS5   16.62500
## 10   1872    WS4    4.20000
## # ... with 2,819 more rows

फ़िल्टर

इससे पहले कि आप कोई ऑपरेशन करना चाहें, आप डेटासेट को फ़िल्टर कर सकते हैं। डेटासेट 1871 से शुरू होता है, और विश्लेषण के लिए 1980 से पहले के वर्षों की ज़रूरत नहीं होती।

# Filter
data % > %
	filter(yearID > 1980) % > %
	group_by(yearID) % > %
	summarise(mean_game_year = mean(G))

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

  • फ़िल्टर(yearID > 1980): केवल प्रासंगिक वर्ष (अर्थात 1980 के बाद) दिखाने के लिए डेटा को फ़िल्टर करें
  • group_by(yearID): वर्ष के अनुसार समूह बनाएं
  • summarise(mean_game_year = mean(G)): डेटा को सारांशित करें

आउटपुट:

## # A tibble: 36 x 2
##    yearID mean_game_year
##     <int>          <dbl>
##  1   1981       40.64583
##  2   1982       56.97790
##  3   1983       60.25128
##  4   1984       62.97436
##  5   1985       57.82828
##  6   1986       58.55340
##  7   1987       48.74752
##  8   1988       52.57282
##  9   1989       58.16425
## 10   1990       52.91556
## # ... with 26 more rows

असमूहीकृत

अंतिम लेकिन महत्वपूर्ण बात यह है कि गणना का स्तर बदलने से पहले आपको समूहीकरण को हटाना होगा।

# Ungroup the data
data % > %
	filter(HR > 0) % > %
	group_by(playerID) % > %
	summarise(average_HR_game = sum(HR) / sum(G)) % > %
	ungroup() % > %
	summarise(total_average_homerun = mean(average_HR_game))

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

  • फ़िल्टर(HR >0) : शून्य होमरन को बाहर करें
  • group_by(playerID): खिलाड़ी के अनुसार समूह बनाएं
  • summarise(average_HR_game = sum(HR)/sum(G)): खिलाड़ी द्वारा औसत होमरन की गणना करें
  • ungroup(): समूहीकरण हटाएँ
  • सारांश (कुल_औसत_होमरन = औसत(औसत_एचआर_गेम)): डेटा को सारांशित करें

आउटपुट:

## # A tibble: 1 x 1
##   total_average_homerun
##                   <dbl>
## 1            0.06882226	

सारांश

जब आप समूह के अनुसार सारांश लौटाना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

# group by X1, X2, X3
group(df, X1, X2, X3)

आपको डेटा को निम्न प्रकार से समूह से अलग करना होगा:

ungroup(df)

नीचे दी गई तालिका summarise() से सीखे गए फ़ंक्शन का सारांश देती है

विधि समारोह कोड
मतलब मतलब
summarise(df,mean_x1 = mean(x1))
मंझला मंझला
summarise(df,median_x1 = median(x1))
योग योग
summarise(df,sum_x1 = sum(x1))
मानक विचलन sd
summarise(df,sd_x1 = sd(x1))
अन्तःचतुर्थक आईक्यूआर
summarise(df,interquartile_x1 = IQR(x1))
न्यूनतम मिनट
summarise(df,minimum_x1 = min(x1))
अधिकतम मैक्स
summarise(df,maximum_x1 = max(x1))
मात्रात्मक मात्रात्मक
summarise(df,quantile_x1 = quantile(x1))
पहला अवलोकन प्रथम
summarise(df,first_x1 = first(x1))
अंतिम अवलोकन पिछली बार
summarise(df,last_x1 = last(x1))
nवां अवलोकन n वें
summarise(df,nth_x1 = nth(x1, 2))
घटना की संख्या n
summarise(df,n_x1 = n(x1))
अलग-अलग घटनाओं की संख्या n_विशिष्ट
summarise(df,n_distinct _x1 = n_distinct(x1))

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