+ self.count += 1
+ keepGoing = self.dlg.Update(self.count,u"Analyse dans R...")
+ #analyse=MakeChi2(self.parent, self.colsel1, self.colsel2, self.chioption, self.tableau)
+ #self.tableau = tableau
+ self.OutFrame=tempfile.mktemp(dir=self.parent.TEMPDIR)
+ print self.OutFrame
+ #self.parent=parent
+ self.encode=self.parent.encode
+ self.TEMPDIR=self.parent.TEMPDIR
+ self.RPath=self.parent.PathPath.get('PATHS','rpath')
+ self.TextCroise=[]
+ for i in self.colsel1 :
+ for j in self.colsel2 :
+ self.TextCroise.append(self.tableau.colnames[i] + ' / ' + self.tableau.colnames[j])
+ rchioption = {}
+ for val in self.chioption :
+ if self.chioption[val]:
+ rchioption[val] = 'TRUE'
+ else :
+ rchioption[val] = 'FALSE'
+ txt="""
+ source("%s")
+ """%self.parent.RscriptsPath['Rfunct']
+# if parent.tableau.: rownames=1
+# else : rownames='NULL'
+# if parent.g_header : header = 'TRUE'
+# else : header = 'FALSE'
+ txt += """
+ source("%s")
+ """ % ffr(self.parent.RscriptsPath['Rgraph'])
+ txt += """
+ doobs <- %s
+ doexp <- %s
+ docontrib <- %s
+ doresi <- %s
+ dopr <- %s
+ doprl <- %s
+ doprc <- %s
+ dograph <- %s
+ bw <- %s
+ """ % (rchioption['valobs'], rchioption['valtheo'], rchioption['contrib'], rchioption['resi'], rchioption['pourcent'], rchioption['pourcentl'], rchioption['pourcentc'], rchioption['graph'], rchioption['bw'])
+ txt+="""
+ datadm <- read.csv2("%s", encoding="%s", header = TRUE, row.names = 1, sep='\\t', quote = '"', na.string = '')
+ listres<-list()
+ listcol<-list()
+ cont<-1
+ """%(ffr(self.tableau.parametres['csvfile']), self.tableau.parametres['syscoding'])
+ if len(self.colsel1)==1:
+ strsel1=str(self.colsel1).replace(',','')
+ else:
+ strsel1=str(self.colsel1)
+ if len(self.colsel2)==1:
+ strsel2=str(self.colsel2).replace(',','')
+ else:
+ strsel2=str(self.colsel2)
+ txt+="""
+ for (i in c%s) {""" % strsel1
+ txt+="""
+ for (j in c%s) {""" % strsel2
+ txt+="""
+ tab<-table(datadm[,i+1],datadm[,j+1])
+ if (min(dim(tab)) != 1) {
+ chi<-chisq.test(tab)
+ CS<-colSums(tab)
+ RS<-rowSums(tab)
+ GT<-sum(tab)
+ chi$contrib<-(tab-chi$expected)/sqrt(chi$expected * ((1 - RS/GT) %%*%% t(1 - CS/GT)))
+ listres[[cont]]<-chi
+ listcol[[cont]]<-ncol(tab)
+ cont<-cont+1
+ } else {
+ chi <- list(observed = tab, residuals = tab, contrib = tab, statistic = 0, p.value = 1, expected = tab, message = 'pas de calcul')
+ listres[[cont]] <- chi
+ listcol[[cont]]<-ncol(tab)
+ cont <- cont + 1
+ }
+ }
+ }
+ maxcol<-max(unlist(listcol))+1
+ if (maxcol<7) {maxcol<-7}
+ frameout<-matrix('*',1,maxcol)
+ count<-0
+ for (chi in listres) {
+ if (min(chi$expected)<5) {
+ att<-"warning"
+ } else {
+ att<-""
+ }
+ if ('message' %%in%% attributes(chi)$names) {
+ att <- "Ce chi2 n\'a pas été calculé"
+ nom_colresi<-colnames(chi$observed)
+ chi$prl <- chi$expected
+ chi$prc <- chi$expected
+ st <- sum(chi$observed)
+ } else {
+ nom_colresi<-colnames(chi$observed)
+ st <- sum(chi$observed)
+ sc <- colSums(chi$observed)
+ sr <- rowSums(chi$observed)
+ chi$prl <- round((chi$observed/sr)*100,2)
+ chi$prc <- t(round((t(chi$observed)/sc)*100,2))
+ }
+ fileout<-paste('histo_',count,sep='')
+ fileout<-paste(fileout,'.png',sep='')
+ count<-count+1
+ fileout<-file.path("%s",fileout)
+ if (max(nchar(colnames(chi$observed)))>15) {
+ leg <- 1:length(colnames(chi$observed))
+ } else {
+ leg <- colnames(chi$observed)
+ }
+ if (dograph) {
+ width<-ncol(chi$observed)*100
+ if (width < 350) {width <- 350}
+ open_file_graph(fileout,width = width, height = 300)
+ par(mar=c(0,0,0,0))
+ layout(matrix(c(1,2),1,2, byrow=TRUE),widths=c(3,1))
+ par(mar=c(2,2,1,0))
+ par(cex=0.8)
+ if (!bw) colors <- rainbow(length(rownames(chi$observed)))
+ else colors <- gray.colors(length(rownames(chi$observed)))
+ barplot(chi$prl,names.arg = leg, beside=TRUE,border=NA, col=colors)
+ par(mar=c(0,0,0,0))
+ par(cex=0.8)
+ plot(0, axes = FALSE, pch = '')
+ legend(x = 'center' , rownames(chi$observed), fill = colors)
+ dev.off()
+ }
+ chi$prl <- cbind(chi$prl, total = rowSums(chi$prl))
+ chi$prc <- rbind(chi$prc, total = colSums(chi$prc))
+ chi$observed<-rbind(chi$observed,total=colSums(chi$observed))
+ chi$observed<-cbind(chi$observed,total=rowSums(chi$observed))
+ chi$pr <- round((chi$observed/st)*100,2)
+ chi$expected<-rbind(chi$expected,total=colSums(chi$expected))
+ chi$expected<-cbind(chi$expected,total=rowSums(chi$expected))
+ chi$expected<-round(chi$expected,digits=2)
+ chi$residuals<-round(chi$residuals,digits=2)
+ chi$contrib<-round(chi$contrib, digits=2)
+ nom_col<-colnames(chi$observed)
+
+ if (ncol(chi$observed)<maxcol) {
+ for (i in 1:(maxcol-ncol(chi$observed))) {
+ chi$observed<-cbind(chi$observed,'**')
+ chi$pr<-cbind(chi$pr,'**')
+ chi$prl<-cbind(chi$prl,'**')
+ chi$prc<-cbind(chi$prc,'**')
+ chi$expected<-cbind(chi$expected,'**')
+ chi$residuals<-cbind(chi$residuals,'**')
+ chi$contrib<-cbind(chi$contrib,'**')
+ nom_col<-append(nom_col,'**')
+ nom_colresi<-append(nom_colresi,'**')
+ }
+ chi$residuals<-cbind(chi$residuals,'**')
+ chi$contrib<-cbind(chi$contrib,'**')
+ nom_colresi<-append(nom_colresi,'**')
+ chi$prc<-cbind(chi$prc,'**')
+ } else if (ncol(chi$observed)==maxcol) {
+ chi$residuals<-cbind(chi$residuals,'**')
+ chi$contrib<-cbind(chi$contrib,'**')
+ nom_colresi<-append(nom_colresi,'**')
+ chi$prc<-cbind(chi$prc,'**')
+ }
+ if (doobs) {
+ li<-matrix('*obs*',1,maxcol)
+ frameout<-rbind(frameout,li)
+ frameout<-rbind(frameout,nom_col)
+ frameout<-rbind(frameout,chi$observed)
+ }
+ if (doexp) {
+ li<-matrix('*exp*',1,maxcol)
+ frameout<-rbind(frameout,li)
+ frameout<-rbind(frameout,nom_col)
+ frameout<-rbind(frameout,chi$expected)
+ }
+ if (doresi) {
+ li<-matrix('*resi*',1,maxcol)
+ frameout<-rbind(frameout,li)
+ frameout<-rbind(frameout,nom_colresi)
+ frameout<-rbind(frameout,chi$residuals)
+ }
+ if (docontrib) {
+ li<-matrix('*contrib*',1,maxcol)
+ frameout<-rbind(frameout,li)
+ frameout<-rbind(frameout,nom_colresi)
+ frameout<-rbind(frameout,chi$contrib)
+ }
+ if (dopr) {
+ li<-matrix('*pr*', 1, maxcol)
+ frameout<-rbind(frameout,li)
+ frameout<-rbind(frameout,nom_col)
+ frameout<-rbind(frameout,chi$pr)
+ }
+ if (doprl) {
+ li<-matrix('*prl*', 1, maxcol)
+ frameout<-rbind(frameout,li)
+ frameout<-rbind(frameout,nom_col)
+ frameout<-rbind(frameout,chi$prl)
+ }
+ if (doprc) {
+ li<-matrix('*prc*', 1, maxcol)
+ frameout<-rbind(frameout,li)
+ frameout<-rbind(frameout,nom_colresi)
+ frameout<-rbind(frameout,chi$prc)
+ }
+ res<-c('****','chi',chi$statistic,'p',chi$p.value,att,fileout)
+ frameout<-rbind(frameout,res)
+ }
+ li<-matrix('fin_analyse',1,maxcol)
+ frameout<-rbind(frameout,li)
+ write.csv2(frameout,file="%s")
+ """ % (ffr(self.parametres['pathout']),ffr(self.OutFrame))
+ tmpfile=tempfile.mktemp(dir=self.TEMPDIR)
+ print tmpfile
+ tmpscript=open(tmpfile,'w')
+ tmpscript.write(txt)
+ tmpscript.close()
+ pid = exec_rcode(self.RPath, tmpfile, wait = False)
+ while pid.poll() == None :
+ sleep(0.2)
+ check_Rresult(self.parent, pid)
+ self.count += 1
+ keepGoing = self.dlg.Update(self.count,u"Ecriture des résultats")