从不平衡面板数据中提取趋势的技术

数据挖掘 可视化 数据集 图表
2021-09-21 01:09:59

我的数据集格式如下:

User-id | Threat_score
aaa       45
bbb       32
ccc       20

该列表包含威胁得分最高的前 100 个用户。我每月生成这样一个列表,并将每个月的列表存储在自己的文件中。

我想从这些数据中得到三件事:

    1. 持续出现在此列表中的用户
    2. 持续出现在此列表中且威胁得分较高的用户
    3. 威胁分数增长非常快的用户

我认为视觉摘要会很好;每个月(以某种方式)决定我想在历史威胁评分图表上绘制哪些用户。

是否有任何已知的可视化技术可以处理类似的要求?

我应该如何转换我当前的数据以实现我正在寻找的东西?

2个回答

我会添加第三列month,然后连接每个列表。因此,如果您有 5 个月的前 100 个列表,您将创建一个包含 500 个条目的大表:

User-id | Threat_score | month
aaa       45             1
bbb       32             1
ccc       20             1
...       ...            ...
bbb       64             2
ccc       29             2
...       ...            ...

然后,要回答您的第一个问题,您可以简单地计算每个用户 ID 的出现次数。例如,如果用户bbb五次出现在您的串联表中,那么您知道该人在五个月内都在您的列表中。

为了回答你的第二个问题,你可以做一个group by操作来计算用户的一些聚合函数。具有平均函数的group by操作有点粗糙并且对异常值敏感,但它可能会让你接近你正在寻找的东西。

第三个问题的一种可能性是计算月n-1和月之间威胁得分的差异n也就是说,对于每个月(不包括第一个月),您从当前威胁得分中减去用户之前的威胁得分。您可以将此列为新列,以便您的表格现在看起来像:

User-id | Threat_score | month | difference
aaa       45             1       null
bbb       32             1       null
ccc       20             1       null
...       ...            ...     ...
bbb       64             2       32
ccc       29             2       9
...       ...            ...

使用此表,您可以再次执行group by操作以查找始终具有比上个月更高的威胁评分的人,或者您可以简单地查找当月与上月之间差异很大的人。

正如您所建议的,可视化这些数据是一个非常好的主意。如果您随着时间的推移关心这些威胁得分(我认为您会关心),我强烈建议您使用简单的折线图,x 轴为月份,y 轴为威胁得分。这并不花哨,但它非常容易解释,并且应该为您提供有关趋势的有用信息。

大多数这些东西(不是可视化)可以用 SQL 完成,所有这些都可以用 R 或 Python(以及许多其他语言)完成。祝你好运!

您有 3 个问题要回答,每月要分析 100 条记录。

基于这个大小,我建议首先在一个简单的 SQL 数据库或电子表格中进行分析。前两个问题很容易弄清楚。第三个有点困难。

考虑到您要回答的问题,我肯定会为月份添加一列并将所有这些数据组合到电子表格或数据库表中。

问题 1. 一直出现在此列表中的用户

在excel中,这个答案应该可以帮助你: https ://superuser.com/questions/442653/ms-excel-how-count-occurence-of-item-in-a-list

对于 SQL 数据库: https ://stackoverflow.com/questions/2516546/select-count-duplicates

问题 2. 始终以高风险评分出现在此列表中的用户

这只是在上面增加了一点复杂性。对于 SQL,您将根据最低风险评分值进一步限定您的查询。

在 excel 中,直接枢轴不起作用,您必须将一列中的唯一值复制到另一列,然后在每个唯一值旁边拖动一个 CountIf 函数,以最低风险评分限定 countif 函数。

问题 3. 快速达到/达到高风险级别的用户。

风险水平的快速上升可以定义为两个月之间的差异大于给定值。

对于每个用户记录,您想知道上个月的威胁值,或者假设之前的威胁值为零。

如果该差异大于您的风险阈值,您希望将其包含在您的报告中。如果没有,可以从列表中过滤掉它们。

如果我必须每个月都这样做,我会在最初的几个月后花费两个小时来自动生成报告。我会将所有数据放入 SQL 数据库中,然后用 perl 或 java 编写一个快速脚本来遍历 100 条记录,进行计算并输出超过阈值的用户。

如果我需要它看起来漂亮,我会使用报告工具。我并不特别偏爱其中任何一个。

如果我需要随时间推移对阈值进行趋势分析,我会将所有人的结果输出到第二个表中,每个月将记录添加到该表中。

如果我只需要做一次或两次,那么通过使用 VLookUp 添加新列以及一些基本的数学和过滤器来弄清楚如何在 excel 中完成它可能是完成它的最快和最简单的方法。我倾向于避免将 excel 用于需要保持一致性使用的事情,因为当数据变得相当大时会遇到限制。