Mundo em Python

Calculadora de Correlação

from tkinter import *
from tkinter import messagebox
import numpy as np root = Tk()
root.geometry("700x500")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Calculadora de Correlação") titulo = Label(text="Calculadora de Correlação",
font=("Arial", 28, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.15, rely=0.05) texto_sub1 = Label(text="Evento 1 (separado por vírgula) :",
font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.05, rely=0.25) texto_sub2 = Label(text="Evento 2 (separado por vírgula) :",
font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_sub2.place(relx=0.05, rely=0.45) Evento1 = StringVar()
Evento1_entrada = Entry(textvariable=Evento1,
font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Evento1_entrada.place(relx=0.6, rely=0.26, relwidth=0.34) Evento2 = StringVar()
Evento2_entrada = Entry(textvariable=Evento2,
font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
Evento2_entrada.place(relx=0.6, rely=0.46, relwidth=0.34) resultado = StringVar()
resultado_texto = Label(textvariable=resultado,
font=("Arial", 12, "bold"), bg="#cfe2f3")
resultado_texto.place(relx=0.05, rely=0.8, relwidth=0.9, relheight=0.15)
def limpar():
Evento1_entrada.delete(0, END)
Evento2_entrada.delete(0, END)
resultado.set("")
def app():
try:
evento1 = list(map(int, Evento1.get().split(',')))
evento2 = list(map(int, Evento2.get().split(','))) if len(evento1) != len(evento2):
messagebox.showerror("Erro", "As listas devem ter o mesmo tamanho!")
return

# Verifica se são binários
if all(x in [0, 1] for x in evento1) and all(x in [0, 1] for x in evento2):
A = sum((np.array(evento1) == 1) & (np.array(evento2) == 1))
B = sum((np.array(evento1) == 1) & (np.array(evento2) == 0))
C = sum((np.array(evento1) == 0) & (np.array(evento2) == 1))
D = sum((np.array(evento1) == 0) & (np.array(evento2) == 0))
correlacao = (A*D - B*C) / np.sqrt((A+B)*(C+D)*(A+C)*(B+D))
resultado.set(f"Correlação Phi: {correlacao:.3f}")
else:
correlacao = np.corrcoef(evento1, evento2)[0, 1]
resultado.set(f"Correlação de Pearson: {correlacao:.3f}") except Exception as e:
messagebox.showerror("Erro", f"Entrada inválida!\nDetalhes: {e}")
but1 = Button(text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.65, relwidth=0.25, relheight=0.1) but_limpar = Button(text="Limpar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=limpar)
but_limpar.place(relx=0.4, rely=0.65, relwidth=0.25, relheight=0.1) but_sair = Button(text="Sair", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=root.destroy)
but_sair.place(relx=0.7, rely=0.65, relwidth=0.25, relheight=0.1) root.mainloop()
0