दिलचस्प पोस्ट
IPython नोटबुक matplotlib प्लॉट इनलाइन कैसे करें QMake के उप-डिज़ाइन टेम्पलेट का उपयोग कैसे करें? 2047×2047 बनाम 2047×2047 सरणी गुणा में 2048×2048 में क्यों बड़ा प्रदर्शन है? तैयार स्थिति सेटनल (..) चहचहाना बूटस्ट्रैप सीएसएस के साथ विवादित सक्रिय व्यवस्थापक सीएसएस रेल टैप किए गए स्थान से एक CGPoint कैसे प्राप्त करें? व्यवहार ggplot2 एईएस () facet_grid () के साथ संयोजन में जब एईएस (डॉलर) के लिए डॉलर के संकेत चिह्न के साथ चर गुजर रहा है Accordion तालिका सेल – कैसे गतिशील विस्तार / अनुबंध uitableviewcell करने के लिए? WPF में वर्तमान स्क्रीन के आकार को कैसे प्राप्त करें? स्प्रिंग एमवीसी – एचटीटीपी मीडिया टाईप नॉट एसेक्सेबल एक्सपेशेशन कोड केवल 0.0, 0.0 जीपीएस समन्वय करेगा, जबकि NullPointerException फेंकता है चींटी के साथ एंड्रॉइड साइनिंग क्या जावा ऑडियो के लिए पुस्तकालयों में निर्मित है _ सिंघेसिस_? JQuery का उपयोग कर HTML तत्वों के बीच सफेद स्थान और लाइन ब्रेक निकालें XSLT 1.0 के साथ टोकनिंग और सॉर्टिंग

सह-घटना मैट्रिक्स बनाना

मैं सह-मैट्रिक्स मैट्रिक्स होने की समस्या को हल करने की कोशिश कर रहा हूं। मेरे पास लेन-देन और वस्तुओं का डेटाफ़ाइल है, और मैं लेनदेन की संख्या का एक मैट्रिक्स देखना चाहता हूं जहां आइटम एक साथ दिखाई देते हैं।

