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)