#!/usr/bin/python3 # ==================================================================== # create a population of random numbers from a theoretical # normal distribution (bell curve) - display various values and plots # # if you do not run as admin (root), install defaults to user # installation because normal site-packages is not writeable # python -m pip install matplotlib # python -m pip install scipy # ==================================================================== import random import numpy as np import scipy.stats import matplotlib.pyplot as plt mean = 0.0 number_of_bins = 20 population_size = 1000 standard_deviation = 1.0 # ---- create a list of numbers that fit # ---- a standard distributed (bell curve) # ---- (normal/gauss distribution) pop = [] for _ in range(1000): pop.append(random.gauss(mean,standard_deviation)) print(f'pop size = {len(pop)}') # ---- population min/max values pmin = min(pop) pmax = max(pop) print(f'pop min = {pmin}') print(f'pop max = {pmax}') # ---- plot histogram counts,bins,ignore = plt.hist(pop,bins=number_of_bins) # ---- plot theoretical probability distribution bin_width = (pmax-pmin)/number_of_bins hist_area = len(pop)*bin_width x = np.linspace(-4,4,number_of_bins+1) y = scipy.stats.norm.pdf(x)*hist_area plt.plot(x,y) # ---- display plots plt.show()