#!/usr/bin/env nix-shell #!nix-shell -i python3 -p python3 python3Packages.pandas python3Packages.numpy python3Packages.scipy python3Packages.pyarrow # coding: utf-8 from scipy.integrate import quad import pandas as pd import numpy as np from pathlib import Path def normalProbabilityDensity(x): constant = 1.0 / np.sqrt(2*np.pi) return (constant * np.exp((-x**2) / 2.0)) home = Path.home() snt_path = Path(home, ".standard-normal.csv") if snt_path.exists(): snt = pd.read_csv(snt_path, index_col=0) else: snt = pd.DataFrame(data = [], index = np.round(np.arange(0, 3.5, 0.1), 2), columns = np.round(np.arange(0.00, 0.1, 0.01), 2)) for index in snt.index: for column in snt.columns: z = np.round(index + column, 2) value, _ = quad(normalProbabilityDensity, np.NINF, z) value = np.round(value - 0.5, 4) snt.loc[index,column] = value snt.to_csv(snt_path) def find_z(p): posns = [] res = snt.isin([p]) srs = res.any() cols = list(srs[srs == True].index) for col in cols: rows = list(res[col][res[col] == True].index) for row in rows: posns.append(float(col) + row) return np.max(posns) mean = float(input("Sample Mean: ")) std = float(input("Standard Deviation: ")) N = int(input("Sample Size: ")) alpha = float(input("Alpha [0, 1): ")) alpha_2 = alpha / 2 Z_alpha_2 = find_z(alpha_2) plus_minus = np.round(Z_alpha_2 * (std / np.sqrt(N)), 4) print(f"{mean} +/- {plus_minus}") print(f"[{mean - plus_minus}, {mean + plus_minus}]") ### Local Variables: ### mode: python ### End: