2-अक्षर संयोजन की कल्पना करना


10

SO पर इस प्रश्न के उत्तर ने लगभग 125 एक- दो अक्षरों के नामों का एक सेट लौटाया: /programming/6979630/what-1-2-letter-object-names-conflict-with-existing -r वस्तुओं

  [1] "Ad" "am" "ar" "as" "bc" "bd" "bp" "br" "BR" "bs" "by" "c"  "C" 
 [14] "cc" "cd" "ch" "ci" "CJ" "ck" "Cl" "cm" "cn" "cq" "cs" "Cs" "cv"
 [27] "d"  "D"  "dc" "dd" "de" "df" "dg" "dn" "do" "ds" "dt" "e"  "E" 
 [40] "el" "ES" "F"  "FF" "fn" "gc" "gl" "go" "H"  "Hi" "hm" "I"  "ic"
 [53] "id" "ID" "if" "IJ" "Im" "In" "ip" "is" "J"  "lh" "ll" "lm" "lo"
 [66] "Lo" "ls" "lu" "m"  "MH" "mn" "ms" "N"  "nc" "nd" "nn" "ns" "on"
 [79] "Op" "P"  "pa" "pf" "pi" "Pi" "pm" "pp" "ps" "pt" "q"  "qf" "qq"
 [92] "qr" "qt" "r"  "Re" "rf" "rk" "rl" "rm" "rt" "s"  "sc" "sd" "SJ"
[105] "sn" "sp" "ss" "t"  "T"  "te" "tr" "ts" "tt" "tz" "ug" "UG" "UN"
[118] "V"  "VA" "Vd" "vi" "Vo" "w"  "W"  "y"

और आर आयात कोड:

nms <- c("Ad","am","ar","as","bc","bd","bp","br","BR","bs","by","c","C","cc","cd","ch","ci","CJ","ck","Cl","cm","cn","cq","cs","Cs","cv","d","D","dc","dd","de","df","dg","dn","do","ds","dt","e","E","el","ES","F","FF","fn","gc","gl","go","H","Hi","hm","I","ic","id","ID","if","IJ","Im","In","ip","is","J","lh","ll","lm","lo","Lo","ls","lu","m","MH","mn","ms","N","nc","nd","nn","ns","on","Op","P","pa","pf","pi","Pi","pm","pp","ps","pt","q","qf","qq","qr","qt","r","Re","rf","rk","rl","rm","rt","s","sc","sd","SJ","sn","sp","ss","t","T","te","tr","ts","tt","tz","ug","UG","UN","V","VA","Vd","vi","Vo","w","W","y")

चूँकि प्रश्न के बिंदु को बचने के लिए ऑब्जेक्ट नामों की एक यादगार सूची के साथ आना था, और अधिकांश मनुष्यों को पाठ के एक ठोस ब्लॉक से बाहर निकालने के लिए इतना अच्छा नहीं है, मैं यह कल्पना करना चाहूंगा।

दुर्भाग्य से मैं ऐसा करने का सबसे अच्छा तरीका बिल्कुल निश्चित नहीं हूँ। मैंने स्टेम-एंड-लीफ प्लॉट जैसी किसी चीज़ के बारे में सोचा था, केवल इसलिए नहीं कि बार-बार वैल्यूज़ होती हैं, इसलिए प्रत्येक "लीफ़" को उचित जस्टिफ़ाइ किए जाने के बजाय उपयुक्त कॉलम में रखा गया था। या एक शब्दक्लाउड-शैली का अनुकूलन, जहाँ अक्षर अपनी व्यापकता के अनुसार आकार लेते हैं।

यह सबसे स्पष्ट रूप से और कुशलता से कैसे कल्पना की जा सकती है?

