2

Is it possible to allow a program user to upload their data after they've gotten an answer from the program as to which test they should use? I know I need to use tkFileDialog but I'm having trouble with running that after the first part of the program has run. Let me know if this is unclear. My code thus far is:

from Tkinter import *

import tkMessageBox 


root = Tk()

q1 = IntVar()

Label(root, 
      text="""How many samples do you have?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root, 
            text="One",
            padx = 20, 
            variable=q1, 
            value=1).pack(anchor=W)

Radiobutton(root, 
            text="Two",
            padx = 20, 
            variable=q1, 
            value=2).pack(anchor=W)


q2 = IntVar()

Label(root, 
      text="""Which choice most closely fits your sample size?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Less than 30""",
            padx = 20,
            variable=q2,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """Greater than or equal to 30""",
            padx = 20,
            variable=q2,
            value = 2).pack(anchor =W)



q3 = IntVar()

Label(root, 
      text="""Is the population mean known?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q3,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q3,
            value = 2).pack(anchor=W)


q4 = IntVar()

Label(root, 
      text="""Is the standard deviation of your data known?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q4,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q4,
            value = 2).pack(anchor =W)


q5 = IntVar()

Label(root, 
      text="""Do you wish to compare two groups?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q5,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q5,
            value = 2).pack(anchor =W)


q6 = IntVar()

Label(root, 
      text="""Do you want to compare two sample means?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q6,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q6,
            value = 2).pack(anchor =W)




q7 = IntVar()

Label(root, 
      text="""Is your data paired (E.g. before and after data)?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q7,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q7,
            value = 2).pack(anchor =W)



q8 = IntVar()

