天天看點

拓端tecdat|R語言Apriori算法執行個體——322萬知乎使用者的關注話題關聯分析資料采集資料處理關聯分析知乎關注人數top100的話題步驟總結問題延伸

用以前爬的知乎使用者行為資料,跑了一下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"))
拓端tecdat|R語言Apriori算法執行個體——322萬知乎使用者的關注話題關聯分析資料采集資料處理關聯分析知乎關注人數top100的話題步驟總結問題延伸

image.png

圖就不解釋了,一直都不是很懂關聯規則可視化圖怎麼解讀……

附加一下各話題關注人數top100:

拓端tecdat|R語言Apriori算法執行個體——322萬知乎使用者的關注話題關聯分析資料采集資料處理關聯分析知乎關注人數top100的話題步驟總結問題延伸

知乎關注人數top100的話題

關聯分析的結果可用作推薦系統。與協同過濾算法相比,它不必計算兩兩相似度的鄰接矩陣,計算量相對小一點;而且協同過濾算法隻能計算相似度,關聯規則有支援度、置信度、提升度等名額,解釋性較強一點。不過在協同過濾算法中,因為有兩兩的相似度,因為隻要有一個新的input,總能根據最高的相似度進行推薦;而在關聯規則中,隻有觸發了對應的關聯規則才能推薦,是以它的覆寫面不如協同過濾廣。

步驟總結

首先把資料整理成id-item式的規整dataframe然後把dataframe轉換成transaction設定關聯規則參數(support、confident等)建立關聯規則以關聯規則按某個名額(lift、support等)排序、解析可視化關聯規則

問題延伸

還好剛換了一個遊戲本,不然無論Python處理資料,還是跑Apriori模型,估計都會卡成狗這隻是一個case studyApriori算法在資料量大的時候計算量也大得可怕,可以考慮FP-growth用R在單機上調包模組化的方法可以在學習時體會一下,但離工業級的模組化仍有差距。這個case體量的資料模組化的話,在Spark等分布式并行計算平台上跑算法才是正道

▍需要幫助?聯系我們

繼續閱讀