用以前爬的知乎用户行为数据,跑了一下Apriori算法,发现了一些有意思的关联规则。以下是简略

数据采集

数据怎么来的?当然不是知乎给的,是爬虫来的。怎么爬的?这篇文章就不说了。

数据处理

之前爬虫的时候为了存储方便,把一个用户关联的话题以及每个话题下的回答情况存放一个长的字符串,这是一个坑。现在为了建模,得先把数据处理一下,用Python正则表达式从长字符串中把话题id抽取出来,然后使之变成一对多的规整的结构化数据框。这个过程使3220712行数据变成了36856177行。

关联分析

当然这里依然用R调包的方法来做关联分析。不过这个数据体量太大了,全量读的话单机内存会爆,更别说Apriori进行全表扫描、逐步迭代计算……所以选择一部分样本即可,这里取100w条数据作为样本来跑模型。

library(readr)library(arules)library(arulesViz)library(dplyr)topic_info <- read_csv("E:/data/data/zhihu_topics.csv")Encoding(topic_info$topic) <- "gbk"user_topic_sample <- read_csv("E:/data/data/zhihu_user_topic_sample.csv")user_topic_sample <- user_topic_sample="">% left_join(topic_info[,1:2])trans <- as(split(user_topic_sample$topic,user_topic_sample$user_token),"transactions")rules <- apriori(trans,parameter = list(supp=0.1,conf=0.5,minlen=2))summary(rules)rules.sorted <- by="lift">% head(50) lhs rhs support confidence lift count[1] {旅行,美食,心理学} => {时尚} 0.1015915 0.7318048 3.065149 3479[2] {健身,美食} => {时尚} 0.1031099 0.6927604 2.901612 3531[3] {电影,旅行,心理学} => {时尚} 0.1069937 0.6879459 2.881447 3664[4] {美食,心理学} => {家居} 0.1003066 0.5069362 2.868005 3435[5] {电影,旅行,美食} => {时尚} 0.1104687 0.6830986 2.861144 3783[6] {电影,美食,心理学} => {时尚} 0.1116659 0.6745458 2.825320 3824[7] {健身,心理学} => {时尚} 0.1055921 0.6569767 2.751733 3616[8] {家居} => {时尚} 0.1146153 0.6484388 2.715972 3925[9] {旅行,心理学} => {时尚} 0.1209228 0.6474359 2.711771 4141[10] {健身,旅行} => {时尚} 0.1037232 0.6473483 2.711404 3552[11] {旅行,美食} => {时尚} 0.1232005 0.6455018 2.703671 4219[12] {电影,旅行,时尚} => {美食} 0.1104687 0.8419764 2.689440 3783[13] {旅行,时尚,心理学} => {美食} 0.1015915 0.8401352 2.683559 3479[14] {商业} => {创业} 0.1386772 0.6043523 2.653679 4749[15] {创业} => {商业} 0.1386772 0.6089242 2.653679 4749[16] {美食,心理学} => {时尚} 0.1250986 0.6322314 2.648088 4284[17] {美食,设计} => {时尚} 0.1017667 0.6320276 2.647234 3485[18] {电影,健身,美食} => {旅行} 0.1030223 0.8275862 2.635608 3528[19] {电影,家居} => {美食} 0.1067601 0.8175313 2.611357 3656[20] {电影,生活} => {音乐} 0.1106731 0.6273796 2.605143 3790[21] {设计,心理学} => {时尚} 0.1066433 0.6206662 2.599647 3652[22] {旅行,心理学} => {教育} 0.1022631 0.5475297 2.595536 3502[23] {电影,时尚,心理学} => {美食} 0.1116659 0.8118896 2.593336 3824[24] {美食,时尚,心理学} => {旅行} 0.1015915 0.8120915 2.586262 3479[25] {电影,美食,时尚} => {旅行} 0.1104687 0.8102377 2.580358 3783[26] {电影,旅行,心理学} => {美食} 0.1241349 0.7981600 2.549481 4251[27] {家居,心理学} => {美食} 0.1003066 0.7958758 2.542185 3435[28] {经济学} => {商业} 0.1366915 0.5831568 2.541385 4681[29] {商业} => {经济学} 0.1366915 0.5956987 2.541385 4681[30] {旅行,心理学} => {职业发展} 0.1016791 0.5444028 2.538890 3482[31] {旅行,时尚} => {美食} 0.1232005 0.7948380 2.538870 4219[32] {电影,健身,心理学} => {美食} 0.1009490 0.7898104 2.522811 3457[33] {美食,心理学} => {教育} 0.1051248 0.5312869 2.518538 3600[34] {电影,商业} => {互联网} 0.1016207 0.6815511 2.518041 3480[35] {创业,电影} => {互联网} 0.1006862 0.6791412 2.509137 3448[36] {电影,健身,心理学} => {旅行} 0.1004818 0.7861549 2.503662 3441[37] {电影,健身,旅行} => {美食} 0.1030223 0.7826087 2.499807 3528[38] {健康} => {生活} 0.1190539 0.6937213 2.498579 4077[39] {电影,设计,心理学} => {美食} 0.1091254 0.7806559 2.493570 3737[40] {教育} => {职业发展} 0.1122500 0.5321152 2.481586 3844[41] {职业发展} => {教育} 0.1122500 0.5234918 2.481586 3844[42] {电影,时尚,心理学} => {旅行} 0.1069937 0.7779193 2.477434 3664[43] {健身,美食} => {旅行} 0.1156373 0.7769276 2.474276 3960[44] {美食,心理学} => {职业发展} 0.1046576 0.5289256 2.466711 3584[45] {电影,健身} => {时尚} 0.1102351 0.5883728 2.464387 3775[46] {电影,互联网} => {商业} 0.1016207 0.5648434 2.461576 3480[47] {设计,时尚} => {美食} 0.1017667 0.7699956 2.459519 3485[48] {健身,时尚} => {旅行} 0.1037232 0.7721739 2.459137 3552[49] {电影,互联网} => {创业} 0.1006862 0.5596494 2.457391 3448[50] {美食,时尚} => {旅行} 0.1232005 0.7705936 2.454104 4219