Label(root, 
      text="""Are you testing proportions?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q8,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q8,
            value = 2).pack(anchor =W)



q9 = IntVar() 

Label(root, 
      text="""Do you wish to test for a difference between observed and expected data?""",
      justify = LEFT,
      padx = 20).pack()

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q9,
            value = 1).pack(anchor=W)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q9,
            value = 2).pack(anchor =W)


Button(root, text = "Submit", command=choose).pack()

def choose():

        if q1.get() == 1 and q2.get() == 1 and q3.get() == 2 and q4.get() == 2 and  q5.get() == 1 and q6.get() == 2 and q7.get() == 2 and q8.get() == 2 and q9.get() == 2 :
            tkMessageBox.showinfo( 'decision', 'You should use the t-test!')

        elif q1.get() == 1 and q2.get() == 2 and q3.get() == 1 and q4.get() == 1 and q5.get() == 2 and q6.get() == 2 and q7.get() == 2 and  q8.get() == 2 and q9.get() == 2:
            tkMessageBox.showinfo('decision', 'You should use the z-test!')

        elif q1.get() == 1 and q2.get() == 1 and q3.get() == 2 and q4.get() == 2 and q5.get() == 1 and q6.get() == 2 and q7.get() == 1 and q8.get() == 2 and q9.get() == 2:
            tkMessageBox.showinfo('decision', 'You should use the paired t-test!')

        elif q1.get() == 2 and q2.get() == 1 and q3.get() == 2 and q4.get() == 2 and q5.get() == 1 and q6.get() == 1 and q7.get() == 2 and q8.get() == 2 and q9.get() == 2:
            tkMessageBox.showinfo('decision', 'You should use the two-sample t-test!')

        elif q1.get() == 2 and q2.get() == 2 and q3.get() == 1 and q4.get() == 1 and q5.get() == 2 and q6.get() == 1 and q7.get() == 2 and q8.get() == 2 and q9.get() == 2:
            tkMessageBox.showinfo('decision', 'You should use the two-sample z-test!')

        elif q1.get() == 1 and q2.get() == 2 and q3.get() == 1 and q4.get() == 1 and q5.get() == 2 and q6.get() == 2 and q7.get() == 2 and q8.get() == 1 and q9.get() == 2:
            tkMessageBox.showinfo('decision', 'You should use the 1-prop z-test!')

        elif q1.get() == 2 and q2.get() == 2 and q3.get() == 1 and q4.get() == 1 and q5.get() == 2 and q6.get() == 2 and q7.get() == 2 and q8.get() == 1 and q9.get() == 2:
            tkMessageBox.showinfo('decision', 'You should use the 2-prop z-test!')

        elif q1.get() == 1 and q2.get() == 2 and q3.get() == 2 and q4.get() == 2 and q5.get() == 2 and q6.get() == 2 and q7.get() == 2 and q8.get() == 2 and q9.get() == 1:
            tkMessageBox.showinfo('decision', ' You should use the chi-square test!')

        else:
            tkMessageBox.showinfo('decision', 'You have either incorrectly answered a question about your data or none of the available tests are appropriate.')
            root.destroy()



root.mainloop()   
nobody
  • 19,814
  • 17
  • 56
  • 77
kellie92
  • 23
  • 5
  • Define "upload". What is supposed to happen to the data after the user picks a file from the file dialog? – Kevin Nov 20 '13 at 15:49
  • The long term goal is to use the file that they've chosen in order to run what ever statistical program they were told that best fits their data. Right now, I need to be able to allow them to choose the file they want to use. – kellie92 Nov 20 '13 at 15:51
  • Are the 2-prop tests what you want to have open after all the questions have been answered? If so, are these stored in a location everyone has access to (eg a server or everyone uses one computer)? – Benjooster Nov 20 '13 at 16:13
  • Did my answer below solve your problem? – Benjooster Nov 22 '13 at 20:55

2 Answers2

0

If all of the files you need to open are accessible from a central location you could have your if statement open the file they needed for them.

Try setting those files as variables:

t_test = r'Path\To\File\location\t-test.file'

and so on for the rest of your files.

Then, instead of telling them what to open just open it with os.system():

os.system(t_test)

Don't forget to import os with the rest of your imports.

Benjooster
  • 544
  • 2
  • 6
  • 20
  • Not really, it's my fault because my question wasn't as clear as it should have been. I figured it out. I added a button to browse files on my computer or the users computer. Thanks for trying though. I'll post my code. – kellie92 Nov 25 '13 at 21:33
  • It seems like your solution has the user browsing for the file. If you wanted to ensure the user is opening the correct file. If you package the files with your tkinter app you could force the user to open the correct one as their path would always be the same. – Benjooster Nov 26 '13 at 14:25
0

I figured it out on my own, with some help from the internet of course. My updated code is:

from Tkinter import *
import tkMessageBox
from scipy import stats
import csv


sample=[]


def load_file():

    fname = askopenfilename(filetypes = (("Text Files", ".txt"),
                            ("HTML Files", "*.html;*.htm"),
                                ("All Files", "*.*")))
    global sample
    if fname:
        print "uploading file...",fname
        try:
            print("""Here comes the file""")
        except:
            showerror("Open Source File", "Failed to read file\n'%s'" % fname)
        ifile  = open(fname, "rb")

        data = csv.reader(ifile,delimiter=' ')

        rownum = 0

        for row in data:
            colnum = 0
            d=[]
            for col in row:
                print '%s' % col
                d.append(float(col))
                colnum += 1
            sample.append(d)
            rownum += 1

        ifile.close()
        print sample


def choose():

        global sample
        if q1.get() == 1 and q2.get() == 1 and q3.get() == 1 and q4.get() == 2 and  q5.get() == 1 and q6.get() == 2 and q7.get() == 2 and q8.get() == 2 and q9.get() == 2 :

            tkMessageBox.showinfo('t-test', 't-value is %s, p=%s' %stats.ttest_1samp(sample[0], 0.50 ))
            #will do t-test here
            print sample
            # now sample list contains the data for doing t-test,
            #you just need to call t-test to get the results and show it on message box


        elif q1.get() == 1 and q2.get() == 2 and q3.get() == 1 and q4.get() == 1 and q5.get() == 2 and q6.get() == 2 and q7.get() == 2 and  q8.get() == 2 and q9.get() == 2:
             tkMessageBox.showinfo('z-test', 'test statistic is %s, p=%s'%stats.ttest_1samp(sample[0], 5.0))

        elif q1.get() == 1 and q2.get() == 1 and q3.get() == 2 and q4.get() == 2 and q5.get() == 1 and q6.get() == 2 and q7.get() == 1 and q8.get() == 2 and q9.get() == 2:
            tkMessageBox.showinfo('Paired t-test', 'test statistic is %s, p=%s'%stats.ttest_rel(sample[0], sample[1]))

        elif q1.get() == 2 and q2.get() == 1 and q3.get() == 2 and q4.get() == 2 and q5.get() == 1 and q6.get() == 1 and q7.get() == 2 and q8.get() == 2 and q9.get() == 2:
             tkMessageBox.showinfo('Two sample t-test', 'test statistic is %s, p=%s'%stats.ttest_ind(sample[0], sample[1]))

        elif q1.get() == 2 and q2.get() == 2 and q3.get() == 1 and q4.get() == 1 and q5.get() == 2 and q6.get() == 1 and q7.get() == 2 and q8.get() == 2 and q9.get() == 2:
             tkMessageBox.showinfo('Two sample z-test', 'test statistic is %s, p=%s'%stats.ttest_ind(sample[0], sample[1]))



        else:
            tkMessageBox.showinfo('decision', 'You have either incorrectly answered a question about your data or none of the available tests are appropriate.')
            #root.destroy()
root = Tk()

q1 = IntVar()

Label(root,
      text="""How many samples do you have?""",
      justify = LEFT,
      padx = 20).pack(anchor=W)

Radiobutton(root,
            text="One",
            padx = 20,
            variable=q1,
            value=1).pack(anchor=N)
Radiobutton(root,
            text="Two",
            padx = 20,
            variable=q1,
            value=2).pack(anchor=N)


q2 = IntVar()

Label(root,
      text="""Which choice most closely fits your sample size?""",
      justify = LEFT,
      padx = 20).pack(anchor=W)

Radiobutton(root,
            text = """Less than 30""",
            padx = 20,
            variable=q2,
            value = 1).pack(anchor=N)

Radiobutton(root,
            text = """Greater than or equal to 30""",
            padx = 20,
            variable=q2,
            value = 2).pack(anchor=N)



q3 = IntVar()

Label(root,
      text="""Is the population mean known?""",
      justify = LEFT,
      padx = 20).pack(anchor=W)

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q3,
            value = 1).pack(anchor=N)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q3,
            value = 2).pack(anchor=N)


q4 = IntVar()

Label(root,
      text="""Is the standard deviation of your data known?""",
      justify = LEFT,
      padx = 20).pack(anchor=W)

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q4,
            value = 1).pack(anchor=N)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q4,
            value = 2).pack(anchor=N)


q5 = IntVar()

Label(root,
      text="""Do you wish to compare two groups?""",
      justify = LEFT,
      padx = 20).pack(anchor=W)

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q5,
            value = 1).pack(anchor=N)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q5,
            value = 2).pack(anchor=N)


q6 = IntVar()

Label(root,
      text="""Do you want to compare two sample means?""",
      justify = LEFT,
      padx = 20).pack(anchor=W)

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q6,
            value = 1).pack(anchor=N)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q6, 
            value = 2).pack(anchor=N)




q7 = IntVar()

Label(root,
      text="""Is your data paired (E.g. before and after data)?""",
      justify = LEFT,
      padx = 20).pack(anchor=W)

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q7,
            value = 1).pack(anchor=N)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q7,
            value = 2).pack(anchor=N)



q8 = IntVar()

Label(root,
      text="""Are you testing proportions?""",
      justify = LEFT,
      padx = 20).pack(anchor=W)

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q8,
            value = 1).pack(anchor=N)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q8,
            value = 2).pack(anchor=N)



q9 = IntVar()

Label(root,
      text="""Do you wish to test for a difference between observed and expected data?""",
      justify = LEFT,
      padx = 20).pack(anchor=W)

Radiobutton(root,
            text = """Yes""",
            padx = 20,
            variable=q9,
            value = 1).pack(anchor=N)

Radiobutton(root,
            text = """No""",
            padx = 20,
            variable=q9,
            value = 2).pack(anchor=N)




from tkFileDialog import askopenfilename
from tkMessageBox import showerror

Button(root,text = "Browse files", command = load_file, width = 10).pack()



Button(root, text = "Submit", command=choose).pack()




root.mainloop()   
Benjooster
  • 544
  • 2
  • 6
  • 20
kellie92
  • 23
  • 5
  • your post is badly formatted. Can you please take a few minutes to fix it? – Bryan Oakley Nov 25 '13 at 21:53
  • If it's just for you it doesn't matter, but if you'll have other people touching the code you should put all your imports at the top of your module. Check this out for more on formatting: http://www.python.org/dev/peps/pep-0008/#imports – Benjooster Nov 26 '13 at 14:26