0
respostas

Calculadora de "Normalidade"

Nas Atidades de Estatistica, sobre probabilidade com curvas normais fiz um código para fazer cálculos com valores dados (código abaixo);

Compartilho para discutirmos;

OBS. (Como autodesafio a idéia era fazer sem utilizar o scipy mesmo)

# Calculadora de Normalidade v.2
#importando bibliotecas
import pandas as pd
import numpy as np
import scipy as sp
from scipy.stats import norm

#tabela normal dentro do código(sem vizualização)
tabela_normal_padronizada = pd.DataFrame(
    [], 
    index=["{0:0.2f}".format(i / 100) for i in range(0, 400, 10)],
    columns = ["{0:0.2f}".format(i / 100) for i in range(0, 10)])

for index in tabela_normal_padronizada.index:
    for column in tabela_normal_padronizada.columns:
        Z = np.round(float(index) + float(column), 2)
        tabela_normal_padronizada.loc[index, column] = "{0:0.4f}".format(norm.cdf(Z))

tabela_normal_padronizada.rename_axis('Z', axis = 'columns', inplace = True)

#função que cálcula a área até um dado valor:
def area(media, desvio, valor):
    zee=(valor-media)/desvio

    if zee >= 0:
        k=zee
    else:
        k=-zee

    if k >=4:
        area_1 = 1.0000
    else:
        controle_de_linhas, controle_de_colunas=tabela_normal_padronizada.shape
        l = "{0:0.2f}".format(int((k*10))/10)
        c = "{0:0.2f}".format(int((k-float(l))*100)/100)

        for i in range(controle_de_linhas):
            if (tabela_normal_padronizada.index[i] == l):
                linha = (tabela_normal_padronizada.index[i])

        for j in range(controle_de_colunas):
            if (tabela_normal_padronizada.columns[j] == c):
                coluna = (tabela_normal_padronizada.columns[j])

        area_1 = tabela_normal_padronizada.loc[linha, coluna]

    if valor>=media:
        retorno = int((float(area_1))*10000)/10000
    else:
        retorno = int((1-float(area_1))*10000)/10000

    return retorno

#coletando os dados iniciais
print('Digite o número com a opçãp para o que vamos Calcular?')
print('1 - A Área até um Valor dado')
print('2 - A Área entre dois Valores')
print('3 - A Área maior que um valor dado')

info_1 = int(input('Digite 1, 2 ou 3. opção: '))

#coletando os dados para o cálculo
mi = float(input("Qual é a Média da Distribuição?"))
rho = float(input("Qual é o Desvio Padrão da Distribuição?"))

if info_1 ==1:
    print('Opção 1 - Vamos calcular a área da curva até um valor dado: ')
    x1 = float(input("Até qual valor a área deve ser calculada?"))
    S = area(mi, rho, x1)
    info_a = ("A área determinada até %s é de: %s" % ( x1 , S ))
    info_b = ("O que representa uma probabilidade de %s" % str(int(float(S)*10000)/100)) + " %"

elif info_1 ==2:
    print('Opção 2 - Vamos calcular a área da curva entre dois valores dados: ')
    x2 = float(input("Qual o valor inferior a ser procurado?"))
    x3 = float(input("Qual o valor superior a ser procurado?"))

    if x3>=x2:
        S=int(((area(mi,rho,x3))-(area(mi,rho,x2)))*10000)/10000
        info_a = ("A área delimitada entre %s e %s é de: %s" % ( x2, x3 , S ))
        info_b = ("O que representa uma probabilidade de %s" % str(int(float(S)*10000)/100)) + " %"
    else:
        info_a = ("Como o limite inferior é maior que o superior não foi realizado o cálculo")
        info_b = ("Limites informados. Inferior: %s e Superior: %s" % (x2, x3))

elif info_1 ==3:
    print('Opção 3 - Vamos calcular a área da curva que excede um valor dado:')
    x4 = float(input("A partir de qual o valor a área deve ser calculada?"))
    S = (1 - area(mi, rho, x4))
    info_a = ("A área determinada que excede %s é de: %s" % ( x4 , S ))
    info_b = ("O que representa uma probabilidade de %s" % str(int(float(S)*10000)/100)) + " %"

else:
    info_a = 'Opção inválida.'
    info_b = 'Escolha uma opção válida (1, 2 ou 3)'

#retornando uma resposta
print(info_a)
print(info_b)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software