📜  在没有库的Python中查找均值、中位数、众数

📅  最后修改于: 2022-05-13 01:55:32.003000             🧑  作者: Mango

在没有库的Python中查找均值、中位数、众数

在本文中,我们将学习如何在不使用外部库的情况下使用Python计算均值、中值和众数。

  1. 平均值:平均值是所有数字的平均值,有时称为算术平均值。此代码计算包含数字的列表的平均值或平均值:
    # 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()函数来获取列表中所有元素的总和。最后,我们将总和除以列表中的元素数量,然后打印结果以获得列表的平均值/平均值。

  2. 中位数:中位数是一组数字中的中间数。此代码计算包含数字的列表的中位数:
    # 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 个中间元素,然后将它们的平均值打印出来。但是如果数字是奇数,我们会在列表中找到中间元素并将其打印出来。

  3. 众数众数是一组数字中出现频率最高的数字。此代码计算包含数字的列表的模式:
    # 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 行代码中实现相同的结果,因为这些库中的代码是预先编写的。