社交網(wǎng)絡用戶畫像
美國的中學生在社交網(wǎng)站上的信息聚類
teens = read.csv('E:/rpath/snsdata.csv')
dim(teens)
str(teens)
性別朋蔫,年齡棚饵,有多少個朋友
個人描述的內(nèi)容
談論內(nèi)容:足球逊移、游泳爬迟、運動倘感、毒品簇捍、飲酒禽炬、死亡...
table(teens$gender)
table(teens$gender, useNA = 'ifany')
女性占了大多數(shù)碎节,還有些沒性別曾我,有userNA 統(tǒng)計
13 - 20 歲是中學生粉怕,把其他年齡標成 NA
teens$age = ifelse(teens$age >= 13 & teens$age < 20, teens$age, NA)
summary(teens$age)
數(shù)據(jù)預處理
為了發(fā)方便后續(xù)的距離計算,我們需要把性別這個分類變量修改成數(shù)字抒巢,
顯然男贫贝,女之間,以及有性別數(shù)據(jù)與NA之間蛉谜,我們可以用0,1區(qū)分
teens$female = ifelse(teens$gender == 'F' &! is.na(teens$gender), 1, 0)
teens$no_gender = ifelse(is.na(teens$gender), 1, 0)
table(teens$gender, useNA = 'ifany')
prop.table(table(teens$gender, useNA = 'ifany'))
table(teens$female, useNA = 'ifany')
table(teens$no_gender, useNA = 'ifany')
對于年齡稚晚,我們可以考慮利用均值來替代NA
ave_age = ave(teens$age, teens$gradyear, FUN = function(x) mean(x, na.rm = TRUE))
teens$age = ifelse(is.na(teens$age), ave_age, teens$age)
summary(teens$age)
ave_age:根據(jù)畢業(yè)的年,計算年齡均值
建立模型
前4個特征畢業(yè)年型诚,性別客燕,年齡,朋友數(shù)在這里不作為輸入
interests = teens[5:40]
先行進行數(shù)據(jù) z-score 處理
interests_z = as.data.frame(lapply(interests, scale))
teen_clusters = kmeans(interests_z, 5)
- 參數(shù)一:數(shù)據(jù)集
- 參數(shù)二:分成幾個族
模型評估
teen_clusters$size
teen_clusters$centers # 每一類的各項得分
- 第一類談啥都少狰贯,內(nèi)向不說話
- 第二類談性
- 第三類談音樂也搓、毒品
- 第四類談圣經(jīng)
- 第五類談體育
模型分析
teens$cluster = teen_clusters$cluster
teens[1:5, c('cluster', 'gender', 'age', 'friends')] # 只看前五條數(shù)據(jù)
不同的cluster 的年齡,性別
aggregate(data = teens, age ~ cluster, mean)
aggregate(data = teens, female ~ cluster, mean)
不同cluster 的朋友數(shù)目
aggregate(data = teens, friends ~ cluster, mean)