确定坚持你的价值观

2024-05-29 11:38:33 发布

您现在位置:Python中文网/ 问答频道 /正文

给出一个格言:

data = {'18': [3.89, 1.28], '20': [1.39, 3.15], '15': [1.42, 3.10]}

我想挑选一些与其他明显不同的项目,如18。理想情况下,我会指定ALLOWED_DISCREPANCY,为demo将其设置为0.5,这是一个阈值,它将哪些内容突出哪些内容不突出(与其他值相比)。你知道吗

带有3.8918在这里显然是不正确的,因为大多数的值在1.4左右(比较每个列表中的任何一个值就足以得出结论),并且差值(abs(3.89 - 1.4))大于0.5(允许的最大值)。你知道吗


Tags: 项目内容列表datademo情况阈值abs
2条回答

如果你想用更统计的方法来发现异常值,你可以这样做:

data = {'18': [3.89, 1.28], '20': [1.39, 3.15], '15': [1.42, 3.10]}

avg = np.mean([x for sublist in data.values() for x in sublist])
stddev = np.std([x for sublist in data.values() for x in sublist])

对于一个标准偏差:

n_stddevs = 1

{k: [x for x in v if x  >= avg-stddev*n_stddevs and x <= avg+stddev*n_stddevs] for k, v in data.items()}

# {'15': [1.42, 3.1], '18': [], '20': [1.39, 3.15]}

对于2:

n_stddevs = 2

{k: [x for x in v if x  >= avg-stddev*n_stddevs and x <= avg+stddev*n_stddevs] for k, v in data.items()}

#{'15': [1.42, 3.1], '18': [3.89, 1.28], '20': [1.39, 3.15]}

对于0.5:

n_stddevs = 0.5

{k: [x for x in v if x  >= avg-stddev*n_stddevs and x <= avg+stddev*n_stddevs] for k, v in data.items()}

# {'15': [], '18': [], '20': []}

计算这些值的平均值。你知道吗

>>> from numpy import mean
>>> data = {'18': [3.89, 1.28], '20': [1.39, 3.15], '15': [1.42, 3.10]}
>>> avg = mean([x for sublist in data.values() for x in sublist])
>>> avg
2.3716666666666666

设置阈值并构建一个新字典,将原始键映射到与约束匹配的值列表。这里有两个例子:

>>> thresh = 0.5
>>> {k:[x for x in v if abs(x-avg) > thresh] for k, v in data.items()}
{'18': [3.89, 1.28], '15': [1.42, 3.1], '20': [1.39, 3.15]}
>>>
>>> thresh = 1
>>> {k:[x for x in v if abs(x-avg) > thresh] for k, v in data.items()}
{'18': [3.89, 1.28], '15': [], '20': []}

编辑:只考虑一个职位

>>> pos = 0
>>> {k:v[pos] for k, v in data.items() if abs(v[pos]-avg) > thresh}
{'18': 3.89}
>>> 
>>> pos = 1
>>> {k:v[pos] for k, v in data.items() if abs(v[pos]-avg) > thresh}
{'18': 1.28}

相关问题 更多 >

    热门问题