1. 程式人生 > >基於R語言利用QQ群進行資料探勘案例整理

基於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’(五邊形);

文章完整版可通過我的公眾號檢視,歡迎掃描二維碼檢視

相關推薦

基於R語言利用QQ進行資料案例整理

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

利用R語言的dplyr包進行資料轉換

library(tidyverse) library(nycflights13) #利用該包中的flights資料 flights #### R語言中的變數型別 # int——整數型變數 # dbl——雙精度浮點數型變數,或稱實數 # chr——字串 # dttm——日期時間型變數 # l

如何利用ERP系統的資料功能對企業進行優化

目前為止,ERP系統對企業未來的戰略策劃僅限於各個模組中,譬如人員管理、財務收支、生產情況等等;對於利用半結構化、結構化以及需要整合資料制定戰略決策的企業來講,絕大多數使用的EPR處理效率仍然非常低。最大限度地開發利用ERP系統提供出的豐富資料資源,充分發揮出資料資源對企業戰略策劃的作

利用python中的pandas,sklearn進行資料 basic_of_datamining

basic_of_datamining  利用python中的pandas,sklearn進行資料探勘 github 原始碼地址: https://github.com/zhangxinxi

R中使用支援向量機(SVM)進行資料(上)

在R中,可以使用e1071軟體包所提供的各種函式來完成基於支援向量機的資料分析與挖掘任務。請在使用相關函式之前,安裝並正確引用e1071包。該包中最重要的一個函式就是用來建立支援向量機模型的svm()函

用 WEKA 進行資料 (1)簡介和迴歸

簡介 什麼是 資料探勘?您會不時地問自己這個問題,因為這個主題越來越得到技術界的關注。您可能聽說過像 Google 和 Yahoo! 這樣的公司都在生成有關其所有使用者的數十億的資料點,您不禁疑惑,“它們要所有這些資訊幹什麼?”您可能還會驚奇地發現 Walmart 是最為先進的進行資料探勘並將結果

關聯規則進行資料 Apriori 演算法

1. 關聯分析(Association analysis) 理解: 從大規模的資料中, 發現事物(物品)間的隱含關係的過程就是關聯分析(association analysis)或者關聯規則學習(association rule learning). 是

使用Weka進行資料(Weka教程九)模型序列化/持久化儲存和載入

有很多時候,你在構建了一個模型並完成調優後,你很可能會想把這個模型存入到磁碟中,免得下次再重新訓練。尤其是神經網路、SVM等模型訓練時間非常長,重新訓練非常浪費時間。那麼怎麼持久化模型呢? 其實既然模型也是一個JAVA物件,那我就按照JAVA的序列化和反序列化

使用Orange進行資料之分類(4)------SVM

SVM基本概念 簡單的說SVM是一種對線性合非線性資料進行分類的方法。 以二維資料為例,中間的直線將資料分為兩部分,分別用實心的圓點和空心的圓點表示。 對於上邊的資料可能有很多直線將資料區分開,如下 SVM通過搜尋最大邊緣超平面來選擇最合適的超平面,因為具有較大邊緣的超

對泰坦尼克號案例進行資料

1.基本概念 對歷史資料的計算,對未來還沒有發生的事情做預測。 訓練集:訓練模型 測試集:測試模型好壞 驗證集:選擇引數(如何通過驗證集來選擇引數?) 將歷史資料劃分為以上三個部分。 建立模型時如何知道模型的好壞:評估標準 評估標準:優化代價函式J(theta)誤差平方和

使用Orange進行資料之聚類分析(2)------K-means

一、基本k均值演算法 1 根據使用者指定的引數K,首先選擇K個初始化質心; 2 然後每個點指派到最近的質心,指派到一個質心的點形成一個簇。 3 更新每個簇的質心 4重複步驟2、3,直到簇不在發生變化。 虛擬碼描述如下: 選擇K個點作為初始質心 repeat 將每個質

使用Orange進行資料之分類(2)------KNN分類

knn基本概念 knn把每個樣例看做是空間上的一個點,給定一個測試樣例, 使用適當的鄰近性度量演算法,計算出該點與訓練集中其他點的鄰近度。選擇K個最相近的點。 在選擇出的K個樣例中,比例最好的類就是測試樣例的類。 從以上描述中可以看出,如果k選擇的太小,該演算法容易受到噪聲

使用Weka進行資料(Weka教程六)Weka取樣Filter/Resample/SMOTE

資料預處理中,有一個原理很簡單但是非常重要的部分:取樣。良好的取樣可以讓資料集變得平衡,會大大的提高預測和分類的效果。 取樣是很複雜的一個領域,背後涉及到資料的分佈/資料的性質等很多內容。常見的取樣有: Simple Random Sampling(簡單隨機

使用Kettle進行資料

客服部CRM系統的部分資料要同步BDP雲端,為了伺服器安全,賬號密碼不被任何第三方獲取,部署中間伺服器、中間庫,抽取CRM的資料,然後再同步到bdp雲端庫中。 ETL(Extract-Transform-Load的縮寫,即資料抽取、轉換、裝載的過程)。 Kettle作為

用WEKA進行資料,第2部分:分類和群集

簡介 在 用 WEKA 進行資料探勘,第 1 部分:簡介和迴歸,我介紹了資料探勘的概念以及免費的開源軟體 Waikato Environment for Knowledge Analysis(WEKA),利用它可以挖掘資料來獲得趨勢和模式。我還談到了第一種資料探勘的方法 —

資料案例一:竊漏電使用者的識別

最近在準備數學建模,其中的很多問題涉及了資料的處理挖掘,同時,機器學習和資料探勘也是我以後想從事的方向,因此我花時間閱讀了《matlab資料探勘分析與實戰》,下面是書中的第一個實戰主題。 資料 1、電路負荷資訊 包括電路上的各項電流、電

資料案例實踐】Loan Status

一、LoanStatus案例介紹 資料集變數: 預測變數: Loan_Status貸款是否成功 評價指標: Cross_validation Score (ROC曲線–AUC得分) 資料集大小 訓練集樣本數:614 測試集樣本數:367

【原創】資料案例——ReliefF和K-means演算法的醫學應用

  資料探勘方法的提出,讓人們有能力最終認識資料的真正價值,即蘊藏在資料中的資訊和知識。資料探勘 (DataMiriing),指的是從大型資料庫或資料倉庫中提取人們感興趣的知識,這些知識是隱含的、事先未知的潛在有用資訊,資料探勘是目前國際上,資料庫和資訊決策領域的最前沿研究方向之一。因此分享一下很久以前做的一

Twitter基於R語言的時序資料突變檢測(BreakoutDetection)

  Twitter開源的時序資料突變檢測(BreakoutDetection),基於無參的E-Divisive with Medians (EDM)演算法,比傳統的E-Divisive演算法快3.5倍以上,並且具有魯棒統計性,就是你加入一些離群點或異常點,並不影響該演算法的檢測效果,不過最關鍵的還是

R資料技術-基於R語言資料和統計分析技術

培訓要點 網際網路點選資料、感測資料、日誌檔案、具有豐富地理空間資訊的移動資料和涉及網路的各類評論,成為了海量資訊的多種形式。當資料以成百上千TB不斷增長的時候,我們在內部交易系統的歷史資訊之外,需要一種基於大資料分析的決策模型和技術支援。 目前對大資料的分析工具,有Had