首先介紹一下數據源,根據爬蟲獲得的微博數據,當然包括很多字段(如人物暱稱,發表時間,發表內容,是否原創,是否轉發等等),在這裏簡要介紹一下處理思路,我們只需要這裏的人物暱稱,和發表內容,發表內容用於分詞分析自然不用多說,人物暱稱是用來歸類的,根據我自己的需要,我有一個人物歸類空間,需要將在同一類中的人物的博文歸在一起來分析,上代碼:
#分類空間
firstclass<-c(name1,name2)
secondclass<-c(name3,name4,name5)
thirdclass<-c(name6,name7)
fourthclass<-c(name8,name9,name10)
#博文歸類
first<-second<-third<-fourth<-fifth<-sixth<-NA
#0:20是因爲我的原始數據有20個CSV文件
for(i in c(0:20)){
file<-paste(i,"csv",sep=".")
#去掉CSV中的標籤
test<-read.csv(file,header=FALSE,sep=",")
#截取原始文件中的暱稱和博文內容兩個字段(V2,V5是我自己文件字段的對應位置)
firstdata<-subset(test,V2 %in% firstclass,select=c(V2,V5))
#將20個文件中暱稱在第一類中的所有博文合併
first<-rbind(first,firstdata)
#刪除NA值
first<-na.omit(first)
seconddata<-subset(test,V2 %in% secondclass,select=c(V2,V5))
second<-rbind(second,seconddata)
second<-na.omit(second)
thirddata<-subset(test,V2 %in% thirdclass,select=c(V2,V5))
third<-rbind(third,thirddata)
third<-na.omit(third)
forthdata<-subset(test,V2 %in% forthclass,select=c(V2,V5))
forth<-rbind(forth,fourthdata)
forth<-na.omit(fourth)
}
#這裏得到的first,second...forth,就是包含暱稱和內容的數據框
#將這些重新寫入文件,就是預處理之後我們所要處理的原始數據
write.table(first,file="first.csv",sep=",")
write.table(second,file="second.csv",sep=",")
write.table(third,file="third.csv",sep=",")
write.table(forth,file="forth.csv",sep=",")
#下面是分詞
#首先引入分詞包,和詞雲包(說明一下,如果是在windows下引入rJava可能會出錯,需要設置環境變量)
library(rJava)
library(Rwordseg)
library(RColorBrewer)
library(wordcloud)
#從CSV讀取的字符串數據,會被轉成因子很煩(我在read.csv中鍵入stringAsFactors=FALSE沒有這個參數)
firstwords<-as.character(first$V5)
secondwords<-as.character(second$V5)
thirdwords<-as.character(third$V5)
forthwords<-as.character(forth$V5)
#對微博內容做處理,剔除鏈接什麼的
for(i in c(firstwords,secondwords,thirdwords,forthwords)){
i<-gsub(pattern="http:\\[a-zA-Z\\/\\.0-9]","",i)
}
#這裏還應該根據自己的需要擴展詞庫中的詞
insertWords(c("微博內容","分詞統計"),save=TRUE)
deleteWords(c("微博內容","分詞統計"),save=TRUE)
#分詞函數
func1<-function(data){
words<-unlist(lapply(X=data,FUN=segmentCN))
#過濾掉只有一個字的分詞
words<-subset(words,nchar(words)>1)
#統計詞頻
freq<-table(unlist(words))
freq<-rev(sort(freq))#這裏有兩個屬性freq.word freq.Freq
freq<-data.frame(freq=freq)
#按詞頻過濾只出現過1次的詞
freq2=subset(freq,freq$freq.Freq>=2)
return(freq2)
}
#執行分詞,並將詞和詞頻保存文件
firstfreq<-func1(firstwords)
write.table(firstfreq,file="firstfreq.csv",sep=",")
secondfreq<-func1(secondwords)
write.table(secondfreq,file="secondfreq.csv",sep=",")
thirdfreq<-func1(thirdwords)
write.table(thirdfreq,file="thirdfreq.csv",sep=",")
forthfreq<-func1(forthwords)
#最後一步,畫詞雲圖
mycolors<-brewer.pal(8,"Dark2")
windowsFonts(myFont=windowsFont("微軟雅黑"))
png("4.png")
wordcloud(fourthfreq$freq.Var1,fourthfreq$freq.Freq,min.freq=10,max.freq=Inf,random.order=FALSE,
random.color=FALSE,colors=mycolors,family="myFont")
dev.off()