विज़ुअलाइज़ेशन जो इस प्रश्न की भावना में निम्नलिखित में से किसी एक में फिट होते हैं:

  • प्राथमिक लक्ष्य: डेटा में पैटर्न का खुलासा करके नामों के सेट की यादगारता को बढ़ाएं

  • वैकल्पिक लक्ष्य: नामों के सेट की दिलचस्प विशेषताओं को हाइलाइट करें (जैसे जो वितरण की कल्पना करने में मदद करते हैं, सबसे आम पत्र, आदि)

आर में उत्तर पसंद किए जाते हैं, लेकिन सभी दिलचस्प विचारों का स्वागत है।

एकल-पत्र नामों को अनदेखा करने की अनुमति है, क्योंकि उन लोगों के लिए एक अलग सूची के रूप में देना आसान है।

जवाबों:


12

यहाँ एक शुरुआत है: पहले और दूसरे अक्षर के ग्रिड पर इनकी कल्पना करें:

combi <- c("Ad", "am", "ar", "as", "bc", "bd", "bp", "br", "BR", "bs", 
"by", "c",  "C",  "cc", "cd", "ch", "ci", "CJ", "ck", "Cl", "cm", "cn", 
"cq", "cs", "Cs", "cv", "d",  "D",  "dc", "dd", "de", "df", "dg", "dn", 
"do", "ds", "dt", "e",  "E",  "el", "ES", "F",  "FF", "fn", "gc", "gl", 
"go", "H",  "Hi", "hm", "I",  "ic", "id", "ID", "if", "IJ", "Im", "In", 
"ip", "is", "J",  "lh", "ll", "lm", "lo", "Lo", "ls", "lu", "m",  "MH", 
"mn", "ms", "N",  "nc", "nd", "nn", "ns", "on", "Op", "P",  "pa", "pf", 
"pi", "Pi", "pm", "pp", "ps", "pt", "q",  "qf", "qq", "qr", "qt", "r",  
"Re", "rf", "rk", "rl", "rm", "rt", "s",  "sc", "sd", "SJ", "sn", "sp", 
"ss", "t",  "T",  "te", "tr", "ts", "tt", "tz", "ug", "UG", "UN", "V",  
"VA", "Vd", "vi", "Vo", "w",  "W",  "y")

df <- data.frame (first = factor (gsub ("^(.).", "\\1", combi), 
                                  levels = c (LETTERS, letters)),
                  second = factor (gsub ("^.", "", combi), 
                                  levels = c (LETTERS, letters)),
                  combi = combi))

library(ggplot2)
ggplot (data = df, aes (x = first, y = second)) + 
   geom_text (aes (label = combi), size = 3) + 
   ## geom_point () +
   geom_vline (x = 26.5, col = "grey") + 
   geom_hline (y = 26.5, col = "grey")

(था दो अक्षर:) अक्षरों के साथ ग्रिड

ggplot (data = df, aes (x = second)) + geom_histogram ()

दूसरा पत्र

ggplot (data = df, aes (x = first)) + geom_histogram ()

पहला अक्षर

मेंने इकट्ठा किया:

  • एक अक्षर के नाम,

    • सौभाग्य से i, j, k, और lकर रहे हैं उपलब्ध है (इसलिए मैं 4d सरणियों के सूचकांक बना सकते हैं)
    • दुर्भाग्य से t(समय), c(एकाग्रता) चले गए हैं। तो m(द्रव्यमान), V(आयतन) और F(बल) हैं। rन त्रिज्या और न ही व्यास d
    • मैं दबाव ( p), पदार्थ की मात्रा ( n), और लंबाई l, हालांकि हो सकता है।
    • शायद मुझे ग्रीक नामों में बदलना होगा: εठीक है, लेकिन फिर ऐसा नहीं करना चाहिए

      π <- pi

      ?

  • मुझे जो भी lowerUPPERनाम चाहिए हो सकता है।

  • सामान्य तौर पर, ऊपरी मामले के पत्र के साथ शुरू करना निचले मामले की तुलना में अधिक सुरक्षित होता है।

  • के साथ शुरू cया नहींd


