99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀基于R語言利用QQ群進行數(shù)據(jù)挖掘案例整理
基于R語言利用QQ群進行數(shù)據(jù)挖掘案例整理
2017-07-10
收藏

基于R語言利用QQ群進行數(shù)據(jù)挖掘案例整理

利用QQ群進行數(shù)據(jù)挖掘案例,數(shù)據(jù)源來源于2016年12-2017年大致一個月的QQ群基本數(shù)據(jù),通過對聊天內容的分析,了解QQ聊天群資料了解時間,人群以及關鍵詞,并構建相應圖表、云圖等,下圖為本人所在提取的QQ群:

以下是R代碼部分:

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

#數(shù)據(jù)清洗

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)#數(shù)據(jù)結構化

#活躍度計算

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

#由于測試群記錄數(shù)據(jù)量,后期效果不是很明顯。這也是大數(shù)據(jù)火的原因吧?

>dim(d1)[1] 29>length(data[,1])[1] 164#轉換數(shù)據(jù)類型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)

# 活躍度統(tǒng)計

#去掉停用詞

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)  初步查看分詞不是很理想,繼續(xù)調整

> d1=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=table( t  )

>t1=t1[!names(t1)%in%c("男神","女神","你懂的")]#去沒有意義的詞

> library(Rwordseg)

t1=t1[nchar(as.character(names(t1)))==2]

plot(t1,xlab="詞組",ylab="詞頻")   #效果實例而已,好的數(shù)據(jù)會有好的效果。

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

#分詞后的詞語頻率匯總

> wdfreq <- as.data.frame(table(t1))    

> head(wdfreq)

t1Freq

1 1   14

2 2    1

3 7    2

#頻數(shù)排序 **

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

#頻數(shù)排序 **

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="頻數(shù)",main="參與聊天人數(shù)/日期")



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/.細分數(shù)據(jù).csv",sep=",",row.names = F)


a=table(data1[,3])

plot(a,xlab="日期",ylab="頻數(shù)",col=4,main="參與聊天人數(shù)/二十小時分布")

WORDCLOUD2常用參數(shù):

(1)data:詞云生成數(shù)據(jù),包含具體詞語以及頻率;

(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,則全部詞語都會發(fā)生旋轉;

(9)shape:詞云形狀選擇,默認是‘circle’,即圓形。還可以選擇‘cardioid’(蘋果形或心形),‘star’(星形),‘diamond’(鉆石),‘triangle-forward’(三角形),‘triangle’(三角形),‘pentagon’(五邊形);


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師考試動態(tài)
數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調,回調的第一個參數(shù)驗證碼對象,之后可以使用它調用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }