示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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")
示例#6
0
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")