from tabrsimple import InputText
from tabverges import Prototypical
#from textafcuci import AfcUci
-from analysetxt import Alceste
from textdist import AnalysePam
from textstat import Stat
from textaslexico import Lexico
from textsimi import SimiTxt, SimiFromCluster
from textwordcloud import WordCloud, ClusterCloud
+from textreinert import Reinert
#from profile_segment import ProfileSegment
#from textcheckcorpus import checkcorpus
from openanalyse import OpenAnalyse
-from corpus import Builder
-from sheet import MySheet
+from corpus import Builder, SubBuilder
+#from sheet import MySheet
from checkinstall import CreateIraDirectory, CheckRPath, FindRPAthWin32, FindRPathNix, CheckRPackages, IsNew, UpgradeConf, CopyConf, RLibsAreInstalled
from chemins import RscriptsPath, ConstructConfigPath, ConstructDicoPath, ConstructGlobalPath, PathOut
from parse_factiva_xml import ImportFactiva
ID_Chi2 = wx.NewId()
ID_Student = wx.NewId()
ID_CHDSIM = wx.NewId()
-ID_CHDAlceste = wx.NewId()
+ID_CHDReinert = wx.NewId()
ID_TEXTAFCM = wx.NewId()
ID_TEXTSTAT = wx.NewId()
ID_ASLEX = wx.NewId()
-ID_TEXTALCESTE = wx.NewId()
+ID_TEXTREINERT = wx.NewId()
ID_TEXTPAM = wx.NewId()
ID_CHECKCORPUS = wx.NewId()
ID_Tabcontent = wx.NewId()
menuTools = wx.Menu()
splitvar = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Split from variable").decode('utf8'))
extractmod = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract mods").decode('utf8'))
+ extractthem = wx.MenuItem(menuTools, wx.ID_ANY, _(u"Extract thematics").decode('utf8'))
menuTools.AppendItem(splitvar)
menuTools.AppendItem(extractmod)
+ menuTools.AppendItem(extractthem)
self.ID_splitvar = splitvar.GetId()
self.ID_extractmod = extractmod.GetId()
+ self.ID_extractthem = extractthem.GetId()
file_menu.AppendMenu(-1, _(u"Tools"), menuTools)
- item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
- item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
- file_menu.AppendItem(item)
+ #item = wx.MenuItem(file_menu, ID_SaveTab, _(u"Save tab as...").decode('utf8'), _(u"Save tab as...").decode('utf8'))
+ #item.SetBitmap(wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS))
+ #file_menu.AppendItem(item)
file_menu.Append(wx.ID_EXIT, _(u"Exit").decode('utf8'))
analyse_menu.Append(ID_Chi2, _(u"Chi2").decode('utf8'))
#analyse_menu.Append(ID_Student, u"t de Student")
menu_classif = wx.Menu()
- menu_classif.Append(ID_CHDAlceste, _(u"Reinert Method").decode('utf8'))
+ menu_classif.Append(ID_CHDReinert, _(u"Reinert's Method").decode('utf8'))
#menu_classif.Append(ID_CHDSIM, u"Par matrice des distances")
analyse_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classif)
#analyse_menu.Append(ID_AFCM, u"AFCM")
text_menu.Append(ID_ASLEX, _(u"Specificities and CA").decode('utf8'))
#text_menu.Append(ID_TEXTAFCM, u"AFC sur UCI / Vocabulaire")
menu_classiftxt = wx.Menu()
- menu_classiftxt.Append(ID_TEXTALCESTE, _(u"Reinert Method").decode('utf8'))
+ menu_classiftxt.Append(ID_TEXTREINERT, _(u"Reinert's Method").decode('utf8'))
#menu_classiftxt.Append(ID_TEXTPAM, u"Par matrice des distances")
text_menu.AppendMenu(-1, _(u"Clustering").decode('utf8'), menu_classiftxt)
text_menu.Append(ID_SimiTxt, _(u"Similarities Analysis").decode('utf8'))
self._mgr.AddPane(self.nb, aui.AuiPaneInfo().
Name("Tab_content").
CenterPane())
- self.Sheet = MySheet(self)
+
#self._mgr.AddPane(self.Sheet, wx.aui.AuiPaneInfo().Name("Data").CenterPane())
- self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
+ #self._mgr.AddPane(self.Sheet, aui.AuiPaneInfo().Name("Data").CenterPane())
self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CLOSE, self.OnCloseTab)
self.nb.Bind(aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
# add the toolbars to the manager
self.Bind(wx.EVT_MENU, self.import_factiva_txt, fact_from_txt)
self.Bind(wx.EVT_MENU, self.ExtractTools, splitvar)
self.Bind(wx.EVT_MENU, self.ExtractTools, extractmod)
+ self.Bind(wx.EVT_MENU, self.ExtractTools, extractthem)
self.Bind(wx.EVT_MENU, self.OnFreq, id=ID_Freq)
self.Bind(wx.EVT_MENU, self.OnChi2, id=ID_Chi2)
self.Bind(wx.EVT_MENU, self.OnStudent, id=ID_Student)
self.Bind(wx.EVT_MENU, self.OnCHDSIM, id=ID_CHDSIM)
- self.Bind(wx.EVT_MENU, self.OnCHDAlceste, id=ID_CHDAlceste)
+ self.Bind(wx.EVT_MENU, self.OnCHDReinert, id=ID_CHDReinert)
self.Bind(wx.EVT_MENU, self.OnAFCM, id=ID_AFCM)
self.Bind(wx.EVT_MENU, self.OnProto, id=ID_proto)
self.Bind(wx.EVT_MENU, self.OnRCode, id=ID_RCODE)
self.Bind(wx.EVT_MENU, self.OnTextStat, id=ID_TEXTSTAT)
self.Bind(wx.EVT_MENU, self.OnTextSpec, id=ID_ASLEX)
self.Bind(wx.EVT_MENU, self.OnTextAfcm, id=ID_TEXTAFCM)
- self.Bind(wx.EVT_MENU, self.OnTextAlceste, id=ID_TEXTALCESTE)
+ self.Bind(wx.EVT_MENU, self.OnTextReinert, id=ID_TEXTREINERT)
self.Bind(wx.EVT_MENU, self.OnPamSimple, id=ID_TEXTPAM)
self.Bind(wx.EVT_MENU, self.OnSimiTxt, id=ID_SimiTxt)
self.Bind(wx.EVT_MENU, self.OnWordCloud, id=ID_WC)
- self.Bind(wx.EVT_MENU, self.OnSimi, id=ID_SIMI)
+ self.Bind(wx.EVT_MENU, self.OnSimiTab, id=ID_SIMI)
self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
- self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
+ #self.Bind(wx.EVT_MENU, self.OnSaveTabAs, id=ID_SaveTab)
self.Bind(wx.EVT_MENU, self.OnAbout, id=wx.ID_ABOUT)
self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
self.Bind(wx.EVT_MENU, self.OnPref, id=wx.ID_PREFERENCES)
def OnOpenData(self, event):
inputname, self.input_path = OnOpen(self, "Data")
if inputname:
- self.filename = self.input_path[0]
+ #filename = self.input_path[0]
self.tableau = Tableau(self,os.path.abspath(self.input_path[0]))
- get_table_param(self, self.input_path[0])
- self.tableau.make_content()
- self.tableau.show_tab()
+ val = get_table_param(self, self.input_path[0])
+ if val == wx.ID_OK :
+ self.tableau.make_content()
+ OpenAnalyse(self, self.tableau.parametres)
+ self.tree.OnItemAppend(self.tableau.parametres)
+ #self.tableau.show_tab()
def OnOpenAnalyse(self, event):
self.AnalysePath = OnOpen(self, "Analyse")
self.DataPop = False
self.ShowAPane(u"Text")
self._mgr.Update()
-
+
+ def OnSubText(self, corpus, parametres = None):
+ busy = wx.BusyInfo(_("Please wait...").decode('utf8'), self)
+ wx.SafeYield()
+ builder = SubBuilder(self, corpus, parametres)
+ del busy
+ if builder.res == wx.ID_OK :
+ corpus = builder.doanalyse()
+ self.history.add(corpus.parametres)
+ self.tree.OnItemAppend(corpus.parametres)
+ OpenAnalyse(self, corpus.parametres)
+
def OpenText(self):
dlg = wx.ProgressDialog("Ouverture...",
"Veuillez patienter...",
npage = self.nb.GetPage(new)
if 'parametres' in dir(npage) :
self.tree.GiveFocus(uuid=npage.parametres['uuid'])
+ if npage.parametres.get('matrix', False) :
+ self.ShowMenu(_(u"Text analysis").decode('utf8'), False)
+ self.ShowMenu(_(u"Matrix analysis").decode('utf8'), True)
+ elif npage.parametres.get('corpus', False) :
+ self.ShowMenu(_(u"Text analysis").decode('utf8'))
+ self.ShowMenu(_(u"Matrix analysis").decode('utf8'), False)
def OnCloseTab(self, evt):
#log.info('Closing tab %s' % str(evt.GetEventObject()))
self.history.rmtab(page.parametres)
self.tree.CloseItem(uuid = page.parametres['uuid'])
TabTitle = self.nb.GetPageText(self.nb.GetSelection())
- if self.DictTab != {} :
- if TabTitle in self.DictTab :
- ListFile=self.DictTab[TabTitle]
- if False in ListFile:
- msg = u"""
-Certains résultats ne sont pas enregistrer.
-Voulez-vous fermer quand même ?"""
- dlg = wx.MessageDialog(self, msg, "Sauvegarde",wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
-
- dlg.CenterOnParent()
- if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
- remove = False
- evt.Veto()
- dlg.Destroy()
- else :
- for f in ListFile[1:] :
- print 'remove', f
- os.remove(f)
- remove = True
- dlg.Destroy()
- elif True in ListFile :
- remove = True
- if remove:
- del self.DictTab[TabTitle]
- else :
- self.LastTabClose()
- else :
- remove = True
- if self.nb.GetPageCount() == 1 and remove and not notebook :
+# if self.DictTab != {} :
+# if TabTitle in self.DictTab :
+# ListFile=self.DictTab[TabTitle]
+# if False in ListFile:
+# msg = u"""
+# Certains résultats ne sont pas enregistrer.
+# Voulez-vous fermer quand même ?"""
+# dlg = wx.MessageDialog(self, msg, "Sauvegarde",wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+#
+# dlg.CenterOnParent()
+# if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]:
+# remove = False
+# evt.Veto()
+# dlg.Destroy()
+# else :
+# for f in ListFile[1:] :
+# print 'remove', f
+# os.remove(f)
+# remove = True
+# dlg.Destroy()
+# elif True in ListFile :
+# remove = True
+# if remove:
+# del self.DictTab[TabTitle]
+# else :
+# self.LastTabClose()
+# else :
+# remove = True
+ if self.nb.GetPageCount() == 1 and not notebook :
self.LastTabClose()
def LastTabClose(self) :
if self.nb.GetPageCount() == 1 :
- self.DisEnSaveTabAs(False)
+ #self.DisEnSaveTabAs(False)
if self.DataTxt :
self.ShowAPane("Text")
elif self.DataPop :
else :
self.ShowAPane("Intro_Text")
- def OnSaveTabAs(self, event):
- SelectTab = self.nb.GetSelection()
- TabTitle = self.nb.GetPageText(SelectTab)
- FileToSave = self.DictTab[TabTitle]
- NewListFile = []
- dlg = wx.FileDialog(
- self, message="Enregistrer sous...", defaultDir=os.getcwd(),
- defaultFile="resultat.html", wildcard="Tous les fichiers|*", style=wx.SAVE | wx.OVERWRITE_PROMPT
- )
- dlg.SetFilterIndex(2)
- dlg.CenterOnParent()
-
- if dlg.ShowModal() == wx.ID_OK:
- Path = dlg.GetPath()
- Dirname = os.path.dirname(Path)
- Filename = dlg.GetFilename()
- else :
- Path = False
- dlg.Destroy()
- if Path:
- shutil.copyfile(FileToSave[-1], Path)
- os.remove(FileToSave[len(FileToSave) - 1])
- NewListFile.append(True)
- NewListFile.append(Path)
- for f in FileToSave[1:-1] :
- Fileout = os.path.join(Dirname, os.path.basename(f))
- shutil.copyfile(f, Fileout)
- NewListFile.append(Fileout)
- os.remove(f)
- TabText = Filename
- self.DictTab[TabText] = NewListFile
- del self.DictTab[TabTitle]
- self.nb.SetPageText(SelectTab, TabText)
+# def OnSaveTabAs(self, event):
+# SelectTab = self.nb.GetSelection()
+# TabTitle = self.nb.GetPageText(SelectTab)
+# FileToSave = self.DictTab[TabTitle]
+# NewListFile = []
+# dlg = wx.FileDialog(
+# self, message="Enregistrer sous...", defaultDir=os.getcwd(),
+# defaultFile="resultat.html", wildcard="Tous les fichiers|*", style=wx.SAVE | wx.OVERWRITE_PROMPT
+# )
+# dlg.SetFilterIndex(2)
+# dlg.CenterOnParent()
+#
+# if dlg.ShowModal() == wx.ID_OK:
+# Path = dlg.GetPath()
+# Dirname = os.path.dirname(Path)
+# Filename = dlg.GetFilename()
+# else :
+# Path = False
+# dlg.Destroy()
+# if Path:
+# shutil.copyfile(FileToSave[-1], Path)
+# os.remove(FileToSave[len(FileToSave) - 1])
+# NewListFile.append(True)
+# NewListFile.append(Path)
+# for f in FileToSave[1:-1] :
+# Fileout = os.path.join(Dirname, os.path.basename(f))
+# shutil.copyfile(f, Fileout)
+# NewListFile.append(Fileout)
+# os.remove(f)
+# TabText = Filename
+# self.DictTab[TabText] = NewListFile
+# del self.DictTab[TabTitle]
+# self.nb.SetPageText(SelectTab, TabText)
def GetStartPosition(self):
################################################################
#debut des analyses
################################################################
-
- def OnFreq(self, event):
+ def analyse_matrix(self, evt, analyse, analyse_type = '', matrix = None, dlgnb = 1):
+ if matrix is None :
+ matrix = self.tree.getmatrix()
+ #try :
+ analyse(self, matrix, parametres = {'type' : analyse_type}, dlg = progressbar(self, dlgnb))
+ #except:
+ # BugReport(self)
+
+ def OnFreq(self, event, matrix = None):
+ self.analyse_matrix(event, Frequences, analyse_type = 'freq', matrix = matrix, dlgnb = 3)
+ #if matrix is None :
+ # matrix = self.tree.getmatrix()
+ #try:
+ # Frequences(self, matrix, parametres = {'type' : 'freq'}, dlg = progressbar(self, 3))
+ #except:
+ # BugReport(self)
+
+ def OnChi2(self, event, matrix = None):
+ #try:
+ self.analyse_matrix(event, ChiSquare, matrix = matrix, analyse_type = 'chi2', dlgnb = 3)
+ #except:
+ # BugReport(self)
+
+ def OnSimiTab(self, event, matrix = None):
+ if matrix is None :
+ matrix = self.tree.getmatrix()
try:
- Frequences(self)
+ DoSimi(self, matrix, parametres = {'type' : 'simimatrix'}, dlg = progressbar(self, 3))
except:
BugReport(self)
+
+ def OnCHDReinert(self, event, matrix = None):
+ if matrix is None :
+ matrix = self.tree.getmatrix()
+ AnalyseQuest(self, matrix, parametres = {'type' : 'reinertmatrix'}, dlg = progressbar(self, 3))
- def OnChi2(self, event):
- try:
- # print('PAS DE DEBUG SUR CHI2')
- chi = ChiSquare(self)
- except:
- BugReport(self)
-
def OnStudent(self, event):
try:
MakeStudent(self)
except:
BugReport(self)
- def OnCHDAlceste(self, event):
- try:
- # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
- self.quest = AnalyseQuest(self)
- if self.quest.val == wx.ID_OK:
- PlaySound(self)
- except:
- BugReport(self)
+# def OnCHDReinert(self, event):
+# try:
+# # print('PLUS DE BUG SUR ALCESTE QUESTIONNAIRE')
+# self.quest = AnalyseQuest(self)
+# if self.quest.val == wx.ID_OK:
+# PlaySound(self)
+# except:
+# BugReport(self)
def OnProto(self, evt) :
Prototypical(self, {'type' : 'proto'})
ID = evt.GetId()
if ID == self.ID_splitvar :
Extract(self, 'splitvar')
- else :
+ elif ID == self.ID_extractmod :
Extract(self, 'mods')
+ elif ID == self.ID_extractthem :
+ Extract(self, 'them')
- def OnTextAlceste(self, event, corpus = None):
+ def OnTextReinert(self, event, corpus = None):
try:
#print('ATTENTION : PLUS DE BUG SUR ALCESTE')
#RunAnalyse(self, corpus, Alceste, OptAlceste)
if corpus is None :
corpus = self.tree.getcorpus()
- self.Text = Alceste(self, corpus, parametres = {'type': 'alceste'}, dlg = progressbar(self,6))
+ self.Text = Reinert(self, corpus, parametres = {'type': 'alceste'}, dlg = progressbar(self,6))
if self.Text.val == wx.ID_OK:
PlaySound(self)
except:
BugReport(self)
def SimiCluster(self, parametres = {}, fromprof = False, pathout = '', listactives = [], actives = [], tableau = None) :
- DoSimi(self, param = parametres, fromprof = fromprof, pathout = pathout, listactives = listactives, actives = actives, tableau = tableau)
+ DoSimi(self, param = parametres, fromprof = fromprof, listactives = listactives, actives = actives, tableau = tableau)
- def OnSimi(self,evt):
- try :
+# def OnSimi(self,evt):
+# try :
#print 'ATTENTION !!!! VERGES'
#print 'PLUS DE BUG SUR SIMI'
- self.res = DoSimi(self, param = None)
+# self.res = DoSimi(self, param = None)
#self.res = Verges(self)
- if self.res.val == wx.ID_OK :
- PlaySound(self)
- except :
- BugReport(self)
+# if self.res.val == wx.ID_OK :
+# PlaySound(self)
+# except :
+# BugReport(self)
#################################################################
def OnHelp(self, event):
from guifunct import SelectColumn, PrepSimi, PrefSimi
from webexport import WebExport
from corpus import Corpus
+from sheet import MySheet
import datetime
import sys
import tempfile
self.corpus.make_ucecl_from_R(self.pathout['uce'])
corpname = self.corpus.parametres['corpus_name']
else :
- corpname = self.corpus.parametres['name']
+ corpname = self.corpus.parametres['matrix_name']
+ if os.path.exists(self.pathout['analyse.db']) :
+ self.corpus.read_tableau(self.pathout['analyse.db'])
clnb = parametres['clnb']
dlg = progressbar(self, maxi = 4 + clnb)
self.rightwin1 = rightwin1
winids.append(rightwin1.GetId())
-
+class TgenLayout :
+ def __init__(self, page):
+ self.page = page
+ parametres = self.page.parametres
+ ira = wx.GetApp().GetTopWindow()
+ self.page.tgens, etoiles = ReadList(parametres['tgenspec'], ira.syscoding, sep="\t")
+ tgentab = False
+ for i in range(page.GetPageCount()) :
+ tab = page.GetPage(i)
+ if 'tgen' in dir(tab) :
+ if tab.tgen :
+ tgentab = tab
+ break
+ if tgentab :
+ self.page.tgentab.RefreshData(self.page.tgens)
+ self.page.SetSelection(i)
+ else :
+ self.page.tgentab = ListForSpec(ira, None, self.page.tgens, etoiles[1:])
+ self.page.tgentab.tgen = True
+ self.page.AddPage(self.page.tgentab, u'Tgens Specificities')
+ self.page.SetSelection(self.page.GetPageCount() - 1)
class dolexlayout :
def __init__(self, ira, corpus, parametres):
self.DictEffType, firstefft = ReadList(self.dictpathout['tabletypem'], self.corpus.parametres['syscoding'])
self.DictEffRelForme, firsteffrelf = ReadList(self.dictpathout['eff_relatif_forme'], self.corpus.parametres['syscoding'])
self.DictEffRelType, firsteffrelt = ReadList(self.dictpathout['eff_relatif_type'], self.corpus.parametres['syscoding'])
-
+ self.etoiles = firsteff[1:]
#sash = SashList(ira.nb)
self.TabStat = aui.AuiNotebook(ira.nb, -1, wx.DefaultPosition)
self.TabStat.parametres = parametres
- self.ListPan = ListForSpec(ira, self, self.DictSpec, first)
+ self.ListPan = ListForSpec(ira, self, self.DictSpec, self.etoiles)
if os.path.exists(self.pathout['banalites.csv']) :
- self.listban = ListForSpec(ira, self, self.dictban, firstban)
+ self.listban = ListForSpec(ira, self, self.dictban, ['eff'] + self.etoiles)
#self.ListPan2 = ListForSpec(sash.rightwin1, self, self.DictSpec, first)
- self.ListPant = ListForSpec(ira, self, self.DictType, firstt)
- self.ListPanEff = ListForSpec(ira, self, self.DictEff, firsteff)
- self.ListPanEffType = ListForSpec(ira, self, self.DictEffType, firstefft)
- self.ListPanEffRelForme = ListForSpec(ira, self, self.DictEffRelForme, firsteffrelf)
- self.ListPanEffRelType = ListForSpec(ira, self.parent, self.DictEffRelType, firsteffrelt)
+ self.ListPant = ListForSpec(ira, self, self.DictType, self.etoiles)
+ self.ListPanEff = ListForSpec(ira, self, self.DictEff, self.etoiles)
+ self.ListPanEffType = ListForSpec(ira, self, self.DictEffType, self.etoiles)
+ self.ListPanEffRelForme = ListForSpec(ira, self, self.DictEffRelForme, self.etoiles)
+ self.ListPanEffRelType = ListForSpec(ira, self.parent, self.DictEffRelType, self.etoiles)
self.TabStat.AddPage(self.ListPan, u'formes')
if os.path.exists(self.pathout['banalites.csv']) :
self.tabAFCTGraph = GraphPanelAfc(self.TabAFC, self.dictpathout, list_graph, self.parametres['clnb'], itempath ='liste_graph_afct', coding=self.encoding)
self.TabAFC.AddPage(self.tabAFCTGraph, 'AFC type')
self.TabStat.AddPage(self.TabAFC, 'AFC')
+
+
+
ira.nb.AddPage(self.TabStat, u'Spécificités')
+ self.ira = ira
self.TabStat.corpus = self.corpus
+ self.TabStat.etoiles = self.etoiles
+ if os.path.exists(os.path.join(self.parametres['pathout'], 'tgenspec.csv')) :
+ self.parametres['tgenspec'] = os.path.join(self.parametres['pathout'], 'tgenspec.csv')
+ TgenLayout(self.TabStat)
+ self.TabStat.SetSelection(0)
ira.nb.SetSelection(self.parent.nb.GetPageCount() - 1)
ira.ShowAPane("Tab_content")
self.param['type_tclasse'] = dial.m_radioBox2.GetSelection()
def make_dendro(self, dendro = 'simple') :
- while os.path.exists(os.path.join(self.dirout, 'dendrogamme_' + str(self.graphnb)+'.png')) :
+ while os.path.exists(os.path.join(self.dirout, 'dendrogramme_' + str(self.graphnb)+'.png')) :
self.graphnb += 1
- fileout = ffr(os.path.join(self.dirout,'dendrogamme_' + str(self.graphnb)+'.png'))
+ fileout = ffr(os.path.join(self.dirout,'dendrogramme_' + str(self.graphnb)+'.png'))
width = self.param['width']
height = self.param['height']
type_dendro = self.type_dendro[self.param['type_dendro']]
ira.nb.SetSelection(ira.nb.GetPageCount() - 1)
ira.ShowAPane("Tab_content")
+class MatLayout :
+ def __init__(self, ira, matrix):
+ #self.parent.content = self.csvtable
+ self.sheet = MySheet(ira.nb)
+ ira.nb.AddPage(self.sheet, matrix.parametres['matrix_name'])
+ self.sheet.Populate(matrix.csvtable)
+ self.sheet.parametres = matrix.parametres
+ #self.ira.ShowMenu(_(u"View").decode('utf8'))
+ #self.ira.ShowMenu(_(u"Matrix analysis").decode('utf8'))
+ #self.ira.ShowMenu(_(u"Text analysis").decode('utf8'), False)
+ #self.parent.type = "Data"
+ #self.parent.DataPop = False
+ ira.nb.SetSelection(ira.nb.GetPageCount() - 1)
+ ira.ShowAPane("Tab_content")
+ #self.ira.OnViewData('')
+
+
+
+
class CopusPanel(wx.Panel) :
def __init__(self, parent, parametres) :
wx.Panel.__init__ ( self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.TAB_TRAVERSAL )
self.parent = parent
self.tableau = tableau
self.parametres = parametres
+ if os.path.exists(self.pathout['analyse.db']) :
+ self.tableau.read_tableau(self.pathout['analyse.db'])
self.dolayout()
+ self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
+ self.ira.ShowAPane("Tab_content")
def dolayout(self) :
pass
+class FreqLayout(DefaultMatLayout) :
+ def dolayout(self) :
+ self.tab = wx.html.HtmlWindow(self.ira.nb, -1)
+ if "gtk2" in wx.PlatformInfo:
+ self.tab.SetStandardFonts()
+ self.tab.LoadPage(self.pathout['resultats.html'])
+ self.tab.parametres = self.parametres
+ self.ira.nb.AddPage(self.tab, u"Fréquences")
+
+
+class Chi2Layout(DefaultMatLayout) :
+ def dolayout(self):
+ self.tab = wx.html.HtmlWindow(self.ira.nb, -1)
+ if "gtk2" in wx.PlatformInfo:
+ self.tab.SetStandardFonts()
+ self.tab.LoadPage(self.pathout['resultats-chi2.html'])
+ self.tab.parametres = self.parametres
+ self.ira.nb.AddPage(self.tab, ' - '.join([u"Chi2", "%s" % self.parametres['name']]))
+ #self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
+ #self.ira.ShowAPane("Tab_content")
+
+
class ProtoLayout(DefaultMatLayout) :
def dolayout(self) :
list_graph = [['proto.png', 'Analyse prototypique']]
#self.Tab.corpus = self.corpus
self.TabProto.parametres = self.parametres
self.ira.nb.AddPage(self.TabProto, 'Analyse Prototypique - %s' % self.parametres['name'])
- self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
- self.ira.ShowAPane("Tab_content")
+ #self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1)
+ #self.ira.ShowAPane("Tab_content")
class SimiMatLayout(DefaultMatLayout) :
self.tabsimi.AddPage(self.graphpan, 'Graph')
self.tabsimi.parametres = self.parametres
self.parent.nb.AddPage(self.tabsimi, 'Analyse de graph')
- self.parent.ShowTab(True)
- self.parent.nb.SetSelection(self.parent.nb.GetPageCount() - 1)
+ #self.parent.ShowTab(True)
+ #self.parent.nb.SetSelection(self.parent.nb.GetPageCount() - 1)
def redosimi(self,evt) :
with open(self.pathout['selected.csv'],'r') as f :
#---------------------------------------------------------------------------
class ListForSpec(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.ColumnSorterMixin):
- def __init__(self, parent,gparent, dlist, first, menu = True):
+ def __init__(self, parent,gparent, dlist = {}, first = [], menu = True):
#def __init__(self, parent) :
wx.ListCtrl.__init__( self, parent, -1, style=wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
self.parent=parent
self.gparent=gparent
self.dlist=dlist
self.first = first
+ self.tgen = False
+ if 'etoiles' in dir(self.gparent) :
+ self.etoiles = self.gparent.etoiles
+ else :
+ self.etoiles = []
+ for val in self.first :
+ if val.startswith(u'X.') :
+ val = val.replace(u'X.', u'*')
+ self.etoiles.append(val)
+
self.menu = menu
#def start(self) :
self.attr1.SetBackgroundColour((230, 230, 230))
self.attr2 = wx.ListItemAttr()
self.attr2.SetBackgroundColour("light blue")
+ self.attrselected = wx.ListItemAttr()
+ self.attrselected.SetBackgroundColour("red")
+ self.selected = {}
i=0
- for name in self.first :
+ for name in [u'formes'] + self.first :
self.InsertColumn(i,name,wx.LIST_FORMAT_LEFT)
i+=1
self.SetColumnWidth(0, 180)
- for i in range(1,len(self.first)-1):
- self.SetColumnWidth(i, self.checkcolumnwidth(len(self.first[i]) * 10))
+ for i in range(0,len(self.first)):
+ self.SetColumnWidth(i + 1, self.checkcolumnwidth(len(self.first[i]) * 10))
self.itemDataMap = self.dlist
self.itemIndexMap = self.dlist.keys()
self.SetItemCount(len(self.dlist))
#listmix.ListCtrlAutoWidthMixin.__init__(self)
- listmix.ColumnSorterMixin.__init__(self, len(self.first))
+ listmix.ColumnSorterMixin.__init__(self, len(self.first) + 1)
self.SortListItems(1, 0)
#-----------------------------------------------------------------------------------------
self.Bind(wx.EVT_RIGHT_UP, self.OnRightClick)
#-----------------------------------------------------------------------------------------
+ def RefreshData(self, data):
+ self.itemDataMap = data
+ self.itemIndexMap = data.keys()
+ self.SetItemCount(len(data))
+ self.Refresh()
def checkcolumnwidth(self, width) :
if width < 80 :
return s
def OnGetItemAttr(self, item):
- if item % 2 :
- return self.attr1
+ if self.getColumnText(item, 0) not in self.selected :
+ if item % 2 :
+ return self.attr1
+ else :
+ return self.attr2
else :
- return self.attr2
-
+ return self.attrselected
+
+ def GetItemByWord(self, word):
+ return [ val for val in self.dlist if self.dlist[val][0] == word ][0]
# Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
def GetListCtrl(self):
self.Select(item)
event.Skip()
+
+ def GetString(self, evt):
+ return self.getselectedwords()[0]
+
+ def GetSelections(self):
+ return self.getselectedwords()
def getColumnText(self, index, col):
item = self.GetItem(index, col)
self.popupID2 = wx.NewId()
self.popupID3 = wx.NewId()
self.popup_Tgen_glob = wx.NewId()
+ self.onmaketgen = wx.NewId()
self.ID_stcaract = wx.NewId()
self.Bind(wx.EVT_MENU, self.OnPopupOne, id=self.popupID1)
self.Bind(wx.EVT_MENU, self.OnPopupTwo, id=self.popupID2)
self.Bind(wx.EVT_MENU, self.OnPopupThree, id=self.popupID3)
self.Bind(wx.EVT_MENU, self.OnTgen_glob, id=self.popup_Tgen_glob)
+ self.Bind(wx.EVT_MENU, self.OnMakeTgen, id=self.onmaketgen)
#self.Bind(wx.EVT_MENU, self.onstcaract, id = self.ID_stcaract)
# make a menu
menu = wx.Menu()
# add some items
menu.Append(self.popupID1, u"Formes associées")
menu.Append(self.popupID2, u"Concordancier")
- menu.Append(self.popupID3, "Graphique")
+ menu.Append(self.popupID3, u"Graphique")
menu_stcaract = wx.Menu()
self.menuid = {}
- for i, et in enumerate(self.first[1:]) :
+ for i, et in enumerate(self.etoiles) :
nid = wx.NewId()
self.menuid[nid] = i
menu_stcaract.Append(nid, et)
self.Bind(wx.EVT_MENU, self.onstcaract, id = nid)
menu.AppendMenu(-1, u"Segments de texte caractéristiques", menu_stcaract)
#menu.Append(self.popup_Tgen_glob, "Tgen global")
+ menu.Append(self.onmaketgen, "Make Tgen")
self.PopupMenu(menu)
menu.Destroy()
last = self.GetFirstSelected()
while self.GetNextSelected(last) != -1:
last = self.GetNextSelected(last)
- words.append(self.getColumnText(last, 1))
+ words.append(self.getColumnText(last, 0))
return words
def OnPopupOne(self, event):
parametres = page.parametres
paneff = self.gparent.ListPanEff
panchi = self.gparent.ListPan
- et = self.first[ind+1]
- if et.startswith(u'X.') :
- et = et.replace(u'X.', u'*')
+ #etoiles = self.gparent.etoiles
+ et = self.etoiles[ind]
+
+ #if et.startswith(u'X.') :
+ # et = et.replace(u'X.', u'*')
uces = corpus.getucesfrometoile(et)
self.la = [panchi.dlist[i][0] for i in range(0, len(panchi.dlist)) if panchi.dlist[i][ind+1] >= minind ]
self.lchi = [panchi.dlist[i][ind+1] for i in range(0, len(panchi.dlist)) if panchi.dlist[i][ind+1] >= minind ]
ntab2 = ntab2[:limite]
nuces = [val[1] for val in ntab2]
ucis_txt, ucestxt = doconcorde(corpus, nuces, self.la)
- win = message(self, u"Segments de texte caractéristiques - %s" % self.first[ind], (750, 600))
- win.html = '<html>\n' + '<br>'.join(['<br>'.join([ucis_txt[i], '<table bgcolor = #1BF0F7 border=0><tr><td><b>score : %.2f</b></td></tr></table>' % ntab2[i][0], ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
- win.HtmlPage.SetPage(win.html)
+ items = dict([[i, '<br>'.join([ucis_txt[i], '<table bgcolor = #1BF0F7 border=0><tr><td><b>score : %.2f</b></td></tr></table><br>' % ntab2[i][0], ucestxt[i]])] for i in range(0,len(ucestxt))])
+ win = message(self, items, u"Segments de texte caractéristiques - %s" % self.first[ind], (900, 600))
+ #win.html = '<html>\n' + '<br>'.join(['<br>'.join([ucis_txt[i], '<table bgcolor = #1BF0F7 border=0><tr><td><b>score : %.2f</b></td></tr></table>' % ntab2[i][0], ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
+ #win.HtmlPage.SetPage(win.html)
win.Show(True)
def OnPopupTwo(self, event):
- activenotebook = self.parent.nb.GetSelection()
- page = self.parent.nb.GetPage(activenotebook)
+ if 'nb' in dir(self.parent) :
+ activenotebook = self.parent.nb.GetSelection()
+ page = self.parent.nb.GetPage(activenotebook)
+ corpus = page.corpus
+ else :
+ corpus = self.parent.parent.parent.corpus
item=self.getColumnText(self.GetFirstSelected(), 0)
- corpus = page.corpus
uce_ok = corpus.getlemuces(item)
- win = message(self, u"Concordancier", (750, 600))
+ ira = wx.GetApp().GetTopWindow()
ucis_txt, ucestxt = doconcorde(corpus, uce_ok, [item])
- win.html = ('<html>\n<h1>%s</h1>' % item) + '<br>'.join(['<br>'.join([ucis_txt[i], ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
- win.HtmlPage.SetPage(win.html)
+ items = dict([[i, '<br><br>'.join([ucis_txt[i], ucestxt[i]])] for i in range(0,len(ucestxt))])
+ win = message(ira, items, u"Concordancier - %s" % item, (800, 500))
+ #win = message(ira, u"Concordancier", (800, 500))
+ #win.html = ('<html>\n<h1>%s</h1>' % item) + '<br>'.join(['<br>'.join([ucis_txt[i], ucestxt[i]]) for i in range(0,len(ucestxt))]) + '\n</html>'
+ #win.HtmlPage.SetPage(win.html)
win.Show(True)
def getinf(self, txt) :
last = self.GetNextSelected(last)
data = self.GetItemData(last)
datas += [data]
- colnames = self.first[1:]
+ colnames = self.etoiles
table = [[self.getinf(val) for val in line[1:]] for line in datas]
rownames = [val[0] for val in datas]
tmpgraph = tempfile.mktemp(dir=self.parent.TEMPDIR)
txt = "<img src='%s'>" % tmpgraph
win.HtmlPage.SetPage(txt)
win.Show(True)
+
+ def OnMakeTgen(self, evt):
+ self.parent.tree.OnTgenEditor(self.getselectedwords())
#License: GNU/GPL
from chemins import ChdTxtPathOut, StatTxtPathOut, PathOut
-from layout import OpenCHDS, dolexlayout, StatLayout, WordCloudLayout, OpenCorpus, SimiLayout, SimiMatLayout, ProtoLayout
+from layout import OpenCHDS, dolexlayout, StatLayout, WordCloudLayout, OpenCorpus, SimiLayout, SimiMatLayout, ProtoLayout, MatLayout, FreqLayout, Chi2Layout
from corpus import Corpus, copycorpus
from tableau import Tableau
import os
#import shelve
#from tabsimi import DoSimi
-from functions import DoConf
+from functions import DoConf, ReadDicoAsDico
from tableau import Tableau
import logging
if self.conf['type'] == 'corpus' :
corpus = self.opencorpus()
+ elif self.conf['type'] == 'matrix' :
+ matrix = self.openmatrix()
elif self.conf.get('corpus', False) in self.parent.history.corpus :
if self.conf['uuid'] in self.parent.history.analyses :
intree = True
else :
intree = False
corpus = self.openanalyse()
+
if self.conf.get('lem',1) :
- corpus.make_lems(True)
+ dolem = True
else :
- corpus.make_lems(False)
+ dolem = False
+ if self.conf.get('dictionary', False) :
+ dico = ReadDicoAsDico(self.conf['dictionary'])
+ corpus.make_lems_from_dict(dico, dolem = dolem)
+ else :
+ corpus.make_lems(lem = dolem)
if not intree :
self.parent.tree.AddAnalyse(self.conf, bold = True)
else :
self.parent.tree.GiveFocus(uuid = self.conf['uuid'], bold = True)
self.doopen(corpus)
- else :
+ elif self.conf.get('matrix', False) in self.parent.history.ordermatrix :
corpus = None
- if isinstance(parametres, dict) :
- tableau = Tableau(parent, parametres['ira'])
- else :
- tableau = Tableau(parent, parametres)
- tableau.parametres = self.conf
- tableau.dictpathout = PathOut(filename = tableau.parametres['filename'], dirout = self.conf['pathout'], analyse_type = self.conf['type'])
- tableau.dictpathout.basefiles(ChdTxtPathOut)
- tableau.read_tableau(tableau.dictpathout['db'])
- if self.parent.tree.IsInTree(uuid = self.conf['uuid']) :
- self.parent.tree.GiveFocus(uuid = self.conf['uuid'], bold = True)
- else :
- self.parent.tree.AddAnalyse(self.conf, bold = True)
- self.doopen(tableau)
+ matrix = Tableau(self.parent, parametres = self.parent.history.matrix[self.parent.history.ordermatrix[self.conf['matrix']]])
+ matrix.open()
+ #if isinstance(parametres, dict) :
+ # tableau = Tableau(parent, parametres['ira'])
+ #else :
+ # tableau = Tableau(parent, parametres)
+ #tableau.parametres = self.conf
+ #tableau.dictpathout = PathOut(filename = tableau.parametres['filename'], dirout = self.conf['pathout'], analyse_type = self.conf['type'])
+ #tableau.dictpathout.basefiles(ChdTxtPathOut)
+ #tableau.read_tableau(tableau.dictpathout['db'])
+ #if self.parent.tree.IsInTree(uuid = self.conf['uuid']) :
+ self.parent.tree.GiveFocus(uuid = self.conf['uuid'], bold = True)
+ self.doopen(matrix)
+ else :
+ self.parent.tree.AddAnalyse(self.conf, bold = True)
self.parent.history.addtab(self.conf)
def redopath(self, conf, path) :
self.parent.history.openedcorpus[self.conf['uuid']] = corpus
self.opencorpus_analyses()
self.doopen(corpus)
+
+ def openmatrix(self):
+ log.info('open matrix')
+ if self.conf['uuid'] not in self.parent.history.ordermatrix :
+ self.parent.history.addMatrix(self.conf)
+ log.info('add matrix to history')
+ self.parent.tree.OnItemAppend(self.conf)
+ if self.conf['uuid'] in self.parent.history.openedmatrix :
+ log.info('matrix is already opened')
+ self.doopen(self.parent.history.openedmatrix[self.conf['uuid']])
+ else :
+ #dial = progressbar(2)
+ #dial.Update(1, 'Ouverture du corpus')
+ matrix = Tableau(self, parametres = self.conf)
+ matrix.open()
+ self.parent.history.openedmatrix[self.conf['uuid']] = matrix
+ self.openmatrix_analyses()
+ self.doopen(matrix)
+ self.parent.history.addtab(self.conf)
def opencorpus_analyses(self) :
log.info('open analysis')
self.parent.history.addmultiple(analyses)
for analyse in analyses :
self.parent.tree.AddAnalyse(analyse, bold = False)
+
+ def openmatrix_analyses(self):
+ pass
def openanalyse(self) :
if self.conf['corpus'] in self.parent.history.openedcorpus :
elif self.conf['type'] == 'wordcloud' or self.conf['type'] == 'clustercloud':
self.parent.ShowMenu(_("Text analysis"))
WordCloudLayout(self.parent, corpus, self.conf)
- elif self.conf['type'] == 'gnepamatrix' :
+ elif self.conf['type'] == 'reinertmatrix' :
#self.parent.ShowMenu(_("Spreadsheet analysis"))
OpenCHDS(self.parent, corpus, self.conf, Alceste = False)
elif self.conf['type'] == 'simimatrix' :
SimiMatLayout(self.parent, corpus, self.conf)
elif self.conf['type'] == 'proto' :
ProtoLayout(self.parent, corpus, self.conf)
+ elif self.conf['type'] == 'matrix' :
+ MatLayout(self.parent, corpus)
+ elif self.conf['type'] == 'freq' :
+ FreqLayout(self.parent, corpus, self.conf)
+ elif self.conf['type'] == 'chi2' :
+ Chi2Layout(self.parent, corpus, self.conf)
#encodage_in = 'utf8'
#encodage_out = 'utf8'
+mois = {u'janvier' : '01',
+ u'février' : '02',
+ u'mars' : '03',
+ u'avril' : '04',
+ u'mai' : '05',
+ u'juin' : '06',
+ u'juillet' : '07',
+ u'août' : '08',
+ u'septembre' : '09',
+ u'octobre' : '10',
+ u'novembre' : '11',
+ u'décembre' : '12',
+ u'january' : '01',
+ u'february': '02',
+ u'march' : '03',
+ u'april': '04',
+ u'may': '05',
+ u'june' : '06',
+ u'july': '07',
+ u'august': '08',
+ u'september' : '09',
+ u'october': '10',
+ u'november': '11',
+ u'december': '12'}
+
def parsetxtpaste(txt):
"""
keepline = False
ucis = []
for line in txt :
- if line.startswith('Article') :
+ if line.startswith(u'Article') :
lp = line.split()
if len(lp) > 2 :
- if lp[2] == 'Article' :
+ if lp[2] == u'Article' or lp[2] == u'Next' or lp[2] == u'Previous':
ucis.append([[u'****'],''])
keepline = False
if line.startswith('SN ') : #source
- jsource = re.sub('[^A-Za-z0-9]', '', line[4:])
+ jsource = re.sub(u'[\'" !\.?;,:\+\-°&]', '', line[4:])
source = u'_'.join([u'*source', jsource]).lower()
#source = '*source_' + line[4:].replace(' ','').replace('\'','').replace(u'´','').replace(u'’','').replace('-','').lower()
ucis[-1][0].append(source)
elif line.startswith('PD ') : #date
- mois_annee = '*ma_' + line[4:].split(' ')[1] + line[4:].split(' ')[2]
- ucis[-1][0].append(mois_annee)
- annee = u'*annee_' + line[4:].split(' ')[2]
+ datemois = line[4:].split(' ')[1].lower()
+ datemois = mois.get(datemois, datemois)
+ dateannee = line[4:].split(' ')[2]
+ datejour = '%02d' % int(line[4:].split(' ')[0])
+ am = '_'.join([u'*am', dateannee, datemois])
+ amj = '_'.join([u'*amj', dateannee, datemois, datejour])
+ ucis[-1][0].append(am)
+ ucis[-1][0].append(amj)
+ annee = '_'.join([u'*annee', dateannee])
ucis[-1][0].append(annee)
elif line.strip() in no : #fin
keepline = False
#elimination des articles vides
ucis = [uci for uci in ucis if uci[1].strip() != '']
toprint = '\n\n'.join(['\n'.join([' '.join(uci[0]),uci[1]]) for uci in ucis])
- ofile.write(toprint.encode(encodage) + '\n')
+ ofile.write(toprint.encode(encodage, errors='replace') + '\n')
class ParseFactivaPaste :
def __init__(self, txtdir, fileout, encodage_in, encodage_out) :
files = os.listdir(txtdir)
+ files = [f for f in files if f.split('.')[-1] == 'txt']
tot = 0
with open(fileout,'w') as outf :
for f in files :
print f
f = os.path.join(txtdir, f)
+ print f
with codecs.open(f, 'rU', encodage_in) as infile :
content = infile.read()
ucis = parsetxtpaste(content)
# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2008-2009 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
from chemins import ConstructPathOut, ChdTxtPathOut, ConstructAfcUciPath, ffr, PathOut
from functions import sortedby, CreateIraFile, print_liste, exec_rcode, check_Rresult
import time
-class AnalyseQuest():
- def __init__(self, parent):
- dlg = PrefQuestAlc(parent)
- dlg.CenterOnParent()
- self.val = dlg.ShowModal()
- parametres = parent.tableau.parametre
- if self.val == wx.ID_OK :
- parametres['nbcl_p1'] = dlg.spin_nbcl.GetValue()
- parametres['mincl'] = dlg.spin_mincl.GetValue()
- if dlg.m_radioBox1.GetSelection() == 1 :
- parametres['listact'] = dlg.nactives
- parametres['listsup'] = dlg.varsup
+class AnalyseQuest(AnalyseMatrix):
+ def doparametres(self, dlg = None):
+ if dlg is not None :
+ dial = PrefQuestAlc(self.parent, self.tableau)
+ dial.CenterOnParent()
+ self.val = dial.ShowModal()
+ #parametres = self.tableau.parametre
+ if self.val == wx.ID_OK :
+ self.parametres['nbcl_p1'] = dial.spin_nbcl.GetValue()
+ self.parametres['mincl'] = dial.spin_mincl.GetValue()
+ if dial.m_radioBox1.GetSelection() == 1 :
+ self.parametres['listact'] = dial.nactives
+ self.parametres['listsup'] = dial.varsup
+ else :
+ self.parametres['formatted'] = 1
else :
- parametres['formatted'] = 1
- DoQuestAlceste(parent, parametres)
+ self.parametres = None
+ dial.Destroy()
+ # DoQuestAlceste(parent, parametres)
-class DoQuestAlceste(AnalyseMatrix):
- def __init__(self, parent, parametres):
- parametres['pathout'] = ConstructPathOut(parent.tableau.parametre['filename'], 'gnepaMatrix')
- self.parametres = parametres
- self.parametres['type'] = 'gnepamatrix'
+#class DoQuestAlceste(AnalyseMatrix):
+ def doanalyse(self):
+ #parametres['pathout'] = ConstructPathOut(parent.tableau.parametre['filename'], 'ReinertMatrix')
+ #self.parametres = parametres
+ #self.parametres['type'] = 'reinertmatrix'
self.DictForme = {}
self.DictFormeSup = {}
self.Min = 10
self.Linecontent = []
- self.parent = parent
- self.RPath = self.parent.PathPath.get('PATHS', 'rpath')
+ #self.parent = parent
+ #self.RPath = self.parent.PathPath.get('PATHS', 'rpath')
#self.dictpathout = PathOut(dirout = self.pathout)
#self.dictpathout = self.pathout
#self.dictpathout.basefiles(ChdTxtPathOut)
#self.pathout = self.dictpathout
self.clnb = ''
- self.ListAct = parametres.get('listact', False)
+ self.ListAct = self.parametres.get('listact', False)
self.ucecla = ''
- dlg = wx.ProgressDialog("Traitements",
- "Veuillez patienter...",
- maximum=5,
- parent=self.parent,
- style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME
- )
+ #dlg = wx.ProgressDialog("Traitements",
+ # "Veuillez patienter...",
+ # maximum=5,
+ # parent=self.parent,
+ # style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME
+ # )
- AnalyseMatrix.__init__(self, parent, parent.tableau, self.parametres, dlg = dlg)
+ #AnalyseMatrix.__init__(self, parent, parent.tableau, self.parametres, dlg = dlg)
#-----------------------------------------------------------
- def doanalyse(self) :
+# def doanalyse(self) :
#-------------------------------------------------------------------
- self.dictpathout = self.pathout
- self.dictpathout.basefiles(ChdTxtPathOut)
- self.parent.tableau.dictpathout = self.dictpathout
+ #self.dictpathout = self.pathout
+ self.pathout.basefiles(ChdTxtPathOut)
+ self.tableau.pathout.basefiles(ChdTxtPathOut)
+# self.parent.tableau.dictpathout = self.dictpathout
self.dlg.Center()
count = 1
count += 1
self.dlg.Update(count, u"passage en O/1")
if 'formatted' in self.parametres:
- self.parent.tableau.make_01_alc_format(self.dictpathout['mat01'])
+ self.tableau.make_01_alc_format(self.pathout['mat01.csv'])
else:
- self.parent.tableau.make_01_from_selection(self.parametres['listact'], self.parametres['listsup'])
- file = open(self.dictpathout['listeuce1'], 'w')
+ print self.parametres['listsup']
+ self.tableau.make_01_from_selection(self.parametres['listact'], self.parametres['listsup'])
+ file = open(self.pathout['listeuce1'], 'w')
file.write('num uce;num uc\n')
- for i in range(0, len(self.parent.tableau.linecontent)):
+ for i in range(0, len(self.tableau.linecontent)):
file.write('%i;%i\n' % (i, i))
file.close()
- self.nbind = len(self.parent.tableau.linecontent)
+ self.nbind = len(self.tableau.linecontent)
#------------------------------------------------------------
- RchdQuest(self.dictpathout, self.parent.RscriptsPath, self.parametres['nbcl_p1'], self.parametres['mincl'])
+ RchdQuest(self.pathout, self.parent.RscriptsPath, self.parametres['nbcl_p1'], self.parametres['mincl'])
#------------------------------------------------------------
count += 1
self.dlg.Update(count, u"Analyse (patientez...)")
- pid = exec_rcode(self.RPath, self.dictpathout['Rchdquest'], wait = False)
+ pid = exec_rcode(self.parent.RPath, self.pathout['Rchdquest'], wait = False)
while pid.poll() == None :
self.dlg.Pulse(u"Analyse (patientez...)")
time.sleep(0.2)
#------------------------------------------------------------
count += 1
self.dlg.Update(count, u"Ecriture des résultats")
- self.parent.tableau.buildprofil()
- self.clnb = self.parent.tableau.clnb
+ self.tableau.buildprofil()
+ self.clnb = self.tableau.clnb
self.parametres['clnb'] = self.clnb
- self.ucecla = self.parent.tableau.ucecla
+ self.ucecla = self.tableau.ucecla
self.BuildProfile()
temps = time.time() - self.t1
PrintRapport(self, self, {}, istxt = False)
- self.parent.tableau.save_tableau(self.dictpathout['db'])
+ self.tableau.save_tableau(self.pathout['db'])
#CreateIraFile(self.dictpathout, self.clnb, corpname = os.path.basename(self.parent.filename), section = 'questionnaire')
- afc_graph_list = [[os.path.basename(self.dictpathout['AFC2DL_OUT']), u'Variables actives - coordonnées - facteurs 1 / 2'],
- [os.path.basename(self.dictpathout['AFC2DSL_OUT']), u'variables illustratives - coordonnées - facteurs 1 / 2'],
- [os.path.basename(self.dictpathout['AFC2DCL_OUT']), u'Classes - Coordonnées - facteur 1 / 2'],]
- chd_graph_list = [[os.path.basename(self.dictpathout['dendro1']), u'dendrogramme à partir de chd1']]
- chd_graph_list.append([os.path.basename(self.dictpathout['arbre1']), u'chd1'])
- print_liste(self.dictpathout['liste_graph_afc'], afc_graph_list)
- print_liste(self.dictpathout['liste_graph_chd'], chd_graph_list)
+ afc_graph_list = [[os.path.basename(self.pathout['AFC2DL_OUT']), u'Variables actives - coordonnées - facteurs 1 / 2'],
+ [os.path.basename(self.pathout['AFC2DSL_OUT']), u'variables illustratives - coordonnées - facteurs 1 / 2'],
+ [os.path.basename(self.pathout['AFC2DCL_OUT']), u'Classes - Coordonnées - facteur 1 / 2'],]
+ chd_graph_list = [[os.path.basename(self.pathout['dendro1']), u'dendrogramme à partir de chd1']]
+ chd_graph_list.append([os.path.basename(self.pathout['arbre1']), u'chd1'])
+ print_liste(self.pathout['liste_graph_afc'], afc_graph_list)
+ print_liste(self.pathout['liste_graph_chd'], chd_graph_list)
- self.tableau = self.parent.tableau
+ #self.tableau = self.parent.tableau
#OpenCHDS(self.parent, self, self.dictpathout['ira'], False)
#------------------------------------------------------------
print 'fini', time.time() - self.t1
""" % self.parent.RscriptsPath['chdfunct']
txt += """
load("%s")
- """ % self.dictpathout['RData']
+ """ % self.pathout['RData']
txt += """
dataact<-read.csv2("%s", header = FALSE, sep = ';',quote = '\"', row.names = 1, na.strings = 'NA')
- """ % self.dictpathout['Contout']
+ """ % self.pathout['Contout']
txt += """
dataet<-read.csv2("%s", header = FALSE, sep = ';',quote = '\"', row.names = 1, na.strings = 'NA')
- """ % self.dictpathout['ContEtOut']
+ """ % self.pathout['ContEtOut']
txt += """
clnb<-%i
""" % self.clnb
tablesqrpact<-BuildProf(as.matrix(dataact),n1,clnb)
tablesqrpet<-BuildProf(as.matrix(dataet),n1,clnb)
PrintProfile(n1,tablesqrpact[4],tablesqrpet[4],tablesqrpact[5],tablesqrpet[5],%i,"%s","%s")
- """ % (self.clnb, self.dictpathout['PROFILE_OUT'], self.dictpathout['ANTIPRO_OUT'])
+ """ % (self.clnb, self.pathout['PROFILE_OUT'], self.pathout['ANTIPRO_OUT'])
txt += """
colnames(tablesqrpact[[2]])<-paste('classe',1:clnb,sep=' ')
colnames(tablesqrpact[[1]])<-paste('classe',1:clnb,sep=' ')
ptabletot<-rbind(as.data.frame(tablesqrpact[1]),as.data.frame(tablesqrpet[1]))
gbcluster<-n1
write.csv2(chistabletot,file="%s")
- """ % self.dictpathout['chisqtable']
+ """ % self.pathout['chisqtable']
txt += """
write.csv2(ptabletot,file="%s")
- """ % self.dictpathout['ptable']
+ """ % self.pathout['ptable']
txt += """
write.csv2(gbcluster,file="%s")
- """ % self.dictpathout['SbyClasseOut']
+ """ % self.pathout['SbyClasseOut']
if self.clnb > 2 :
txt += """
library(ca)
write.csv2(afc_table$facteur, file = "%s")
write.csv2(afc_table$colonne, file = "%s")
write.csv2(afc_table$ligne, file = "%s")
- """ % (self.dictpathout['afc_facteur'], self.dictpathout['afc_col'], self.dictpathout['afc_row'])
+ """ % (self.pathout['afc_facteur'], self.pathout['afc_col'], self.pathout['afc_row'])
txt += """
xlab <- paste('facteur 1 - ', round(afc$facteur[1,2],2), sep = '')
""" % "0.9"
txt += """
xyminmax <- PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", what='coord', deb=1, fin=(debet-1), xlab = xlab, ylab = ylab)
- """ % (self.dictpathout['AFC2DL_OUT'])
+ """ % (self.pathout['AFC2DL_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])
- """ % (self.dictpathout['AFC2DSL_OUT'])
+ """ % (self.pathout['AFC2DSL_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])
- """ % (self.dictpathout['AFC2DCL_OUT'])
+ """ % (self.pathout['AFC2DCL_OUT'])
txt += """
save.image(file="%s")
- """ % self.dictpathout['RData']
+ """ % self.pathout['RData']
tmpfile = tempfile.mktemp(dir=self.parent.TEMPDIR)
tmpscript = open(tmpfile, 'w')
tmpscript.write(txt)
# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2008 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
import wx
import os
-#from rchdng import RchdFunct
from chemins import ffr, ConstructPathOut,ChdTxtPathOut
-#from layout import PrintRapport
-#from openanalyse import OpenAnalyse
-from ConfigParser import ConfigParser
from functions import CreateIraFile, print_liste, exec_rcode, check_Rresult
-from dialog import CHDDialog, PrefQuestAlc, ClusterNbDialog
+from dialog import PrefQuestAlc, ClusterNbDialog
import tempfile
import time
time.sleep(0.2)
check_Rresult(parent, pid)
- file=open(fileout,'rU')
- lcl=file.readlines()
- file.close()
+ f=open(fileout,'rU')
+ lcl=f.readlines()
+ f.close()
ListClasseOk=[line.replace('\n','').replace('"','') for line in lcl]
ListClasseOk.pop(0)
txt += """
PlotAfc2dCoul(afc, as.data.frame(chistabletot), "%s", col = TRUE, what='crl')
""" % (rep_out['AFC2DCoulCl'])
- file=open(Rtmp,'w')
- file.write(txt)
- file.close()
+ f=open(Rtmp,'w')
+ f.write(txt)
+ f.close()
pid = exec_rcode(parent.RPath, Rtmp, wait = False)
while pid.poll() == None :
time.sleep(0.2)
# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2010 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
import HTML
import os
from time import sleep
from functions import exec_rcode, check_Rresult
from dialog import ChiDialog, PrefChi
+from analysematrix import AnalyseMatrix
def make_res(line) :
if float(line[5]) <= 0.05 and line[6] != 'warning':
return ['<a name=%i></a><br><font color=%s>%s</font><br><a href=#back_%i>retour</a><br>' % (i, val[-1], text[i], i) for i, val in enumerate(res)]
-
+chioption = { 'valobs' : True,
+ 'valtheo' : True,
+ 'resi' : False,
+ 'contrib' : True,
+ 'pourcent' : False,
+ 'pourcentl' : True,
+ 'pourcentc' : True,
+ 'graph' : True,
+ 'bw' : False,
+ }
class MakeChi2():
- def __init__(self, parent, select1, select2, chioption):
+ def __init__(self, parent, select1, select2, chioption, tableau):
+ self.tableau = tableau
self.OutFrame=tempfile.mktemp(dir=parent.TEMPDIR)
print self.OutFrame
self.parent=parent
self.TextCroise=[]
for i in select1 :
for j in select2 :
- self.TextCroise.append(parent.tableau.colnames[i] + ' / ' + parent.tableau.colnames[j])
+ self.TextCroise.append(self.tableau.colnames[i] + ' / ' + self.tableau.colnames[j])
rchioption = {}
for val in chioption :
if chioption[val]:
bw <- %s
""" % (rchioption['valobs'], rchioption['valtheo'], rchioption['contrib'], rchioption['resi'], rchioption['pourcent'], rchioption['pourcentl'], rchioption['pourcentc'], rchioption['graph'], rchioption['bw'])
txt+="""
- datadm <- ReadData("%s", encoding="%s", header = TRUE, sep = "%s",quote = '%s', na.strings = "%s",rownames= 1)
+ datadm <- read.csv2("%s", encoding="%s", header = TRUE, row.names = 1, sep='\\t', quote = '"', na.string = '')
listres<-list()
listcol<-list()
cont<-1
- """%(ffr(parent.tableau.parametre['csvfile']),self.parent.encode, parent.tableau.parametre['colsep'], parent.tableau.parametre['txtsep'], self.parent.nastrings)
+ """%(ffr(self.tableau.parametres['csvfile']), self.tableau.parametres['syscoding'])
if len(select1)==1:
strsel1=str(select1).replace(',','')
else:
chi$prl <- round((chi$observed/sr)*100,2)
chi$prc <- t(round((t(chi$observed)/sc)*100,2))
}
- fileout<-paste('histo',%i,sep='')
- fileout<-paste(fileout,'_',sep='')
- fileout<-paste(fileout,count,sep='')
+ fileout<-paste('histo_',count,sep='')
fileout<-paste(fileout,'.png',sep='')
count<-count+1
fileout<-file.path("%s",fileout)
li<-matrix('fin_analyse',1,maxcol)
frameout<-rbind(frameout,li)
write.csv2(frameout,file="%s")
- """%(parent.FreqNum,ffr(parent.TEMPDIR),ffr(self.OutFrame))
+ """ % (ffr(parent.TEMPDIR),ffr(self.OutFrame))
tmpfile=tempfile.mktemp(dir=self.TEMPDIR)
print tmpfile
tmpscript=open(tmpfile,'w')
txt = '<br><hr><br>\n'.join(['<br><br>'.join([tab[i] for tab in allhtml]) for i,val in enumerate(res)])
txt = header + pretxt + txt + '\n</body></html>'
- fileout=os.path.join(self.TEMPDIR,'resultats-chi2_%s.html'%str(self.parent.FreqNum))
- file=open(fileout,'w')
- file.write(txt)
- file.close()
+ fileout=os.path.join(self.parametres['pathout'],'resultats-chi2.html')
+ with open(fileout, 'w') as f :
+ f.write(txt)
ListFile.append(fileout)
return ListFile
-class ChiSquare():
- def __init__(self,parent):
- chioption = { 'valobs' : True,
- 'valtheo' : True,
- 'resi' : False,
- 'contrib' : True,
- 'pourcent' : False,
- 'pourcentl' : True,
- 'pourcentc' : True,
- 'graph' : True,
- 'bw' : False,
- }
- dlg = ChiDialog(parent, -1, u"Chi2", chioption, size=(400, 350),
+class ChiSquare(AnalyseMatrix):
+ def doparametres(self, dlg = None):
+ if dlg is None :
+ return
+ dial = ChiDialog(self.parent, -1, u"Chi2", chioption, self.tableau, size=(400, 350),
style = wx.DEFAULT_DIALOG_STYLE
)
- dlg.CenterOnParent()
- val = dlg.ShowModal()
- if val==wx.ID_OK :
- self.dlg=wx.ProgressDialog("Traitements",
- "Veuillez patienter...",
- maximum = 4,
- parent=parent,
- style = wx.PD_APP_MODAL|wx.PD_AUTO_HIDE|wx.PD_ELAPSED_TIME
- )
- self.dlg.Center()
+ dial.CenterOnParent()
+ val = dial.ShowModal()
+ if val==wx.ID_OK :
+ dlg.Center()
self.count = 1
- keepGoing = self.dlg.Update(self.count)
+ keepGoing = dlg.Update(self.count)
- ColSel1 = dlg.list_box_1.GetSelections()
- ColSel2 = dlg.list_box_2.GetSelections()
- if dlg.chiopt :
- chioption['valobs'] = dlg.dial.check1.GetValue()
- chioption['valtheo'] = dlg.dial.check2.GetValue()
- chioption['resi'] = dlg.dial.check3.GetValue()
- chioption['contrib'] = dlg.dial.check4.GetValue()
- chioption['pourcent'] = dlg.dial.check5.GetValue()
- chioption['pourcentl'] = dlg.dial.check6.GetValue()
- chioption['pourcentc'] = dlg.dial.check7.GetValue()
- chioption['graph'] = dlg.dial.check8.GetValue()
- chioption['bw'] = dlg.dial.checkbw.GetValue()
- dlg.dial.Destroy()
+ self.colsel1 = dial.list_box_1.GetSelections()
+ self.colsel2 = dial.list_box_2.GetSelections()
+ if dial.chiopt :
+ chioption['valobs'] = dial.dial.check1.GetValue()
+ chioption['valtheo'] = dial.dial.check2.GetValue()
+ chioption['resi'] = dial.dial.check3.GetValue()
+ chioption['contrib'] = dial.dial.check4.GetValue()
+ chioption['pourcent'] = dial.dial.check5.GetValue()
+ chioption['pourcentl'] = dial.dial.check6.GetValue()
+ chioption['pourcentc'] = dial.dial.check7.GetValue()
+ chioption['graph'] = dial.dial.check8.GetValue()
+ chioption['bw'] = dial.dial.checkbw.GetValue()
+ dial.dial.Destroy()
+ dial.Destroy()
+ self.parametres.update(chioption)
+ self.chioption = chioption
+ else :
+ if dial.chiopt :
+ dial.dial.Destroy()
+ dial.Destroy()
+ self.parametres = None
- self.count += 1
- keepGoing = self.dlg.Update(self.count,u"Analyse dans R...")
- analyse=MakeChi2(parent,ColSel1,ColSel2, chioption)
+ def doanalyse(self):
+
+
+ #self.dlg=wx.ProgressDialog("Traitements",
+ # "Veuillez patienter...",
+ # maximum = 4,
+ # parent=parent,
+ # style = wx.PD_APP_MODAL|wx.PD_AUTO_HIDE|wx.PD_ELAPSED_TIME
+ # )
+
+
- self.count += 1
- keepGoing = self.dlg.Update(self.count,u"Ecriture des résultats")
+ 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")
- listfileout = analyse.dolayout(chioption)
+ listfileout = self.dolayout(self.chioption)
#listfileout=dlg.ShowChi2(ColSel1,ColSel2)
- parent.FreqNum += 1
- parent.DictTab[u"Chi2_%s*"%parent.FreqNum]=listfileout
- parent.newtab = wx.html.HtmlWindow(parent.nb, -1)
- if "gtk2" in wx.PlatformInfo:
- parent.newtab.SetStandardFonts()
- parent.newtab.LoadPage(listfileout[len(listfileout)-1])
- parent.nb.AddPage(parent.newtab,u"Chi2_%s*"%parent.FreqNum)
- parent.nb.SetSelection(parent.nb.GetPageCount()-1)
- parent.ShowTab(wx.EVT_BUTTON)
- parent.DisEnSaveTabAs(True)
- self.count += 1
- keepGoing = self.dlg.Update(self.count,u"Fini")
- else :
- if dlg.chiopt :
- dlg.dial.Destroy()
- dlg.Destroy()
+ #parent.FreqNum += 1
+ #parent.DictTab[u"Chi2_%s*"%parent.FreqNum]=listfileout
+# parent.newtab = wx.html.HtmlWindow(parent.nb, -1)
+# if "gtk2" in wx.PlatformInfo:
+# parent.newtab.SetStandardFonts()
+# parent.newtab.LoadPage(listfileout[len(listfileout)-1])
+# parent.nb.AddPage(parent.newtab,u"Chi2_%s*"%parent.FreqNum)
+# parent.nb.SetSelection(parent.nb.GetPageCount()-1)
+# parent.ShowTab(wx.EVT_BUTTON)
+# parent.DisEnSaveTabAs(True)
+ self.count += 1
+ keepGoing = self.dlg.Update(self.count,u"Fini")
+
+ def dolayout(self, option):
+ ListFile=[False]
+ file=open(self.OutFrame,'rU')
+ content=file.readlines()
+ file.close()
+ lcont = [line.replace('"','').replace('\n','').split(';') for line in content]
+
+ lcont.pop(0)
+ lcont.pop(0)
+
+ allcoord = []
+ names = []
+
+ res = [chi for chi in lcont if chi[0]=='res']
+ res = [make_res(line) for line in res]
+ coord_res = [i for i,chi in enumerate(lcont) if chi[0]=='res']
+ if option['valobs']:
+ allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*obs*'])
+ names.append(u'Valeurs observées')
+ if option['valtheo'] :
+ allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*exp*'])
+ names.append(u'Valeurs théoriques')
+ if option['resi'] :
+ allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*resi*'])
+ names.append(u'Residuals')
+ if option['contrib'] :
+ allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*contrib*'])
+ names.append(u'Contributions a posteriori')
+ if option['pourcent'] :
+ allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*pr*'])
+ names.append(u'Pourcentages')
+ if option['pourcentl'] :
+ allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*prl*'])
+ names.append(u'Pourcentages en ligne')
+ if option['pourcentc'] :
+ allcoord.append([i for i,chi in enumerate(lcont) if chi[1]=='*prc*'])
+ names.append(u'Pourcentages en colonne')
+
+ allcoord.append(coord_res)
+ allhtml = [[clean_line(lcont[allcoord[i][j]+1:allcoord[i+1][j]]) for j, line in enumerate(allcoord[i])] for i, tab in enumerate(allcoord) if i!=len(allcoord)-1]
+
+ allhtml = [make_table(val,names[i],res) for i,val in enumerate(allhtml)]
+
+ links = make_link_list(res, self.TextCroise)
+ #colors = [line[-1] for line in res]
+
+ # good = [i for i,chi in enumerate(res) if chi[-1] == 'green' or chi[-1] == 'blue']
+ #select_good = [[val[i] for i in good] for val in tout]
+
+
+ html_res = make_restab(res)
+ allhtml.insert(0,html_res)
+
+ titles = make_title(res, self.TextCroise)
+ allhtml.insert(0,titles)
+
+ if option['graph'] :
+ graphs = [line[7] for line in res]
+ ListFile += graphs
+ html_graphs = make_htmlgraphs(graphs)
+ allhtml.append(html_graphs)
+
+ header=u"""
+ <html>\n
+ <meta http-equiv="content-Type" content="text/html; charset=%s" />\n
+ <body>\n
+ <h1>Test du Chi2</h1>\n
+ <br>
+ <table border=1><tr><td>
+ Légende : <br>
+ <font color=green>p <= 0.05</font><br>
+ <font color=blue>p <= 0.05 mais il y a des valeurs théoriques < 5</font><br>
+ <font color=red>p > 0.05</font>
+ </td></tr></table><br><br>
+ """%self.parent.SysEncoding
+
+
+ pretxt = '<br>\n'.join(links)+'<br><hr><br>\n'
+ txt = '<br><hr><br>\n'.join(['<br><br>'.join([tab[i] for tab in allhtml]) for i,val in enumerate(res)])
+ txt = header + pretxt + txt + '\n</body></html>'
+
+ fileout=os.path.join(self.parametres['pathout'],'resultats-chi2.html')
+ with open(fileout, 'w') as f :
+ f.write(txt)
+ ListFile.append(fileout)
+ return ListFile
\ No newline at end of file
# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2008 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
#from __future__ import division
import os
-import sys
import wx
-import wx.html
from chemins import ffr, FFF
import tempfile
from time import sleep
+from analysematrix import AnalyseMatrix
from functions import exec_rcode, check_Rresult
from dialog import FreqDialog
+from PrintRScript import PrintRScript
-
-class Frequences():
- def __init__(self, parent):
- #self.Filename = parent.filename
- self.fileforR = parent.tableau.parametre['csvfile']
- self.TEMPDIR = parent.TEMPDIR
- self.num = parent.FreqNum
- self.DICTFILE = {}
- self.RPath = parent.PathPath.get('PATHS', 'rpath')
- self.parent=parent
- self.tableau = parent.tableau
- dlg = FreqDialog(parent, -1, self.tableau.get_colnames(), u"Fréquences", size=(350, 200))
- dlg.CenterOnParent()
- val = dlg.ShowModal()
- if val == wx.ID_OK :
- ColSel = dlg.list_box_1.GetSelections()
- self.header=dlg.header
- dlg.Destroy()
- listfileout = self.ShowFreq(ColSel)
- parent.FreqNum += 1
- parent.DictTab[u"Fréquences_%s*" % parent.FreqNum] = listfileout
- parent.FileTabList.append(listfileout)
- parent.newtab = wx.html.HtmlWindow(parent.nb, -1)
- if "gtk2" in wx.PlatformInfo:
- parent.newtab.SetStandardFonts()
- parent.newtab.LoadPage(listfileout[len(listfileout) - 1])
- parent.nb.AddPage(parent.newtab, u"Fréquences_%s*" % parent.FreqNum)
- parent.nb.SetSelection(parent.nb.GetPageCount() - 1)
- parent.ShowAPane("Tab_content")
- parent.DisEnSaveTabAs(True)
+class Frequences(AnalyseMatrix) :
+ def doparametres(self, dlg=None) :
+ if dlg is None :
+ return
else :
- dlg.Destroy()
-
- def ShowFreq(self, select):
- listfile = []
- listfile.append(False)
- self.ListFileForR = []
- self.ListTitre = []
- self.OutFrame = tempfile.mktemp(dir=self.TEMPDIR)
- if self.parent.g_id: rownames = '1'
- else: rownames = 'NULL'
- if self.parent.g_header : header = 'TRUE'
- else : header = 'FALSE'
- self.ListTitre = [self.header[i] for i in select]
- self.ListFileForR = [ffr(os.path.join(self.TEMPDIR, 'freq%s_%s.jpeg' % (str(self.num), i))) for i in range(len(select))]
- listfile = [os.path.join(self.TEMPDIR, 'freq%s_%s.jpeg' % (str(self.num), i)) for i in range(len(select))]
+ dial = FreqDialog(self.parent, -1, self.tableau.get_colnames(), u"Fréquences", size=(350, 200))
+ dial.CenterOnParent()
+ val = dial.ShowModal()
+ if val == wx.ID_OK :
+ self.parametres['colsel'] = dial.list_box_1.GetSelections()
+ self.parametres['header'] = dial.header
+ else :
+ self.parametres = None
+ dial.Destroy()
+
+ def doanalyse(self):
+ self.pathout.createdir(self.parametres['pathout'])
+ header = self.tableau.get_colnames()
+ select = self.parametres['colsel']
+ self.listtitre = [header[i] for i in select]
+ b, self.outframe = tempfile.mkstemp()
+ self.fileforR = [ffr(os.path.join(self.pathout.dirout, 'freq_%i.png' % i)) for i in range(len(select))]
+ self.Rscript = PrintRScript(self)
sel = 'c(' + ','.join([str(val + 1) for val in select]) + ')'
- listfiles = 'c("' + '","'.join(self.ListFileForR) + '")'
- titles = 'c("' + '","'.join(self.ListTitre) + '")'
+ listfiles = 'c("' + '","'.join(self.fileforR) + '")'
+ titles = 'c("' + '","'.join(self.listtitre) + '")'
txt = """
- source("%s")
- """ % self.parent.RscriptsPath['Rfunct']
-
+ filein <- "%s"
+ encoding <- '%s'
+ dm <- read.csv2(filein, encoding = encoding, header = TRUE, row.names = 1, sep='\\t', quote = '"', na.string = '')
+ """ %(ffr(self.tableau.parametres['csvfile']), self.tableau.parametres['syscoding'])
txt += """
- datadm <- ReadData("%s", encoding="%s", header = TRUE, sep = ";",quote = "\\%s", na.strings = "%s",rownames=1)
- """ % (ffr(self.fileforR), self.parent.encode, self.parent.tableau.parametre['txtsep'], self.parent.nastrings)
- txt += """
- outframe<-data.frame(cbind('***','****'))
- colnames(outframe)<-c('effectif','pourcentage')
+ outframe <- data.frame(cbind('***','****','****'))
+ colnames(outframe)<-c('effectif','pourcentage', 'labels')
select <- %s
listfiles <- %s
titles <- %s
compteur <- 1
""" % (sel, listfiles, titles)
+
txt += """
for (i in select) {
- datasum<-as.matrix(summary(datadm[,i]))
- if (rownames(datasum)[1]=='Min.' && rownames(datasum)[3]=='Median') {
- dtype<-'num'
- } else if (datasum[1] == "logical") {
- dtype <- 'char'
- datasum <- as.matrix(as.integer(datasum[2]))
- rownames(datasum) <- 'NA'
- } else {
- dtype<-'char'
- }
- datasum<-as.data.frame(datasum)
- if (dtype=='char') {
- datasum[,2]<-round((datasum[,1]/sum(datasum[,1]))*100,digits=2)
- } else {
- datasum[,2]<-datasum[,1]
- }
- colnames(datasum)<-c('effectif','pourcentage')
+ freq <- table(dm[,i])
+ sumfreq <- sum(freq)
+ pour <- prop.table(as.matrix(freq), 2) * 100
+ sumpour <- sum(pour)
+ ntable <- cbind(as.matrix(freq), pour)
graphout <- listfiles[compteur]
if (Sys.info()["sysname"]=='Darwin') {
- quartz(file=graphout,type='jpeg')
+ quartz(file=graphout,type='png')
par(cex=1)
} else {
- jpeg(graphout,res=200)
+ png(graphout)
par(cex=0.3)
}
- if (max(nchar(rownames(datasum))) > 15) {
- lab.bar <- 1:nrow(datasum)
+ if (max(nchar(rownames(ntable))) > 15) {
+ lab.bar <- 1:nrow(ntable)
} else {
- lab.bar <- rownames(datasum)
+ lab.bar <- rownames(ntable)
}
- barplot(datasum[,2],border=NA,beside=TRUE,names.arg=lab.bar)
+ barplot(ntable[,2],border=NA,beside=TRUE,names.arg=lab.bar)
+ ntable <- cbind(ntable, rownames(as.matrix(freq)))
+ colnames(ntable) <- c('effectif','pourcentage', 'labels')
title(main=titles[compteur])
dev.off()
- datasum<-rbind(datasum,total=colSums(datasum))
- outframe<-rbind(outframe,c('***','****'))
- datasum[,1]<-as.character(datasum[,1])
- datasum[,2]<-as.character(datasum[,2])
- outframe<-rbind(outframe,datasum)
+ ntable<-rbind(ntable,total=c(sumfreq,sumpour,''))
+ outframe<-rbind(outframe,c('***','****','****'))
+ #datasum[,1]<-as.character(datasum[,1])
+ #datasum[,2]<-as.character(datasum[,2])
+ outframe<-rbind(outframe,ntable)
compteur <- compteur + 1
- }
- outframe<-rbind(outframe,c('***','****'))
- write.csv2(outframe,file="%s")
- """ % ffr(self.OutFrame)
- tmpfile = tempfile.mktemp(dir=self.TEMPDIR)
- 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)
- fileout = self.DoLayout()
- listfile.append(fileout)
- self.DICTFILE[self.num] = listfile
- return listfile
-
-
- def DoLayout(self):
+ }
+ outframe<-rbind(outframe,c('***','****','****'))
+ write.table(outframe, file="%s", sep="\\t")
+ """ % ffr(self.outframe)
+ self.Rscript.add(txt)
+ self.Rscript.write()
+ self.doR(self.Rscript.scriptout)
+ self.dolayout()
+
+ def dolayout(self):
listtab = []
tab = []
- filein = open(self.OutFrame, 'rU')
- content = filein.readlines()
- filein.close()
+ with open(self.outframe) as f :
+ content = f.read().splitlines()
content.pop(0)
content.pop(0)
texte = ''
for ligne in content:
- ligne = ligne.replace('"', '').replace('\n', '')
- ligne = ligne.split(';')
+ ligne = ligne.replace('"', '')
+ ligne = ligne.split('\t')
if ligne[1] == u'***' :
if tab != []:
listtab.append(tab)
<a name="deb"></a><br>
''' % self.parent.SysEncoding
for i in range(0, len(listtab)):
- pretexte += '<p><a href="#%s">%s</a></p>' % (str(i), self.ListTitre[i])
+ pretexte += '<p><a href="#%s">%s</a></p>' % (str(i), self.listtitre[i])
texte += '<hr size="5" align="center" width="50%" color="green">\n'
texte += '<p><a href="#deb">Retour</a></p>\n'
- texte += '<a name="%s"></a><h2>%s</h2>\n' % (str(i), self.ListTitre[i])
+ texte += '<a name="%s"></a><h2>%s</h2>\n' % (str(i), self.listtitre[i])
texte += '<table>\n<tr><td>\n'
texte += '<table border=1><tr><td></td><td>Effectifs</td><td>pourcentage</td></tr>'
for line in listtab[i] :
texte += '<tr>'
texte += """
<td>%s</td><td align=center>%s</td><td align=center>%s %%</td>
- """ % (line[0], line[1], line[2])
+ """ % (line[3], line[1], line[2])
texte += '</tr>'
texte += '</table></td>'
texte += """
<td><img src="%s" alt="graph"/></td></tr></table>\n
- """ % os.path.basename(self.ListFileForR[i])
+ """ % os.path.basename(self.fileforR[i])
texte += '</body>\n</html>'
- fileout = os.path.join(self.TEMPDIR, 'resultats%s-freq.html' % str(self.num))
- FILE = open(fileout, 'w')
- FILE.write(pretexte + texte)
- FILE.close()
- return fileout
-
-
+ fileout = os.path.join(self.pathout.dirout, 'resultats.html')
+ with open(fileout, 'w') as f :
+ f.write(pretexte + texte)
+ #return fileout
+
\ No newline at end of file
# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2010 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
import codecs
import sys
import re
import htmlentitydefs
import shelve
+from functions import DoConf
from uuid import uuid4
+from chemins import PathOut
import logging
log = logging.getLogger('iramuteq.tableau')
Dico[word][1].append(line)
else:
Dico[word] = [1, [line]]
+
+def copymatrix(tableau):
+ log.info('copy matrix')
+ copymat = Tableau(tableau.parent, parametres = tableau.parametres)
+ copymat.linecontent = tableau.linecontent
+ copymat.csvtable = tableau.csvtable
+ copymat.pathout = tableau.pathout
+ copymat.colnames = tableau.colnames
+ copymat.rownb = tableau.rownb
+ copymat.colnb = tableau.colnb
+ if copymat.csvtable is None :
+ copymat.open()
+ return copymat
class Tableau() :
- def __init__(self, parent, filename = '', filetype = 'csv', encodage = 'utf-8') :
+ def __init__(self, parent, filename = '', filetype = 'csv', encodage = 'utf-8', parametres = None) :
self.parent = parent
- self.parametre = {'filename' : filename}
- self.parametre['filetype'] = filetype
- self.parametre['encodage'] = encodage
- self.parametre['pathout'] = os.path.dirname(os.path.abspath(filename))
- self.parametre['mineff'] = 3
- self.parametre['syscoding'] = sys.getdefaultencoding()
- self.parametre['type'] = 'matrix'
- self.parametre['name'] = 'unNOm'
+ if parametres is None :
+ self.parametres = DoConf(os.path.join(self.parent.UserConfigPath,'matrix.cfg')).getoptions('matrix')
+ self.parametres['pathout'] = PathOut(filename, 'matrix').mkdirout()
+ self.parametres['originalpath'] = filename
+ self.parametres['filetype'] = filetype
+ self.parametres['encodage'] = encodage
+ #self.parametre['pathout'] = os.path.dirname(os.path.abspath(filename))
+ self.parametres['mineff'] = 3
+ self.parametres['syscoding'] = sys.getdefaultencoding()
+ self.parametres['type'] = 'matrix'
+ self.parametres['matrix_name'] = os.path.basename(filename)
+ self.parametres['uuid'] = str(uuid4())
+ self.parametres['shelves'] = os.path.join(self.parametres['pathout'], 'shelve.db')
+ self.parametres['ira'] = os.path.join(self.parametres['pathout'], 'Matrix.ira')
+ else :
+ self.parametres = parametres
+ self.pathout = PathOut(filename = filename, dirout = self.parametres['pathout'])
+ self.csvtable = None
self.sups = {}
self.actives = {}
self.listactives = None
self.colnb = 0
self.rownb = 0
self.classes = []
- self.parametres = self.parametre
+ #self.parametres = self.parametre
def read_tableau(self, fileout) :
d=shelve.open(fileout)
- self.parametre = d['parametre']
- if 'syscoding' not in self.parametre :
- self.parametre['syscoding'] = sys.getdefaultencoding()
+ #self.parametres = d['parametres']
+ #if 'syscoding' not in self.parametres :
+ # self.parametres['syscoding'] = sys.getdefaultencoding()
self.actives = d['actives']
self.sups = d['sups']
self.classes = d['classes']
self.datas = d['datas']
if 'lchi' in d :
self.lchi = d['lchi']
+ if 'content' in d :
+ self.content = d['content']
d.close()
+
+ def open(self):
+ print 'open matrix'
+ self.read_csvfile()
+ self.colnames = self.csvtable[0][1:]
+ self.rownb = len(self.linecontent)
+ self.colnb = len(self.linecontent[0])
def save_tableau(self, fileout) :
d=shelve.open(fileout)
- d['parametre'] = self.parametre
+ d['parametres'] = self.parametres
d['actives'] = self.actives
d['sups'] = self.sups
d['classes'] = self.classes
d['datas'] = self.datas
if 'lchi' in dir(self) :
d['lchi'] = self.lchi
+ d['content'] = self.content
d.close()
def make_content(self) :
- if self.parametre['filetype'] == 'csv' :
+ self.pathout.createdir(self.parametres['pathout'])
+ if self.parametres['filetype'] == 'csv' :
self.read_csv()
- elif self.parametre['filetype'] == 'xls' :
+ elif self.parametres['filetype'] == 'xls' :
self.read_xls()
- elif self.parametre['filetype'] == 'ods' :
+ elif self.parametres['filetype'] == 'ods' :
self.read_ods()
- self.parametre['csvfile'] = tempfile.mktemp(dir=self.parent.TEMPDIR)
+ self.parametres['csvfile'] = os.path.join(self.parametres['pathout'], 'csvfile.csv')
self.make_tmpfile()
+ DoConf().makeoptions(['matrix'],[self.parametres], self.parametres['ira'])
+ self.parent.history.addMatrix(self.parametres)
def read_xls(self) :
#FIXME : encodage
#print '############## ENCODING IN EXCEL #######################'
#datafile = xlrd.open_workbook(self.parametre['filename'], encoding_override="azerazerazer")
- datafile = xlrd.open_workbook(self.parametre['filename'])
- datatable = datafile.sheet_by_index(self.parametre['sheetnb']-1)
- self.linecontent = [[str(datatable.cell_value(rowx = i, colx = j)) for j in range(datatable.ncols)] for i in range(datatable.nrows)]
+ datafile = xlrd.open_workbook(self.parametres['originalpath'])
+ datatable = datafile.sheet_by_index(self.parametres['sheetnb']-1)
+ self.linecontent = [[str(datatable.cell_value(rowx = i, colx = j)).replace(u'"','').replace(u';','').replace(u'\n',' ').strip() for j in range(datatable.ncols)] for i in range(datatable.nrows)]
def read_ods(self) :
- doc = ooolib.Calc(opendoc=self.parametre['filename'])
+ doc = ooolib.Calc(opendoc=self.parametres['originalpath'])
doc.set_sheet_index(0)
(cols, rows) = doc.get_sheet_dimensions()
for row in range(1, rows + 1):
for col in range(1, cols + 1):
data = doc.get_cell_value(col, row)
if data is not None :
- ligne.append(unescape(data[1]))
+ ligne.append(unescape(data[1].replace(u'"','').replace(u';','').replace(u'\n', ' ').strip()))
else :
ligne.append('')
self.linecontent.append(ligne)
def read_csv(self) :
- with codecs.open(self.parametre['filename'], 'r', self.parametre['encodage']) as f :
+ with codecs.open(self.parametres['originalpath'], 'r', self.parametres['encodage']) as f :
content = f.read()
- self.linecontent = [line.replace('"','').split(self.parametre['colsep']) for line in content.splitlines()]
+ self.linecontent = [line.split(self.parametres['colsep']) for line in content.splitlines()]
+ self.linecontent = [[val.replace(u'"','').strip() for val in line] for line in self.linecontent]
def write_csvfile(self) :
- with open(self.parametre['csvfile'], 'w') as f :
- f.write('\n'.join([';'.join(line) for line in self.csvtable]))
+ with open(self.parametres['csvfile'], 'w') as f :
+ f.write('\n'.join(['\t'.join(line) for line in self.csvtable]))
def make_tmpfile(self) :
self.rownb = len(self.linecontent)
self.csvtable = [[self.idname] + self.colnames] + [[self.rownames[i]] + self.linecontent[i] for i in range(len(self.rownames))]
self.write_csvfile()
- def show_tab(self) :
- self.parent.content = self.csvtable
- self.parent.ShowMenu(_("View"))
- self.parent.ShowMenu(_("Spreadsheet analysis"))
- self.parent.ShowMenu(_("Text analysis"), False)
- self.parent.type = "Data"
- self.parent.DataPop = False
- self.parent.OnViewData('')
+ def read_csvfile(self):
+ with codecs.open(self.parametres['csvfile'], 'r', self.parametres['syscoding']) as f:
+ self.csvtable = [line.split('\t') for line in f.read().splitlines()]
+ self.linecontent = [line[1:] for line in self.csvtable]
+ self.linecontent.pop(0)
def check_rownames(self) :
if len(self.rownames) == len(list(set(self.rownames))) :
def make_unique_list(self) :
return list(set([val for line in self.linecontent for val in line if val.strip() != '']))
- def make_dico(self, linecontent) :
+ def make_dico(self, selcol) :
dico = {}
- for i, line in enumerate(linecontent) :
+ for i, line in enumerate(selcol) :
for forme in line:
if forme.strip() != '' :
UpdateDico(dico, forme, i)
return [[val, self.actives[val][0]] for val in self.actives]
def make_listactives(self) :
- self.listactives = [val for val in self.actives if val != 'NA' and self.actives[val] >= self.parametre['mineff']]
+ self.listactives = [val for val in self.actives if val != 'NA' and self.actives[val] >= self.parametres['mineff']]
def write01(self, fileout, dico, linecontent) :
if self.listactives is None :
- self.listactives = [val for val in dico if val != 'NA' and dico[val] >= self.parametre['mineff']]
+ self.listactives = [val for val in dico if val != 'NA' and dico[val] >= self.parametres['mineff']]
out = [['0' for forme in self.listactives] for line in linecontent]
for i, forme in enumerate(self.listactives) :
for line in dico[forme][1] :
def make_01_from_selection(self, listact, listsup = None, dowrite = True) :
selcol = self.select_col(listact)
self.actives = self.make_dico(selcol)
- self.write01(self.dictpathout['mat01'], self.actives, selcol)
+ self.write01(self.pathout['mat01.csv'], self.actives, selcol)
if listsup is not None :
selcol = self.select_col(listsup)
self.sups = self.make_dico(selcol)
UpdateDico(self.sups, forme, i)
else:
UpdateDico(self.actives, forme, i)
- self.listactives = [val for val in self.actives if self.actives[val][0] >= self.parametre['mineff']]
+ self.listactives = [val for val in self.actives if self.actives[val][0] >= self.parametres['mineff']]
table = [['0' for i in range(len(self.listactives))] for j in range(self.rownb)]
for i, val in enumerate(self.listactives) :
for j, line in enumerate(self.linecontent) :
with open(fileout, 'w') as f:
f.write('\n'.join([';'.join(line) for line in table]))
- def printtable(self, filename, Table):
+ def printtable(self, filename, Table, sep = ';'):
with open(filename, 'w') as f :
- f.write('\n'.join([';'.join(line) for line in Table]))
+ f.write('\n'.join([sep.join(line) for line in Table]))
def buildprofil(self) :
- with open(self.dictpathout['uce'], 'rU') as filein :
+ with open(self.pathout['uce'], 'rU') as filein :
content = filein.readlines()
content.pop(0)
lsucecl = []
if cl == i + 1 :
if active in self.linecontent[uce]:
line[i + 1] += 1
- if sum(line[1:]) > self.parametre['mineff']:
+ if sum(line[1:]) > self.parametres['mineff']:
tablecont.append([line[0]] + [`don` for don in line if type(don) == type(1)])
tablecontet = []
line[i + 1] += 1
tablecontet.append([line[0]] + [`don` for don in line if type(don) == type(1)])
- self.printtable(self.dictpathout['ContEtOut'], tablecontet)
- self.printtable(self.dictpathout['Contout'], tablecont)
+ self.printtable(self.pathout['ContEtOut'], tablecontet)
+ self.printtable(self.pathout['Contout'], tablecont)
def get_colnames(self) :
return self.colnames[:]
# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2011 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
from chemins import ffr, FFF
from functions import exec_rcode, check_Rresult
# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2009-2010 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
from chemins import ConstructPathOut, simipath, ffr, PathOut
from functions import print_liste, exec_rcode, read_list_file, check_Rresult, indices_simi, treat_var_mod
from PrintRScript import PrintSimiScript
from listlex import *
import wx
-#if wx.__version__ >= '2.11' :
-# import wx.lib.agw.aui as aui
-#else :
-# import aui
import os
import tempfile
import datetime
class DoSimi(AnalyseMatrix):
- def __init__(self, parent, param = None, isopen = False, fromprof = False, pathout = False, filename ='', gparent = False, wordgraph = False, listactives = False, actives = False, cmd = False, openfromprof=False, tableau = None):
+ def doanalyse(self) :
+ self.fromprof = self.parametres.get('fromprof', False)
+ self.wordgraph = self.parametres.get('wordgraph', False)
+ self.listactives = self.parametres.get('listactives', False)
+ self.actives = self.parametres.get('actives', False)
+ self.openfromprof = self.parametres.get('openfromprof', False)
+ self.cmd = self.parametres.get('cmd', False)
+ self.dirout = self.parametres.get('pathout', False)
+ #parent, matrix = None, parametres = None, isopen = False, fromprof = False, pathout = False, filename ='', gparent = False, wordgraph = False, listactives = False, actives = False, cmd = False, openfromprof=False, tableau = None):
#-------------------------------------------------------------------
- self.fromprof = fromprof
- self.wordgraph = wordgraph
- self.listactives = listactives
- self.actives = actives
- self.openfromprof = openfromprof
- self.cmd = cmd
- self.dirout = pathout
- if param is not None and fromprof:
- self.paramsimi = param
+ # self.fromprof = fromprof
+ # self.wordgraph = wordgraph
+ # self.listactives = listactives
+ # self.actives = actives
+ # self.openfromprof = openfromprof
+ # self.cmd = cmd
+ # self.dirout = pathout
+ # if parametres is not None and fromprof:
+ if self.fromprof:
+ self.paramsimi = parametres
else :
self.paramsimi = {'coeff' : 0,
'layout' : 2,
# self.parent = parent.parent
# self.Source = parent
#else :
- self.parent = parent
self.Source = None
- if pathout :
- self.pathout = PathOut(dirout = pathout)
+ if self.dirout :
+ self.pathout = PathOut(dirout = self.dirout)
- self.RPath = self.parent.PathPath.get('PATHS', 'rpath')
- if not isopen :
+ #self.RPath = self.parent.PathPath.get('PATHS', 'rpath')
+ if not self.parametres.get('isopen', False) :
#if not fromprof :
# self.tableau = self.parent.tableau
#else :
# self.tableau = parent.tableau
- if tableau is not None :
- self.tableau = tableau
- else :
+ if self.tableau is None :
self.tableau = parent.tableau
- self.tableau.parametre['mineff'] = 0
- if not fromprof :
- dialcol = FreqDialog(self.parent, -1, self.tableau.get_colnames(), u"Sélectionnez les colonnes", size=(600, 250))
+ self.tableau.parametres['mineff'] = 0
+ if not self.fromprof :
+ dialcol = FreqDialog(self.parent, -1, self.tableau.get_colnames(), _(u"Select columns").decode('utf8'), size=(600, 250))
dialcol.CenterOnParent()
res = dialcol.ShowModal()
else :
self.tableau.actives = dict(actives)
self.tableau.make_listactives()
actives = dict([[i, val] for i, val in enumerate(actives)])
- self.dial = PrefSimi(parent, -1, self.paramsimi, self.indices, wordlist = actives)
+ self.dial = PrefSimi(self.parent, -1, self.paramsimi, self.indices, wordlist = actives)
self.dial.CenterOnParent()
self.val = self.dial.ShowModal()
if self.val == wx.ID_OK :
self.column = [self.tableau.listactives.index(val) for val in indexes]
self.column.sort()
self.paramsimi = self.make_param()
- self.parametres = self.paramsimi
- self.parametres['type'] = 'simimatrix'
- if not pathout :
- self.parametres['pathout'] = ConstructPathOut(self.tableau.parametre['filename'], 'SimiMatrix')
+ self.parametres.update(self.paramsimi)
+ #self.parametres['type'] = 'simimatrix'
+ if not self.pathout :
+ self.parametres['pathout'] = ConstructPathOut(self.parametres['pathout'], 'SimiMatrix')
+ print self.parametres['pathout']
else :
self.parametres['pathout'] = self.dirout
- self.parametres['filename'] = self.tableau.parametres['filename']
+ self.pathout.createdir(self.parametres['pathout'])
+ self.pathout.dirout = self.parametres['pathout']
+ #self.parametres['filename'] = self.tableau.parametres['filename']
self.dial.Destroy()
- dlg = wx.ProgressDialog("Traitements",
- "Veuillez patienter...",
- maximum=4,
- parent=self.parent,
- style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME
- )
- dlg.Center()
- AnalyseMatrix.__init__(self, parent, self.tableau, self.paramsimi, dlg = dlg)
+ self.doanalyse2()
+ #dlg = wx.ProgressDialog("Traitements",
+ # "Veuillez patienter...",
+ # maximum=4,
+ # parent=self.parent,
+ # style=wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_ELAPSED_TIME
+ # )
+ #dlg.Center()
+ #AnalyseMatrix.__init__(self, parent, self.tableau, self.paramsimi, dlg = dlg)
else :
self.dial.Destroy()
+ self.parametres = None
+ return False
else :
dialcol.Destroy()
+ self.parametres = None
+ return False
- def doanalyse(self) :
+ def doanalyse2(self) :
self.pathout.basefiles(simipath)
with open(self.pathout['selected.csv'], 'w') as f :
- f.write('\n'.join([`val` for val in self.column]))
+ f.write('\n'.join([`val` for val in self.column]))
count = 1
keepGoing = self.dlg.Update(count)
#--------------------------------------------------------
count += 1
#if not self.fromprof :
- #self.pathout = ConstructPathOut(self.tableau.parametre['filename'], 'Simi')
+ #self.pathout = ConstructPathOut(self.tableau.parametres['filename'], 'Simi')
#self.DictPathOut = construct_simipath(self.pathout)
self.tableau.dictpathout = self.pathout
self.dlg.Update(count, u"passage en O/1")
fromprof = True
else:
fromprof = False
- #OpenAnalyse(self.parent, self.DictPathOut['ira'], False, simifromprof=fromprof)
-# else :
-# self.tableau = gparent.tableau
-# if 'corpus' in dir(gparent) :
-# self.Source = gparent
-# self.tableau.parametre['mineff'] = 0
-# self.DictPathOut = construct_simipath(os.path.abspath(os.path.dirname(filename)))
-# self.dolayout()
-# self.paramsimi['first'] = False
-# self.paramsimi['coeff'] = int(param.get('simi', 'indice'))
-# self.paramsimi['layout'] = int(param.get('simi', 'layout'))
-# self.paramsimi['seuil_ok'] = param.getboolean('simi', 'seuil_ok')
-# self.paramsimi['seuil'] = int(param.get('simi', 'seuil'))
-# if param.get('simi', 'wordgraph') == 'False' :
-# self.wordgraph = False
-# else :
-# self.wordgraph = param.get('simi', 'wordgraph')
-# if 'listet' in dir(self.tableau) :
-# self.paramsimi['stars'] = self.tableau.listet
-# self.paramsimi['bystar'] = False
-# self.paramsimi['cexfromchi'] = True
-# self.paramsimi['tvprop'] = False
-# self.paramsimi['sfromchi'] = False
-# self.paramsimi['coeff_te'] = True
-# self.paramsimi['coeff_tv'] = True
-# self.paramsimi['coeff_tv_nb'] = 0
-# self.paramsimi['label_e'] = False
-# self.paramsimi['width'] = 1000
-# self.paramsimi['height'] = 1000
def make_param(self) :
if 'sfromchi' in self.paramsimi :
paramsimi['sfromchi'] = self.dial.checki.GetValue()
if 'vlabcolor' in self.paramsimi :
- paramsimi['vlabcolor'] = self.paramsimi['vlabcolor']
+ paramsimi['vlabcolor'] = self.paramsimi['vlabcolor']
if 'check_bystar' in dir(self.dial) :
paramsimi['bystar'] = self.dial.check_bystar.GetValue()
paramsimi['stars'] = self.paramsimi['stars']
+ if 'tmpchi' in self.paramsimi :
+ paramsimi['tmpchi'] = self.paramsimi['tmpchi']
return paramsimi
-# def make_ira(self):
-# self.tableau.save_tableau(self.DictPathOut['db'])
-# conf = RawConfigParser()
-# conf.read(self.DictPathOut['ira'])
-# if not 'simi' in conf.sections() :
-# conf.add_section('simi')
-# date = datetime.datetime.now().ctime()
-# if self.fromprof :
-# conf.set('simi', 'corpus', self.Source.corpus.parametres['uuid'])
-# conf.set('simi', 'uuid', str(uuid4()))
-# conf.set('simi', 'date', str(date))
-# conf.set('simi', 'indice', self.paramsimi['coeff'])
-# conf.set('simi','layout', self.paramsimi['layout'])
-# conf.set('simi', 'seuil_ok', self.paramsimi['seuil_ok'])
-# conf.set('simi', 'seuil', str(self.paramsimi['seuil']))
-# conf.set('simi', 'wordgraph', self.wordgraph)
-# fileout = open(self.DictPathOut['ira'], 'w')
-# conf.write(fileout)
-# fileout.close()
#
def addgraph(self) :
if self.parametres['type_graph'] == 1:
print_liste(self.DictPathOut['liste_graph'], graph_simi)
def DoR(self, dlg):
- if self.paramsimi['type'] == 1 :
+ if self.paramsimi['type_graph'] == 1 :
graph = False
wait = False
else :
graph = True
wait = True
- pid = exec_rcode(self.RPath, self.tmpfile, wait = wait, graph = graph)
- if self.paramsimi['type'] == 1 :
+ pid = exec_rcode(self.ira.RPath, self.tmpfile, wait = wait, graph = graph)
+ if self.paramsimi['type_graph'] == 1 :
while pid.poll() == None :
if not self.cmd :
dlg.Pulse(u'R ...')
# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2008 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
from chemins import ffr
# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2012 Pierre Ratinaud
-#Lisense: GNU GPL
+#License: GNU GPL
import os
import string
self.makedatas(table_assoc, table_rank)
self.DoR()
else :
- return 'stop'
+ return 'stop'
def dotable(self) :
table_assoc = self.tableau.select_col(self.ColSel1)
words = {}
for i in range(0, len(table_assoc)) :
for j, word in enumerate(table_assoc[i]) :
- if word in words :
- words[word][0] += 1
- if table_rank[i][j] != '' :
- words[word][1].append(int(table_rank[i][j]))
- else :
- if table_rank[i][j] != '' :
- words[word] = [1, [int(table_rank[i][j])]]
+ if word.strip() != "" :
+ if word in words :
+ words[word][0] += 1
+ if table_rank[i][j] != '' :
+ words[word][1].append(float(table_rank[i][j]))
else :
- words[word] = [1, []]
+ if table_rank[i][j] != '' :
+ words[word] = [1, [float(table_rank[i][j])]]
+ else :
+ words[word] = [1, []]
res = [[word, words[word][0], float(sum(words[word][1])) / len(words[word][1])] for word in words if len(words[word][1]) != 0 and words[word][0] >= self.parametres['freqmin']]
with open(self.pathout['table.csv'], 'w') as f :
f.write('\n'.join(['\t'.join(['"' + val[0] +'"', `val[1]`, `val[2]`]) for val in res]))
# -*- coding: utf-8 -*-
#Author: Pierre Ratinaud
#Copyright (c) 2008-2009 Pierre Ratinaud
-#Lisense: GNU/GPL
+#License: GNU/GPL
from chemins import ConstructPathOut, ConstructAfcUciPath
from layout import GraphPanel
#Copyright (c) 2008-2011 Pierre Ratinaud
#License: GNU/GPL
-from chemins import ConstructPathOut, StatTxtPathOut
+from chemins import ConstructPathOut, StatTxtPathOut, PathOut
#from corpus import Corpus
from analysetxt import AnalyseText
import wx
import os
-import sys
-from listlex import *
-from functions import exec_rcode, progressbar, check_Rresult, CreateIraFile, print_liste, treat_var_mod, write_tab, DoConf
-from dialog import OptLexi, StatDialog
-from openanalyse import OpenAnalyse
+#import sys
+#from listlex import *
+from functions import exec_rcode, progressbar, check_Rresult, CreateIraFile, print_liste, treat_var_mod, write_tab, DoConf, TGen
+from dialog import OptLexi#, StatDialog
+#from openanalyse import OpenAnalyse
import tempfile
-from ConfigParser import RawConfigParser
-from guifunct import getPage, getCorpus
+#from ConfigParser import RawConfigParser
+#from guifunct import getPage, getCorpus
+from PrintRScript import TgenSpecScript
from time import sleep
import logging
print_liste(self.dictpathout['liste_graph_afcf'],afcf_graph_list)
print_liste(self.dictpathout['liste_graph_afct'],afct_graph_list)
#DoConf().makeoptions(['spec'],[self.parametres], self.dictpathout['ira'])
+
+class TgenSpec(AnalyseText):
+ def __init__(self, ira, corpus, parametres):
+ self.ira = ira
+ self.corpus = corpus
+ self.parametres = parametres
+ self.pathout = PathOut(dirout = self.parametres['pathout'])
+ self.doanalyse()
+
+ def doanalyse(self):
+ self.tgen = TGen(path = self.parametres['tgenpath'])
+ self.tgen.read(self.tgen.path)
+ tgenocc, totocc = self.corpus.make_tgen_table(self.tgen, self.parametres['etoiles'])
+ self.parametres['tgeneff'] = os.path.join(self.parametres['pathout'], 'tgeneff.csv')
+ self.tgen.writetable(self.parametres['tgeneff'], tgenocc, totocc)
+ self.parametres['tgenspec'] = os.path.join(self.parametres['pathout'], 'tgenspec.csv')
+ self.Rscript = TgenSpecScript(self)
+ self.Rscript.make_script()
+ self.Rscript.write()
+ self.doR(self.Rscript.scriptout, dlg = False, message = 'R...')
+
+
\ No newline at end of file