Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def ready():
- global number_text,number,text
- global outrun_text,outrun
- global inrun_text,inrun
- global uniform_up_text,uniform_up,uniform_down_text,uniform_down
- global normal_vearage_text,normal_vearage,normal_sd_text,normal_sd
- global binomial_n_text,binomial_n,binomial_p_text,binomial_p
- global negative_r_text,negative_r,negative_p_text,negative_p
- global button_draw
- global button_save
- number_text.grid_forget()
- number.grid_forget()
- outrun_text.grid_forget()
- outrun.grid_forget()
- inrun_text.grid_forget()
- inrun.grid_forget()
- uniform_up_text.grid_forget()
- uniform_up.grid_forget()
- uniform_down_text.grid_forget()
- uniform_down.grid_forget()
- normal_vearage_text.grid_forget()
- normal_vearage.grid_forget()
- normal_sd_text.grid_forget()
- normal_sd.grid_forget()
- binomial_n_text.grid_forget()
- binomial_n.grid_forget()
- binomial_p_text.grid_forget()
- binomial_p.grid_forget()
- negative_r_text.grid_forget()
- negative_r.grid_forget()
- negative_p_text.grid_forget()
- negative_p.grid_forget()
- button_draw.grid_forget()
- button_save.grid_forget()
- text.grid(row=4,column=21,columnspan=2,sticky="NW")
- if(var_distribution.get()==0):
- if(var_mode.get()==0):
- #均勻原始
- text_test.set(str(list1[0])+str(list2[0]))
- number_text.grid(row=5,column=21,sticky="NW")
- number.grid(row=5,column=22,columnspan=3,sticky="NW")
- button_draw.grid(row=9,column=21,sticky="NW")
- button_save.grid(row=9,column=22,sticky="NW") ##
- else:
- #均勻展示
- text_test.set(str(list1[0])+str(list2[1]))
- number_text.grid(row=5,column=21,sticky="NW")
- number.grid(row=5,column=22,columnspan=3,sticky="NW")
- outrun_text.grid(row=6,column=21,sticky="NW")
- outrun.grid(row=6,column=22,columnspan=3,sticky="NW")
- uniform_up_text.grid(row=7,column=21,sticky="NW")
- uniform_up.grid(row=7,column=22,columnspan=3,sticky="NW")
- uniform_down_text.grid(row=8,column=21,sticky="NW")
- uniform_down.grid(row=8,column=22,columnspan=3,sticky="NW")
- button_draw.grid(row=9,column=21,sticky="NW")
- button_save.grid(row=9,column=22,sticky="NW") ##
- elif(var_distribution.get()==1):
- if(var_mode.get()==0):
- #常態原始
- text_test.set(str(list1[1])+str(list2[0]))
- number_text.grid(row=5,column=21,sticky="NW")
- number.grid(row=5,column=22,columnspan=3,sticky="NW")
- button_draw.grid(row=9,column=21,sticky="NW")
- button_save.grid(row=9,column=22,sticky="NW") ##
- else:
- #常態展示
- text_test.set(str(list1[1])+str(list2[1]))
- number_text.grid(row=5,column=21,sticky="NW")
- number.grid(row=5,column=22,columnspan=3,sticky="NW")
- outrun_text.grid(row=6,column=21,sticky="NW")
- outrun.grid(row=6,column=22,columnspan=3,sticky="NW")
- normal_vearage_text.grid(row=7,column=21,sticky="NW")
- normal_vearage.grid(row=7,column=22,columnspan=3,sticky="NW")
- normal_sd_text.grid(row=8,column=21,sticky="NW")
- normal_sd.grid(row=8,column=22,columnspan=3,sticky="NW")
- button_draw.grid(row=9,column=21,sticky="NW")
- button_save.grid(row=9,column=22,sticky="NW") ##
- elif(var_distribution.get()==2):
- if(var_mode.get()==0):
- #二項原始
- text_test.set(str(list1[2])+str(list2[0]))
- number_text.grid(row=5,column=21,sticky="NW")
- number.grid(row=5,column=22,columnspan=3,sticky="NW")
- button_draw.grid(row=9,column=21,sticky="NW")
- button_save.grid(row=9,column=22,sticky="NW") ##
- else:
- #二項展示
- text_test.set(str(list1[2])+str(list2[1]))
- number_text.grid(row=5,column=21,sticky="NW")
- number.grid(row=5,column=22,columnspan=3,sticky="NW")
- outrun_text.grid(row=6,column=21,sticky="NW")
- outrun.grid(row=6,column=22,columnspan=3,sticky="NW")
- binomial_n_text.grid(row=7,column=21,sticky="NW")
- binomial_n.grid(row=7,column=22,columnspan=3,sticky="NW")
- binomial_p_text.grid(row=8,column=21,sticky="NW")
- binomial_p.grid(row=8,column=22,columnspan=3,sticky="NW")
- button_draw.grid(row=9,column=21,sticky="NW")
- button_save.grid(row=9,column=22,sticky="NW") ##
- elif(var_distribution.get()==3):
- if(var_mode.get()==0):
- #負二項原始
- text_test.set(str(list1[3])+str(list2[0]))
- number_text.grid(row=5,column=21,sticky="NW")
- number.grid(row=5,column=22,columnspan=3,sticky="NW")
- button_draw.grid(row=9,column=21,sticky="NW")
- button_save.grid(row=9,column=22,sticky="NW") ##
- else:
- #負二項展示
- text_test.set(str(list1[3])+str(list2[1]))
- number_text.grid(row=5,column=21,sticky="NW")
- number.grid(row=5,column=22,columnspan=3,sticky="NW")
- outrun_text.grid(row=6,column=21,sticky="NW")
- outrun.grid(row=6,column=22,columnspan=3,sticky="NW")
- negative_r_text.grid(row=7,column=21,sticky="NW")
- negative_r.grid(row=7,column=22,columnspan=3,sticky="NW")
- negative_p_text.grid(row=8,column=21,sticky="NW")
- negative_p.grid(row=8,column=22,columnspan=3,sticky="NW")
- button_draw.grid(row=9,column=21,sticky="NW")
- button_save.grid(row=9,column=22,sticky="NW")
- else:
- text_test.set("失敗")
- total_text.set(" ")
- def Save(): ##### 儲存資料
- toplevel_save = Toplevel(win)
- toplevel_save.geometry('400x200')
- toplevel_save.title('儲存檔案')
- #text_name = StringVar()
- label_savename = Label(toplevel_save,text='檔案名稱:')
- label_savename.grid(row=0,column=0)
- entry_name = Entry(toplevel_save,textvariable=text_name)
- entry_name.grid(row=0,column=1)
- button_name = Button(toplevel_save,text='存檔',command=Save_Excel)
- button_name.grid(row=1,column=0)
- def Save_Excel():
- import xlsxwriter
- global canva
- filename = text_name.get()+'.xlsx'
- workbook = xlsxwriter.Workbook(filename)
- worksheet = workbook.add_worksheet()
- cot=1
- for line in canva:
- adr = 'A'+str(cot)
- worksheet.write(adr,line)
- cot+=1
- def draw():
- global number_text,number,text
- global outrun_text,outrun
- global inrun_text,inrun
- global uniform_up_text,uniform_up,uniform_down_text,uniform_down
- global normal_vearage_text,normal_vearage,normal_sd_text,normal_sd
- global binomial_n_text,binomial_n,binomial_p_text,binomial_p
- global negative_r_text,negative_r,negative_p_text,negative_p
- global button_draw,total_view,total_text
- win_figure.clf() #清空圖紙
- win_refigure=win_figure.add_subplot(111) #建立新的圖紙
- try:
- draw_number = int(number.get())
- except:
- draw_number = 1000
- global canva
- canva = np.zeros(draw_number)
- if(var_distribution.get()==0):
- if(var_mode.get()==0):
- #均勻原始
- text_test.set(str(list1[0])+str(list2[0]))
- uniform_down_input = 0
- uniform_up_input = 1
- total_text.set("預設值-->"+"樣本數->"+str(draw_number)+"下界->"+str(uniform_down_input)+"上界->"
- +str(uniform_up_input))
- canva = np.random.uniform(uniform_down_input,uniform_up_input,draw_number)
- else:
- #均勻展示
- text_test.set(str(list1[0])+str(list2[1]))
- try:
- outrun_input = int(outrun.get())
- except:
- outrun_input = 1000
- try:
- uniform_up_input = float(uniform_up.get())
- except:
- uniform_up_input = 1000
- try:
- uniform_down_input = float(uniform_down.get())
- except:
- uniform_down_input = 100
- total_text.set("樣本數->"+str(draw_number)+"外圈次數->"+str(outrun_input)+"下界->"+str(uniform_down_input)+
- "上界->"+str(uniform_up_input))
- canva_1 = np.zeros(outrun_input)
- for i in range(outrun_input):
- canva = np.random.uniform(uniform_down_input,uniform_up_input,draw_number)
- canva_1[i] = np.sum(canva)/draw_number
- canva = canva_1
- win_refigure.hist(canva, bins=30, color='g', alpha=0.75)
- elif(var_distribution.get()==1):
- if(var_mode.get()==0):
- #常態原始
- text_test.set(str(list1[1])+str(list2[0]))
- normal_vearage_input = 10
- normal_sd_input = 2
- total_text.set("預設值-->"+"樣本數->"+str(draw_number)+"平均->"+str(normal_vearage_input)+"標準差->"+str(normal_sd_input))
- canva = np.random.normal(normal_vearage_input, normal_sd_input,draw_number)
- else:
- #常態展示
- text_test.set(str(list1[1])+str(list2[1]))
- try:
- outrun_input = int(outrun.get())
- except:
- outrun_input = 1000
- try:
- normal_vearage_input = float(normal_vearage.get())
- except:
- normal_vearage_input = 1000
- try:
- normal_sd_input = float(normal_sd.get())
- except:
- normal_sd_input = 200
- total_text.set("樣本數->"+str(draw_number)+"外圈->"+str(outrun_input)+
- "平均->"+str(normal_vearage_input)+"標準差->"+str(normal_sd_input))
- canva_1 = np.zeros(outrun_input)
- for i in range(outrun_input):
- canva = np.random.normal(normal_vearage_input, normal_sd_input,draw_number)
- canva_1[i] = np.sum(canva)/draw_number
- canva = canva_1
- win_refigure.hist(canva, bins=30, color='g', alpha=0.75)
- elif(var_distribution.get()==2):
- if(var_mode.get()==0):
- #二項原始
- text_test.set(str(list1[2])+str(list2[0]))
- binomial_n_input = 6
- binomial_p_input = 0.5
- total_text.set("預設值-->"+"樣本數->"+str(draw_number)+"次數->"+str(binomial_n_input)+"機率->"+str(binomial_p_input))
- canva = np.random.binomial(binomial_n_input,binomial_p_input,draw_number)
- else:
- #二項展示
- text_test.set(str(list1[2])+str(list2[1]))
- try:
- outrun_input = int(outrun.get())
- except:
- outrun_input = 1000
- try:
- binomial_n_input = int(binomial_n.get())
- except:
- binomial_n_input = 8
- try:
- binomial_p_input = float(binomial_p.get())
- except:
- binomial_p_input = 0.5
- if(binomial_p_input>1):
- binomial_p_input = 0.5
- elif(binomial_p_input<0):
- binomial_p_input = 0.5
- total_text.set("樣本數->"+str(draw_number)+"外圈>"+str(outrun_input)+
- "次數->"+str(binomial_n_input)+"機率->"+str(binomial_p_input))
- canva_1 = np.zeros(outrun_input)
- for i in range(outrun_input):
- canva = np.random.binomial(binomial_n_input,binomial_p_input,draw_number)
- canva_1[i] = np.sum(canva)/draw_number
- canva = canva_1
- win_refigure.hist(canva, bins=binomial_n_input+1, color='g', alpha=0.75)
- elif(var_distribution.get()==3):
- if(var_mode.get()==0):
- #負二項原始
- text_test.set(str(list1[3])+str(list2[0]))
- negative_r_input = 10
- negative_p_input = 0.5
- total_text.set("預設值-->"+"樣本數->"+str(draw_number)+"成功次數->"+str(negative_r_input)+"機率->"+str(negative_p_input))
- canva = np.random.negative_binomial(negative_r_input,negative_p_input,draw_number)
- else:
- #負二項展示
- text_test.set(str(list1[3])+str(list2[1]))
- try:
- outrun_input = int(outrun.get())
- except:
- outrun_input = 1000
- try:
- negative_r_input = int(negative_r.get())
- except:
- negative_r_input = 10
- try:
- negative_p_input = float(negative_p.get())
- except:
- negative_p_input = 0.5
- if(negative_p_input>1):
- negative_p_input = 0.5
- elif(negative_p_input<0):
- negative_p_input = 0.5
- total_text.set("樣本數->"+str(draw_number)+"外圈->"+str(outrun_input)+
- "成功次數->"+str(negative_r_input)+"機率->"+str(negative_p_input))
- canva_1 = np.zeros(outrun_input)
- for i in range(outrun_input):
- canva = np.random.negative_binomial(negative_r_input,negative_p_input,draw_number)
- canva_1[i] = np.sum(canva)/draw_number
- canva = canva_1
- win_refigure.hist(canva, bins=(negative_r_input*2)+1, color='g', alpha=0.75)
- total_view.grid(row=19,column=21,rowspan=2,columnspan=12,sticky="NW")
- win_refigure.set_title("Hisiogram Of ProporttionOfHeads")
- win_refigure.set_xlabel("value")
- win_refigure.set_ylabel("count")
- win_canva.show()
- ###################### 主程式 ##########################
- import numpy as np
- import time
- from tkinter import *
- import matplotlib as plt
- from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
- from matplotlib.figure import Figure
- import traceback
- import importlib
- import sys
- importlib.reload(sys)
- if __name__=="__main__":#確認是本身執行還是被當成mode
- try:
- #plt.use("TkAgg")
- win=Tk()
- win.title("Hisiogram Of ProporttionOfHeads")
- win_figure = Figure(figsize=(8,6),dpi=100)
- win_canva = FigureCanvasTkAgg(win_figure,master=win)
- win_canva.get_tk_widget().grid(row=0,column=0,rowspan=20,columnspan=20)
- frame = Frame(win).grid(row=0,column=21,columnspan=10)
- number = Entry(win).grid_forget()
- var_distribution = IntVar()
- R1_distribution = Radiobutton(frame,text="均勻分布",variable=var_distribution,value=0).grid(row=0,column=21,sticky="Nw")
- uniform_up = Entry(win).grid_forget()
- uniform_down = Entry(win).grid_forget()
- R2_distribution = Radiobutton(frame,text="常態分布",variable=var_distribution,value=1).grid(row=0,column=22,sticky="Nw")
- normal_vearage = Entry(win).grid_forget()
- normal_sd = Entry(win).grid_forget()
- R3_distribution = Radiobutton(frame,text="二項分布",variable=var_distribution,value=2).grid(row=0,column=23,sticky="Nw")
- binomial_n = Entry(win).grid_forget()
- binomial_p = Entry(win).grid_forget()
- R4_distribution = Radiobutton(frame,text="負二項分布",variable=var_distribution,value=3).grid(row=0,column=24,sticky="Nw")
- negative_r = Entry(win).grid_forget()
- negative_p = Entry(win).grid_forget()
- list1=["均勻分布","常態分布","二項分布","負二項分布"]
- var_mode = IntVar()
- R1_mode = Radiobutton(frame,text="原始圖",variable=var_mode,value=0).grid(row=1,column=21,sticky="NW")
- R2_mode = Radiobutton(frame,text="展示圖",variable=var_mode,value=1).grid(row=1,column=22,sticky="NW")
- list2=["原始圖","展示圖"]
- text_test = IntVar()
- text_test.set(str(list1[0])+str(list2[0]))
- text = Label(win,textvariable=text_test)
- text.grid_forget()
- button_ready = Button(win,text="模式確定",command=ready)
- button_ready.grid(row=2,column=21,rowspan=2,sticky="NW")
- number_text = Label(win,text="樣本數")
- number = Entry(win)
- outrun_text = Label(win,text="外圈次數")
- outrun = Entry(win)
- inrun_text = Label(win,text="內圈次數")
- inrun = Entry(win)
- uniform_up_text = Label(win,text="上界")
- uniform_up = Entry(win)
- uniform_down_text = Label(win,text="下界")
- uniform_down = Entry(win)
- normal_vearage_text = Label(win,text="平均值")
- normal_vearage = Entry(win)
- normal_sd_text = Label(win,text="標準差")
- normal_sd = Entry(win)
- binomial_n_text = Label(win,text="總次數")
- binomial_n = Entry(win)
- binomial_p_text = Label(win,text="成功機率")
- binomial_p = Entry()
- negative_r_text = Label(win,text="成功次數")
- negative_r = Entry(win)
- negative_p_text = Label(win,text="成功機率")
- negative_p = Entry(win)
- button_draw = Button(win,text="繪圖",command=draw)
- total_text = IntVar()
- total_view = Label(win,textvariable=total_text)
- ## 儲存
- button_save = Button(win,text="儲存資料",command=Save)
- text_name = StringVar() ####
- ###
- win.mainloop()
- except Exception:
- traceback.print_exc()
Add Comment
Please, Sign In to add comment