I have made a program that is supposed to read the mean, median, median_low, med
ID: 3760153 • Letter: I
Question
I have made a program that is supposed to read the mean, median, median_low, median_high, median_grouped, standard deviation, and the variance. I do not understand how to make the output what I want. HElP!!
# Load the numbers from a file into an array.
def load_numbers(filename):
numbers = [] # to hold the list of numbers
try:
number_file = open(filename, "r")
for number in number_file:
number = int(number) # Convert the read string to an int.
numbers.append(number)
except Exception as err:
print ("An error occurred loading", filename)
print ("The error returned was", err)
return numbers
if (len(numbers) < 1):
print ("There were no numbers in", filename)
return numbers
else:
return numbers
# Perform the statistics calculations using the values
# in the numbers array.
def calculate_stats(numbers):
value_mean = mean
value_median = median
value_median_low = median_low
value_median_high = median_high
value_median_grouped = median_grouped
value_variance = variance
std_deviation = stdev
def mean(numbers):
if iter(numbers) is numbers:
numbers = list(numbers)
n = len(numbers)
if n < 1:
raise StatisticsError('mean requires at least one numbers point')
return _sum(numbers)/n
def median(numbers):
numbers = sorted(numbers)
n = len(numbers)
if n == 0:
raise StatisticsError("no median for EMPTY numbers")
if n%2 == 1:
return numbers[n//2]
else:
i = n//2
return (numbers[i - 1] + numbers[i])/2
def median_low(numbers):
numbers = sorted(numbers)
n = len(numbers)
if n == 0:
raise StatisticsError("no median for empty numbers")
if n%2 == 1:
return numbers[n//2]
else:
return numbers[n//2 - 1]
def median_high(numbers):
numbers = sorted(numbers)
n = len(numbers)
if n == 0:
raise StatisticsError("no median for empty numbers")
return numbers[n//2]
def median_grouped(numbers, interval=1):
numbers = sorted(numbers)
n = len(numbers)
if n == 0:
raise StatisticsError("no median for empty numbers")
elif n == 1:
return numbers[0]
# Find the value at the midpoint. Remember this corresponds to the
# centre of the class interval.
x = numbers[n//2]
for obj in (x, interval):
if isinstance(obj, (str, bytes)):
raise TypeError('expected number but got %r' % obj)
try:
L = x - interval/2 # The lower limit of the median interval.
except TypeError:
# Mixed type. For now we just coerce to FLOAT.
L = FLOAT(x) - float(interval)/2
cf = numbers.index(x) # Number of values below the median interval.
# FIXME THE FOLLOWING line could be more efficient for big lists.
f = numbers.count(x) # Number of numbers points in the median interval.
return L + interval*(n/2 - cf)/f
def variance(numbers, xbar=None):
if iter(numbers) is numbers:
numbers = list(numbers)
n = len(numbers)
if n < 2:
raise StatisticsError('variance requires at least two numbers points')
ss = _ss(numbers, xbar)
return ss/(n-1)
def stdev(numbers, xbar=None):
var = variance(numbers, xbar)
try:
return var.sqrt()
except AttributeError:
return math.sqrt(var)
def get_stats(filename):
numbers = [] # to hold the list of numbers
try:
number_file = open(filename, "r")
for number in number_file:
number = int(number) # Convert the read string to an int.
numbers.append(number)
except Exception as err:
print ("An error occurred loading", filename)
print ("The error returned was", err)
return
if (len(numbers) < 1):
print ("There were no numbers in", filename)
return
value_mean = mean
value_median = median
value_median_low = median_low
value_median_high = median_high
value_median_grouped = median_grouped
value_variance = variance
std_deviation = stdev
print("mean =" , value_mean)
print("median =" , value_median)
print("median_low =" , value_median_low)
print("median_high =" , value_median_high)
print("median_grouped =" , value_median_grouped)
print("stdev =", std_deviation)
print("variance =" , value_variance)
# The main function that contains what the program is to do!
def main():
do_evaluate = True
while(do_evaluate):
filename = input(' What is the file you would like to evaluate? ')
numbers = load_numbers(filename)
if (len(numbers) > 0):
calculate_stats(numbers)
get_stats(filename)
check_evaluate = input(' Would you like to evaluate another file? (y/n) ')
if (check_evaluate != 'y'):
do_evaluate = False
main()
And this is how my output look like:
What is the file you would like to evaluate? numbers.txt
mean = <function mean at 0x02A14348>
median = <function median at 0x02A14390>
median_low = <function median_low at 0x02A143D8>
median_high = <function median_high at 0x02A14420>
median_grouped = <function median_grouped at 0x02A14468>
stdev = <function stdev at 0x02A144F8>
variance = <function variance at 0x02A144B0>
Would you like to evaluate another file? (y/n)
Explanation / Answer
# Load the numbers from a file into an array.
def load_numbers(filename):
numbers = [] # to hold the list of numbers
try:
number_file = open(filename, "r")
for number in number_file:
number = int(number) # Convert the read string to an int.
numbers.append(number)
except Exception as err:
print ("An error occurred loading", filename)
print ("The error returned was", err)
return numbers
if (len(numbers) < 1):
print ("There were no numbers in", filename)
return numbers
else:
return numbers
# Perform the statistics calculations using the values
# in the numbers array.
def calculate_stats(numbers):
value_mean = mean
value_median = median
value_median_low = median_low
value_median_high = median_high
value_median_grouped = median_grouped
value_variance = variance
std_deviation = stdev
def mean(numbers):
if iter(numbers) is numbers:
numbers = list(numbers)
n = len(numbers)
if n < 1:
raise StatisticsError('mean requires at least one numbers point')
return _sum(numbers)/n
def median(numbers):
numbers = sorted(numbers)
n = len(numbers)
if n == 0:
raise StatisticsError("no median for EMPTY numbers")
if n%2 == 1:
return numbers[n//2]
else:
i = n//2
return (numbers[i - 1] + numbers[i])/2
def median_low(numbers):
numbers = sorted(numbers)
n = len(numbers)
if n == 0:
raise StatisticsError("no median for empty numbers")
if n%2 == 1:
return numbers[n//2]
else:
return numbers[n//2 - 1]
def median_high(numbers):
numbers = sorted(numbers)
n = len(numbers)
if n == 0:
raise StatisticsError("no median for empty numbers")
return numbers[n//2]
def median_grouped(numbers, interval=1):
numbers = sorted(numbers)
n = len(numbers)
if n == 0:
raise StatisticsError("no median for empty numbers")
elif n == 1:
return numbers[0]
# Find the value at the midpoint. Remember this corresponds to the
# centre of the class interval.
x = numbers[n//2]
for obj in (x, interval):
if isinstance(obj, (str, bytes)):
raise TypeError('expected number but got %r' % obj)
try:
L = x - interval/2 # The lower limit of the median interval.
except TypeError:
# Mixed type. For now we just coerce to FLOAT.
L = FLOAT(x) - float(interval)/2
cf = numbers.index(x) # Number of values below the median interval.
# FIXME THE FOLLOWING line could be more efficient for big lists.
f = numbers.count(x) # Number of numbers points in the median interval.
return L + interval*(n/2 - cf)/f
def variance(numbers, xbar=None):
if iter(numbers) is numbers:
numbers = list(numbers)
n = len(numbers)
if n < 2:
raise StatisticsError('variance requires at least two numbers points')
ss = _ss(numbers, xbar)
return ss/(n-1)
def stdev(numbers, xbar=None):
var = variance(numbers, xbar)
try:
return var.sqrt()
except AttributeError:
return math.sqrt(var)
def get_stats(filename):
numbers = [] # to hold the list of numbers
try:
number_file = open(filename, "r")
for number in number_file:
number = int(number) # Convert the read string to an int.
numbers.append(number)
except Exception as err:
print ("An error occurred loading", filename)
print ("The error returned was", err)
return
if (len(numbers) < 1):
print ("There were no numbers in", filename)
return
value_mean = mean
value_median = median
value_median_low = median_low
value_median_high = median_high
value_median_grouped = median_grouped
value_variance = variance
std_deviation = stdev
print("mean =" , value_mean)
print("median =" , value_median)
print("median_low =" , value_median_low)
print("median_high =" , value_median_high)
print("median_grouped =" , value_median_grouped)
print("stdev =", std_deviation)
print("variance =" , value_variance)
# The main function that contains what the program is to do!
def main():
do_evaluate = True
while(do_evaluate):
filename = input(' What is the file you would like to evaluate? ')
numbers = load_numbers(filename)
if (len(numbers) > 0):
calculate_stats(numbers)
get_stats(filename)
check_evaluate = input(' Would you like to evaluate another file? (y/n) ')
if (check_evaluate != 'y'):
do_evaluate = False
main()