मैं आर प्रोग्रामिंग में एक नौसिखिया हूँ और मुझे कुछ मज़ेदार हैं जो आर के सभी शॉर्टकट्स खोजते हैं, जो कि विशिष्ट छोरों को बनाने के बजाय (मैं सी साल पहले और सिर्फ एक्सेल मैक्रोज़ और एसपीएसएस में चिपकाता था) का उपयोग करता था। मैंने यहाँ समाधानों की जांच की है, लेकिन कोई काम नहीं करता है (निकटतम समाधान यहाँ दिया गया है: एसएसी का उपयोग करते हुए सह-घटना मैट्रिक्स? – लेकिन जब मैंने प्रोजेक्टिंग_टीएम इस्तेमाल किया तो मुझे एक त्रुटि संदेश मिला, मुझे संदेह है कि cbind wasn ' मेरे मामले में सफल रहे

मूल रूप से मेरे पास निम्न तालिका है:

TrxID Items Quant Trx1 A 3 Trx1 B 1 Trx1 C 1 Trx2 E 3 Trx2 B 1 Trx3 B 1 Trx3 C 4 Trx4 D 1 Trx4 E 1 Trx4 A 1 Trx5 F 5 Trx5 B 3 Trx5 C 2 Trx5 D 1, etc. 

मैं ऐसा कुछ बनाना चाहता हूं:

  ABCDEF A 0 1 1 0 1 1 B 1 0 3 1 1 0 C 1 3 0 1 0 0 D 1 1 1 0 1 1 E 1 1 0 1 0 0 F 0 1 1 1 0 0 

मैंने क्या किया था (और आप शायद मेरे धोखेबाज़ आर दृष्टिकोण पर हंसते हैं):

 library(igraph) library(tnet) trx <- read.table("FileName.txt", header=TRUE) transID <- t(trx[1]) items <- t(trx[2]) id_item <- cbind(items,transID) item_item <- projecting_tm(id_item, method="sum") item_item <- tnet_igraph(item_item,type="weighted one-mode tnet") item_matrix <-get.adjacency(item_item,attr="weight") item_matrix 

जैसा कि cbind से ऊपर वर्णित है शायद असफल रहा था, इसलिए projecting_tm मुझे कोई परिणाम नहीं दे सकता।

किसी भी वैकल्पिक दृष्टिकोण या मेरे विधि में सुधार?

तुम्हारी सहायता को खासा सराहा जाएगा!

Solutions Collecting From Web of "सह-घटना मैट्रिक्स बनाना"

मैं reshape2 पैकेज और मैट्रिक्स बीजगणित के संयोजन का उपयोग करूँगा:

 #read in your data dat <- read.table(text="TrxID Items Quant Trx1 A 3 Trx1 B 1 Trx1 C 1 Trx2 E 3 Trx2 B 1 Trx3 B 1 Trx3 C 4 Trx4 D 1 Trx4 E 1 Trx4 A 1 Trx5 F 5 Trx5 B 3 Trx5 C 2 Trx5 D 1", header=T) #making the boolean matrix library(reshape2) dat2 <- melt(dat) w <- dcast(dat2, Items~TrxID) x <- as.matrix(w[,-1]) x[is.na(x)] <- 0 x <- apply(x, 2, function(x) as.numeric(x > 0)) #recode as 0/1 v <- x %*% t(x) #the magic matrix diag(v) <- 0 #repalce diagonal dimnames(v) <- list(w[, 1], w[,1]) #name the dimensions v 

शायद ग्राफिंग के लिए …

 g <- graph.adjacency(v, weighted=TRUE, mode ='undirected') g <- simplify(g) # set labels and degrees of vertices V(g)$label <- V(g)$name V(g)$degree <- degree(g) plot(g) 

उपरोक्त उत्तरों में से "dat" का उपयोग करके, crossprod और table प्रयास करें:

 V <- crossprod(table(dat[1:2])) diag(V) <- 0 V # Items # Items ABCDEF # A 0 1 1 1 1 0 # B 1 0 3 1 1 1 # C 1 3 0 1 0 1 # D 1 1 1 0 1 1 # E 1 1 0 1 0 0 # F 0 1 1 1 0 0 

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

 dat <- read.table(text="TrxID Items Quant Trx1 A 3 Trx1 B 1 Trx1 C 1 Trx2 E 3 Trx2 B 1 Trx3 B 1 Trx3 C 4 Trx4 D 1 Trx4 E 1 Trx4 A 1 Trx5 F 5 Trx5 B 3 Trx5 C 2 Trx5 D 1", header=T) library("Matrix") # factors for indexing matrix entries and naming dimensions trx.fac <- factor(dat[,1]) itm.fac <- factor(dat[,2]) s <- sparseMatrix( as.numeric(trx.fac), as.numeric(itm.fac), dimnames = list( as.character(levels(trx.fac)), as.character(levels(itm.fac))), x = 1) # calculating co-occurrences v <- t(s) %*% s # setting transactions counts of items to zero diag(v) <- 0 v 

मैं इस समाधान में पोस्ट किए गए प्रत्येक समाधान का प्रयास कर रहा था इनमें से कोई भी बड़े मैट्रिक्स के साथ काम नहीं करता (मैं 1,500 x 2, 000,000 मैट्रिक्स के साथ काम कर रहा था)।

एक छोटा सा ऑफ-विषय : एक सह-घटना मैट्रिक्स की गणना के बाद, मैं आमतौर पर अलग-अलग आइटमों के बीच की दूरी की गणना करना चाहता हूं। कोसाइन समानता / दूरी को इस तरह सह-घटना मैट्रिक्स पर कुशलता से गणना की जा सकती है:

 # cross-product of vectors (numerator) num <- v %*% v # square root of square sum of each vector (used for denominator) srss <- sqrt(apply(v^2, 1, sum)) # denominator den <- srss %*% t(srss) # cosine similarity v.cos.sim <- num / den # cosine distance v.cos.dist <- 1 - v.cos.sim 

मैं इसके लिए xtabs का उपयोग करेगा:

 dat <- read.table(text="TrxID Items Quant Trx1 A 3 Trx1 B 1 Trx1 C 1 Trx2 E 3 Trx2 B 1 Trx3 B 1 Trx3 C 4 Trx4 D 1 Trx4 E 1 Trx4 A 1 Trx5 F 5 Trx5 B 3 Trx5 C 2 Trx5 D 1", header=T) term_doc <- xtabs(~ TrxID + Items, data=dat, sparse = TRUE) co_occur <- crossprod(term_doc, term_doc) diag(co_occur) <- 0 co_occur 

मैंने यह स्पष्ट करने के लिए sparse = TRUE को फेंक दिया कि यह बहुत बड़े डेटा सेट के लिए काम कर सकता है।

यह वास्तव में बहुत आसान और साफ है अगर आप पहली बार द्विपक्षीय ग्राफ़ बनाते हैं, जहां शीर्ष नोड लेनदेन हैं और नीचे नोड आइटम हैं फिर आप नीचे नोड्स के लिए एक प्रोजेक्शन बनाते हैं।

 dat <- read.table(text="TrxID Items Quant Trx1 A 3 Trx1 B 1 Trx1 C 1 Trx2 E 3 Trx2 B 1 Trx3 B 1 Trx3 C 4 Trx4 D 1 Trx4 E 1 Trx4 A 1 Trx5 F 5 Trx5 B 3 Trx5 C 2 Trx5 D 1", header=T) library(igraph) bip <- graph.data.frame(dat) V(bip)$type <- V(bip)$name %in% dat[,1] ## sparse=TRUE is a good idea if you have a large matrix here v <- get.adjacency(bipartite.projection(bip)[[2]], attr="weight", sparse=FALSE) ## Need to reorder if you want it alphabetically v[order(rownames(v)), order(colnames(v))] # ABCDEF # A 0 1 1 1 1 0 # B 1 0 3 1 1 1 # C 1 3 0 1 0 1 # D 1 1 1 0 1 1 # E 1 1 0 1 0 0 # F 0 1 1 1 0 0