सतत वैरिएबल्स को श्रेणियों में बदलना (1)
पिछले विचार का एक सामान्यीकरण यह है कि आप कई thresholds रखें; यानी आप किसी सतत वैरिएबल को "buckets" (या "bins") में बाँट दें, ठीक वैसा ही जैसा कोई histogram करता है। बेस-R में, आप यह काम करने के लिए cut() का उपयोग करेंगे। उदाहरण के लिए, धूम्रपान की आदतों पर एक अध्ययन में, आप प्रति दिन पिए गए सिगरेटों की सामान्य संख्या लें और उसे एक factor में बदल दें।
smoking_status <- cut(
cigarettes_per_day,
breaks = c(0, 1, 10, 20, Inf),
labels = c("non", "light", "moderate", "heavy"),
right = FALSE
)
इसका sparklyr समकक्ष है ft_bucketizer() का उपयोग करना। कोड का प्रारूप ft_binarizer() जैसा ही है, लेकिन इस बार आपको splits आर्ग्यूमेंट में cut points का एक वेक्टर पास करना होगा। यही उदाहरण sparklyr शैली में यूँ लिखा जाएगा।
smoking_data %>%
ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))
ध्यान देने योग्य कई बातें हैं। आपने देखा होगा कि cut() का breaks आर्ग्यूमेंट ft_bucketizer() के splits आर्ग्यूमेंट जैसा ही है। सीमा पर स्थित मानों को संभालने के तरीके में हल्का-सा अंतर है। cut() में डिफॉल्ट रूप से ऊपरी (दाएँ) सीमा प्रत्येक बकेट में शामिल होती है, पर बाएँ नहीं। जबकि ft_bucketizer() निचली (बाएँ) सीमा को प्रत्येक बकेट में शामिल करता है, पर दाएँ नहीं। इसका मतलब है कि यह cut() को right = FALSE के साथ कॉल करने के बराबर है।
एक अपवाद यह है कि ft_bucketizer() सबसे ऊपर वाले बकेट के लिए दोनों सीमाओं पर स्थित मानों को शामिल करता है। इसलिए ft_bucketizer() cut() में include.lowest = TRUE सेट करने के भी बराबर है।
अंत में यह ध्यान दें कि जहाँ cut() एक factor लौटाता है, वहीं ft_bucketizer() एक numeric वेक्टर लौटाता है, जिसमें पहले बकेट के मान शून्य, दूसरे के एक, तीसरे के दो, और आगे ऐसे ही होते हैं। अगर आप R में परिणामों पर काम करना चाहते हैं, तो आपको इसे स्पष्ट रूप से factor में बदलना होगा। यह एक सामान्य कोड पैटर्न है:
a_tibble %>%
ft_bucketizer("x", "x_buckets", splits = splits) %>%
collect() %>%
mutate(x_buckets = factor(x_buckets, labels = labels))
यह अभ्यास पाठ्यक्रम का हिस्सा है
R में sparklyr के साथ Spark परिचय
अभ्यास निर्देश
आपके लिए spark_conn के रूप में एक Spark कनेक्शन बनाया गया है। Spark में संग्रहीत ट्रैक मेटाडेटा से जुड़ा एक tibble पहले से track_metadata_tbl नाम से परिभाषित है। decades एक numeric अनुक्रम है: 1920, 1930, …, 2020, और decade_labels उन दशकों का टेक्स्ट विवरण है।
track_metadata_tblसेhotttnesss_over_timeनाम का एक वैरिएबल बनाएँ।artist_hotttnesssऔरyearफ़ील्ड्स चुनें।yearकॉलम कोnumericमें बदलें।ft_bucketizer()का उपयोग करकेdecadeनाम का नया फ़ील्ड बनाएँ, जोdecadesका उपयोग करके years को बाँटता है।- परिणाम collect करें।
decadeफ़ील्ड कोdecade_labelsलेबल्स के साथ factor में बदलें।
decadeके हिसाब सेartist_hotttnesssकाggplot()बार प्लॉट बनाएँ।ggplot()का पहला आर्ग्यूमेंट data आर्ग्यूमेंटhotttnesss_over_timeहै।ggplot()का दूसरा आर्ग्यूमेंट aesthetic है, जोaes()में लिपटेdecadeऔरartist_hotttnesssलेता है।- बार्स ड्रॉ करने के लिए
geom_boxplot()जोड़ें।
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
# track_metadata_tbl, decades, decade_labels have been pre-defined
track_metadata_tbl
decades
decade_labels
hotttnesss_over_time <- track_metadata_tbl %>%
# Select artist_hotttnesss and year
___ %>%
# Convert year to numeric
___ %>%
# Bucketize year to decade using decades vector
___ %>%
# Collect the result
___ %>%
# Convert decade to factor using decade_labels
___
# Draw a boxplot of artist_hotttnesss by decade
ggplot(___, aes(___, ___)) +
___()