def get_F(v1, v2, significancia): fileName = mp.dirConvert("datatabs/distribuicao_f_0") if(significancia == 0.5): fileName += "05" elif(significancia == 1): fileName += "10" elif(significancia == 2.5): fileName += "25" elif(significancia == 5): fileName += "50" else: print("Apenas as significancias abaixo estão disponíveis:") print(" 0.5") print(" 1") print(" 2.5") print(" 5") be.sair(1) try: arquivo = open(fileName, "rt") except: print(f"O arquivo \"{fileName}\" não foi encontrado") be.sair(4) ok = False i = -1 for linha in arquivo: i += 1 if(i == 0): continue colunas = linha.split('\t') if(i == 1):#tá na linha pra buscar o V1 j = 0 for valor in colunas: try: if(int(valor) == v1): ok = True break except: pass j += 1 if(not ok):# se não achou V1, nem precisa seguir break else: try: if(int(colunas[0]) == v2): return float(colunas[j]) break elif(int(colunas[0]) > v2): return anterior else: anterior = float(colunas[j]) except: pass return False
def inicio(): pesquisa = '' dic = carrega_chaves('autotype.data')#dicionário com todas as chaves cadastradas. p = []#array com as opções condizentes com a pesquisa sel = -1#indice do ítem selecionado. -1 quando nenhum selecionado repesquisa = True while True: mp.limpar_terminal() print(f"\n Faça sua pesquisa: {pesquisa}\n") if(repesquisa): sel = -1 p = pesquisa_dict(dic, pesquisa) repesquisa = False if(len(p) > 0):#reprinta a lista de itens coerentes index = 0 for item in p: if(sel == index): carac = '♦' else: carac = ' ' print(f" {carac} {item:20} - {dic[item]}") index += 1 dig = readchar.readkey() if(dig == '\x1b'):#esc be.sair(1) elif(dig == '\t' or dig == '\r'):#tab ou enter if(sel != -1):#existe um ítem selecionado preenche(dic[p[sel]]) be.sair(10) else:#Nenhum ítem selecionado if(pesquisa in dic):#se existe uma ocorrência Idêntica no dicionário preenche(dic[p[sel]]) be.sair(10) else:#cadastrar nova chave mp.limpar_terminal() print(f"Cadastrando novo valor para a chave {pesquisa}\n") dic[pesquisa] = input("Digite o conteúdo da chave: ") preenche(dic[pesquisa]) salva_chaves(dic, 'autotype.data') be.sair(10) elif(dig == '\x1b[A'):#seta pra CIMA if(sel > 0): sel -= 1 elif(dig == '\x1b[B'):#seta pra BAIXO if(sel < len(p)): sel += 1 elif(dig == '\x08'):#back space pesquisa = pesquisa[:-1] repesquisa = True else: pesquisa += dig repesquisa = True
def inicio(): mp.limpar_terminal() print(' By: will.i.am -> github.com/williampilger\n\n\n ') print( " > Gráfico baseado nas média e amplitude para Controle Estatístico do Processo <" ) print( "Facilitando a entrada de dados para esta aplicação, os dados das amostras devem ser preenchidos em um arquivo." ) print( "E para tal, cada LINHA corresponderá à uma amostra, e os valores deverão ser separados por TABS." ) print("""Como no exemplo abaixo: 2 6 9 9 6 6 5 8 6 8 2 3 6.6 58 95.658 """) fileName = input("Informe o nome do aquiro com os dados: ") if (not os.path.isfile(fileName)): print("O arquivo informado não existe!") be.sair(2) medias, amplitudes, ns = le_dados(fileName) n = ns[ 0] #estou adotando o número de amostras do primeiro grupo como padrão if (n > 25): print("Não está preparado para amostras maiores que 25") be.sair(0) cont = 0 sum = 0 for media in medias: sum += media cont += 1 X = sum / cont cont = 0 sum = 0 for amplitude in amplitudes: sum += amplitude cont += 1 R = sum / cont # Limites de controle para gráfico X LSC_X = X + A2[n] * R LC_X = X LIC_X = X - A2[n] * R # Limites de controle para gráfico R LSC_R = D4[n] * R LC_R = R LIC_R = D3[n] * R print( "############################################ Resultados ############################################" ) print(f"\n Médias: {medias}") print(f" Amplitudes: {amplitudes}") print(f" X = {X}") print(f" R = {R}") print(f"\nLimites de controle para gráfico das médias (X)") print(f" A2 para n={n} : {A2[n]}") print(f" LSC = {LSC_X}") print(f" LC = {LC_X}") print(f" LIC = {LIC_X}") print(f"\nLimites de controle para gráfico das amplitudes (R)") print(f" D4 para n={n} : {D4[n]}") print(f" D3 para n={n} : {D3[n]}") print(f" LSC = {LSC_R}") print(f" LC = {LC_R}") print(f" LIC = {LIC_R}") vet = [] #vetor com número dos grupos (identificação apenas) vet_LSC_X = [] #Vetor de limites superiores vet_LC_X = [] #vetor com médias vet_LIC_X = [] #vetor com limites máximos for i in range(1, len(medias) + 1): vet.append(i) if (ns[i - 1] == n ): #se o número de amostras for igual ao padrão (quase sempre) vet_LSC_X.append(LSC_X) #só repete os valores vet_LC_X.append(LC_X) vet_LIC_X.append(LIC_X) else: #só chega aqui se o número de amostras é diferente do padrão vet_LSC_X.append(X + A2[ns[i - 1]] * (D2[ns[i - 1]] / D2[n]) * R) vet_LC_X.append(X) #não muda vet_LIC_X.append(X - A2[ns[i - 1]] * (D2[ns[i - 1]] / D2[n]) * R) vet_LSC_R = [] vet_LC_R = [] vet_LIC_R = [] for i in range(1, len(amplitudes) + 1): if (ns[i - 1] == n ): #se o número de amostras for igual ao padrão (quase sempre) vet_LSC_R.append(LSC_R) #só repete os valores vet_LC_R.append(LC_R) vet_LIC_R.append(LIC_R) else: #só chega aqui se o número de amostras é diferente do padrão vet_LSC_R.append(D4[ns[i - 1]] * (D2[ns[i - 1]] / D2[n]) * R) vet_LC_R.append((D2[ns[i - 1]] / D2[n]) * R) vet_LIC_R.append(D3[ns[i - 1]] * (D2[ns[i - 1]] / D2[n]) * R) #Aqui falta algo falha_media = False falha_amplitude = False #Verificando valores for i in range(len(vet)): #pra cada valor do gráfico if (medias[i] > vet_LSC_X[i] or medias[i] < vet_LIC_X[i]): falha_media = True if (amplitudes[i] > vet_LSC_R[i] or amplitudes[i] < vet_LIC_R[i]): falha_amplitude = True print( "\n############################################ Conclusões ############################################\n" ) if (falha_media): print(f"Os valores das médias ultrapassaram os limites calculados.") else: print(f"As médias estão dentro dos limites.") if (falha_amplitude): print( f"Os valores das amplitudes ultrapassaram os limites calculados.") else: print(f"As amplitudes estão dentro dos limites.") if (falha_media or falha_amplitude): print( "portanto, precisa-se remover a(s) amostra(s) que ultrapassa(m) o padrão, e refazer o cálculo." ) #PLOT Gráfico fig, axs = pl.subplots(2) #(2, sharex=True, sharey=True) fig.suptitle('Gráficos de X e R, respectivamente') #print(vet, medias) axs[0].plot(vet, medias) axs[0].plot(vet, vet_LSC_X, color='k', linestyle='dashed') axs[0].plot(vet, vet_LC_X, color='k') axs[0].plot(vet, vet_LIC_X, color='k', linestyle='dashed') axs[1].plot(vet, amplitudes) axs[1].plot(vet, vet_LSC_R, color='k', linestyle='dashed') axs[1].plot(vet, vet_LC_R, color='k') axs[1].plot(vet, vet_LIC_R, color='k', linestyle='dashed') pl.show() #exibe o gráfico
def main(): try: import readchar except: mp.install_lib('readchar') mp.restart_program() fileName = 'ncm.data.json' ResultPrint = 20 dic = load_ncm(fileName) if (not dic): print("Iniciando download dos dados de NCM") if (download_ncm(fileName)): print("> OK <") mp.restart_program() else: pesquisa = '' repesquisa = False p = [] #array com as opções condizentes com a pesquisa sel = -1 #indice do ítem selecionado. -1 quando nenhum selecionado while True: mp.limpar_terminal() print("\n\n By: William Pilger") print( f"\n Ultima atualização dos dados de NCM: {dic['Data_Ultima_Atualizacao_NCM']}\n" ) print(f"\n Faça sua pesquisa: {pesquisa}\n") if (repesquisa): sel = -1 p = pesquisa_dict(dic['Nomenclaturas'], pesquisa) repesquisa = False maxResultPrint = ResultPrint if (len(p) > 0): #reprinta a lista de itens coerentes index = 0 i = 0 for item in p: i += 1 if (i > maxResultPrint): break if (sel == index): carac = '♦' else: carac = ' ' print( f" {carac} {dic['Nomenclaturas'][item]['Codigo']:10} - {dic['Nomenclaturas'][item]['Descricao'][:80]}" ) index += 1 dig = readchar.readkey() if (dig == '\x1b'): #esc be.sair(1) elif (dig == '\t' or dig == '\r'): #tab ou enter if (sel != -1): #existe um ítem selecionado detalha(dic['Nomenclaturas'][p[sel]]) else: maxResultPrint += 10 elif (dig == '\x1b[A'): #seta pra CIMA if (sel > 0): sel -= 1 elif (dig == '\x1b[B'): #seta pra BAIXO if (sel < len(p)): sel += 1 elif (dig == '\x08'): #back space pesquisa = pesquisa[:-1] repesquisa = True else: pesquisa += dig repesquisa = True
def inicio(): mp.limpar_terminal() print(' By: will.i.am -> github.com/williampilger\n\n\n ') print(" > TESTE DE HIPÓTESES PARA VARIÂNCIAS (ANOVA) <") print("\n Para analizar variâncias de duas ou mais amostras da mesma população.\n") print("Facilitando a entrada de dados para esta aplicação, os dados das amostras devem ser preenchidos em um arquivo.") print("E para tal, cada LINHA corresponderá à uma amostra, e os valores deverão ser separados por TABS.") print("""Como no exemplo abaixo: 2 6 9 6 5 8 6 8 2 3 """) fileName = input("Informe o nome do aquiro com os dados: ") if(not os.path.isfile(fileName)): print("O arquivo informado não existe!") be.sair(2) significancia = float(input("Informe o PERCENTUAL de significância que deseja adotar: ")) amostras = [] medias = [] total_amostras = 0 total_soma = 0 fluxo = open(fileName, "rt") for linha in fluxo: linha = linha.split(sep='\t') amostra = [] soma = 0 contagem = 0 for valor in linha: valor = float(valor.replace(',', '.')) contagem += 1 soma += valor amostra.append(valor) amostras.append(amostra) medias.append(soma/contagem) total_amostras += contagem total_soma += soma total_media = total_soma/total_amostras k = len(amostras) #SQT -> Soma de quadrados total SQT = 0 for amostra in amostras: for valor in amostra: SQT += (valor - total_media) ** 2 #SQE -> Soma de quadrados das diferenças entre grupos SQE = 0 for i in range(k): SQE += len(amostras[i]) * ((medias[i] - total_media) ** 2) #SQR -> Soma de quadrados residual (ou das diferenças entre grupos) SQR = 0 for i in range(k): for valor in amostras[i]: SQR += (valor - medias[i]) ** 2 #QME -> Quadrado médio da diferença entre grupos QME = SQE / (k - 1) #QMR -> Quadrado médio residual (ou das diferenças dentro dos grupos) QMR = SQR / (total_amostras - k) fc = QME / QMR v1 = k - 1 v2 = total_amostras - k f = get_F(v1, v2, significancia) mp.limpar_terminal() print(f"+------------------+------------------+-------------------------------+-------------------------------+-------------------------------+") print(f"|Fonte de variação | Graus de liberd. | SQ | QM | Estatística teste |") print(f"+------------------+------------------+-------------------------------+-------------------------------+-------------------------------+") print(f"| Entre grupos | {str(k-1).ljust(6)} | {str(SQE)[:22].ljust(22)} | {str(QME)[:22].ljust(22)} | |") print(f"+------------------+------------------+-------------------------------+-------------------------------+ {str(fc)[:22].ljust(22)} |") print(f"|Dentro dos grupos | {str(total_amostras-k).ljust(6)} | {str(SQR)[:22].ljust(22)} | {str(QMR)[:22].ljust(22)} | |") print(f"+------------------+------------------+-------------------------------+-------------------------------+-------------------------------+") print(f"| TOTAL | {str(total_amostras-k).ljust(6)} | {str(SQT)[:22].ljust(22)} | ~ | ~ |") print(f"+------------------+------------------+-------------------------------+-------------------------------+-------------------------------+") print("\n------------------------------------------ RESULTADOS -----------------------------------------") print(f"Média Geral = {total_media}") print(f"Tamanho da amostra total = {total_amostras}") print(f"Somatória das amostras = {total_soma}") print(f"Médias por grupo:") i = 1 for media in medias: print(f" Grupo {i} = {media}") i += 1 print(f"Tamanho das amostras por grupo:") i = 1 for amostra in amostras: print(f" Grupo {i} = {len(amostra)}") i += 1 print(f"k = {k}") print(f"SQT = {SQT}") print(f"SQE = {SQE}") print(f"SQR = {SQR}") print(f"QME = {QME}") print(f"QMR = {QMR}") print(f"F = {f} (para significancia de {significancia}%, v1 = {v1} e v2 = {v2})") print("\n- - - - - - - - - - - - - - - - - - - ESTATISTICA DO TESTE - - - - - - - - - - - - - - - - - -") print(f"Fc = {fc}") print("\n- - - - - - - - - - - - - - - - - - - - - - CONCLUSÃO - - - - - - - - - - - - - - - - - - - - -") rejeita = f<fc print(f" Como Fc ", end='') if(rejeita): print(f"é", end='') else: print("não é", end='') print(f" maior que F, ", end='') if(not rejeita): print("NÃO ", end='') print(f"REJEITA-SE H0.") print(f"\nPortanto, concluimos que, com {significancia}% de significancia,") if(not rejeita): print("não", end='') print(f" há evidências de que haja diferença entre as médias.\n\n")
def inicio(): mp.limpar_terminal() print(' By: will.i.am -> github.com/williampilger\n\n\n ') print(" > TESTE DE HIPÓTESES PARA VARIÂNCIAS COM DOIS FATORES (ANOVA) <") print( "\n Para analizar variâncias de duas ou mais amostras da mesma população\n com base em dois fatores.\n" ) print("\n 1 - Preciso do cálculo completo") print(" 2 - Tenho os dados SQE1, SQE2, SQR, SQT, k e l") opcao = int(input("Digite sua opção: ")) if (opcao == 1): be.sair(0) elif (opcao == 2): mp.limpar_terminal() SQE1 = float(input(" Informe SQE1: ").replace(",", ".")) SQE2 = float(input(" Informe SQE2: ").replace(",", ".")) SQR = float(input(" Informe SQR: ").replace(",", ".")) try: SQT = float(input(" Informe SQT: ").replace(",", ".")) except: SQT = SQE1 + SQE2 + SQR k = int(input(" Informe k: ")) l = int(input(" Informe l: ")) total_amostras = k * l else: print("Opção inválida!") be.sair(2) significancia = float( input("Informe o PERCENTUAL de significância que deseja adotar: ")) #QME -> Quadrado médio da diferença entre grupos QME1 = SQE1 / (k - 1) QME2 = SQE2 / (l - 1) #QMR -> Quadrado médio residual (ou das diferenças dentro dos grupos) QMR = SQR / ((k - 1) * (l - 1)) fc1 = QME1 / QMR fc2 = QME2 / QMR v1_1 = k - 1 v1_2 = l - 1 v2 = (k - 1) * (l - 1) f1 = get_F(v1_1, v2, significancia) f2 = get_F(v1_2, v2, significancia) print( f"+------------------+------------------+------------------+------------------+------------------+" ) print( f"|Fonte de variação | Graus de liberd. | SQ | QM | Estatística teste|" ) print( f"+------------------+------------------+------------------+------------------+------------------+" ) print( f"| Entre grupos (F1)| {str(k-1).ljust(6)} | {str(SQE1)[:9].ljust(9)} | {str(QME1)[:9].ljust(9)} | fc1 = {str(fc1)[:9].ljust(9)} |" ) print( f"+------------------+------------------+------------------+------------------+ +" ) print( f"| Entre grupos (F2)| {str(l-1).ljust(6)} | {str(SQE2)[:9].ljust(9)} | {str(QME2)[:9].ljust(9)} | fc2 = {str(fc2)[:9].ljust(9)} |" ) print( f"+------------------+------------------+------------------+------------------+ |" ) print( f"|Dentro dos grupos | {str(v2).ljust(6)} | {str(SQR)[:9].ljust(9)} | {str(QMR)[:9].ljust(9)} | |" ) print( f"+------------------+------------------+------------------+------------------+------------------+" ) print( f"| TOTAL | {str(total_amostras-1).ljust(6)} | {str(SQT)[:9].ljust(9)} | ~ | ~ |" ) print( f"+------------------+------------------+------------------+------------------+------------------+" ) print( "\n------------------------------------------ RESULTADOS -----------------------------------------" ) print(f"QME = {QME1}") print(f"QMR = {QMR}") print( f"\nF1 = {f1} (para significancia de {significancia}%, v1 = {v1_1} e v2 = {v2})" ) print( f"F1 = {f2} (para significancia de {significancia}%, v1 = {v1_2} e v2 = {v2})" ) print( "\n- - - - - - - - - - - - - - - - - - - ESTATISTICA DO TESTE - - - - - - - - - - - - - - - - - -" ) print(f"Fc1 = {fc1}") print(f"Fc2 = {fc2}") print( "\n- - - - - - - - - - - - - - - - - - - - - - CONCLUSÃO - - - - - - - - - - - - - - - - - - - - -" ) rejeita_1 = f1 < fc1 rejeita_2 = f2 < fc2 print(f"Fator 1:\n Como Fc ", end='') if (rejeita_1): print(f"é", end='') else: print("não é", end='') print(f" maior que F, ", end='') if (not rejeita_1): print("NÃO ", end='') print(f"REJEITA-SE H0.") print( f"\nPortanto, concluimos que, com {significancia}% de significancia,") if (not rejeita_1): print("não", end='') print(f" há evidências de que haja diferença entre as médias.\n\n") print(f"Fator 2:\n Como Fc ", end='') if (rejeita_2): print(f"é", end='') else: print("não é", end='') print(f" maior que F, ", end='') if (not rejeita_2): print("NÃO ", end='') print(f"REJEITA-SE H0.") print( f"\nPortanto, concluimos que, com {significancia}% de significancia,") if (not rejeita_2): print("não", end='') print(f" há evidências de que haja diferença entre as médias.\n\n")