Do you want to get neatly presented stats like mean, variance, standard deviation… and a lot more of the data you enter?
Here is a Python code prepared by me for you to work with. This gives the table you make in solving statistics problems in mathematics. Not very excellent but saves time sometimes…
from st1 import *
from st2 import *
from st3 import *
while True:
print('What do you want to do? (Type anything else to quit)')
print('give stats of a data entered (1)')
print('give stats table of a data entered (2)')
print('give comparison tables between two datas (3)')
x = input('\n->')
if x == '1':
give_stats()
elif x == '2':
give_table()
elif x == '3':
give_comparison()
else:
quit()
Remember to use font “Comic Sans MS” in your IDE font selection to get the proper output. Also keep the IDE window maximized to get the tables neat.
Codes the program uses:
# Save it as st1.py
def give_stats():
mids = eval(input('Enter the mid values of class intervals : '))
freq = eval(input('Enter the frequencies in class intervals : '))
sum_all = 0
N = 0
for i in range(0, len(mids)):
sum_all += mids[i] * freq[i]
N += freq[i]
mean = (sum_all/N)
sum_deviations = 0
for i in range(0, len(mids)):
dev = mids[i] - mean
sum_deviations += freq[i] * (dev **2)
variance = (sum_deviations/N)
print('\nMean : ', round(mean,3))
print('Variance : ', round(variance,3))
std_dev = variance ** (1/2)
print('Standard Deviation : ', round(std_dev ,3))
print('Coefficient of Variation : ', round((std_dev * 100)/mean,3))
print('-------------------------------------------------------------------------------')
#Save it as st2.py
def give_table():
def sum_of_list(lst):
'''Does the sum of all elements of a list'''
sum_lst = 0
for i in lst:
sum_lst += i
return sum_lst
mids = eval(input('Enter the mid values of uniform class intervals : '))
freq = eval(input('Enter the corresponding frequencies of class intervals : '))
if len(mids) % 2 == 0:
assumed_mean_pos = (len(mids))/2
else:
assumed_mean_pos = (len(mids)-1)/2
assumed_mean = mids[int(assumed_mean_pos)]
deviations_by_h = []
di = []
yi_sq = []
fiyi = []
fiyi_mul_yi_sq = []
for i in range(0, len(mids)):
d = mids[i] - assumed_mean
di.append(d)
y = d/(mids[1] - mids[0])
y_sq = y ** 2
deviations_by_h.append(y)
yi_sq.append(y_sq)
fiyi.append(y * freq[i])
fiyi_mul_yi_sq.append(y_sq * freq[i])
n = 89
table = '+'+'-'*n+'+'
table += '\n| xi \t| fi\t| di=xi-a \t| yi=di/h \t| fi * yi\t| yi^2\t| fi*(yi^2) | '
table += '\n+'+'-'*n+'+'
print(table)
for i in range(0, len(freq)):
print('|',mids[i],'\t|',freq[i],'\t|',di[i],'\t|',deviations_by_h[i],'\t|',fiyi[i],'\t|',yi_sq[i],'\t|',fiyi_mul_yi_sq[i],'\t|')
else:
print('+'+'-'*n+'+')
print('Total : \t|',sum_of_list(freq),'\t|','\t','\t|',sum_of_list(fiyi),'\t|\t|',sum_of_list(fiyi_mul_yi_sq),'\t|')
print('+'+'-'*n+'+')
sum_all = 0
N = 0
for i in range(0, len(mids)):
sum_all += mids[i] * freq[i]
N += freq[i]
mean = (sum_all/N)
sum_deviations = 0
for i in range(0, len(mids)):
dev = mids[i] - mean
sum_deviations += freq[i] * (dev **2)
variance = (sum_deviations/N)
print('\nAssumed Mean(a) : ',assumed_mean)
print('Mean : ', round(mean,3))
print('Variance : ', round(variance,3))
std_dev = variance ** (1/2)
print('Standard Deviation : ', round(std_dev ,3))
print('Coefficient of Variation : ', round((std_dev * 100)/mean,3))
print('--------------------------------------------------------------------------------------------')
# Save it as st3.py
def give_comparison():
def sum_of_list(lst):
'''Does the sum of all elements of a list'''
sum_lst = 0
for i in lst:
sum_lst += i
return sum_lst
def build_table(mids, freq):
"""Builds the reqd. tables"""
if len(mids) % 2 == 0:
assumed_mean_pos = (len(mids))/2
else:
assumed_mean_pos = (len(mids)-1)/2
assumed_mean = mids[int(assumed_mean_pos)]
deviations_by_h = []
di = []
yi_sq = []
fiyi = []
fiyi_mul_yi_sq = []
for i in range(0, len(mids)):
d = mids[i] - assumed_mean
di.append(d)
y = d/(mids[1] - mids[0])
y_sq = y ** 2
deviations_by_h.append(y)
yi_sq.append(y_sq)
fiyi.append(y * freq[i])
fiyi_mul_yi_sq.append(y_sq * freq[i])
return (mids,freq,di, deviations_by_h, yi_sq, fiyi, fiyi_mul_yi_sq, assumed_mean)
def stats(values):
'''Gives the different stats of the values provided'''
sum_all = 0
N = 0
mids,freq,di, deviations_by_h, yi_sq, fiyi, fiyi_mul_yi_sq,assumed_mean = values[0], values[1],values[2],values[3],values[4],values[5],values[6],values[7]
for i in range(0, len(mids)):
sum_all += mids[i] * freq[i]
N += freq[i]
mean = (sum_all/N)
sum_deviations = 0
for i in range(0, len(mids)):
dev = mids[i] - mean
sum_deviations += freq[i] * (dev **2)
variance = (sum_deviations/N)
std_dev = variance ** (1/2)
CV = (std_dev*100)/mean
return (assumed_mean, mean, variance, std_dev, CV)
mids1 = eval(input('Enter the mid values of 1st uniform class intervals : '))
freq1 = eval(input('Enter the corresponding frequencies of 1st class intervals : '))
mids2 = eval(input('Enter the mid values of 2nd uniform class intervals : '))
freq2 = eval(input('Enter the corresponding frequencies of 2nd class intervals : '))
values1 = build_table(mids1, freq1)
values2 = build_table(mids2, freq2)
n = 89
spaces = '\t\t\t'
table = ('+'+'-'*n+'+')+spaces+('+'+'-'*n+'+')
table += '\n| xi \t| fi\t| di=xi-a \t| yi=di/h \t| fi * yi\t| yi^2\t| fi*(yi^2) | '+spaces+'| xi \t| fi\t| di=xi-a \t| yi=di/h \t| fi * yi\t| yi^2\t| fi*(yi^2) | '
table += ('\n+'+'-'*n+'+')+spaces+'+'+'-'*n+'+'
print(table)
for i in range(0, len(values1[1])):
print('|',values1[0][i],'\t|',values1[1][i],'\t|',values1[2][i],'\t|',values1[3][i],'\t|',values1[4][i],'\t|',values1[5][i],'\t|',values1[6][i],'\t|', spaces,'|',values2[0][i],'\t|',values2[1][i],'\t|',values2[2][i],'\t|',values2[3][i],'\t|',values2[4][i],'\t|',values2[5][i],'\t|',values2[6][i],'\t|' )
else:
print('+'+'-'*n+'+', spaces, '+'+'-'*n+'+')
print('Total : \t|',sum_of_list(values1[1]),'\t|','\t','\t|',sum_of_list(values1[-3]),'\t|\t|',sum_of_list(values1[-2]),'\t|',spaces,'Total : \t|',sum_of_list(values2[1]),'\t|','\t','\t|',sum_of_list(values2[-3]),'\t|\t|',sum_of_list(values2[-2]),'\t|')
print(('+'+'-'*n+'+')+spaces+('+'+'-'*n+'+'))
stat1 = stats(values1)
stat2 = stats(values2)
if round(stat1[4],3) > round(stat2[4],3):
result = 'Data 2 is more consistent'
elif round(stat1[4],3) < round(stat2[4],3):
result = 'Data 1 is more consistent'
else:
result = 'Both the datas are equally consistent'
print('\nAssumed Mean(a) : ',stat1[0],'\t\t\t\t\t\t\t\t','Assumed Mean(a) : ',stat2[0])
print('Mean : ', round(stat1[1],3),'\t\t\t\t\t\t\t\t\t','Mean : ', round(stat2[1],3))
print('Variance : ', round(stat1[2],3),'\t\t\t\t\t\t\t\t\t','Variance : ', round(stat2[2],3))
print('Standard Deviation : ', round(stat1[3] ,3),'\t\t\t\t\t\t\t\t','Standard Deviation : ', round(stat2[3] ,3))
print('Coefficient of Variation : ', round(stat1[4],3),'\t\t\t\t\t\t\t','Coefficient of Variation : ', round(stat2[4], 3))
print('\n-------------------------------------------------------------------------------------------'+result+'-------------------------------------------------------------------------------------------')
After you run the program, the output comes like this:

Here’s how to use it:
If you consider typing all the datas in the square brackets too tedious, you can shorten it by using python range function. Here’s how to use it:
# The argument in square brackets is optional
range(from, to+1 [, steps])
Similarly, you can use the following code if you want certain frequencies for every observation.
[certain_freq, for i in range(1, no_of_distinct_obsrv)]
#