提升度最高的关联规则是{旅行,美食,心理学} => {时尚} ,达到了3倍多!事实上这些top50的关联规则很多都是导向“时尚”这个话题,果然不愧为逼乎。

plot(rules, method="graph", control=list(type="items"))

image.png

图就不解释了,一直都不是很懂关联规则可视化图怎么解读……

附加一下各话题关注人数top100:

知乎关注人数top100的话题

关联分析的结果可用作推荐系统。与协同过滤算法相比,它不必计算两两相似度的邻接矩阵,计算量相对小一点;而且协同过滤算法只能计算相似度,关联规则有支持度、置信度、提升度等指标,解释性较强一点。不过在协同过滤算法中,因为有两两的相似度,因为只要有一个新的input,总能根据最高的相似度进行推荐;而在关联规则中,只有触发了对应的关联规则才能推荐,因此它的覆盖面不如协同过滤广。

步骤总结

首先把数据整理成id-item式的规整dataframe然后把dataframe转换成transaction设定关联规则参数(support、confident等)建立关联规则以关联规则按某个指标(lift、support等)排序、解析可视化关联规则

问题延伸

还好刚换了一个游戏本,不然无论Python处理数据,还是跑Apriori模型,估计都会卡成狗这只是一个case studyApriori算法在数据量大的时候计算量也大得可怕,可以考虑FP-growth用R在单机上调包建模的方法可以在学习时体会一下,但离工业级的建模仍有差距。这个case体量的数据建模的话,在Spark等分布式并行计算平台上跑算法才是正道

▍需要帮助?联系我们

