Skip to content

Commit 09e50b4

Browse files
authored
Add files via upload
1 parent db54c02 commit 09e50b4

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
# tkinter toolkit
2+
from tkinter import *
3+
from tkinter.ttk import *
4+
from tkinter import messagebox
5+
6+
from numpy import random
7+
import matplotlib.pyplot as plt
8+
import seaborn as sns
9+
from scipy.stats import binom
10+
from math import floor
11+
import os
12+
13+
# plt.show()
14+
15+
def value_around(value=1, min_value=0, max_value=1):
16+
value = min(max_value, value)
17+
value = max(min_value, value)
18+
return value
19+
20+
class Gui_helper_main:
21+
def __init__(self):
22+
self.root = Tk()
23+
self.frame = None
24+
self.frame_index = 0
25+
self.root.geometry('300x200')
26+
self.root.title('Binomial Distribution Simulator')
27+
self.root.protocol("WM_DELETE_WINDOW", self.quit)
28+
# maker info
29+
self.maker_name = Label(self.root, text="Maker: JingShing")
30+
self.maker_name.grid(column=0, row=3, sticky=N+W)
31+
32+
self.frames = [page_module(self)]
33+
self.switch_frame(0)
34+
35+
def switch_frame(self, index):
36+
if self.frame is not None:
37+
self.frame.grid_forget()
38+
self.frame_index = index
39+
self.frame = self.frames[self.frame_index]
40+
self.frame.grid(column=0, row=0, sticky=N+W)
41+
42+
def run(self):
43+
# from threading import Thread
44+
# thread1 = Thread(target=self.frames[0].order_bot)
45+
# thread1.setDaemon(True)
46+
# thread1.start()
47+
self.root.mainloop()
48+
49+
def quit(self):
50+
if messagebox.askyesno('Confirm','Are you sure you want to quit?'):
51+
self.root.quit()
52+
53+
class page_module(Frame):
54+
def __init__(self, master):
55+
Frame.__init__(self, master = master.root)
56+
self.main = master
57+
self.master = master.root
58+
self.last_file_path = None
59+
60+
# display last order
61+
self.last_order = StringVar()
62+
self.last_order.set('Binomial Distribution Simulator')
63+
self.last_order = Label(self, textvariable=self.last_order)
64+
self.last_order.grid(column=0, row=0, sticky=N+W)
65+
66+
# input box
67+
self.n_label = Label(self, text='n(int):')
68+
self.n_label.grid(column=0, row=1)
69+
self.n_entry = Entry(self)
70+
self.n_entry.grid(column=1, row=1)
71+
self.p_label = Label(self, text='p(float):')
72+
self.p_label.grid(column=0, row=3)
73+
self.p_entry = Entry(self)
74+
self.p_entry.grid(column=1, row=3)
75+
self.size_label = Label(self, text='size(int):')
76+
self.size_label.grid(column=0, row=5)
77+
self.size_entry = Entry(self)
78+
self.size_entry.grid(column=1, row=5)
79+
self.target_label = Label(self, text='target(int):')
80+
self.target_label.grid(column=0, row=7)
81+
self.target_entry = Entry(self)
82+
self.target_entry.grid(column=1, row=7)
83+
84+
# Button
85+
self.order_button = Button(self, text='save png', command=self.save_png)
86+
self.order_button.grid(column=0, row=9)
87+
self.order_button = Button(self, text='show table', command=self.show_table)
88+
self.order_button.grid(column=1, row=9)
89+
90+
def update_string_var(self):
91+
self.last_order.set(self.order_bot.last_order)
92+
93+
def save_png(self):
94+
n = int(self.n_entry.get())
95+
p = value_around(value = float(self.p_entry.get()), min_value=0, max_value=1)
96+
size = int(self.size_entry.get())
97+
target = int(self.target_entry.get())
98+
# mean, var, skew, kurt = binom.stats(n, p, moments='mvsk')
99+
mean = binom.stats(n, p, moments='m')
100+
fixed_mean = floor((n+1)*p)
101+
print("Mean(np):", mean)
102+
print("fixed mean(floor((n+1)*p)):", fixed_mean)
103+
print("Original Probability of "+str(target)+":", binom.pmf(target, n, p))
104+
print("% Probability of "+str(target)+":" + str(binom.pmf(target, n, p)*100) + '%')
105+
# binom.pmf(k, n, p)
106+
# binom.pmf(k) = choose(n, k) p**k (1-p)**(n-k)
107+
sns.displot(random.binomial(n=n, p=p, size=size))
108+
plt.title("Binomial Simulation w/ n = "+str(n)+", p = "+str(p))
109+
plt.tight_layout()
110+
111+
output_dir = 'output'
112+
output_file_name = 'n_' + str(n) + '_' + 'p_' + str(p).replace('.', '') + '_' + 'plot.png'
113+
# output_file_name = 'plot.png'
114+
output_path = os.path.join(output_dir, output_file_name)
115+
116+
# output_path = output_file_name
117+
plt.savefig(output_path, dpi=300)
118+
119+
def show_table(self):
120+
n = int(self.n_entry.get())
121+
p = value_around(value = float(self.p_entry.get()), min_value=0, max_value=1)
122+
size = int(self.size_entry.get())
123+
target = int(self.target_entry.get())
124+
# mean, var, skew, kurt = binom.stats(n, p, moments='mvsk')
125+
mean = binom.stats(n, p, moments='m')
126+
fixed_mean = floor((n+1)*p)
127+
print("Mean(np):", mean)
128+
print("fixed mean(floor((n+1)*p)):", fixed_mean)
129+
print("Original Probability of "+str(target)+":", binom.pmf(target, n, p))
130+
print("% Probability of "+str(target)+":" + str(binom.pmf(target, n, p)*100) + '%')
131+
# binom.pmf(k, n, p)
132+
# binom.pmf(k) = choose(n, k) p**k (1-p)**(n-k)
133+
sns.displot(random.binomial(n=n, p=p, size=size))
134+
plt.title("Binomial Simulation w/ n = "+str(n)+", p = "+str(p))
135+
plt.tight_layout()
136+
plt.show()
137+
138+
if __name__ == '__main__':
139+
main = Gui_helper_main()
140+
main.run()

0 commit comments

Comments
 (0)