Apriori算法實(shí)例——322萬知乎用戶的關(guān)注話題關(guān)聯(lián)分析

用以前爬的知乎用戶行為數(shù)據(jù),跑了一下Apriori算法,發(fā)現(xiàn)了一些有意思的關(guān)聯(lián)規(guī)則线脚。以下是簡略的分析過程漂问。

數(shù)據(jù)采集

數(shù)據(jù)怎么來的泞坦?當(dāng)然不是知乎給的口四,是爬蟲來的曹锨。怎么爬的舵盈?這篇文章就不說了毡咏。

數(shù)據(jù)處理

之前爬蟲的時(shí)候?yàn)榱舜鎯?chǔ)方便驮宴,把一個(gè)用戶關(guān)聯(lián)的話題以及每個(gè)話題下的回答情況存放一個(gè)長的字符串,這是一個(gè)坑∨荤裕現(xiàn)在為了建模堵泽,得先把數(shù)據(jù)處理一下,用Python正則表達(dá)式從長字符串中把話題id抽取出來恢总,然后使之變成一對(duì)多的規(guī)整的結(jié)構(gòu)化數(shù)據(jù)框迎罗。這個(gè)過程使3220712行數(shù)據(jù)變成了36856177行。

關(guān)聯(lián)分析

當(dāng)然這里依然用R調(diào)包的方法來做關(guān)聯(lián)分析片仿。不過這個(gè)數(shù)據(jù)體量太大了纹安,全量讀的話單機(jī)內(nèi)存會(huì)爆,更別說Apriori進(jìn)行全表掃描砂豌、逐步迭代計(jì)算……所以選擇一部分樣本即可厢岂,這里取100w條數(shù)據(jù)作為樣本來跑模型。

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 <- sort(rules, by="lift")
inspect(rules.sorted)  %>% head(50)
                    lhs           rhs   support confidence     lift count