अच्छी शुरुआत। हो सकता है कि 2d प्लॉट के माध्यम से चतुर्थांश लाइनों (एक बड़े + में) को बेहतर समझ दें कि ऊपरी / निचले मामले पत्र कहां जाते हैं?
अरी बी। फ्रीडमैन

सोचा मैंने ऐसा ही किया। वैसे भी, यहाँ यह है। @ gsk3: चित्र अपलोड करने के लिए धन्यवाद!
SX

अच्छा लगा। और इसके विपरीत, # 2 शीघ्र करने के लिए एक दिलचस्प जवाब प्रदान करने के लिए धन्यवाद। :-)
अरी बी। फ्रीडमैन

आपके 2d प्लॉट को देखते हुए, एक और सुझाव यह हो सकता है कि इसे 27x26 ग्रिड तक कम किया जाए और किसी दिए गए अक्षर को कम / ऊपरी / दोनों में प्रतीकों या रंगों (या अल्फा के साथ घबराना) को बदल दिया जाए। यह NA पंक्ति को एक अलग रंग भी बना सकता है ताकि इसे नेत्रहीन रूप से अलग किया जा सके।
अरी बी। फ्रीडमैन

1
मैंने उत्तर पोस्ट करने से पहले 27 x 26 पर एक नज़र डाली (ऊपरी और प्रथम पत्र के अनुसार रंग और आकृति के साथ) ऊपरी मामले में। लेकिन यह एक आसान संदेश नहीं था, इसलिए मैं तुरंत बड़े ग्रिड के लिए वापस चला गया।
SX

8

ठीक है, यहाँ मेरा बहुत जल्दी "आवधिक तालिका" जैसा दृश्य है, जो एसओ प्रश्न और दूसरों की टिप्पणियों पर आधारित है। मुख्य समस्या पैकेजों के बीच चर की संख्या में बड़ा अंतर है, जो विज़ुअलाइज़ेशन में बाधा डालती है ... मुझे एहसास है कि यह बहुत मोटा है, इसलिए कृपया अपनी इच्छानुसार इसे बदलने के लिए स्वतंत्र महसूस करें।

यहाँ वर्तमान आउटपुट है (मेरी पैकेज सूची से) उदाहरण कथानक

और कोड

# Load all the installed packages
lapply(rownames(installed.packages()), require, 
       character.only = TRUE)
# Find variables of length 1 or 2
one_or_two <- unique(apropos("^[a-zA-Z]{1,2}$"))
# Find which package they come from
packages <- lapply(one_or_two, find)
# Some of the variables may belong to multiple packages, so determine the length 
# of each entry in packages and duplicate the names accordingly
lengths <- unlist(lapply(packages, length))
var.data <- data.frame(var = rep(one_or_two, lengths), 
                   package = unlist(packages))

अब, हमारे पास एक डाटा फ्रेम है:

> head(var.data, 10)
   var           package
1   ar     package:stats
2   as   package:methods
3   BD    package:fields
4   bs      package:VGAM
5   bs   package:splines
6   by      package:base
7    c      package:base
8    C     package:stats
9   cm package:grDevices
10   D     package:stats

अब हम पैकेज द्वारा डेटा को विभाजित कर सकते हैं

 data.split <- split(var.data, var.data$package)

हम देख सकते हैं कि अधिकांश चर आधार और सांख्यिकी पैकेज से आते हैं

> unlist(lapply(data.split, nrow))
     package:base  package:datasets    package:fields 
               16                 1                 2 
  package:ggplot2 package:grDevices  package:gWidgets 
                2                 1                 1 
  package:lattice      package:MASS    package:Matrix 
                1                 1                 3 
  package:methods      package:mgcv      package:plyr 
                3                 2                 1 
     package:spam   package:splines     package:stats 
                1                 2                14 
 package:survival     package:utils      package:VGAM 
                1                 2                 4 

