在没有库的Python中查找均值、中位数、众数
在本文中,我们将学习如何在不使用外部库的情况下使用Python计算均值、中值和众数。
- 平均值:平均值是所有数字的平均值,有时称为算术平均值。此代码计算包含数字的列表的平均值或平均值:
# Python program to print # mean of elements # list of elements to calculate mean n_num = [1, 2, 3, 4, 5] n = len(n_num) get_sum = sum(n_num) mean = get_sum / n print("Mean / Average is: " + str(mean))
输出:Mean / Average is: 3.0
我们定义一个数字列表并计算列表的长度。然后我们使用 sum()函数来获取列表中所有元素的总和。最后,我们将总和除以列表中的元素数量,然后打印结果以获得列表的平均值/平均值。
- 中位数:中位数是一组数字中的中间数。此代码计算包含数字的列表的中位数:
# Python program to print # median of elements # list of elements to calculate median n_num = [1, 2, 3, 4, 5] n = len(n_num) n_num.sort() if n % 2 == 0: median1 = n_num[n//2] median2 = n_num[n//2 - 1] median = (median1 + median2)/2 else: median = n_num[n//2] print("Median is: " + str(median))
输出:Median is: 3
我们定义一个数字列表并计算列表的长度。要找到中位数,我们首先使用 sort()函数按升序对列表进行排序。
现在我们通过检查余数来检查数字是偶数还是奇数。如果数字是偶数,我们会在列表中找到 2 个中间元素,然后将它们的平均值打印出来。但是如果数字是奇数,我们会在列表中找到中间元素并将其打印出来。 - 众数:众数是一组数字中出现频率最高的数字。此代码计算包含数字的列表的模式:
# Python program to print # mode of elements from collections import Counter # list of elements to calculate mode n_num = [1, 2, 3, 4, 5, 5] n = len(n_num) data = Counter(n_num) get_mode = dict(data) mode = [k for k, v in get_mode.items() if v == max(list(data.values()))] if len(mode) == n: get_mode = "No mode found" else: get_mode = "Mode is / are: " + ', '.join(map(str, mode)) print(get_mode)
输出:Mode is / are: 5
我们将从集合库中导入 Counter,它是Python 2 和 3 中的内置模块。这个模块将帮助我们计算列表中的重复元素。
我们定义一个数字列表并计算列表的长度。然后我们调用 Counter(一个 dict 子类)来帮助计算可散列对象,然后我们将其转换为 dict 对象。然后,我们使用 For 循环初始化一个列表,以将所有 dict 值(元素数)与所有 dict 值的最大值(最常见元素的计数)进行比较,并返回等于最大计数的所有元素。如果返回的元素等于列表中总元素的数量,那么我们打印出“无模式”,否则我们打印出返回的模式。另一种通过简单编码查找模式的简单方法
# The list for which you need to find # the Mode y= [11, 8, 8, 3, 4, 4, 5, 6, 6, 6, 7, 8] # First you sort it # You will get numbers arranged from 3 to # 11 in asc order y.sort() # Now open an empty list. # What you are going to do is to count # the occurrence of each number and append # (or to add your findings to) L1 L1=[] # You can iterate through the sorted list # of numbers in y, # counting the occurrence of each number, # using the following code i = 0 while i < len(y) : L1.append(y.count(y[i])) i += 1 # your L1 will be [1, 2, 2, 1, 3, 3, 3, 1, 3, 3, 3, 1], # the occurrences for each number in sorted y # now you can create a custom dictionary d1 for k : V # where k = your values in sorted y # and v = the occurrences of each value in y # the Code is as follows d1 = dict(zip(y, L1)) # your d1 will be {3: 1, 4: 2, 5: 1, 6: 3, 7: 1, 8: 3, 11: 1} # now what you need to do is to filter # the k values with the highest v values. # do this with the following code d2={k for (k,v) in d1.items() if v == max(L1) } print("Mode(s) is/are :" + str(d2))
输出:
Mode(s) is/are :{8, 6}
结论
我们已经成功计算了数据集的均值、中值和众数,但您可能会想“每次我想获得数据集的均值、中值和众数时,我会使用这些算法吗?”
答案是你可以,但你肯定不会。这只是为了向您展示算法在找出其中任何一个时如何在幕后工作。
对于任何项目,这可以通过在Python 3 中简单地导入内置库“统计”并使用内置函数 mean()、median() 和 mode() 来实现。此外,还有其他外部库可以帮助您在 1 行代码中实现相同的结果,因为这些库中的代码是预先编写的。