基於R語言利用QQ羣進行數據挖掘案例整理

       利用QQ羣進行數據挖掘案例,數據源來源於2016年12-2017年大致一個月的QQ羣基本數據,通過對聊天內容的分析,瞭解QQ聊天羣資料瞭解時間,人羣以及關鍵詞,並構建相應圖表、雲圖等,下圖爲本人所在提取的QQ羣:

  

以下是R代碼部分:

file.data<-scan("C:/Users/admin/Desktop/數據挖掘機器學習R-hive.txt",what="",sep="\n",encoding="UTF-8")

#數據清洗

clean<-function(file.data){
data<-data.frame(user.name=c(),time=c(),text=c())
user.name=c();time=c();text=c();
for(i in 6:length(file.data))
{
 reg.time<-regexpr("[0-9]{4}-[0-9]{2}-[0-9]{2}[0-9]+:[0-9]+:[0-9]+",file.data[i])
 if(reg.time==1){#該行取到了時間信息
 data<-rbind(data,data.frame(user.name=user.name,time=time,text=text))
 text=c("1")
 begin<-reg.time
 end<-reg.time+attr(reg.time,"match.length")-1
 time=substr(file.data[i],begin,end)
 begin=reg.time+attr(reg.time,"match.length")+1
 end<-nchar(file.data[i])
 user.name<-substr(file.data[i],begin,end)#讀取用戶名信息
  }
 else{text=paste(text,file.data[i])}
  }
return(data)}
data<-clean(file.data)#數據結構化

#活躍度計算

d1=table(data[,1])
> d = data.frame(word = names(d1),freq = d1,stringsAsFactors = F)   ; 
> d=d[order(d[,3],decreasing=T),]

#由於測試羣記錄數據量,後期效果不是很明顯。這也是大數據火的原因吧?

> dim(d1)
[1] 29
> length(data[,1])
[1] 164
#轉換數據類型
data$name<-as.character(data$user.name)
data$text<-as.character(data$text)
data$datatime<-as.POSIXlt(data$time)
#整理賬期的年、月、日、時、分、秒部分
> data <- transform(data,
+                  year = datatime$year+1900,
+                  month = datatime$mon+1,
+                  day = datatime$mday,
+                  hour = datatime$hour,
+                  min = datatime$min,
+                  sec = datatime$sec)
>
> d1=table(data[,1])
> d = data.frame(word = names(d1),freq =d1,stringsAsFactors = F)   ;
> d=d[order(d[,3],decreasing=T),]
> head(d)

活躍度統計

#去掉停用詞

mixseg = worker()
textt=paste(as.character(data[,3]),sep="",collapse ="")
textt<-mixseg<=textt
t=unlist(textt)
cnword<-read.csv("C:/Users/admin/Desktop/幾個停用詞.txt",header=F,stringsAsFactors=F)
cnword<-as.vector(cnword[1:dim(cnword)[1],])#需要爲向量格式
t=t[!t%in%cnword]#去停用詞
t1=table( t  )
plot(t1)  初步查看分詞不是很理想,繼續調整

> d =data.frame(word = names(d1),freq = d1,stringsAsFactors = F)   ;
>d=d[order(d[,3],decreasing=T),]
>d=d[nchar(as.character(d$word))>1,]
>write.table(d,"C:/Users/admin/Desktop/幾個停用詞.txt聊天內容詞頻排名.csv",sep=",",row.names = F)
 

 

>t1=t1[!names(t1)%in%c("男神","女神","你懂的")]#去沒有意義的詞
> library(Rwordseg)
t1=t1[nchar(as.character(names(t1)))==2]
plot(t1,xlab="詞組",ylab="詞頻")   #效果實例而已,好的數據會有好的效果。

用wordcloud進行過程-------------------------------------

#分詞後的詞語頻率彙總

> wdfreq <- as.data.frame(table(t1))    
> head(wdfreq)
  t1Freq
1 1   14
2 2    1
3 7    2

#頻數排序 **

wdfreq<-rev(sort(wdfreq$Freq))

------------------------------------------------------

#使用wordcloud2構造雲圖
wordcloud2(t1,size=2,fontFamily='SegoeUI')

---------用wordcloud進行過程-------------------------------------

#分詞後的詞語頻率彙總
> wdfreq <- as.data.frame(table(t1))    
> head(wdfreq)
  t1Freq
1 1   14
2 2    1
3 7    2
#頻數排序 **
wdfreq<-rev(sort(wdfreq$Freq))

------------------------------------------------------

#使用wordcloud2構造雲圖

wordcloud2(t1,size=2,fontFamily='SegoeUI')

 

 

> datax=substr(data[,2],1,10)#得到日期,不要時分秒
> a=table(datax)
> plot(a,xlab="日期",ylab="頻數",main="參與聊天人數/日期")

data1=data.frame(user.name=data[,1],data=substr(data[,2],1,10),time=substr(data[,2],12,regexpr(":",data[,2])-1),text=data[,3])
#write.table(data1," C:/Users/admin/Desktop/.細分數據.csv",sep=",",row.names = F)
a=table(data1[,3])
plot(a,xlab="日期",ylab="頻數",col=4,main="參與聊天人數/二十小時分佈")

WORDCLOUD2常用參數:
(1)data:詞雲生成數據,包含具體詞語以及頻率;
(2)size:字體大小,默認爲1,一般來說該值越小,生成的形狀輪廓越明顯;
(3)fontFamily:字體,如‘微軟雅黑’;
(4)fontWeight:字體粗細,包含‘normal’,‘bold’以及‘600’;;
(5)color:字體顏色,可以選擇‘random-dark’以及‘random-light’,其實就是顏色色系;
(6)backgroundColor:背景顏色,支持R語言中的常用顏色,如‘gray’,‘blcak’,但是還支持不了更加具體的顏色選擇,如‘gray20’;
(7)minRontatin與maxRontatin:字體旋轉角度範圍的最小值以及最大值,選定後,字體會在該範圍內隨機旋轉;
(8)rotationRation:字體旋轉比例,如設定爲1,則全部詞語都會發生旋轉;
(9)shape:詞雲形狀選擇,默認是‘circle’,即圓形。還可以選擇‘cardioid’(蘋果形或心形),‘star’(星形),‘diamond’(鑽石),‘triangle-forward’(三角形),‘triangle’(三角形),‘pentagon’(五邊形);

文章完整版可通過我的公衆號查看,歡迎掃描二維碼查看

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章