अंत में, ड्राइंग दिनचर्या

plot(0, 0, "n", xlim=c(0, 100), ylim=c(0, 120), 
     xaxt="n", yaxt="n", xlab="", ylab="")

side.len.x <- 100 / length(data.split)
side.len.y <- 100 / max(unlist(lapply(data.split, nrow)))
colors <- rainbow(length(data.split), start=0.2, end=0.6)    

for (xcnt in 1:length(data.split))
    {
    posx <- side.len.x * (xcnt-1)

    # Remove "package :" in front of the package name
    pkg <- unlist(strsplit(as.character(data.split[[xcnt]]$package[1]), ":"))
    pkg <- pkg[2]

    # Write the package name
    text(posx + side.len.x/2, 102, pkg, srt=90, cex=0.95, adj=c(0, 0))

    for (ycnt in 1:nrow(data.split[[xcnt]]))
        {
        posy <- side.len.y * (ycnt-1)
        rect(posx, posy, posx+side.len.x*0.85, posy+side.len.y*0.9, col = colors[xcnt])
        text(posx+side.len.x/2, posy+side.len.y/2, data.split[[xcnt]]$var[ycnt], cex=0.7)
        }
    }

1
अच्छा! इसे लेने का एक दिलचस्प तरीका उन्हें श्रेणी (जैसे ग्राफिक्स पैकेज, डेटा हेरफेर प्रथाओं, आदि) द्वारा समूहबद्ध करना होगा, उन्हें रंग कोड करना होगा, और फिर हिस्टोग्राम-जैसे के बजाय समग्र आकार को अधिक बॉक्स जैसा बनाना होगा।
अरी बी। फ्राइडमैन

+1 क्या इलाज है! :) बहुत अच्छा काम। मुझे लगता है कि केवल एक चीज जो आवधिक टेबल कार्यक्षमता प्राप्त करने के लिए आवश्यक होगी वह है टेबल लेआउट। मानक पीटी में 2 ग्रिड हैं, शीर्ष 1 में कुछ तत्व गायब हैं, और समूह विभाजित / पुनर्व्यवस्थित हैं (1 समूह = 1 ऊर्ध्वाधर स्तंभ के विपरीत)। सच कहूं, तो यह वह हिस्सा नहीं है जो मैंने सोचा था कि यह कठिन होगा। रंग और ब्लॉक लेआउट वह हिस्सा है जो मुझे सबसे ज्यादा उत्साहित करता है और इसके लिए ggplot2 कोड देखना बहुत अच्छा है।
Iterator

मुझे कॉफी की जरुरत हे। मुझे लगता है कि gsk3 में कम शब्दों के साथ एक ही टिप्पणी थी। :) मुझे लगता है कि मैं रंग से मंत्रमुग्ध था।
Iterator

1
@ इटरेटर: ध्यान दें कि यह सभी आर मानक प्लॉट फ़ंक्शंस हैं, कोई ggplot2 शामिल नहीं है :)
nico

पवित्र मैकेरल। आप सही हे! और भी प्रभावशाली। मेरा निष्कर्ष: I neeeeeeed Coffeeeeeeeeeee।
Iterator

4

यहाँ एक पत्र-आधारित हिस्टोग्राम है। माना जाता है कि पहले अक्षरों को संख्या से आकार देना, लेकिन इसके खिलाफ फैसला किया क्योंकि यह पहले से ही ऊर्ध्वाधर घटक में एन्कोडेड है।

