powershell - 在 PowerShell 中查找数据集的统计模式
问题描述
这个自我回答的问题是这个问题的后续:
如何确定给定数据集(数组)的统计模式,即最常出现的一个值或一组值?
例如,在数组1, 2, 2, 3, 4, 4, 5
中有两种模式,2
和4
,因为它们是出现频率最高的值。
解决方案
使用Group-Object
、Sort-Object
和do ... while
循环的组合:
# Sample dataset.
$dataset = 1, 2, 2, 3, 4, 4, 5
# Group the same numbers and sort the groups by member count, highest counts first.
$groups = $dataset | Group-Object | Sort-Object Count -Descending
# Output only the numbers represented by those groups that have
# the highest member count.
$i = 0
do { $groups[$i].Group[0] } while ($groups[++$i].Count -eq $groups[0].Count)
上面产生2
和4
,它们是两种模式(出现频率最高的值,在这种情况下每个两次),按升序排序(因为Group-Object
按分组标准排序并且Sort-Object
的排序算法是稳定的)。
注意:虽然这个解决方案在概念上很简单,但大型数据集的性能可能是一个问题;有关某些输入可能的优化,请参阅底部部分。
解释:
Group-Object
按相等对所有输入进行分组。Sort-Object -Descending
按成员计数以降序方式对结果组进行排序(最常出现的输入优先)。该
do ... while
语句遍历已排序的组并输出每个组表示的输入,只要组成员和因此出现计数(频率)最高,正如第一个组的成员计数所暗示的那样。
性能更好的解决方案,带有字符串和数字:
如果输入元素都是简单的数字或字符串(与复杂对象相反),则可以进行优化:
Group-Object
's-NoElement
禁止收集每个组中的单个输入。每个组的
.Name
属性都反映了分组值,但作为一个字符串,所以它必须转换回它的原始数据类型。
# Sample dataset.
# Must be composed of all numbers or strings.
$dataset = 1, 2, 2, 3, 4, 4, 5
# Determine the data type of the elements of the dataset via its first element.
# All elements are assumed to be of the same type.
$type = $dataset[0].GetType()
# Group the same numbers and sort the groups by member count, highest counts first.
$groups = $dataset | Group-Object -NoElement | Sort-Object Count -Descending
# Output only the numbers represented by those groups that have
# the highest member count.
# -as $type converts the .Name string value back to the original type.
$i = 0
do { $groups[$i].Name -as $type } while ($groups[++$i].Count -eq $groups[0].Count)
推荐阅读
- r - R中未定义函数的优化问题
- assembly - Microprocessor8086 masm 调试不会显示整个代码
- lisp - 如何计算输入年份之间的天数
- amazon-web-services - 从使用 VPC 的 ECS 集群中运行的 EC2 实例连接到 DynamoDB
- javascript - Fullcalendar time-Grid - 列周
- ios - Xcode iOS 标签调整 UIImage 大小
- kibana - 在 Kibana 中创建与管理员保持相同仪表板配置的用户
- java - 无法在 docker 中运行 jmeter 测试,获取类未找到异常
- linux - 使用 docker ADD 从 Github 下载文件夹
- javascript - TensorFlow.js 中的通道第一种格式