为了账号安全,请及时绑定邮箱和手机立即绑定

基于R语言利用QQ群进行数据挖掘案例整理

标签:
Java Python

       利用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’(五边形);



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消