X-Git-Url: http://iramuteq.org/git?p=iramuteq;a=blobdiff_plain;f=layout.py;h=0e89647ea363021299f89d938ccfd953bf432838;hp=6550ced306c58244db147ee75a8234a61346298f;hb=13666be5de5eeffbe63774c3c0aecd407b519ac6;hpb=8fa853a25a9d62b1446e1bc543e5a3a4d0e03dcf diff --git a/layout.py b/layout.py index 6550ced..0e89647 100644 --- a/layout.py +++ b/layout.py @@ -8,18 +8,19 @@ import os import wx #import wx.lib.agw.aui as aui import agw.aui as aui -from chemins import ConstructPathOut, ChdTxtPathOut, FFF, ffr, PathOut, StatTxtPathOut +from chemins import ConstructPathOut, ChdTxtPathOut, FFF, ffr, PathOut, StatTxtPathOut, simipath from ConfigParser import ConfigParser -from functions import ReadProfileAsDico, GetTxtProfile, read_list_file, ReadList, exec_rcode, print_liste, BugReport, DoConf +from functions import ReadProfileAsDico, GetTxtProfile, read_list_file, ReadList, exec_rcode, print_liste, BugReport, DoConf, indices_simi from ProfList import * from guiparam3d import param3d, simi3d -from PrintRScript import write_afc_graph, print_simi3d +from PrintRScript import write_afc_graph, print_simi3d, PrintSimiScript from profile_segment import * from functions import ReadList from listlex import * from Liste import * from search_tools import SearchFrame from dialog import PrefGraph, PrefExport, PrefSimpleFile, PrefDendro +from guifunct import SelectColumn, PrepSimi from corpusNG import Corpus import datetime import sys @@ -27,6 +28,10 @@ import tempfile import shutil import webbrowser import codecs +import logging + +log = logging.getLogger('iramuteq.layout') + class GraphPanelAfc(wx.Panel): def __init__(self, parent, dico, list_graph, clnb, itempath = 'liste_graph_afc', coding = sys.getdefaultencoding()): @@ -60,8 +65,10 @@ class GraphPanelAfc(wx.Panel): 'qui' : 0, 'do_select_nb' : 0, 'do_select_chi' : 0, + 'do_select_chi_classe' : 0, 'select_nb' : 50, 'select_chi' : 4, + 'nbchic' : 30, 'over' : 0, 'cex_txt' : 0, 'txt_min' : 5, @@ -111,8 +118,10 @@ class GraphPanelAfc(wx.Panel): 'qui' : dial.choice2.GetSelection(), 'do_select_nb' : dial.check1.GetValue(), 'do_select_chi' : dial.check2.GetValue(), + 'do_select_chi_classe' : dial.check_chic.GetValue(), 'select_nb' : dial.spin_nb.GetValue(), 'select_chi' : dial.spin_chi.GetValue(), + 'nbchic' : dial.spin_nbchic.GetValue(), 'over' : dial.check3.GetValue(), 'cex_txt' : dial.check4.GetValue(), 'txt_min' : dial.spin_min.GetValue(), @@ -137,6 +146,12 @@ class GraphPanelAfc(wx.Panel): afc <- afcf afc_table <- afcf_table chistabletot <- specfp + infp <- which(is.infinite(chistabletot) & chistabletot > 0) + infm <- which(is.infinite(chistabletot) & chistabletot < 0) + chistabletot[infp] <- 0 + chistabletot[infm] <- 0 + chistabletot[infp] <- max(chistabletot) + 1 + chistabletot[infm] <- min(chistabletot) - 1 """ elif self.itempath == 'liste_graph_afct' : txt +=""" @@ -222,6 +237,7 @@ class OpenCHDS(): self.pathout.basefiles(ChdTxtPathOut) DictPathOut = self.pathout self.DictPathOut = DictPathOut + self.dictpathout = DictPathOut self.parent = parent Profile = DictPathOut['PROFILE_OUT'] @@ -336,7 +352,7 @@ class OpenCHDS(): panel.ProfNB = aui.AuiNotebook(panel, -1, wx.DefaultPosition) panel.ProfNB.SetArtProvider(aui.ChromeTabArt()) #self.ProfNB.SetTabCtrlHeight(100) - panel.AntiProfNB = aui.AuiNotebook(panel, -1, wx.DefaultPosition) + #panel.AntiProfNB = aui.AuiNotebook(panel, -1, wx.DefaultPosition) if os.path.exists(DictPathOut['prof_seg']) : prof_seg = ReadProfileAsDico(self, DictPathOut['prof_seg'], False, self.encoding) self.prof_seg_nb = aui.AuiNotebook(panel, -1, wx.DefaultPosition) @@ -346,9 +362,9 @@ class OpenCHDS(): indpour = ' - '.join([ind, DictProfile[str(i + 1)][0][2]]) print 'construction liste classe %i' % i self.tabprofile = ProfListctrlPanel(self.parent, self, DictProfile[str(i + 1)], Alceste, i + 1) - self.tabantiprofile = ProfListctrlPanel(self.parent, self, DictAnti[str(i + 1)], Alceste, i + 1) + #self.tabantiprofile = ProfListctrlPanel(self.parent, self, DictAnti[str(i + 1)], Alceste, i + 1) panel.ProfNB.AddPage(self.tabprofile, 'classe %s %s(%s%%)' % (str(i + 1), sep, indpour)) - panel.AntiProfNB.AddPage(self.tabantiprofile, 'classe %s' % str(i + 1)) + #panel.AntiProfNB.AddPage(self.tabantiprofile, 'classe %s' % str(i + 1)) if os.path.exists(DictPathOut['prof_seg']) : self.tab_prof_seg = ProfListctrlPanel(self.parent, self, prof_seg[str(i + 1)], False, i + 1) self.prof_seg_nb.AddPage(self.tab_prof_seg, 'classe %i' % (i + 1)) @@ -363,13 +379,13 @@ class OpenCHDS(): if os.path.exists(self.DictPathOut['afc_facteur']) : dictrow, first = ReadList(self.DictPathOut['afc_facteur'], self.encoding) self.TabAFC_facteur = ListForSpec(self.parent, parametres, dictrow, first) - dictrow, first = ReadList(self.DictPathOut['afc_row'], self.encoding) - self.TabAFC_ligne = ListForSpec(self.parent, self.parametres, dictrow, first) - dictrow, first = ReadList(self.DictPathOut['afc_col'], self.encoding) - self.TabAFC_colonne = ListForSpec(parent, self.parametres, dictrow, first) + #dictrow, first = ReadList(self.DictPathOut['afc_row'], self.encoding) + #self.TabAFC_ligne = ListForSpec(self.parent, self.parametres, dictrow, first) + #dictrow, first = ReadList(self.DictPathOut['afc_col'], self.encoding) + #self.TabAFC_colonne = ListForSpec(parent, self.parametres, dictrow, first) self.TabAFC.AddPage(self.TabAFC_facteur, 'Facteurs') - self.TabAFC.AddPage(self.TabAFC_colonne, u'Colonnes') - self.TabAFC.AddPage(self.TabAFC_ligne, u'Lignes') + #self.TabAFC.AddPage(self.TabAFC_colonne, u'Colonnes') + #self.TabAFC.AddPage(self.TabAFC_ligne, u'Lignes') sizer_3 = wx.BoxSizer(wx.VERTICAL) self.parent.nb_panel_2 = wx.Panel(panel.TabChdSim, -1) @@ -382,7 +398,7 @@ class OpenCHDS(): self.parent.Bind(wx.EVT_BUTTON, self.onsimi, self.parent.button_simi) panel.TabChdSim.AddPage(panel.ProfNB, 'Profils') - panel.TabChdSim.AddPage(panel.AntiProfNB, 'Antiprofils') + #panel.TabChdSim.AddPage(panel.AntiProfNB, 'Antiprofils') dlg.Update(4 + self.clnb, 'Affichage...') if clnb > 2 : panel.TabChdSim.AddPage(self.TabAFC, 'AFC') @@ -451,11 +467,13 @@ class OpenCHDS(): dlg.Destroy() def onprofseg(self, event): - try : + #try : + print 'plus de bug profseg' + print self.parametres corpus = self.parent.nb.GetPage(self.parent.nb.GetSelection()).corpus - ProfileSegment(self.parent,corpus) - except : - BugReport(self.parent) + ProfileSegment(self.parent, self.dictpathout, self.parametres, corpus) + #except : + # BugReport(self.parent) def onproftype(self, event): try : @@ -607,7 +625,7 @@ class dolexlayout : class StatLayout: def __init__(self, ira, corpus, parametres): - self.pathout = PathOut(dirout = os.path.dirname(parametres['pathout'])) + self.pathout = PathOut(dirout = parametres['pathout']) self.corpus = corpus self.ira = ira self.read_result() @@ -753,21 +771,7 @@ class GraphPanelDendro(wx.Panel): self.make_param(dial) self.make_dendro() -class WordCloudLayout: - def __init__(self, ira, parent, filename): - self.dictpathout = parent.corpus.dictpathout - self.pathout = os.path.dirname(filename) - self.corpus = parent.corpus - # self.read_result() - self.Tab = aui.AuiNotebook(ira.nb, -1, wx.DefaultPosition) - list_graph = [['nuage_1.png', 'Nuage']] - self.TabStatTot = GraphPanel(ira.nb, self.dictpathout, list_graph) - #self.TabStatTot.write(self.result['glob']) - self.Tab.AddPage(self.TabStatTot, 'Nuage') - self.Tab.corpus = parent.corpus - ira.nb.AddPage(self.Tab, 'WordCloud %s' % parent.conf.get('wordcloud','corpus_name')) - ira.nb.SetSelection(ira.nb.GetPageCount() - 1) - ira.ShowAPane("Tab_content") + class OpenCorpus : def __init__(self, ira, parametres) : @@ -849,6 +853,141 @@ class CopusPanel(wx.Panel) : text.Wrap( -1 ) self.fgSizer5.Add( text, 0, wx.ALL, 5 ) +class GraphPanelSimi(wx.Panel): + def __init__(self, parent, dico, list_graph): + wx.Panel.__init__(self,parent) + self.afcnb = 1 + self.Dict = dico + self.dirout = os.path.dirname(self.Dict['ira']) + self.parent = self.GetParent()#parent + self.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "courier")) + self.labels = [] + self.listimg = [] + self.tabsimi = self.parent.GetParent() + self.ira = self.tabsimi.GetParent() + self.panel_1 = wx.ScrolledWindow(self, -1, style=wx.TAB_TRAVERSAL) + afc_img = wx.Image(os.path.join(self.ira.images_path,'button_simi.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap() + self.butafc = wx.BitmapButton(self, -1, afc_img) + export_img = wx.Image(os.path.join(self.ira.images_path,'button_export.jpg'), wx.BITMAP_TYPE_ANY).ConvertToBitmap() + self.butexport = wx.BitmapButton(self, -1, export_img) + + for i in range(0,len(list_graph)): + if os.path.exists(os.path.join(self.dirout,list_graph[i][0])) and list_graph[i][0] != '' : + self.listimg.append(wx.StaticBitmap(self.panel_1, -1, wx.Bitmap(os.path.join(self.dirout,list_graph[i][0]), wx.BITMAP_TYPE_ANY))) + self.labels.append(wx.StaticText(self.panel_1, -1, list_graph[i][1])) + + self.__set_properties() + self.__do_layout() + + def __set_properties(self): + self.panel_1.EnableScrolling(True,True) + #self.panel_1.SetSize((1000,1000)) + self.panel_1.SetScrollRate(20, 20) + + def __do_layout(self): + self.sizer_1 = wx.BoxSizer(wx.HORIZONTAL) + self.sizer_2 = wx.BoxSizer(wx.VERTICAL) + self.sizer_3 = wx.BoxSizer(wx.VERTICAL) + self.sizer_2.Add(self.butafc, 0, 0, 0) + self.sizer_2.Add(self.butexport, 0, 0, 0) + for i in range(0, len(self.listimg)): + self.sizer_3.Add(self.listimg[i], 0, wx.ALIGN_CENTER_HORIZONTAL, 0) + self.sizer_3.Add(self.labels[i], 0, wx.ALIGN_CENTER_HORIZONTAL, 0) + self.panel_1.SetSizer(self.sizer_3) + self.sizer_1.Add(self.sizer_2, 0, wx.EXPAND, 0) + self.sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0) + self.SetSizer(self.sizer_1) + +class DefaultTextLayout : + def __init__(self, ira, corpus, parametres) : + self.pathout = PathOut(dirout = parametres['pathout']) + self.ira = ira + self.parent = ira + self.parametres = parametres + self.corpus = corpus + self.dolayout() + + def dolayout(self) : + log.info('no layout yet') + +class WordCloudLayout(DefaultTextLayout): + def dolayout(self): + #self.dictpathout = parent.corpus.dictpathout + #self.pathout = os.path.dirname(filename) + #self.corpus = parent.corpus + # self.read_result() + self.pathout.basefiles(simipath) + self.Tab = aui.AuiNotebook(self.ira.nb, -1, wx.DefaultPosition) +# if os.path.exists(self.pathout['liste_graph']) : +# list_graph = read_list_file(self.pathout['liste_graph']) +# else : +# list_graph = [['','']] + list_graph = [['nuage_1.png', 'Nuage']] + self.TabStatTot = GraphPanel(self.ira.nb, self.pathout, list_graph) + #self.TabStatTot.write(self.result['glob']) + self.Tab.AddPage(self.TabStatTot, 'Nuage') + self.Tab.corpus = self.corpus + self.Tab.parametres = self.parametres + self.ira.nb.AddPage(self.Tab, 'WordCloud %s' % self.parametres.get('corpus_name','corpus_name')) + self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1) + self.ira.ShowAPane("Tab_content") + +class SimiLayout(DefaultTextLayout) : + def dolayout(self) : + self.pathout.basefiles(simipath) + self.actives = None + self.indices = indices_simi + if os.path.exists(self.pathout['liste_graph']) : + list_graph = read_list_file(self.pathout['liste_graph']) + else : + list_graph = [['','']] + notebook_flags = aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE | aui.AUI_NB_TAB_FLOAT + self.tabsimi = aui.AuiNotebook(self.ira.nb, -1, wx.DefaultPosition) + self.tabsimi.SetAGWWindowStyleFlag(notebook_flags) + self.tabsimi.SetArtProvider(aui.ChromeTabArt()) + self.tabsimi.corpus = self.corpus + self.tabsimi.parametres = self.parametres + self.graphpan = GraphPanelSimi(self.tabsimi, self.pathout, list_graph) + self.graphpan.Bind(wx.EVT_BUTTON, self.redosimi, self.graphpan.butafc) + self.graphpan.Bind(wx.EVT_BUTTON, self.export, self.graphpan.butexport) + self.tabsimi.AddPage(self.graphpan, 'Graph') + self.ira.nb.AddPage(self.tabsimi, 'Analyse de graph') + self.ira.ShowTab(True) + self.ira.nb.SetSelection(self.ira.nb.GetPageCount() - 1) + + def redosimi(self, evt) : + with open(self.pathout['selected.csv'],'r') as f : + selected = f.read() + selected = [int(val) for val in selected.splitlines()] + if self.actives is None : + with codecs.open(self.pathout['actives.csv'], 'r', self.parametres['encoding']) as f : + self.actives = f.read() + self.actives = self.actives.splitlines()#[act for act in self.actives.splitlines()] + dictcol = dict([[i, [act, self.corpus.getlemeff(act)]] for i, act in enumerate(self.actives)]) + SelectColumn(self.ira, dictcol, self.actives, self.pathout['selected.csv'], selected = selected) + prep = PrepSimi(self.ira, self.parametres, indices_simi) + self.parametres = prep.parametres + script = PrintSimiScript(self) + script.make_script() + pid = exec_rcode(self.ira.RPath, script.scriptout, wait = True) + check_Rresult(self.ira, pid) + if self.parametres['type_graph'] == 1: + if os.path.exists(self.pathout['liste_graph']): + graph_simi = read_list_file(self.pathout['liste_graph']) + graph_simi.append([os.path.basename(script.filename), script.txtgraph]) + else : + graph_simi = [[os.path.basename(script.filename), script.txtgraph]] + print_liste(self.pathout['liste_graph'], graph_simi) + DoConf().makeoptions([self.parametres['type']], [self.parametres], self.pathout['Analyse.ira']) + if self.parametres['type_graph'] == 1: + self.graphpan.sizer_3.Add(wx.StaticBitmap(self.graphpan.panel_1, -1, wx.Bitmap(script.filename, wx.BITMAP_TYPE_ANY)), 0, wx.ALIGN_CENTER_HORIZONTAL, 0) + self.graphpan.sizer_3.Add(wx.StaticText(self.graphpan.panel_1,-1, script.txtgraph), 0, wx.ALIGN_CENTER_HORIZONTAL, 0) + self.graphpan.sizer_3.Fit(self.graphpan.panel_1) + self.graphpan.Layout() + self.graphpan.panel_1.Scroll(0,self.graphpan.panel_1.GetScrollRange(wx.VERTICAL)) + + def export(self, evt) : + pass # def read_result(self) : # #self.corpus.read_corpus_from_shelves(self.corpus.dictpathout['db']) # #self.corpus.make_et_table()