Statistics

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:

If you are considering datas in forms of list like that tedious, I recommend you to use python range functions for the definite class intervals.
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)]

#

Leave a Reply

Create your own website, free on WordPress.com.Create your own website.
Start free