[1]  {旅行,美食,心理學(xué)} =>     {時(shí)尚} 0.1015915  0.7318048 3.065149  3479
[2]         {健身,美食} =>     {時(shí)尚} 0.1031099  0.6927604 2.901612  3531
[3]  {電影,旅行,心理學(xué)} =>     {時(shí)尚} 0.1069937  0.6879459 2.881447  3664
[4]       {美食,心理學(xué)} =>     {家居} 0.1003066  0.5069362 2.868005  3435
[5]    {電影,旅行,美食} =>     {時(shí)尚} 0.1104687  0.6830986 2.861144  3783
[6]  {電影,美食,心理學(xué)} =>     {時(shí)尚} 0.1116659  0.6745458 2.825320  3824
[7]       {健身,心理學(xué)} =>     {時(shí)尚} 0.1055921  0.6569767 2.751733  3616
[8]              {家居} =>     {時(shí)尚} 0.1146153  0.6484388 2.715972  3925
[9]       {旅行,心理學(xué)} =>     {時(shí)尚} 0.1209228  0.6474359 2.711771  4141
[10]        {健身,旅行} =>     {時(shí)尚} 0.1037232  0.6473483 2.711404  3552
[11]        {旅行,美食} =>     {時(shí)尚} 0.1232005  0.6455018 2.703671  4219
[12]   {電影,旅行,時(shí)尚} =>     {美食} 0.1104687  0.8419764 2.689440  3783
[13] {旅行,時(shí)尚,心理學(xué)} =>     {美食} 0.1015915  0.8401352 2.683559  3479
[14]             {商業(yè)} =>     {創(chuàng)業(yè)} 0.1386772  0.6043523 2.653679  4749
[15]             {創(chuàng)業(yè)} =>     {商業(yè)} 0.1386772  0.6089242 2.653679  4749
[16]      {美食,心理學(xué)} =>     {時(shí)尚} 0.1250986  0.6322314 2.648088  4284
[17]        {美食,設(shè)計(jì)} =>     {時(shí)尚} 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]      {設(shè)計(jì),心理學(xué)} =>     {時(shí)尚} 0.1066433  0.6206662 2.599647  3652
[22]      {旅行,心理學(xué)} =>     {教育} 0.1022631  0.5475297 2.595536  3502
[23] {電影,時(shí)尚,心理學(xué)} =>     {美食} 0.1116659  0.8118896 2.593336  3824
[24] {美食,時(shí)尚,心理學(xué)} =>     {旅行} 0.1015915  0.8120915 2.586262  3479
[25]   {電影,美食,時(shí)尚} =>     {旅行} 0.1104687  0.8102377 2.580358  3783
[26] {電影,旅行,心理學(xué)} =>     {美食} 0.1241349  0.7981600 2.549481  4251
[27]      {家居,心理學(xué)} =>     {美食} 0.1003066  0.7958758 2.542185  3435
[28]           {經(jīng)濟(jì)學(xué)} =>     {商業(yè)} 0.1366915  0.5831568 2.541385  4681
[29]             {商業(yè)} =>   {經(jīng)濟(jì)學(xué)} 0.1366915  0.5956987 2.541385  4681
[30]      {旅行,心理學(xué)} => {職業(yè)發(fā)展} 0.1016791  0.5444028 2.538890  3482
[31]        {旅行,時(shí)尚} =>     {美食} 0.1232005  0.7948380 2.538870  4219
[32] {電影,健身,心理學(xué)} =>     {美食} 0.1009490  0.7898104 2.522811  3457
[33]      {美食,心理學(xué)} =>     {教育} 0.1051248  0.5312869 2.518538  3600
[34]        {電影,商業(yè)} =>   {互聯(lián)網(wǎng)} 0.1016207  0.6815511 2.518041  3480
[35]        {創(chuàng)業(yè),電影} =>   {互聯(lián)網(wǎng)} 0.1006862  0.6791412 2.509137  3448
[36] {電影,健身,心理學(xué)} =>     {旅行} 0.1004818  0.7861549 2.503662  3441
[37]   {電影,健身,旅行} =>     {美食} 0.1030223  0.7826087 2.499807  3528
[38]             {健康} =>     {生活} 0.1190539  0.6937213 2.498579  4077
[39] {電影,設(shè)計(jì),心理學(xué)} =>     {美食} 0.1091254  0.7806559 2.493570  3737
[40]             {教育} => {職業(yè)發(fā)展} 0.1122500  0.5321152 2.481586  3844
[41]         {職業(yè)發(fā)展} =>     {教育} 0.1122500  0.5234918 2.481586  3844
[42] {電影,時(shí)尚,心理學(xué)} =>     {旅行} 0.1069937  0.7779193 2.477434  3664
[43]        {健身,美食} =>     {旅行} 0.1156373  0.7769276 2.474276  3960
[44]      {美食,心理學(xué)} => {職業(yè)發(fā)展} 0.1046576  0.5289256 2.466711  3584
[45]        {電影,健身} =>     {時(shí)尚} 0.1102351  0.5883728 2.464387  3775
[46]      {電影,互聯(lián)網(wǎng)} =>     {商業(yè)} 0.1016207  0.5648434 2.461576  3480
[47]        {設(shè)計(jì),時(shí)尚} =>     {美食} 0.1017667  0.7699956 2.459519  3485
[48]        {健身,時(shí)尚} =>     {旅行} 0.1037232  0.7721739 2.459137  3552
[49]      {電影,互聯(lián)網(wǎng)} =>     {創(chuàng)業(yè)} 0.1006862  0.5596494 2.457391  3448
[50]        {美食,時(shí)尚} =>     {旅行} 0.1232005  0.7705936 2.454104  4219

提升度最高的關(guān)聯(lián)規(guī)則是{旅行,美食,心理學(xué)} => {時(shí)尚} 阳距,達(dá)到了3倍多塔粒!事實(shí)上這些top50的關(guān)聯(lián)規(guī)則很多都是導(dǎo)向“時(shí)尚”這個(gè)話題,果然不愧為逼乎筐摘。

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