# "Load" data
nms <- c("Ad","am","ar","as","bc","bd","bp","br","BR","bs","by","c","C","cc","cd","ch","ci","CJ","ck","Cl","cm","cn","cq","cs","Cs","cv","d","D","dc","dd","de","df","dg","dn","do","ds","dt","e","E","el","ES","F","FF","fn","gc","gl","go","H","Hi","hm","I","ic","id","ID","if","IJ","Im","In","ip","is","J","lh","ll","lm","lo","Lo","ls","lu","m","MH","mn","ms","N","nc","nd","nn","ns","on","Op","P","pa","pf","pi","Pi","pm","pp","ps","pt","q","qf","qq","qr","qt","r","Re","rf","rk","rl","rm","rt","s","sc","sd","SJ","sn","sp","ss","t","T","te","tr","ts","tt","tz","ug","UG","UN","V","VA","Vd","vi","Vo","w","W","y") #all names
two_in_base <- c("ar", "as", "by", "cm", "de", "df", "dt", "el", "gc", "gl", "if", "Im", "is", "lh", "lm", "ls", "pf", "pi", "pt", "qf", "qr", "qt", "Re", "rf", "rm", "rt", "sd", "ts", "vi") # 2-letter names in base R
vowels <- c("a","e","i","o","u")
vowels <- c( vowels, toupper(vowels) )

# Constants
yoffset.singles <- 3

# Define a function to give us consistent X coordinates
returnX <- function(vec) {
  sapply(vec, function(x) seq(length(all.letters))[ x == all.letters ] )
}

# Make df of 2-letter names
combi <- nms[ sapply( nms, function(x) nchar(x)==2 ) ]
combidf <- data.frame( first = substr(combi,1,1), second=substr(combi,2,2) )
library(plyr)
combidf <- arrange(combidf,first,second)

# Add vowels
combidf$first.vwl <- (combidf$first %in% vowels)
combidf$second.vwl <- (combidf$second %in% vowels)

# Flag items only in base R
combidf$in_base <- paste(combidf$first,combidf$second,sep="") %in% two_in_base

# Create a data.frame to hold our plotting information for the first letters
combilist <- dlply(combidf,.(first),function(x) x$second)
combi.first <- data.frame( first = names(combilist), n = sapply(combilist,length) ,stringsAsFactors=FALSE )
combi.first$y <- 0
all.letters <-  c(letters,LETTERS) # arrange(combi.first,desc(n))$first to go in order of prevalence (which may break the one-letter name display)
combi.first$x <- returnX( combi.first$first )

# Create a data.frame to hold plotting information for the second letters
combidf$x <- returnX( combidf$first )
combidf$y <- unlist( by( combidf$second, combidf$first, seq_along ) )

# Make df of 1-letter names
sngldf <- data.frame( sngl = nms[ sapply( nms, function(x) nchar(x)==1 ) ] )
singles.y <- max(combidf$y) + yoffset.singles
sngldf$y <- singles.y
sngldf$x <- returnX( sngldf$sngl )

# Plot
library(ggplot2)
ggplot(data=combidf, aes(x=x,y=y) ) +
  geom_text(aes( label=second, size=3, colour=combidf$in_base ), position=position_jitter(w=0,h=.25)) +
  geom_text( data=combi.first, aes( label=first, x=x, y=y, size=4 ) ) +
  geom_text( data=sngldf, aes( label=sngl, x=x, y=y, size=4 ) ) +
  scale_size(name="Order (2-letter names)",limits=c(1,4),breaks=c(1,2),labels=c("Second","First")) +
  scale_x_continuous("",breaks=c(13,39),labels=c("lower","UPPER")) +
  scale_y_continuous("",breaks=c(0,5,singles.y),labels=c("First letter of two-letter names","Second letter of two-letter names","One-letter names") ) +
  coord_equal(1.5) +
  labs( colour="In base R" )

एक ही भूखंड पर एक और दो अक्षर के नाम वाला संस्करण

पत्र-आधारित हिस्टोग्राम


2

