# importing statistics module
from statistics import variance
 
# importing fractions as parameter values
from fractions import Fraction as fr
import numpy as np


############################### using pure python ################################
x = [8.0, 1, 2.5, 4, 28.0]
n = len(x)
mean_ = sum(x) / n
var_ = sum((item - mean_)**2 for item in x) / (n - 1)
print("Mean using pure python: ",mean_)
print("Variance using pure python: ",var_)

################################# using statistics #############################

# tuple of a set of positive integers
# numbers are spread apart but not very much
sample1 = (1, 2, 5, 4, 8, 9, 12)
print("Variance of Sample1 is % s " % (variance(sample1)))

# tuple of a set of negative integers
sample2 = (-2, -4, -3, -1, -5, -6)
print("Variance of Sample2 is % s " % (variance(sample2)))

# tuple of a set of positive and negative numbers
# data-points are spread apart considerably
sample3 = (-9, -1, -0, 2, 1, 3, 4, 19)
print("Variance of Sample3 is % s " % (variance(sample3)))

# tuple of a set of fractional numbers
sample4 = (fr(1, 2), fr(2, 3), fr(3, 4),fr(5, 6), fr(7, 8))
print("Variance of Sample4 is % s " % (variance(sample4))) 

# tuple of a set of floating point values
sample5 = (1.23, 1.45, 2.1, 2.2, 1.9)
print("Variance of Sample5 is % s " % (variance(sample5)))
# Print the variance of each samples

################## using np.var() ###########################
x = [8.0, 1, 2.5, 4, 28.0]
y=np.array(x)
var_ = y.var(ddof=1) #ddof default 0 (N-ddof)
print("variance using np.var(): ",var_)

