def moda1(): """Verifica qual os números que mais se repete.""" #https://pt.stackoverflow.com/questions/216413/identificar-elementos-repetidos-em-lista-com-python global modo_agrupados terminal.clear_() n = 1 m = [] if modo_agrupados: #Rastreia o número mais repetido for x in process.list_fi: if x > n: n = x else: #Rastreia o número mais repetido for x in process.list_xi: if process.list_xi.count(x) > n: n = process.list_xi.count(x) if n == 1: #Corrigi um bug quando não há modas em dados brutos print(f"\n\t {m} -- {process.modal[len(m)]}") return # Define o objeto que armazenará os índices de cada elemento: keys = defaultdict(list) if modo_agrupados: # Percorre todos os elementos da lista: for key, value in enumerate(process.list_fi): # Adiciona o índice do valor na lista de índices: keys[value].append(key) else: # Percorre todos os elementos da lista: for key, value in enumerate(process.list_xi): # Adiciona o índice do valor na lista de índices: keys[value].append(key) num = 0 if modo_agrupados: # Extrai os valores que mais se repete for value in keys: if value >= num: num = value ind = keys[value] return ind, num else: # Extrai os valores que mais se repete for value in keys: if len(keys[value]) >= n: m.append(value) if modo_agrupados: pass else: print(f"\n\t {m} -- {process.modal[len(m)]}")
def mediana1(): """ Calcula a mediana de uma lista de dados brutos""" #Recebe a lista em ordem crescente terminal.clear_() list_ = statistic.rol_raw_data(process.list_xi) print(terminal.terminal_size(f" ROL: {list_} ", "━")) quantidade = len(process.list_xi) if quantidade % 2 == 0: #Lista Par n = (quantidade // 2) - 1 mediana = truncate((list_[n] + list_[-(n + 1)]) / 2, process.decimal) print( f"\nLista Par:↴\n\tMediana é ({list_[n]} + {list_[-(n+1)]})/2 = {round(mediana, process.decimal)}" ) else: #Lista Impar n = (quantidade - 1) // 2 mediana = list_[n] print(f"\nLista Ímpar:↴\n\tMediana é {mediana}")
def dados_agrupados_while(): """ While dos dados agrupados. """ global modo_2 global commands2_agr global modo_agrupados modo_agrupados = True process.modo_agrupados = True #Ajuda alocalizar a classe modal e já antecipa os dados localizar_moda() while 1: #Calcula a média aritmética arithmetic_mean(process.list_fi_xi) process.total_amplitude = statistic.total_amplitude2( process.initial, process.amplitude, process.quant_fi) process.start(modo_agrupados) terminal.clear_() #Escopo do menu Dados agrupados print(terminal.terminal_size(modo_2, "=")) print(terminal.terminal_size(f" Amostra: {process.sample} ", "-")) print( terminal.terminal_size(f" População: {process.populational} ", "-")) print(terminal.terminal_size(f"fi:{process.list_fi}", " ")) print(terminal.terminal_size(f"xi:{process.list_xi}", " ")) print("\n") for command in commands2_agr: print(command) try: res2 = input("Opção: ") except: pass if res2 == "1": #Amplitude total - Dados Agrupados print( f"\n\t Amplitude Total ({statistic.xmax} - {statistic.xmin}): {process.total_amplitude}\n" ) elif res2 == "2": #Desvio médio simples - Dados Agrupados average_mean_deviation() elif res2 == "3": standard_deviation2() elif res2 == "4": #Variância variance() elif res2 == "5": #Média aritmetica copy = process.list_config process.list_config = [False, False, False, True, True] escopo = ["i", "Dados", "fi"] process.gerar_matriz_table(escopo, True, 4) print( f"\n\tMédia aritmética: ({process.sum_fi_xi}/{process.sum_fi}) = {truncate(process.x1, process.decimal)}\n" ) process.list_config = copy elif res2 == "5.1": moda2() elif res2 == "5.2": mediana2() elif res2 == "var": mod.print_dada() elif res2 == "6": #Configurações config() continue elif res2 == "7": #Visualizar tabela Dados agrupados terminal.clear_() print("\n") escopo = ["i", "Dados", "fi"] process.gerar_matriz_table(escopo, True, 4) elif res2 == "8": #exit do submenu dos dados agrupados break else: continue input("...")
def dados_brutos_while(): """ While dos dados brutos. """ global modo_1 global commands2 global modo_agrupados modo_agrupados = False process.modo_agrupados = False process.list_fi = [] while 1: # Calcula a média aritmética arithmetic_mean(process.list_xi) process.total_amplitude = statistic.total_amplitude1(process.list_xi) process.start(modo_agrupados) terminal.clear_() print(terminal.terminal_size(modo_1, "=")) print(terminal.terminal_size(f" Amostra: {process.sample} ", "-")) print( terminal.terminal_size(f" População: {process.populational} ", "-")) print(terminal.terminal_size(f"xi:{process.list_xi}", " ")) if len(process.list_fi) == len(process.list_xi): terminal.print_color( terminal.terminal_size(f"fi:{process.list_fi}", " "), "yellow") print("\n") for indice, command in enumerate(commands2): if len(process.list_fi) > 0 and indice in command_no_authorized: terminal.print_color(command, "yellow") else: if not indice in command_no_authorized: print(command) try: res2 = input("Opção: ") except: pass if res2 == "1": #Amplitude total print( f"\n\t Amplitude Total ({statistic.xmax} - {statistic.xmin}): {process.total_amplitude}\n" ) elif res2 == "2": # Desvio médio simples average_mean_deviation() elif res2 == "3": # Desvio Padrão standard_deviation() elif res2 == "4": #Variância variance() elif res2 == "5": print( f"\n\tMédia aritmética: ({process.sum_xi}/{len(process.list_xi)}) = {truncate(process.x1, process.decimal)}\n" ) elif res2 == "5.1" and len(process.list_fi) == len(process.list_xi): weighted_average() elif res2 == "6": moda1() elif res2 == "6.1": mediana1() elif res2 == "6.2": pass elif res2 == "var": mod.print_dada() elif res2 == "6.3": adc_fi() if len(process.list_fi) == len(process.list_xi): continue elif res2 == "7": #Configurações config() continue elif res2 == "8": #Sair break else: continue input("...")
def data_entry(raw_data): """ Onde colhe os dados Dados brutos e Agrupados.""" #Para dados brutos if raw_data == True: process.list_fi_xi = [] print("\nExemplo de Entrada:\n\txi: ", end="") terminal.print_color("14,15,19,20,20,21,22\n", "red") string_xi = str(input("xi: ")).replace(" ", "") process.list_xi = func2.dismemberment(string_xi) process.quant_xi = len(process.list_xi) if len(process.list_xi) == 0: return else: terminal.clear_() print(f"xi = {process.list_xi}") input("...") # --------#### Dados Agrupados #####-------------------------------------------------------------------- # Pede os dados e faz o pré- processamento das variáveis necessarias para funções em seguida else: #Demostração de entrada print("\nExemplo de Entradas:") print("\n\tfi:", end=" ") terminal.print_color("18,31,15,10,7,5,4", "red") print("\n\txi:\n\t Xmin da 1° Classe:", end=" ") terminal.print_color("500", "red") print("\n\t Amplitude da 1° classe:", end=" ") terminal.print_color("200", "red") print("\n") string_fi = str(input("fi: ")).replace(" ", "") try: process.initial = float(input("Xmin da 1° Classe: ")) process.amplitude = float(input("Amplitude da classe: ")) #Recebe a lista fi desmembrada process.list_fi = func2.dismemberment(string_fi) process.quant_fi = len(process.list_fi) #Calcula o xi com base nos dados de entrada e return uma lista process.list_xi = new_xi(process.initial, process.amplitude, process.quant_fi) process.list_xi = statistic.tr(process.list_xi) #Calcula a quantidade de classes com base na process.list_xi process.quant_xi = len(process.list_xi) process.list_fi_xi = [] #Cria a lista nova xi.fi para média aritmetica dados agrupados for x in range(0, len(process.list_fi)): process.list_fi_xi.append( Decimal(f"{process.list_xi[x]}") * Decimal(f"{process.list_fi[x]}")) #xi.fi #Pegando a soma das listas process.sum_xi = func2.sum_list(process.list_xi) process.sum_fi = func2.sum_list(process.list_fi) process.sum_fi_xi = func2.sum_list(process.list_fi_xi) except: pass if len(process.list_xi) == 0 or process.list_fi == 0 or len( process.list_xi) != len(process.list_fi): return else: #Gera a tabela de frequência terminal.clear_() print("\n") escopo = ["i", " Dados", "fi", "xi"] process.gerar_matriz_table(escopo, True, 4) input("...")
def config(): """Menu de configurações.""" global commands3 global modo_agrupados while 1: terminal.clear_() #Tabela de configuração print("\n") escopo = ["Configurações", " Status"] process.gerar_matriz_table(escopo, None, 5) print("\n") for i, command in enumerate(commands3): if modo_agrupados == True: print(command) else: if i < 3 or len(commands3) - 1 == i: print(command) resposta = str(input("Opção: ")) if resposta == "1": casa_decimal() elif resposta == "2": if process.sample: if process.populational == False: process.populational = True process.sample = False else: process.sample = True elif resposta == "3": if process.populational: if process.sample == False: process.sample = True process.populational = False else: process.populational = True elif resposta == "4": if process.list_config[0] == False: process.list_config[0] = True else: process.list_config[0] = False elif resposta == "5": if process.list_config[1] == False: process.list_config[1] = True else: process.list_config[1] = False elif resposta == "6": if process.list_config[2] == False: process.list_config[2] = True else: process.list_config[2] = False elif resposta == "7": if process.list_config[3] == False: process.list_config[3] = True else: process.list_config[3] = False elif resposta == "8": break else: pass
process.gerar_matriz_table(escopo, True, 4) elif res2 == "8": #exit do submenu dos dados agrupados break else: continue input("...") # ------------------------------------------------------------------------------------------ # ------------------------------- while principal do script --------------------- # ------------------------------------------------------------------------------------------ while 1: terminal.clear_() #Escopo do While principal print(terminal.terminal_size(" Estatística ", "+")) print(terminal.terminal_size(f" Casa decimal: {process.decimal} ", " ")) for command in commands1: print(command) try: res1 = input("Opção: ") except EOFError: pass if res1 == "1": #Dados brutos