#!/usr/bin/env python import cgi, cgitb import sys import os import shutil import string import xmlrpclib import pickle cgitb.enable() class Application: def __init__(self, form): self.form = form self.name = "" self.yname= "" self.rvv = "0" self.sv1 = "0" self.sv2 = "0" self.sv3 = "0" self.sl1 = "0" self.sl2 = "0" self.sl3 = "0" self.url = "" self.process = None self.names = ['bd1','bd2','bd3','bd4','bd5','bd6','bd7'] self.sendHeader() self.showDatamining() if self.form.has_key('Dataset'): self.name = self.form["Dataset"].value if self.form.has_key('responsevariable'): self.resvar = self.form["responsevariable"].value if self.form.has_key('compt'): self.showComponent = self.form["compt"].value else: self.showComponent = 'Constant' self.createDataForm() if self.form.has_key('action') and self.form['action'].value == 'Show Data': self.reset() self.chooseModel() self.showData() if self.form.has_key('component') and self.form['component'].value == 'Add Component': self.getComponents() self.addComponent() self.chooseModel() self.showData() if self.form.has_key('clear') and self.form['clear'].value == 'Reset': self.reset() self.chooseModel() self.showData() if self.form.has_key('process') and self.form['process'].value == 'Show Model': self.chooseModel() self.showDataAndEvaluation() self.showAuthors() self.endHtml() def sendHeader(self): print 'Content-type: text/html' print def endHtml(self): print '' print '' def showDatamining(self): print ''' Geographic Application

ANU Data Mining Group

''' def createDataForm(self): rv1=rv2=rv3=rv4=rv5=rv6=rv7=rv8=rv9=rv10=rv11=rv12=rv13=rv14=rv15=rv16=rv17=rv18=rv19=rv20="" if self.form.has_key('responsevariable'): if self.resvar: if self.resvar == "amt": rv1 = "SELECTED" elif self.resvar == "mdr": rv2 = "SELECTED" elif self.resvar == "isotherm": rv3 = "SELECTED" elif self.resvar == "temp_seas": rv4 = "SELECTED" elif self.resvar == "mtwm": rv5 = "SELECTED" elif self.resvar == "mtcm": rv6 = "SELECTED" elif self.resvar == "tempar": rv7 = "SELECTED" elif self.resvar == "mtwq": rv8 = "SELECTED" elif self.resvar == "mtdq": rv9 = "SELECTED" elif self.resvar == "mtwarmq": rv10 = "SELECTED" elif self.resvar == "mtcq": rv11 = "SELECTED" elif self.resvar == "annprecip": rv12 = "SELECTED" elif self.resvar == "precipwm": rv13 = "SELECTED" elif self.resvar == "precipdm": rv14 = "SELECTED" elif self.resvar == "precipseason": rv15 = "SELECTED" elif self.resvar == "precipwq": rv16 = "SELECTED" elif self.resvar == "precipdq": rv17 = "SELECTED" elif self.resvar == "precipwarmq": rv18 = "SELECTED" elif self.resvar == "precipcoldq": rv19 = "SELECTED" elif self.resvar == "dtm": rv20 = "SELECTED" print '''
''' print '''''' print '''''' %(rv1,rv2,rv3,rv4,rv5,rv6,rv7,rv8,rv9,rv10,rv11,rv12,rv13,rv14,rv15,rv16,rv17,rv18,rv19,rv20) print '''
Data set
Response variable
 
''' print '''
''' def chooseModel(self): v1 = [] l1 = [] v2 = [] l2 = [] v3 = [] l3 = [] for i in range (7): if i == int(self.sv1): v1.append("SELECTED") else: v1.append("") if i == int(self.sv2): v2.append("SELECTED") else: v2.append("") if i == int(self.sv3): v3.append("SELECTED") else: v3.append("") for i in range (6): if i == int(self.sl1): l1.append("SELECTED") else: l1.append("") if i == int(self.sl2): l2.append("SELECTED") else: l2.append("") if i == int(self.sl3): l3.append("SELECTED") else: l3.append("") print '''''' print ''''''% self.showComponent print '''''' % (v1[0],v1[1],v1[2],v1[3],v1[4],v1[5],v1[6]) print '''''' % (l1[0], l1[1], l1[2], l1[3], l1[4], l1[5]) print '''''' print '''''' % (v2[0],v2[1],v2[2],v2[3],v2[4],v2[5],v2[6]) print '''''' %(l2[0], l2[1], l2[2], l2[3], l2[4]) print '''''' print ''''''% (v3[0],v3[1],v3[2],v3[3],v3[4],v3[5],v3[6]) print '''''' %(l3[0], l3[1], l3[2], l3[3]) print '''''' print '''
Model used: %s

