Guest User

Untitled

a guest
Jun 24th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.35 KB | None | 0 0
  1. def ready():
  2. global number_text,number,text
  3. global outrun_text,outrun
  4. global inrun_text,inrun
  5. global uniform_up_text,uniform_up,uniform_down_text,uniform_down
  6. global normal_vearage_text,normal_vearage,normal_sd_text,normal_sd
  7. global binomial_n_text,binomial_n,binomial_p_text,binomial_p
  8. global negative_r_text,negative_r,negative_p_text,negative_p
  9. global button_draw
  10. global button_save
  11.  
  12. number_text.grid_forget()
  13. number.grid_forget()
  14. outrun_text.grid_forget()
  15. outrun.grid_forget()
  16. inrun_text.grid_forget()
  17. inrun.grid_forget()
  18. uniform_up_text.grid_forget()
  19. uniform_up.grid_forget()
  20. uniform_down_text.grid_forget()
  21. uniform_down.grid_forget()
  22. normal_vearage_text.grid_forget()
  23. normal_vearage.grid_forget()
  24. normal_sd_text.grid_forget()
  25. normal_sd.grid_forget()
  26. binomial_n_text.grid_forget()
  27. binomial_n.grid_forget()
  28. binomial_p_text.grid_forget()
  29. binomial_p.grid_forget()
  30. negative_r_text.grid_forget()
  31. negative_r.grid_forget()
  32. negative_p_text.grid_forget()
  33. negative_p.grid_forget()
  34. button_draw.grid_forget()
  35. button_save.grid_forget()
  36.  
  37. text.grid(row=4,column=21,columnspan=2,sticky="NW")
  38.  
  39. if(var_distribution.get()==0):
  40. if(var_mode.get()==0):
  41. #均勻原始
  42. text_test.set(str(list1[0])+str(list2[0]))
  43. number_text.grid(row=5,column=21,sticky="NW")
  44. number.grid(row=5,column=22,columnspan=3,sticky="NW")
  45. button_draw.grid(row=9,column=21,sticky="NW")
  46. button_save.grid(row=9,column=22,sticky="NW") ##
  47. else:
  48. #均勻展示
  49. text_test.set(str(list1[0])+str(list2[1]))
  50. number_text.grid(row=5,column=21,sticky="NW")
  51. number.grid(row=5,column=22,columnspan=3,sticky="NW")
  52. outrun_text.grid(row=6,column=21,sticky="NW")
  53. outrun.grid(row=6,column=22,columnspan=3,sticky="NW")
  54. uniform_up_text.grid(row=7,column=21,sticky="NW")
  55. uniform_up.grid(row=7,column=22,columnspan=3,sticky="NW")
  56. uniform_down_text.grid(row=8,column=21,sticky="NW")
  57. uniform_down.grid(row=8,column=22,columnspan=3,sticky="NW")
  58. button_draw.grid(row=9,column=21,sticky="NW")
  59. button_save.grid(row=9,column=22,sticky="NW") ##
  60. elif(var_distribution.get()==1):
  61. if(var_mode.get()==0):
  62. #常態原始
  63. text_test.set(str(list1[1])+str(list2[0]))
  64. number_text.grid(row=5,column=21,sticky="NW")
  65. number.grid(row=5,column=22,columnspan=3,sticky="NW")
  66. button_draw.grid(row=9,column=21,sticky="NW")
  67. button_save.grid(row=9,column=22,sticky="NW") ##
  68. else:
  69. #常態展示
  70. text_test.set(str(list1[1])+str(list2[1]))
  71. number_text.grid(row=5,column=21,sticky="NW")
  72. number.grid(row=5,column=22,columnspan=3,sticky="NW")
  73. outrun_text.grid(row=6,column=21,sticky="NW")
  74. outrun.grid(row=6,column=22,columnspan=3,sticky="NW")
  75. normal_vearage_text.grid(row=7,column=21,sticky="NW")
  76. normal_vearage.grid(row=7,column=22,columnspan=3,sticky="NW")
  77. normal_sd_text.grid(row=8,column=21,sticky="NW")
  78. normal_sd.grid(row=8,column=22,columnspan=3,sticky="NW")
  79. button_draw.grid(row=9,column=21,sticky="NW")
  80. button_save.grid(row=9,column=22,sticky="NW") ##
  81. elif(var_distribution.get()==2):
  82. if(var_mode.get()==0):
  83. #二項原始
  84. text_test.set(str(list1[2])+str(list2[0]))
  85. number_text.grid(row=5,column=21,sticky="NW")
  86. number.grid(row=5,column=22,columnspan=3,sticky="NW")
  87. button_draw.grid(row=9,column=21,sticky="NW")
  88. button_save.grid(row=9,column=22,sticky="NW") ##
  89. else:
  90. #二項展示
  91. text_test.set(str(list1[2])+str(list2[1]))
  92. number_text.grid(row=5,column=21,sticky="NW")
  93. number.grid(row=5,column=22,columnspan=3,sticky="NW")
  94. outrun_text.grid(row=6,column=21,sticky="NW")
  95. outrun.grid(row=6,column=22,columnspan=3,sticky="NW")
  96. binomial_n_text.grid(row=7,column=21,sticky="NW")
  97. binomial_n.grid(row=7,column=22,columnspan=3,sticky="NW")
  98. binomial_p_text.grid(row=8,column=21,sticky="NW")
  99. binomial_p.grid(row=8,column=22,columnspan=3,sticky="NW")
  100. button_draw.grid(row=9,column=21,sticky="NW")
  101. button_save.grid(row=9,column=22,sticky="NW") ##
  102. elif(var_distribution.get()==3):
  103. if(var_mode.get()==0):
  104. #負二項原始
  105. text_test.set(str(list1[3])+str(list2[0]))
  106. number_text.grid(row=5,column=21,sticky="NW")
  107. number.grid(row=5,column=22,columnspan=3,sticky="NW")
  108. button_draw.grid(row=9,column=21,sticky="NW")
  109. button_save.grid(row=9,column=22,sticky="NW") ##
  110. else:
  111. #負二項展示
  112. text_test.set(str(list1[3])+str(list2[1]))
  113. number_text.grid(row=5,column=21,sticky="NW")
  114. number.grid(row=5,column=22,columnspan=3,sticky="NW")
  115. outrun_text.grid(row=6,column=21,sticky="NW")
  116. outrun.grid(row=6,column=22,columnspan=3,sticky="NW")
  117. negative_r_text.grid(row=7,column=21,sticky="NW")
  118. negative_r.grid(row=7,column=22,columnspan=3,sticky="NW")
  119. negative_p_text.grid(row=8,column=21,sticky="NW")
  120. negative_p.grid(row=8,column=22,columnspan=3,sticky="NW")
  121. button_draw.grid(row=9,column=21,sticky="NW")
  122. button_save.grid(row=9,column=22,sticky="NW")
  123. else:
  124. text_test.set("失敗")
  125. total_text.set(" ")
  126.  
  127. def Save(): ##### 儲存資料
  128.  
  129. toplevel_save = Toplevel(win)
  130. toplevel_save.geometry('400x200')
  131. toplevel_save.title('儲存檔案')
  132. #text_name = StringVar()
  133.  
  134. label_savename = Label(toplevel_save,text='檔案名稱:')
  135. label_savename.grid(row=0,column=0)
  136. entry_name = Entry(toplevel_save,textvariable=text_name)
  137. entry_name.grid(row=0,column=1)
  138. button_name = Button(toplevel_save,text='存檔',command=Save_Excel)
  139. button_name.grid(row=1,column=0)
  140.  
  141. def Save_Excel():
  142. import xlsxwriter
  143. global canva
  144.  
  145.  
  146. filename = text_name.get()+'.xlsx'
  147. workbook = xlsxwriter.Workbook(filename)
  148. worksheet = workbook.add_worksheet()
  149.  
  150. cot=1
  151. for line in canva:
  152. adr = 'A'+str(cot)
  153. worksheet.write(adr,line)
  154. cot+=1
  155.  
  156.  
  157. def draw():
  158. global number_text,number,text
  159. global outrun_text,outrun
  160. global inrun_text,inrun
  161. global uniform_up_text,uniform_up,uniform_down_text,uniform_down
  162. global normal_vearage_text,normal_vearage,normal_sd_text,normal_sd
  163. global binomial_n_text,binomial_n,binomial_p_text,binomial_p
  164. global negative_r_text,negative_r,negative_p_text,negative_p
  165. global button_draw,total_view,total_text
  166.  
  167. win_figure.clf() #清空圖紙
  168. win_refigure=win_figure.add_subplot(111) #建立新的圖紙
  169.  
  170. try:
  171. draw_number = int(number.get())
  172. except:
  173. draw_number = 1000
  174.  
  175. global canva
  176. canva = np.zeros(draw_number)
  177.  
  178. if(var_distribution.get()==0):
  179. if(var_mode.get()==0):
  180. #均勻原始
  181. text_test.set(str(list1[0])+str(list2[0]))
  182. uniform_down_input = 0
  183. uniform_up_input = 1
  184. total_text.set("預設值-->"+"樣本數->"+str(draw_number)+"下界->"+str(uniform_down_input)+"上界->"
  185. +str(uniform_up_input))
  186. canva = np.random.uniform(uniform_down_input,uniform_up_input,draw_number)
  187. else:
  188. #均勻展示
  189. text_test.set(str(list1[0])+str(list2[1]))
  190. try:
  191. outrun_input = int(outrun.get())
  192. except:
  193. outrun_input = 1000
  194. try:
  195. uniform_up_input = float(uniform_up.get())
  196. except:
  197. uniform_up_input = 1000
  198. try:
  199. uniform_down_input = float(uniform_down.get())
  200. except:
  201. uniform_down_input = 100
  202. total_text.set("樣本數->"+str(draw_number)+"外圈次數->"+str(outrun_input)+"下界->"+str(uniform_down_input)+
  203. "上界->"+str(uniform_up_input))
  204. canva_1 = np.zeros(outrun_input)
  205. for i in range(outrun_input):
  206. canva = np.random.uniform(uniform_down_input,uniform_up_input,draw_number)
  207. canva_1[i] = np.sum(canva)/draw_number
  208. canva = canva_1
  209. win_refigure.hist(canva, bins=30, color='g', alpha=0.75)
  210.  
  211.  
  212. elif(var_distribution.get()==1):
  213. if(var_mode.get()==0):
  214. #常態原始
  215. text_test.set(str(list1[1])+str(list2[0]))
  216. normal_vearage_input = 10
  217. normal_sd_input = 2
  218. total_text.set("預設值-->"+"樣本數->"+str(draw_number)+"平均->"+str(normal_vearage_input)+"標準差->"+str(normal_sd_input))
  219. canva = np.random.normal(normal_vearage_input, normal_sd_input,draw_number)
  220. else:
  221. #常態展示
  222. text_test.set(str(list1[1])+str(list2[1]))
  223. try:
  224. outrun_input = int(outrun.get())
  225. except:
  226. outrun_input = 1000
  227. try:
  228. normal_vearage_input = float(normal_vearage.get())
  229. except:
  230. normal_vearage_input = 1000
  231. try:
  232. normal_sd_input = float(normal_sd.get())
  233. except:
  234. normal_sd_input = 200
  235. total_text.set("樣本數->"+str(draw_number)+"外圈->"+str(outrun_input)+
  236. "平均->"+str(normal_vearage_input)+"標準差->"+str(normal_sd_input))
  237. canva_1 = np.zeros(outrun_input)
  238. for i in range(outrun_input):
  239. canva = np.random.normal(normal_vearage_input, normal_sd_input,draw_number)
  240. canva_1[i] = np.sum(canva)/draw_number
  241. canva = canva_1
  242. win_refigure.hist(canva, bins=30, color='g', alpha=0.75)
  243.  
  244.  
  245. elif(var_distribution.get()==2):
  246. if(var_mode.get()==0):
  247. #二項原始
  248. text_test.set(str(list1[2])+str(list2[0]))
  249. binomial_n_input = 6
  250. binomial_p_input = 0.5
  251. total_text.set("預設值-->"+"樣本數->"+str(draw_number)+"次數->"+str(binomial_n_input)+"機率->"+str(binomial_p_input))
  252. canva = np.random.binomial(binomial_n_input,binomial_p_input,draw_number)
  253. else:
  254. #二項展示
  255. text_test.set(str(list1[2])+str(list2[1]))
  256. try:
  257. outrun_input = int(outrun.get())
  258. except:
  259. outrun_input = 1000
  260. try:
  261. binomial_n_input = int(binomial_n.get())
  262. except:
  263. binomial_n_input = 8
  264. try:
  265. binomial_p_input = float(binomial_p.get())
  266. except:
  267. binomial_p_input = 0.5
  268. if(binomial_p_input>1):
  269. binomial_p_input = 0.5
  270. elif(binomial_p_input<0):
  271. binomial_p_input = 0.5
  272. total_text.set("樣本數->"+str(draw_number)+"外圈>"+str(outrun_input)+
  273. "次數->"+str(binomial_n_input)+"機率->"+str(binomial_p_input))
  274. canva_1 = np.zeros(outrun_input)
  275. for i in range(outrun_input):
  276. canva = np.random.binomial(binomial_n_input,binomial_p_input,draw_number)
  277. canva_1[i] = np.sum(canva)/draw_number
  278. canva = canva_1
  279. win_refigure.hist(canva, bins=binomial_n_input+1, color='g', alpha=0.75)
  280.  
  281.  
  282.  
  283. elif(var_distribution.get()==3):
  284. if(var_mode.get()==0):
  285. #負二項原始
  286. text_test.set(str(list1[3])+str(list2[0]))
  287. negative_r_input = 10
  288. negative_p_input = 0.5
  289. total_text.set("預設值-->"+"樣本數->"+str(draw_number)+"成功次數->"+str(negative_r_input)+"機率->"+str(negative_p_input))
  290. canva = np.random.negative_binomial(negative_r_input,negative_p_input,draw_number)
  291. else:
  292. #負二項展示
  293. text_test.set(str(list1[3])+str(list2[1]))
  294. try:
  295. outrun_input = int(outrun.get())
  296. except:
  297. outrun_input = 1000
  298. try:
  299. negative_r_input = int(negative_r.get())
  300. except:
  301. negative_r_input = 10
  302. try:
  303. negative_p_input = float(negative_p.get())
  304. except:
  305. negative_p_input = 0.5
  306. if(negative_p_input>1):
  307. negative_p_input = 0.5
  308. elif(negative_p_input<0):
  309. negative_p_input = 0.5
  310. total_text.set("樣本數->"+str(draw_number)+"外圈->"+str(outrun_input)+
  311. "成功次數->"+str(negative_r_input)+"機率->"+str(negative_p_input))
  312. canva_1 = np.zeros(outrun_input)
  313. for i in range(outrun_input):
  314. canva = np.random.negative_binomial(negative_r_input,negative_p_input,draw_number)
  315. canva_1[i] = np.sum(canva)/draw_number
  316. canva = canva_1
  317. win_refigure.hist(canva, bins=(negative_r_input*2)+1, color='g', alpha=0.75)
  318. total_view.grid(row=19,column=21,rowspan=2,columnspan=12,sticky="NW")
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326. win_refigure.set_title("Hisiogram Of ProporttionOfHeads")
  327. win_refigure.set_xlabel("value")
  328. win_refigure.set_ylabel("count")
  329. win_canva.show()
  330.  
  331. ###################### 主程式 ##########################
  332.  
  333. import numpy as np
  334. import time
  335. from tkinter import *
  336. import matplotlib as plt
  337. from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
  338. from matplotlib.figure import Figure
  339. import traceback
  340. import importlib
  341. import sys
  342. importlib.reload(sys)
  343.  
  344.  
  345. if __name__=="__main__":#確認是本身執行還是被當成mode
  346. try:
  347. #plt.use("TkAgg")
  348. win=Tk()
  349. win.title("Hisiogram Of ProporttionOfHeads")
  350. win_figure = Figure(figsize=(8,6),dpi=100)
  351. win_canva = FigureCanvasTkAgg(win_figure,master=win)
  352. win_canva.get_tk_widget().grid(row=0,column=0,rowspan=20,columnspan=20)
  353.  
  354. frame = Frame(win).grid(row=0,column=21,columnspan=10)
  355.  
  356. number = Entry(win).grid_forget()
  357. var_distribution = IntVar()
  358. R1_distribution = Radiobutton(frame,text="均勻分布",variable=var_distribution,value=0).grid(row=0,column=21,sticky="Nw")
  359. uniform_up = Entry(win).grid_forget()
  360. uniform_down = Entry(win).grid_forget()
  361. R2_distribution = Radiobutton(frame,text="常態分布",variable=var_distribution,value=1).grid(row=0,column=22,sticky="Nw")
  362. normal_vearage = Entry(win).grid_forget()
  363. normal_sd = Entry(win).grid_forget()
  364. R3_distribution = Radiobutton(frame,text="二項分布",variable=var_distribution,value=2).grid(row=0,column=23,sticky="Nw")
  365. binomial_n = Entry(win).grid_forget()
  366. binomial_p = Entry(win).grid_forget()
  367. R4_distribution = Radiobutton(frame,text="負二項分布",variable=var_distribution,value=3).grid(row=0,column=24,sticky="Nw")
  368. negative_r = Entry(win).grid_forget()
  369. negative_p = Entry(win).grid_forget()
  370.  
  371. list1=["均勻分布","常態分布","二項分布","負二項分布"]
  372.  
  373. var_mode = IntVar()
  374. R1_mode = Radiobutton(frame,text="原始圖",variable=var_mode,value=0).grid(row=1,column=21,sticky="NW")
  375. R2_mode = Radiobutton(frame,text="展示圖",variable=var_mode,value=1).grid(row=1,column=22,sticky="NW")
  376. list2=["原始圖","展示圖"]
  377.  
  378. text_test = IntVar()
  379. text_test.set(str(list1[0])+str(list2[0]))
  380. text = Label(win,textvariable=text_test)
  381. text.grid_forget()
  382. button_ready = Button(win,text="模式確定",command=ready)
  383. button_ready.grid(row=2,column=21,rowspan=2,sticky="NW")
  384.  
  385. number_text = Label(win,text="樣本數")
  386. number = Entry(win)
  387.  
  388. outrun_text = Label(win,text="外圈次數")
  389. outrun = Entry(win)
  390.  
  391. inrun_text = Label(win,text="內圈次數")
  392. inrun = Entry(win)
  393.  
  394. uniform_up_text = Label(win,text="上界")
  395. uniform_up = Entry(win)
  396. uniform_down_text = Label(win,text="下界")
  397. uniform_down = Entry(win)
  398.  
  399. normal_vearage_text = Label(win,text="平均值")
  400. normal_vearage = Entry(win)
  401. normal_sd_text = Label(win,text="標準差")
  402. normal_sd = Entry(win)
  403.  
  404. binomial_n_text = Label(win,text="總次數")
  405. binomial_n = Entry(win)
  406. binomial_p_text = Label(win,text="成功機率")
  407. binomial_p = Entry()
  408.  
  409. negative_r_text = Label(win,text="成功次數")
  410. negative_r = Entry(win)
  411. negative_p_text = Label(win,text="成功機率")
  412. negative_p = Entry(win)
  413.  
  414. button_draw = Button(win,text="繪圖",command=draw)
  415.  
  416. total_text = IntVar()
  417. total_view = Label(win,textvariable=total_text)
  418.  
  419. ## 儲存
  420. button_save = Button(win,text="儲存資料",command=Save)
  421. text_name = StringVar() ####
  422. ###
  423.  
  424.  
  425. win.mainloop()
  426. except Exception:
  427. traceback.print_exc()
Add Comment
Please, Sign In to add comment