拓端tecdat|R语言Apriori算法实例——322万知乎用户的关注话题关联分析相关推荐

  1. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

  2. 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

    最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...

  3. 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系

    最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...

  4. 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例

    最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...

  5. R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘)、使用subset函数进一步筛选生成的规则去除左侧规则中的冗余信息、获取更独特的有新意的关联规则

    R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘).使用subset函数进一步筛选生成的规则去除左侧规则中的冗余信息.获取更独特的有新意的关联规则 目录

  6. R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘)、查看限制了规则的右侧之后挖掘到的规则(置信度排序,只查看左侧即可)

    R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘).查看限制了规则的右侧之后挖掘到的规则(置信度排序,只查看左侧即可) 目录

  7. R语言Apriori算法关联规则挖掘:使用interestMeasure函数评估挖掘到的规则(包括覆盖率(coverage)和FishersExactTest)、置信度最高的五条规则(top five

    R语言Apriori算法关联规则挖掘:使用interestMeasure函数评估挖掘到的规则(包括覆盖率(coverage)和FishersExactTest).置信度最高的五条规则(top five ...

  8. R语言Apriori算法实现例子

    R语言Apriori算法实现例子 以西饼屋数据集为例进行分析 代码部分 第一部分 每行解读 setwd("-")#定位根目录 data.frame(table(Breakfast[ ...

  9. 前馈神经网络_BP算法+R语言程序运行实例

    前馈神经网络_BP算法+R语言程序运行实例 目录 关于神经网络的介绍 前馈神经网络 应用到机器学习 参数学习 误差反向传播 程序实例(R语言) 前言 今天是小白学习神经网络的第一次博客文章,希望以后的 ...

  10. 【视频】什么是梯度下降?用线性回归解释和R语言估计GARCH实例

    全文链接:http://tecdat.cn/?p=23606 梯度下降是一种优化算法,能够为各种问题找到最佳解决方案(点击文末"阅读原文"获取完整代码数据). 梯度下降是什么? 梯 ...

最新文章

  1. ubuntu获取root权限
  2. CCNP-16 OSPF试验12(BSCI)
  3. mysql 替换 多个逗号_如何使用mySQL replace()替换多个记录中的字符串?
  4. 什么场景应该用 MongoDB ?
  5. 如何将字典值写入一个文本文件?
  6. eclipse3.4 SVN插件安装
  7. 百度SEO站群爱叶解析接口php网站源码
  8. FISCO BCOS 区块链 查看代码版本号
  9. Python 四阶龙格库塔法求积分
  10. 职业技能鉴定 八大工种 广州紧缺工种 培训考证
  11. 网页国际化处理(中英文切换)
  12. gis 数据框裁剪_【更新80篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
  13. deepfool简单实现
  14. 小程序 用户反馈_用户反馈如何提高我的应用程序的安全性
  15. 用 JustTrustMe 干翻 SSL Pinning: 爬尤美 app 付费视频(app.youmei.com)
  16. 知物由学 | 行为时序建模在社交引流黑产识别中的应用
  17. 译文: C28x Compiler Error and Warning Messages
  18. Python Tutorial中英双语对照文档5
  19. nexus3的配置阿里云代理仓库
  20. django创建子应用

热门文章

  1. vs2010使用svn--浅谈AnkhSvn
  2. RCP中如何使用代码安装、运行plugins
  3. ANTLR实现的SQL解析器 - OQL
  4. 【tensorRT文档翻译】7. Working With Dynamic Shapes
  5. EMNLP 2017 北京论文报告会笔记
  6. 第二季-专题1-工欲善其事-必先利其器
  7. C++--第16课 - 继承中的构造与析构
  8. [Android开源]EasyExecutor: 让线程任务的使用变得高效、安全、方便、灵活
  9. Linux入门命令解释(1)
  10. TCP的几个状态对于我们分析所起的作用SYN, FIN, ACK, PSH,