100 के लिए आवर्त सारणी, एलेक्स। मेरे पास इसके लिए कोड नहीं है, हालांकि। :(

कोई सोच सकता है कि एक "आवर्त सारणी" पैकेज पहले से ही CRAN में मौजूद हो सकता है। एक रंग योजना और इस तरह के डेटा के लेआउट का विचार दिलचस्प और उपयोगी हो सकता है।

इन्हें पैकेज द्वारा रंगीन किया जा सकता है और आवृत्ति द्वारा लंबवत क्रमबद्ध किया जा सकता है, जैसे कि CRAN पर कोड के नमूने में या जैसा कि वे किसी स्थानीय कोडबेस में दिखाई देते हैं।


यकीन नहीं होता, अगर मैं आपका अनुसरण करूं ... तो क्या आप जो सोच रहे हैं, उसका एक साधारण रेखाचित्र बना सकते हैं? मैं नहीं देखता कि एक आवर्त सारणी लेआउट यहाँ कैसे मदद करेगा ...
nico

@ निको: मैं कुछ इस तरह से सोच रहा हूं: en.wikipedia.org/wiki/Periodic_table मान लीजिए कि हम आधार आर कमांड के साथ "नॉबेल एलिमेंट्स" को बदलते हैं। हैलोजेन को अपने स्वयं के पैकेज द्वारा प्रतिस्थापित किया जा सकता है, और इसी तरह। इस तरह के विज़ुअलाइज़ेशन पैकेज के साथ, मैं इसे पंक्तियों, कॉलमों, समूहों और रंगों की प्रकृति को निर्दिष्ट करने के लिए उपयोगकर्ता पर छोड़ दूँगा। इसे लागू करने के लिए एक काफी सरल बात होनी चाहिए, हालांकि मैं इसे बहुत गंभीरता से करूंगा। प्लेसमेंट ऐसा होगा कि एक ही समूह (यानी पैकेज) में आइटम एक-दूसरे के पास हों। वर्टिकल प्लेसमेंट उपयोग आवृत्ति द्वारा निर्धारित किया जा सकता है।
आइरेटर

ठीक है अब मैं समझ गया! शायद मैं यह देखने की कोशिश करूंगा कि क्या मैं किसी चीज के साथ बाहर आ सकता हूं, लेकिन मुझे पहले कुछ खाली समय खोजने की जरूरत है ...:
nico

मैं इसे अभी तक नहीं देख रहा हूं, लेकिन मैं यह देखने के लिए उत्साहित हूं कि यह विचार क्या बदल जाता है :-)
अरी बी। फ्रीडमैन

1
स्टैकएक्सचेंज पर एक नजर थी: ताल गैली ने पीएसई के बारे में कुछ समय पहले पूछा था, इसलिए मैंने नहीं पूछा। लेकिन मैंने बस आर-फोर्ज: pse.R को चेकआउट के आसपास सितारों को रखने के लिए कोड का पहला बिट धक्का दिया - मुझे नहीं पता कि उन्हें कैसे बचना है ताकि वे गायब हो जाएं ...
को SX

1

MacKay के ITILA के अध्याय 2 के पहले दो पृष्ठों में अंग्रेजी भाषा में सभी वर्ण युग्मों की सशर्त संभावनाओं को दर्शाने वाले अच्छे चित्र हैं। आपको इसका उपयोग मिल सकता है।

मैं यह कहते हुए शर्मिंदा हूं कि मुझे याद नहीं है कि उन्हें तैयार करने के लिए किस कार्यक्रम का इस्तेमाल किया गया था।


1
यह अच्छा है, लेकिन यह मेरे लिए ऐसा लगता है कि सभी प्रत्येक पत्र-अक्षर जोड़ी के साथ जुड़ी कुछ अतिरिक्त जानकारी (व्यापकता) होने पर निर्भर हैं। इस प्रकार वह 3 आयामों का रेखांकन कर रहा है, जबकि हम मुख्य रूप से 2 का रेखांकन कर रहे हैं .... मुझे आर के लिए प्रचलन की जानकारी प्राप्त करना अच्छा लगेगा, हालाँकि। लेकिन यह एक और दिन के लिए डेटा माइनिंग ऑपरेशन है।
अरी बी। फ्रीडमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.