X-Git-Url: http://iramuteq.org/git?p=iramuteq;a=blobdiff_plain;f=PrintRScript.py;h=a4ed14dfb6d8948ca93df01083e92695ef1d860f;hp=25adb52ee69e9fc4e11b92991884820c1ad043cf;hb=238d461ff111b1bc3302494de4d9b630f9e9f623;hpb=b19770356272772c8c8ba75f351520eca186bd19 diff --git a/PrintRScript.py b/PrintRScript.py index 25adb52..a4ed14d 100644 --- a/PrintRScript.py +++ b/PrintRScript.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- #Author: Pierre Ratinaud #Copyright (c) 2008-2011 Pierre Ratinaud -#Lisense: GNU/GPL +#License: GNU/GPL import tempfile from chemins import ffr @@ -33,7 +33,7 @@ class PrintRScript : def sources(self, lsources) : for source in lsources : - self.add('source("%s")' % source) + self.add('source("%s", encoding = \'utf8\')' % source) def packages(self, lpks) : for pk in lpks : @@ -211,7 +211,7 @@ def RchdTxt(DicoPath, RscriptPath, mincl, classif_mode, nbt = 9, svdmethod = 'sv # open_file_graph("%s", widt = 600, height=400) # plot(tree.tot1$tree.cl) # dev.off() - """%DicoPath['arbre1'] + """ % DicoPath['arbre1'] if classif_mode == 0: txt += """ @@ -293,7 +293,7 @@ def RchdQuest(DicoPath, RscriptPath, nbcl = 10, mincl = 10): chd.result<-Rchdquest("%s","%s","%s", nbt = nbt, mincl = mincl) n1 <- chd.result$n1 classeuce1 <- chd.result$cuce1 - """ % (DicoPath['mat01'], DicoPath['listeuce1'], DicoPath['uce']) + """ % (DicoPath['mat01.csv'], DicoPath['listeuce1'], DicoPath['uce']) txt += """ tree_tot1 <- make_tree_tot(chd.result$chd) @@ -390,13 +390,15 @@ write.csv2(gbcluster,file="%s") xyminmax <- PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=1, fin=(debsup-1), xlab = xlab, ylab = ylab) """ % (DictChdTxtOut['AFC2DL_OUT']) txt += """ - PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=debsup, fin=(debet-1), xlab = xlab, ylab = ylab, xmin = xyminmax$xminmax[1], xmax = xyminmax$xminmax[2], ymin = xyminmax$yminmax[1], ymax = xyminmax$yminmax[2]) + PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=debsup, fin=(debet-1), xlab = xlab, ylab = ylab, xmin = xyminmax$xminmax[1], xmax = xyminmax$xminmax[2], ymin = xyminmax$yminmax[1], ymax = xyminmax$yminmax[2], active=FALSE) """ % (DictChdTxtOut['AFC2DSL_OUT']) txt += """ - PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=debet, fin=fin, xlab = xlab, ylab = ylab, xmin = xyminmax$xminmax[1], xmax = xyminmax$xminmax[2], ymin = xyminmax$yminmax[1], ymax = xyminmax$yminmax[2]) + if ((fin - debet) > 2) { + PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=debet, fin=fin, xlab = xlab, ylab = ylab, xmin = xyminmax$xminmax[1], xmax = xyminmax$xminmax[2], ymin = xyminmax$yminmax[1], ymax = xyminmax$yminmax[2], active = FALSE) + } """ % (DictChdTxtOut['AFC2DEL_OUT']) txt += """ - PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", col=TRUE, what='coord', xlab = xlab, ylab = ylab, xmin = xyminmax$xminmax[1], xmax = xyminmax$xminmax[2], ymin = xyminmax$yminmax[1], ymax = xyminmax$yminmax[2]) + PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", col=TRUE, what='coord', xlab = xlab, ylab = ylab, xmin = xyminmax$xminmax[1], xmax = xyminmax$xminmax[2], ymin = xyminmax$yminmax[1], ymax = xyminmax$yminmax[2], active=FALSE) """ % (DictChdTxtOut['AFC2DCL_OUT']) # txt += """ # PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='crl', deb=1, fin=(debsup-1), xlab = xlab, ylab = ylab) @@ -533,16 +535,17 @@ def dendroandbarplot(table, rownames, colnames, rgraph, tmpgraph, intxt = False, """ % (ffr(dendro),ffr(rgraph), ffr(tmpgraph)) return txt -def barplot(table, rownames, colnames, rgraph, tmpgraph, intxt = False) : +def barplot(table, parametres, intxt = False) : if not intxt : txttable = 'c(' + ','.join([','.join(line) for line in table]) + ')' #width = 100 + (15 * len(rownames)) + (100 * len(colnames)) #height = len(rownames) * 15 - rownb = len(rownames) + rownb = len(parametres['rownames']) #if height < 400 : # height = 400 - rownames = 'c("' + '","'.join(rownames) + '")' - colnames = 'c("' + '","'.join(colnames) + '")' + rownames = 'c("' + '","'.join(parametres['rownames']) + '")' + colnames = 'c("' + '","'.join(parametres['colnames']) + '")' + if not intxt : #FIXME txt = """ @@ -574,58 +577,68 @@ def barplot(table, rownames, colnames, rgraph, tmpgraph, intxt = False) : """ % (txttable, rownb, rownames, colnames) else : txt = intxt - txt += """ - source("%s") - color = rainbow(nrow(di)) - width <- 100 + (20*length(rownames(di))) + (100 * length(colnames(di))) - height <- nrow(di) * 15 - if (height < 400) { height <- 400} - open_file_graph("%s",width = width, height = height) - par(mar=c(0,0,0,0)) - layout(matrix(c(1,2),1,2, byrow=TRUE),widths=c(3,lcm(7))) - par(mar=c(2,2,1,0)) - yp = ifelse(length(toinf), 0.2, 0) - ym = ifelse(length(tominf), 0.2, 0) - ymin <- ifelse(!length(which(di < 0)), 0, min(di) - ym) - coord <- barplot(as.matrix(di), beside = TRUE, col = color, space = c(0.1,0.6), ylim=c(ymin, max(di) + yp)) - if (length(toinf)) { - coordinf <- coord[toinf] - valinf <- di[toinf] - text(x=coordinf, y=valinf + 0.1, 'i') - } - if (length(tominf)) { - coordinf <- coord[toinf] - valinf <- di[toinf] - text(x=coordinf, y=valinf - 0.1, 'i') - } - c <- colMeans(coord) - c1 <- c[-1] - c2 <- c[-length(c)] - cc <- cbind(c1,c2) - lcoord <- apply(cc, 1, mean) - abline(v=lcoord) - if (min(di) < 0) { - amp <- abs(max(di) - min(di)) - } else { - amp <- max(di) - } - if (amp < 10) { - d <- 2 - } else { - d <- signif(amp%%/%%10,1) - } - mn <- round(min(di)) - mx <- round(max(di)) - for (i in mn:mx) { - if ((i/d) == (i%%/%%d)) { - abline(h=i,lty=3) + if not 'tree' in parametres : + txt += """ + source("%s") + color = rainbow(nrow(di)) + width <- %i + height <- %i + open_file_graph("%s",width = width, height = height, svg = %s) + par(mar=c(0,0,0,0)) + layout(matrix(c(1,2),1,2, byrow=TRUE),widths=c(3,lcm(7))) + par(mar=c(8,4,1,0)) + yp = ifelse(length(toinf), 0.2, 0) + ym = ifelse(length(tominf), 0.2, 0) + ymin <- ifelse(!length(which(di < 0)), 0, min(di) - ym) + coord <- barplot(as.matrix(di), beside = TRUE, col = color, space = c(0.1,0.6), ylim=c(ymin, max(di) + yp), las = 2) + if (length(toinf)) { + coordinf <- coord[toinf] + valinf <- di[toinf] + text(x=coordinf, y=valinf + 0.1, 'i') } - } - par(mar=c(0,0,0,0)) - plot(0, axes = FALSE, pch = '') - legend(x = 'center' , rownames(di), fill = color) - dev.off() - """ % (rgraph, ffr(tmpgraph)) + if (length(tominf)) { + coordinf <- coord[toinf] + valinf <- di[toinf] + text(x=coordinf, y=valinf - 0.1, 'i') + } + c <- colMeans(coord) + c1 <- c[-1] + c2 <- c[-length(c)] + cc <- cbind(c1,c2) + lcoord <- apply(cc, 1, mean) + abline(v=lcoord) + if (min(di) < 0) { + amp <- abs(max(di) - min(di)) + } else { + amp <- max(di) + } + if (amp < 10) { + d <- 2 + } else { + d <- signif(amp%%/%%10,1) + } + mn <- round(min(di)) + mx <- round(max(di)) + for (i in mn:mx) { + if ((i/d) == (i%%/%%d)) { + abline(h=i,lty=3) + } + } + par(mar=c(0,0,0,0)) + plot(0, axes = FALSE, pch = '') + legend(x = 'center' , rownames(di), fill = color) + dev.off() + """ % (ffr(parametres['rgraph']), parametres['width'], parametres['height'], ffr(parametres['tmpgraph']), parametres['svg']) + else : + txt += """ + load("%s") + library(ape) + source("%s") + width = %i + height = %i + open_file_graph("%s", width=width, height=height, svg = %s) + plot.dendro.lex(tree.cut1$tree.cl, di) + """ % (ffr(parametres['tree']), ffr(parametres['rgraph']), parametres['width'], parametres['height'], ffr(parametres['tmpgraph']), parametres['svg']) return txt #def RAfcUci(DictAfcUciOut, nd=2, RscriptsPath='', PARCEX='0.8'): @@ -708,8 +721,12 @@ class PrintSimiScript(PrintRScript) : dm <-readMM(dm.path) cn <- read.table(cn.path, sep='\t', quote='"') colnames(dm) <- cn[,1] - sel.col <- read.csv2(selected.col, header = FALSE) - sel.col <- sel.col[,1] + 1 + if (file.exists(selected.col)) { + sel.col <- read.csv2(selected.col, header = FALSE) + sel.col <- sel.col[,1] + 1 + } else { + sel.col <- 1:ncol(dm) + } if (!word) { dm <- dm[, sel.col] } else { @@ -738,8 +755,12 @@ class PrintSimiScript(PrintRScript) : txt += """ dm <-read.csv2(dm.path) dm <- as.matrix(dm) - sel.col <- read.csv2(selected.col, header = FALSE) - sel.col <- sel.col[,1] + 1 + if (file.exists(selected.col)) { + sel.col <- read.csv2(selected.col, header = FALSE) + sel.col <- sel.col[,1] + 1 + } else { + sel.col <- 1:ncol(dm) + } if (!word) { dm <- dm[, sel.col] } else { @@ -837,11 +858,28 @@ class PrintSimiScript(PrintRScript) : if self.parametres['type_graph'] == 1 : graphnb = 1 type = 'nplot' - dirout = os.path.dirname(self.pathout['mat01']) + dirout = os.path.dirname(self.pathout['mat01.csv']) while os.path.exists(os.path.join(dirout,'graph_simi_'+str(graphnb)+'.png')): graphnb +=1 self.filename = ffr(os.path.join(dirout,'graph_simi_'+str(graphnb)+'.png')) if self.parametres['type_graph'] == 2 : type = 'rgl' + if self.parametres['type_graph'] == 3 : + graphnb = 1 + type = 'web' + dirout = os.path.dirname(self.pathout['mat01.csv']) + while os.path.exists(os.path.join(dirout,'web_'+str(graphnb))): + graphnb +=1 + self.filename = ffr(os.path.join(dirout,'web_'+str(graphnb))) + os.mkdir(self.filename) + self.filename = os.path.join(self.filename, 'gexf.gexf') + if self.parametres['type_graph'] == 4 : + graphnb = 1 + type = 'rglweb' + dirout = os.path.dirname(self.pathout['mat01.csv']) + while os.path.exists(os.path.join(dirout,'webrgl_'+str(graphnb))): + graphnb +=1 + self.filename = ffr(os.path.join(dirout,'webrgl_'+str(graphnb))) + os.mkdir(self.filename) if self.parametres['arbremax'] : arbremax = 'TRUE' @@ -893,6 +931,9 @@ class PrintSimiScript(PrintRScript) : """ txt += """ seuil <- %s + if (method!='cooc') { + seuil <- seuil/100 + } """ % seuil txt += """ @@ -1015,7 +1056,7 @@ class PrintSimiScript(PrintRScript) : """ else : txt+=""" - label.cex <- NULL + label.cex <- cex """ if self.parametres.get('sfromchi', False) : txt += """ @@ -1026,7 +1067,8 @@ class PrintSimiScript(PrintRScript) : vertex.size <- NULL """ else : - if self.parametres['type'] == 'clustersimitxt' : + #print self.parametres + if (self.parametres['type'] == 'clustersimitxt' and self.parametres.get('tmpchi', False)) or (self.parametres['type'] == 'simimatrix' and 'tmpchi' in self.parametres): txt += """ lchi <- read.table("%s") lchi <- lchi[,1] @@ -1041,12 +1083,12 @@ class PrintSimiScript(PrintRScript) : else : txt += """ if (is.null(vcexminmax[1])) { - label.cex <- NULL + label.cex <- cex } else { label.cex <- graph.simi$label.cex } """ - if self.parametres['type'] == 'clustersimitxt' and self.parametres.get('sfromchi', False) : + if (self.parametres['type'] == 'clustersimitxt' or self.parametres['type'] == 'simimatrix') and self.parametres.get('sfromchi', False): txt += """ vertex.size <- norm.vec(lchi, minmaxeff[1], minmaxeff[2]) if (!length(vertex.size)) vertex.size <- 0 @@ -1090,7 +1132,14 @@ class WordCloudRScript(PrintRScript) : self.packages(['wordcloud']) bg_col = Rcolor(self.parametres['col_bg']) txt_col = Rcolor(self.parametres['col_text']) + if self.parametres['svg'] : + svg = 'TRUE' + else : + svg = 'FALSE' txt = """ + svg <- %s + """ % svg + txt += """ act <- read.csv2("%s", header = FALSE, row.names=1, sep='\t') selected.col <- read.table("%s") toprint <- as.matrix(act[selected.col[,1] + 1,]) @@ -1100,10 +1149,63 @@ class WordCloudRScript(PrintRScript) : toprint <- as.matrix(toprint[order(toprint[,1], decreasing=TRUE),]) toprint <- as.matrix(toprint[1:maxword,]) } - open_file_graph("%s", width = %i, height = %i) + open_file_graph("%s", width = %i, height = %i , svg = svg) par(bg=rgb%s) wordcloud(row.names(toprint), toprint[,1], scale=c(%f,%f), random.order=FALSE, colors=rgb%s) dev.off() """ % (ffr(self.analyse.pathout['actives_eff.csv']), ffr(self.analyse.pathout['selected.csv']), self.parametres['maxword'], ffr(self.parametres['graphout']), self.parametres['width'], self.parametres['height'], bg_col, self.parametres['maxcex'], self.parametres['mincex'], txt_col) self.add(txt) self.write() + +class ProtoScript(PrintRScript) : + def make_script(self) : + self.sources([self.analyse.parent.RscriptsPath['Rgraph'], self.analyse.parent.RscriptsPath['prototypical.R']]) + self.packages(['wordcloud']) + if self.parametres.get('cloud', False) : + cloud = 'TRUE' + else : + cloud = 'FALSE' + txt = """ + errorn <- function(x) { + qnorm(0.975)*sd(x)/sqrt(lenght(n)) + } + errort <- function(x) { + qt(0.975,df=lenght(x)-1)*sd(x)/sqrt(lenght(x)) + } + mat <- read.csv2("%s", header = FALSE, row.names=1, sep='\t', quote='"', dec='.') + open_file_graph("%s",height=800, width=1000) + prototypical(mat, mfreq = %s, mrank = %s, cloud = FALSE, cexrange=c(1,2.4), cexalpha= c(0.4, 1), type = '%s') + dev.off() + """ % (self.analyse.pathout['table.csv'], self.analyse.pathout['proto.png'], self.parametres['limfreq'], self.parametres['limrang'], self.parametres['typegraph']) + self.add(txt) + self.write() + + +class ExportAfc(PrintRScript) : + def make_script(self) : + self.source([self.analyse.parent.RscriptsPath['Rgraph']]) + self.packages(['rgexf']) + txt = """ + """ + +class TgenSpecScript(PrintRScript): + def make_script(self): + self.packages(['textometry']) + txt = """ + tgen <- read.csv2("%s", row.names = 1, sep = '\\t') + """ % ffr(self.parametres['tgeneff']) + txt += """ + tot <- tgen[nrow(tgen), ] + result <- NULL + tgen <- tgen[-nrow(tgen),] + for (i in 1:nrow(tgen)) { + mat <- rbind(tgen[i,], tot - tgen[i,]) + specmat <- specificities(mat) + result <- rbind(result, specmat[1,]) + } + colnames(result) <- colnames(tgen) + row.names(result) <- rownames(tgen) + write.table(result, file = "%s", sep='\\t', col.names = NA) + """ % self.pathout['tgenspec.csv'] + self.add(txt) +