Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,6 +1,5 @@
|
|
1 |
import gradio as gr
|
2 |
import matplotlib.pyplot as plt
|
3 |
-
from matplotlib.patches import Rectangle
|
4 |
from matplotlib_venn import venn3
|
5 |
from io import BytesIO
|
6 |
from PIL import Image
|
@@ -20,7 +19,6 @@ def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
|
|
20 |
|
21 |
def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
|
22 |
total = U
|
23 |
-
|
24 |
P_A = A / total
|
25 |
P_B = B / total
|
26 |
P_C = C / total
|
@@ -29,15 +27,6 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
|
|
29 |
P_BC = BC / total
|
30 |
P_ABC = ABC / total
|
31 |
|
32 |
-
P_A_given_B = P_AB / P_B if P_B > 0 else 0
|
33 |
-
P_B_given_A = P_AB / P_A if P_A > 0 else 0
|
34 |
-
P_A_given_C = P_AC / P_C if P_C > 0 else 0
|
35 |
-
P_C_given_A = P_AC / P_A if P_A > 0 else 0
|
36 |
-
P_B_given_C = P_BC / P_C if P_C > 0 else 0
|
37 |
-
P_C_given_B = P_BC / P_B if P_B > 0 else 0
|
38 |
-
|
39 |
-
P_B_given_A_bayes = (P_A_given_B * P_B) / P_A if P_A > 0 else 0
|
40 |
-
|
41 |
formatted_probs = {
|
42 |
"P(A)": f"{P_A:.2%} ({A}/{total})",
|
43 |
"P(B)": f"{P_B:.2%} ({B}/{total})",
|
@@ -45,26 +34,13 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
|
|
45 |
"P(A ∩ B)": f"{P_AB:.2%} ({AB}/{total})",
|
46 |
"P(A ∩ C)": f"{P_AC:.2%} ({AC}/{total})",
|
47 |
"P(B ∩ C)": f"{P_BC:.2%} ({BC}/{total})",
|
48 |
-
"P(A ∩ B ∩ C)": f"{P_ABC:.2%} ({ABC}/{total})"
|
49 |
-
"P(A | B)": f"{P_A_given_B:.2%}",
|
50 |
-
"P(B | A)": f"{P_B_given_A:.2%}",
|
51 |
-
"P(A | C)": f"{P_A_given_C:.2%}",
|
52 |
-
"P(C | A)": f"{P_C_given_A:.2%}",
|
53 |
-
"P(B | C)": f"{P_B_given_C:.2%}",
|
54 |
-
"P(C | B)": f"{P_C_given_B:.2%}",
|
55 |
-
"P(B | A) (Bayes)": f"{P_B_given_A_bayes:.2%}",
|
56 |
}
|
57 |
|
58 |
return formatted_probs
|
59 |
|
60 |
def plot_venn(A, B, C, AB, AC, BC, ABC, U):
|
61 |
plt.figure(figsize=(8, 8))
|
62 |
-
|
63 |
-
# Dibujar el conjunto universal como un rectángulo
|
64 |
-
ax = plt.gca()
|
65 |
-
ax.add_patch(Rectangle((0, 0), 1, 1, fill=None, edgecolor='black', linewidth=2))
|
66 |
-
|
67 |
-
# Dibujar el diagrama de Venn
|
68 |
subsets = {
|
69 |
'100': A - AB - AC + ABC,
|
70 |
'010': B - AB - BC + ABC,
|
@@ -75,15 +51,8 @@ def plot_venn(A, B, C, AB, AC, BC, ABC, U):
|
|
75 |
'111': ABC
|
76 |
}
|
77 |
venn = venn3(subsets=subsets, set_labels=('A', 'B', 'C'))
|
78 |
-
|
79 |
-
# Mostrar la cantidad fuera de A, B y C si no coincide con U
|
80 |
-
suma_subconjuntos = A + B + C - AB - AC - BC + ABC
|
81 |
-
if U > suma_subconjuntos:
|
82 |
-
faltante = U - suma_subconjuntos
|
83 |
-
plt.text(0.5, 0.9, f"Fuera de A, B y C: {faltante}", horizontalalignment='center', fontsize=12, bbox=dict(facecolor='white', alpha=0.5))
|
84 |
|
85 |
-
plt.title(f"Diagrama de Venn con U = {U}")
|
86 |
-
|
87 |
buf = BytesIO()
|
88 |
plt.savefig(buf, format='png')
|
89 |
buf.seek(0)
|
@@ -91,39 +60,17 @@ def plot_venn(A, B, C, AB, AC, BC, ABC, U):
|
|
91 |
return img
|
92 |
|
93 |
def suggest_intersections(A, B, C, AB, AC, BC, ABC, U):
|
94 |
-
#
|
95 |
-
max_AB = min(A, B
|
96 |
-
max_AC = min(A, C
|
97 |
-
max_BC = min(B, C
|
98 |
max_ABC = min(max_AB, max_AC, max_BC)
|
99 |
-
|
100 |
-
min_AB = max(0, A + B - U + C)
|
101 |
-
min_AC = max(0, A + C - U + B)
|
102 |
-
min_BC = max(0, B + C - U + A)
|
103 |
-
min_ABC = max(0, A + B + C - U)
|
104 |
-
|
105 |
-
max_A = U - (B + C - BC)
|
106 |
-
max_B = U - (A + C - AC)
|
107 |
-
max_C = U - (A + B - AB)
|
108 |
-
min_A = max(AB + AC - ABC, 0)
|
109 |
-
min_B = max(AB + BC - ABC, 0)
|
110 |
-
min_C = max(AC + BC - ABC, 0)
|
111 |
|
112 |
suggestions = {
|
113 |
-
"Máximo valor sugerido para A":
|
114 |
-
"
|
115 |
-
"Máximo valor sugerido para B":
|
116 |
-
"
|
117 |
-
"Máximo valor sugerido para C": max(0, max_C),
|
118 |
-
"Mínimo valor sugerido para C": max(0, min_C),
|
119 |
-
"Máximo valor sugerido para A ∩ B": max(0, max_AB),
|
120 |
-
"Mínimo valor sugerido para A ∩ B": max(0, min_AB),
|
121 |
-
"Máximo valor sugerido para A ∩ C": max(0, max_AC),
|
122 |
-
"Mínimo valor sugerido para A ∩ C": max(0, min_AC),
|
123 |
-
"Máximo valor sugerido para B ∩ C": max(0, max_BC),
|
124 |
-
"Mínimo valor sugerido para B ∩ C": max(0, min_BC),
|
125 |
-
"Máximo valor sugerido para A ∩ B ∩ C": max(0, max_ABC),
|
126 |
-
"Mínimo valor sugerido para A ∩ B ∩ C": max(0, min_ABC),
|
127 |
}
|
128 |
return suggestions
|
129 |
|
|
|
1 |
import gradio as gr
|
2 |
import matplotlib.pyplot as plt
|
|
|
3 |
from matplotlib_venn import venn3
|
4 |
from io import BytesIO
|
5 |
from PIL import Image
|
|
|
19 |
|
20 |
def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
|
21 |
total = U
|
|
|
22 |
P_A = A / total
|
23 |
P_B = B / total
|
24 |
P_C = C / total
|
|
|
27 |
P_BC = BC / total
|
28 |
P_ABC = ABC / total
|
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
formatted_probs = {
|
31 |
"P(A)": f"{P_A:.2%} ({A}/{total})",
|
32 |
"P(B)": f"{P_B:.2%} ({B}/{total})",
|
|
|
34 |
"P(A ∩ B)": f"{P_AB:.2%} ({AB}/{total})",
|
35 |
"P(A ∩ C)": f"{P_AC:.2%} ({AC}/{total})",
|
36 |
"P(B ∩ C)": f"{P_BC:.2%} ({BC}/{total})",
|
37 |
+
"P(A ∩ B ∩ C)": f"{P_ABC:.2%} ({ABC}/{total})"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
}
|
39 |
|
40 |
return formatted_probs
|
41 |
|
42 |
def plot_venn(A, B, C, AB, AC, BC, ABC, U):
|
43 |
plt.figure(figsize=(8, 8))
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
subsets = {
|
45 |
'100': A - AB - AC + ABC,
|
46 |
'010': B - AB - BC + ABC,
|
|
|
51 |
'111': ABC
|
52 |
}
|
53 |
venn = venn3(subsets=subsets, set_labels=('A', 'B', 'C'))
|
54 |
+
plt.title(f"Diagrama de Venn")
|
|
|
|
|
|
|
|
|
|
|
55 |
|
|
|
|
|
56 |
buf = BytesIO()
|
57 |
plt.savefig(buf, format='png')
|
58 |
buf.seek(0)
|
|
|
60 |
return img
|
61 |
|
62 |
def suggest_intersections(A, B, C, AB, AC, BC, ABC, U):
|
63 |
+
# Generar sugerencias válidas y sin valores negativos
|
64 |
+
max_AB = min(A, B)
|
65 |
+
max_AC = min(A, C)
|
66 |
+
max_BC = min(B, C)
|
67 |
max_ABC = min(max_AB, max_AC, max_BC)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
|
69 |
suggestions = {
|
70 |
+
"Máximo valor sugerido para A ∩ B": max_AB,
|
71 |
+
"Máximo valor sugerido para A ∩ C": max_AC,
|
72 |
+
"Máximo valor sugerido para B ∩ C": max_BC,
|
73 |
+
"Máximo valor sugerido para A ∩ B ∩ C": max_ABC,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
}
|
75 |
return suggestions
|
76 |
|