डेटा सारांशित करना
मान लीजिए कि आपके पास एक स्कूल के 1000 छात्रों के वजन की जानकारी है। इससे कुछ भी समझने के लिए, एक तरीका यह है कि डेटा के एक एक पंक्ति को पढ़ना । उदाहरण के लिए यदि आप जानना चाहते हैं कि इन 1000 वज़नों में से सबसे कम वज़न क्या है या किसका है , आप एक एक पंक्ति में उपलब्ध वज़न को पढ़ के तुलना शुरू कर सकते हैं । लेकिन, क्या यह समझदारी है? बेशक नहीं। या, यदि आप raw डेटा से कोई अंतर्दृष्टि प्राप्त करना चाहते हैं, तो क्या यह खोजपूर्ण विश्लेषण के बिना संभव है? बेशक नहीं। और इसीलिए हमें डेटा को संक्षेप में प्रस्तुत करने और उसका अन्वेषण करने की आवश्यकता है; आसानी से व्याख्या की जा सकने वाली जानकारी खोजने के लिए।
श्रेणीबद्ध variable का सारांश
डेटा के प्रकारों की जानकारी इस लेख में है |
जब हमारे पास श्रेणीगत variable होता है, तो हम इसे गिनते हैं। फिर हम परिणाम को निरपेक्ष संख्या या प्रतिशत में दिखाते हैं। उदाहरण के लिए 5 लाल गेंद, 2 नीली गेंद और 3 हरी गेंद या 50% लाल गेंद, 20% नीली गेंद और 30% हरी गेंद। हम परिणाम को एक तालिका के रूप में दिखा सकते हैं। या हम इसे एक ग्राफ के रूप में दिखा सकते हैं।
x<-read.csv("https://query.data.world/s/ycimehoogc3wiwgkd65z7d24v6mqik", header=TRUE, stringsAsFactors=FALSE)
names(x)[1]<-"EnglishSpeaker"
names(x)[6]<-"ClassAttribute"
names(x)[4]<-"Semester"
x$EnglishSpeaker<-as.factor(x$EnglishSpeaker)
x$Semester<-as.factor(x$Semester)
x$ClassAttribute<-as.factor(x$ClassAttribute)
x<- x %>%
mutate(EnglishSpeaker=ifelse(EnglishSpeaker==1,"yes","no"))%>%
mutate(ClassAttribute=case_when(ClassAttribute==1 ~ "low",
ClassAttribute==2 ~ "medium",
ClassAttribute==3 ~ "high"))%>%
mutate(Semester=ifelse(Semester==1, "Summer", "Regular"))%>%
select(1,4,6)
x%>%
group_by(ClassAttribute)%>%
summarise(Count=n())%>%
mutate(CountPercent=Count/sum(Count))%>%
ggplot(aes(y=Count,
x = reorder(ClassAttribute,Count),
)
)+
geom_col(width = 0.5,fill='turquoise')+
geom_text(aes(y=Count-6, label=Count), color="white", size=10)+
labs(title = "Class Attribute",
subtitle = "Teaching assistant evaluation",
x="Attribute",
y="Count",
caption = "Source: UCI machine learning repository")+
theme_clean() +
annotation_custom(l, xmin = 2.7, xmax = 4, ymin = 50, ymax = 63) +
coord_cartesian(clip = "off")
यह तब , जब हम एक वेरिएबल को सारांशित कर रहें हो । एक से अधिक वेरिएबल हो तो क्या करेंगे ? तब भी, हम एक टेबल के रूप में, या नीचे दिखाए गए ग्राफ के अनुसार एक अलग तरह के बार चार्ट के रूप में दिखा सकते हैं।
x%>%
group_by(EnglishSpeaker)%>%
summarise(low=sum(ClassAttribute=="low"), medium=sum(ClassAttribute=="medium"), high=sum(ClassAttribute=="high"))%>%
tidyr::gather("ClassAttribute","Count",-1)%>%
ggplot(aes(x=EnglishSpeaker, y=Count, fill=ClassAttribute))+
geom_col(position="dodge2")+
geom_text(aes(y=Count-2, label=Count),
position = position_dodge(width = 1
),
color="white",
size=5
)+
labs(title = "Class Attribute by native language",
subtitle = "Teaching assistant evaluation",
x="English Speaker",
y="Count",
caption = "Source: UCI machine learning repository")+
theme_clean() +
annotation_custom(l, xmin = 2, xmax = 3.4, ymin = 36, ymax = 52) +
coord_cartesian(clip = "off")
कभी-कभी, इसी डेटा को निचे दिखाए गए ग्राफ के अनुरूप भी दिखाया जा सकता है । कृपया ध्यान दें कि y axis की उच्च सीमा को घटाकर 1 कर दिया गया है और हां और ना दोनों श्रेणियों की उचाई बराबर है । इसका मतलब है, हम इस ग्राफ में कितने हाँ या न है , उसपे ध्यान नहीं देके हाँ या न की अंदर कितने छोटे , बड़े या माध्यम है, उसपे ध्यान दे रहे हैं |
x%>%
group_by(EnglishSpeaker)%>%
summarise(low=sum(ClassAttribute=="low"), medium=sum(ClassAttribute=="medium"), high=sum(ClassAttribute=="high"))%>%
tidyr::gather("ClassAttribute","Count",-1)%>%
ggplot(aes(x=reorder(EnglishSpeaker,Count),
y=Count, fill=ClassAttribute))+
geom_col(position="fill", width = 0.5)+
geom_text(aes(label=Count),
position = position_fill(vjust = 0.5),
color="white",
size=5
)+
labs(title = "Class Attribute by native language",
subtitle = "Teaching assistant evaluation",
x="English Speaker",
y="Count",
caption = "Source: UCI machine learning repository")+
theme_clean() +
annotation_custom(l, xmin = 2, xmax = 3.4, ymin = 0.8, ymax = 1.2) +
coord_cartesian(clip = "off")
श्रेणीबद्ध वेरिएबल के मामले में, हम घटनाओं की संख्या की गणना करते हैं। यदि एक से अधिक वेरिएबल शामिल हैं, तो हम इनके संयोजन की गणना करते हैं।
संख्यात्मक वेरिएबल का सारांश
एकल वेरिएबल
श्रेणीबद्ध वेरिएबल की तरह, संख्यात्मक वेरिएबल की गणना करना भी संभव है। आमतौर पर, गिनती थोड़ी अलग होती है। हम डिब्बे बनाते हैं और डिब्बे गिनते हैं। उदाहरण के लिए, यदि हमारे पास 200 व्यक्तियों का वजन है जो 50 किग्रा से 100 किग्रा तक है, तो हम 50 किग्रा से 59 किग्रा, 60 किग्रा से 69 किग्रा इत्यादि के डिब्बे बना सकते हैं। इन्हें bins कहा जाता है। और फिर हम उस बिन में होने वाले डेटा बिंदुओं की संख्या दिखाते हैं, हम उसे तालिका में या ग्राफ के रूप में दिखा सकते हैं।
df <- data.frame(
sex=factor(rep(c("F", "M"), each=200)),
weight=round(c(rnorm(200, mean=40, sd=4), rnorm(200, mean=50, sd=5)))
)
ggplot(df, aes(x=weight)) +
geom_histogram(binwidth=1, color="black", fill="blue", alpha=0.3)+
labs(title="Histogram of weight",
y="frequency")+
theme_clean()+
annotation_custom(l, xmin = 60, xmax = 65, ymin = 22, ymax = 30) +
coord_cartesian(clip = "off")
हिस्टोग्राम से यह समझना बहुत आसान हो जाता है कि अधिकांश छात्रों का वज़न लगभग कितना हैं। जानकारी की आकलन करने का दूसरा तरीका घनत्व (density ) प्लॉट का उपयोग करना है।
ggplot(df, aes(x=weight)) +
geom_density(alpha=.2, fill="#FF6666")+
labs(title="Density of weight")+
theme_clean()+
annotation_custom(l, xmin = 60, xmax = 65, ymin = 0.045, ymax = 0.06) +
coord_cartesian(clip = "off")
एकल संख्यात्मक वेरिएबल को सारांशित करने का दूसरा तरीका संचयी आवृत्ति (Cumulative frequency ) का उपयोग करना है। यह वेरिएबल के डिब्बे बनाकर और उन्हें क्रम में रखकर किया जाता है। फिर संचयी घटनाओं या डेटा बिंदुओं की गणना की जाती है। एक उदाहरण नीचे दिया गया है।
df%>%
mutate(weight=case_when(
weight<40 ~ "30-39",
weight>=40 & weight<50 ~ "40-49",
weight>=50 & weight<60 ~ "50-59",
weight>=60 ~ "60-69"
))%>%
group_by(weight)%>%
summarise(Count=n())%>%
mutate(cumulative_count=cumsum(Count))%>%
mutate(cumulative_percent=cumulative_count*100/sum(Count)) %>%
knitr::kable()
weight | Count | cumulative_count | cumulative_percent |
---|---|---|---|
30-39 | 105 | 105 | 26.25 |
40-49 | 186 | 291 | 72.75 |
50-59 | 104 | 395 | 98.75 |
60-69 | 5 | 400 | 100.00 |
“कितने कम या कितने ज़्यादा” जैसे प्रश्नों के उत्तर देने का प्रयास करते समय यह विशेष रूप से उपयोगी है।
df%>%
mutate(weight=case_when(
weight<40 ~ "30-39",
weight>=40 & weight<50 ~ "40-49",
weight>=50 & weight<60 ~ "50-59",
weight>=60 ~ "60-69"
))%>%
group_by(weight)%>%
summarise(Count=n())%>%
mutate(cumcount=cumsum(Count))%>%
mutate(cumper=cumcount*100/sum(Count))%>%
ggplot(aes(x=weight, y=cumper, group=1))+geom_line(color="black")+geom_point()+
labs(title="Cumulative Percentage of Weight(Range)",
x="Weight Ranges",
y="Cumulative Percentage (%)")+
theme_clean() +
annotation_custom(l, xmin = 3, xmax = 4, ymin = 40, ymax = 60) +
coord_cartesian(clip = "off")
उदाहरण के लिए, उपरोक्त ग्राफ से, यह स्पष्ट है कि अधिकांश वज़न 59 किग्रा से कम या उसके बराबर हैं।
संख्यात्मक और श्रेणीबद्ध वेरिएबल का संयोजन
कभी-कभी हमारे पास संख्यात्मक और श्रेणीबद्ध वेरिएबल का संयोजन हो सकता है। पिछले उदाहरण से, यदि हम लिंग के आधार पर छात्रों के वजन की जांच करना चाहते हैं, तो हम ओवरलेइंग (overlaying) हिस्टोग्राम प्लॉट कर सकते हैं।
ggplot(df, aes(x=weight, color=sex, fill=sex)) +
geom_histogram(alpha=0.2, position="identity")+
labs(title="Histogram of weight by sex")+
theme_clean()+
annotation_custom(l, xmin = 60, xmax = 65, ymin = 35, ymax = 45) +
coord_cartesian(clip = "off")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
दो वेरिएबल
जब भी दो अंकीय वेरिएबल शामिल होते हैं, हम उनके बीच के संबंध को समझने की कोशिश करते हैं।
mtcars%>%
ggplot(aes(x=mpg,y=hp))+geom_point(aes(colour=hp))+
labs(x="Fuel consumption (Miles per gallon)",
y="Engine power (HP)",
title = "Relationship between Engine power and fuel consumption"
)+
theme_clean()+
annotation_custom(l, xmin = 30, xmax = 35, ymin = 275, ymax = 350) +
coord_cartesian(clip = "off")
और यदि इनमे से कोई एक वेरिएबल दिनांक/वर्ष/माह/समय या समान होता है, तो हम प्रवृत्ति(trend) को समझने का प्रयास करते हैं।
x = WDI(indicator='SL.UEM.TOTL.ZS', country=c('IN'))
x %>%
filter(is.na(x$SL.UEM.TOTL.ZS))
## iso2c country SL.UEM.TOTL.ZS year
## 1 IN India NA 1990
## 2 IN India NA 1989
## 3 IN India NA 1988
## 4 IN India NA 1987
## 5 IN India NA 1986
## 6 IN India NA 1985
## 7 IN India NA 1984
## 8 IN India NA 1983
## 9 IN India NA 1982
## 10 IN India NA 1981
## 11 IN India NA 1980
## 12 IN India NA 1979
## 13 IN India NA 1978
## 14 IN India NA 1977
## 15 IN India NA 1976
## 16 IN India NA 1975
## 17 IN India NA 1974
## 18 IN India NA 1973
## 19 IN India NA 1972
## 20 IN India NA 1971
## 21 IN India NA 1970
## 22 IN India NA 1969
## 23 IN India NA 1968
## 24 IN India NA 1967
## 25 IN India NA 1966
## 26 IN India NA 1965
## 27 IN India NA 1964
## 28 IN India NA 1963
## 29 IN India NA 1962
## 30 IN India NA 1961
## 31 IN India NA 1960
x<-na.omit(x)
x$year<-lubridate::ymd(x$year, truncated = 2L)
x%>%
ggplot(aes(x=year, y=SL.UEM.TOTL.ZS))+
geom_line()+
geom_point()+
labs(x="Year",
y="Unemployment Rate (% of labour force)",
title = "Uemployment Rate by year in India",
caption = "Source: World Bank")+
theme_clean() +
annotation_custom(l, xmin = 1995, xmax = 2000, ymin = 6.5, ymax = 7.0) +
coord_cartesian(clip = "off")
आप चाहें तो बेहतर समझने के लिए निचे दिए गए वीडियो को देख सकते हैं |