我在分析一些URL后尝试识别新模式 . 所以,假设我正在调查假设网站Yoohle.com,他们的网址具有以下结构 .
-
domain = yoohle.com
-
q =搜索短语
-
lan =使用的语言
-
pr = partner_id
-
br = browser_id
所以示例网址将如下所示
www.yoohle.com/test_folder/test_page?q=hello+world&lan=en&pr=stackoverflow&br=chrome
如果我正在调查这个网站的网站流量并且看到月份异常增加,我想知道是什么导致了这一点 . 在这个例子中,我可以解析URL并查看pr =值,因为它会告诉我是否有新的伙伴关系(也许stackoverflow将由yoohle.com提供支持并推动增加等)
问题是,我如何 Build 一个可以比较2个月(或更多个月)的强大功能,并告诉我究竟是什么推动了增长 . 我希望得到类似的结论,“我们看到了增长,它是由以下模式驱动的”
www.yoohle.com/test_folder/test_page%pr=stackoverflow%
棘手的部分是,你不知道令牌的意思,不像这个例子,因为我不知道什么令牌代表partner_id . 另一个问题是,如果我们通过令牌查看令牌,这将会产生误导,因为如果用户仍然会使用英语作为语言,则lan = en也将与新的合作伙伴一起使用 .
我的想法是通过查看所有组合来分析令牌,但这是非常昂贵的(4!在这个例子中,可能10!对于其他网站) . 同样分析令牌本身并不能解决问题,因为我仍然需要分析令牌的值 .
我尝试了k-means聚类,apriori算法对URL /文本挖掘进行了一些研究但是无法得到我想要的东西 . 关于如何构建算法的任何想法都将是有益的 .
想象一下,您正在查看实时数据,因此我们讨论的是在给定月份内分析大约100K的URL .
1 回答
我会采取以下方式 . 您可以创建下表:
现在,您可以编写一些查询 .
上面的查询为您提供了参数模式,其中月份变化超过5000个月或月度变化超过300% . 如果你可以在你的sql系统中使用
group by rollup
它也会提供更高级别的聚合(三个参数的组合,两个参数,一个参数) .您可以使用参数值执行相同的操作 . 因为您不知道值将包含哪些令牌,您可以在以下表结构中解析URL:
然后,您需要以某种方式重写上面的查询,例如你可以在PostgreSQL
array_agg()
中使用数组聚合函数 .