圖就不解釋了卒茬,一直都不是很懂關(guān)聯(lián)規(guī)則可視化圖怎么解讀……

附加一下各話題關(guān)注人數(shù)top100:


知乎關(guān)注人數(shù)top100的話題

關(guān)聯(lián)分析的結(jié)果可用作推薦系統(tǒng)。與協(xié)同過濾算法相比咖熟,它不必計(jì)算兩兩相似度的鄰接矩陣圃酵,計(jì)算量相對(duì)小一點(diǎn);而且協(xié)同過濾算法只能計(jì)算相似度馍管,關(guān)聯(lián)規(guī)則有支持度郭赐、置信度、提升度等指標(biāo)咽斧,解釋性較強(qiáng)一點(diǎn)堪置。不過在協(xié)同過濾算法中,因?yàn)橛袃蓛傻南嗨贫日湃牵驗(yàn)橹灰幸粋€(gè)新的input,總能根據(jù)最高的相似度進(jìn)行推薦岭洲;而在關(guān)聯(lián)規(guī)則中宛逗,只有觸發(fā)了對(duì)應(yīng)的關(guān)聯(lián)規(guī)則才能推薦,因此它的覆蓋面不如協(xié)同過濾廣盾剩。

步驟總結(jié)

  • 首先把數(shù)據(jù)整理成id-item式的規(guī)整dataframe
  • 然后把dataframe轉(zhuǎn)換成transaction
  • 設(shè)定關(guān)聯(lián)規(guī)則參數(shù)(support雷激、confident等)建立關(guān)聯(lián)規(guī)則
  • 以關(guān)聯(lián)規(guī)則按某個(gè)指標(biāo)(lift替蔬、support等)排序、解析
  • 可視化關(guān)聯(lián)規(guī)則

問題延伸

  • 還好剛換了一個(gè)游戲本屎暇,不然無論P(yáng)ython處理數(shù)據(jù)承桥,還是跑Apriori模型,估計(jì)都會(huì)卡成狗
  • 這只是一個(gè)case study
  • Apriori算法在數(shù)據(jù)量大的時(shí)候計(jì)算量也大得可怕根悼,可以考慮FP-growth
  • 用R在單機(jī)上調(diào)包建模的方法可以在學(xué)習(xí)時(shí)體會(huì)一下凶异,但離工業(yè)級(jí)的建模仍有差距。這個(gè)case體量的數(shù)據(jù)建模的話挤巡,在Spark等分布式并行計(jì)算平臺(tái)上跑算法才是正道
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市矿卑,隨后出現(xiàn)的幾起案子喉恋,更是在濱河造成了極大的恐慌,老刑警劉巖母廷,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異氓鄙,居然都是意外死亡勤讽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門脚牍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诸狭,“玉大人券膀,你說我怎么就攤上這事⊙庇觯” “怎么了芹彬?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叉庐。 經(jīng)常有香客問我舒帮,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任玩郊,我火速辦了婚禮肢执,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘译红。我一直安慰自己预茄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布侦厚。 她就那樣靜靜地躺著耻陕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪假夺。 梳的紋絲不亂的頭發(fā)上淮蜈,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音已卷,去河邊找鬼梧田。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侧蘸,可吹牛的內(nèi)容都是我干的裁眯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼讳癌,長吁一口氣:“原來是場噩夢啊……” “哼穿稳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晌坤,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤逢艘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后骤菠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體它改,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年商乎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了央拖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹉戚,死狀恐怖鲜戒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抹凳,我是刑警寧澤遏餐,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站赢底,受9級(jí)特大地震影響境输,放射性物質(zhì)發(fā)生泄漏蔗牡。R本人自食惡果不足惜颖系,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一嗅剖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘁扼,春花似錦信粮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至不傅,卻和暖如春旅掂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背访娶。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工商虐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崖疤。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓秘车,卻偏偏與公主長得像,于是被迫代替她去往敵國和親劫哼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叮趴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容