Factor

Variable

Level

 

 

1

''' print '''

''' print '''

 

2

''' print '''

''' print '''

 

3

''' print '''

''' print '''

 

'''% self.showComponent def showData(self): picname = "./data.gif" print '''

Data

 

 
'''% (picname) print '''
''' def showDataAndEvaluation(self): print '''

Data

     

Prediction

     

Predicted vs Data Values

''' %("data", "pred", "pred_yy") print '''
''' def createData(self): self.showComponent = "Constant" def getComponents(self): self.sv1 = self.form["variable_1"].value self.sv2 = self.form["variable_2"].value self.sv3 = self.form["variable_3"].value self.sl1 = self.form["level_1"].value self.sl2 = self.form["level_2"].value self.sl3 = self.form["level_3"].value def addComponent(self): nvars = 7 ivec = [] lvec = [] f = [] ivec.append(int(self.sv1)) ivec.append(int(self.sv2)) ivec.append(int(self.sv3)) lvec.append(int(self.sl1)) lvec.append(int(self.sl2)) lvec.append(int(self.sl3)) if self.sl1 == '0' and self.sl2 == '0' and self.sl3 == '0': self.showComponent = 'Constant' return else: A = self.component(self.name, ivec, lvec, nvars) self.showComponent = self.showmodel(A) def component(self, name, ivec, lvec, nvars): file = "address.txt" stats = os.stat(file) if not stats[6] == 0L: f1 = open(file,'r') print 'can run here' try: A = pickle.load(f1) except: print 'something wrong' f1.close() else: A = [(0,0,0,0,0,0,0)] A = self.addvars(ivec, lvec, nvars, A) f2 = open(file, 'w+') pickle.dump(A, f2) f2.close() return A def addvars(self, ivec, lvec, nvars, A): # add components to the list A for the model # ivec = (i[0],i[1],i[2]), same for lvec from copy import copy #print 'A in var', A alpha0 = nvars*(0,) for l0 in range(lvec[0]+1): for l1 in range(lvec[1]+1): for l2 in range(lvec[2]+1): alphax = list(copy(alpha0)) alphax[ivec[0]] = max(l0,alphax[ivec[0]]) alphax[ivec[1]] = max(l1,alphax[ivec[1]]) alphax[ivec[2]] = max(l2,alphax[ivec[2]]) alphax = tuple(alphax) if not alphax in A: A.append(alphax) return A def showmodel(self, A): names = self.names if (len(A) == 1) & (A[0] == len(A[0])*[0,]): return "Constant" A.sort() Ared = [] for i in range(len(A)-1,0,-1): # need to follow ordering alpha = A[i] alpha_include = True for alphax in Ared: cvec = map(lambda x,y : x <= y, alpha, alphax) if reduce(lambda x,y:x*y, cvec): alpha_include = False if alpha_include: Ared.append(alpha) Ared.sort() def alphaprint(alpha, names): # printing the alpha ialpha = filter(lambda i,alpha=alpha: alpha[i]>0, tuple(range(len(alpha)))) lalpha = filter(lambda a: a>0 , alpha) return zip(map(lambda i,names=names:names[i],ialpha), lalpha) funlabs = map(lambda alpha,names=names: alphaprint(alpha,names), Ared) funlabs.sort() onec = lambda funlabsi: reduce(lambda x1,x2:x1+"*%s(%d)"%x2, funlabsi[1:], "%s(%d)"%funlabsi[0]) return reduce(lambda y1,y2,onec=onec:y1+"+%s"%(onec(y2)), funlabs[1:], onec(funlabs[0])) def reset(self): self.rvv = "0" self.sv1 = "0" self.sv2 = "0" self.sv3 = "0" self.sl1 = "0" self.sl2 = "0" self.sl3 = "0" self.clear() self.showComponent = "Constant" def clear(self): file = "address.txt" f = open(file, 'w+') f.close() def showAuthors(self): print '''Main Software Contributors: ''' if __name__=="__main__": # kick off the script try: form = cgi.FieldStorage() app = Application(form) except: pass