众数:一组数据中出现次数最多的数值,一组数据可以不存在、存在一个或多个众数,众数用M表示。当所有数据出现次数都相同时,众数不存在。

实现思路

因为无法直接获知一个数组当中出现频率最高的数值,所以我们需要先统计数组中每一个数值的出现次数,而后再找出所有出现次数最高的数值。其中:

  • 记录每个数值的出现次数,可以使用哈希表存储,变量值的值作为key,变量值出现的频数作为value。
  • 若发现变量值列表中所有数值均只出现了一次,则返回空数组(众数不存在)。
推荐方法

定义域:实数

def descriptive_mode(list):
    # [第1步] 获取 变量值列表 中 所有不重复的变量值
    list_set=set(list); #将List转化为集合,去除重复元素
    # [第2步] 获取 所有不重复的变量值 在 变量值列表 中的 出现频数 
    frequency_dict={}; #定义存储 所有不重复的变量值 出现频数 的 哈希表
    for i in list_set: #遍历每一个list_set的元素(即去除重复元素后的集合),得到每个元素在原始集合中包含的数量:count(i)
        frequency_dict[i]=list.count(i)#向frequency_dic中添加key-value对象:dict[key]=value
    # [第3步] 获取 变量值列表 中 出现频数 最高的数值的 出现频数
    max_frequency=max(frequency_dict.values())
    mode_list=[] #定义存储 出现频数 最高的变量值的 数组
    if max_frequency==1: # 若最高的 出现频数 为1,则没有众数
        return mode_list;
    # [第4步] 找出 所有不重复的变量值 中 出现频数 最高的变量值
    for key,value in frequency_dict.items():#遍历frequency_dic中每一个key-value对象
        if value==max_frequency:
            mode_list.append(key) #将 出现频数 最高的变量值添加到 数组
    return mode_list

测试:

mode=descriptive_mode([3,1,2,1.5,1.5,1.5]);
print(mode)

结果:

1.5
其他方法

应用 numpy 现有方法的众数计算函数

定义域:整数(测试发现非整数返回结果错误)

import numpy as numpy
def descriptive_mode_numpy(list):
    # [第1步] 获取 所有不重复的变量值 在 变量值列表 中的 出现频数 
    frequency_dict=numpy.bincount(list)
    # [第2步] 获取 出现频率 最高的变量值
return numpy.argmax(frequency_dict)

测试:

#调用 应用 numpy 现有方法的众数计算函数(descriptive_mode_sumpy)
mode=descriptive_mode_numpy([3,1,2,1.5,1.5,1.5]);
print('[1,1.5,1.5,1.5,2,3]的众数:',mode)
mode=descriptive_mode_numpy([3,2,2,2,1,1])
print('[1,1,2,2,2,3]的众数:',mode)

结果:

[1,1.5,1.5,1.5,2,3]的众数: 1
[1,1,2,2,2,3]的众数: 2