How to Generate a Normal Distribution in Python (With Examples)


You can quickly generate a normal distribution in Python by using the numpy.random.normal() function, which uses the following syntax:

numpy.random.normal(loc=0.0, scale=1.0, size=None)

where:

  • loc: Mean of the distribution. Default is 0.
  • scale: Standard deviation of the distribution. Default is 1.
  • size: Sample size.

This tutorial shows an example of how to use this function to generate a normal distribution in Python.

Related: How to Make a Bell Curve in Python

Example: Generate a Normal Distribution in Python

The following code shows how to generate a normal distribution in Python:

from numpy.random import seed
from numpy.random import normal

#make this example reproducible
seed(1)

#generate sample of 200 values that follow a normal distribution 
data = normal(loc=0, scale=1, size=200)

#view first six values
data[0:5]

array([ 1.62434536, -0.61175641, -0.52817175, -1.07296862,  0.86540763])

We can quickly find the mean and standard deviation of this distribution:

import numpy as np

#find mean of sample
np.mean(data)

0.1066888148479486

#find standard deviation of sample
np.std(data, ddof=1)

0.9123296653173484

We can also create a quick histogram to visualize the distribution of data values:

import matplotlib.pyplot as plt
count, bins, ignored = plt.hist(data, 30)
plt.show()

Generate normal distribution in Python

We can even perform a Shapiro-Wilk test to see if the dataset comes from a normal population:

from scipy.stats import shapiro

#perform Shapiro-Wilk test
shapiro(data)

ShapiroResult(statistic=0.9958659410, pvalue=0.8669294714)

 The p-value of the test turns out to be 0.8669. Since this value is not less than .05, we can assume the sample data comes from a population that is normally distributed.

This result shouldn’t be surprising since we generated the data using the numpy.random.normal() function, which generates a random sample of data that comes from a normal distribution.

Leave a Reply

Your email address will not be published.