R文本挖掘:社会网络分析
社会网络分析是综合运用图论、数学模型来研究行动者与行动者、行动者与其所处社会网络、以及一个社会网络与另一社会网络之间关系的一种结构分析方法。在这个定义中的“行动者”,或称“节点”,可以是一个个体,也可以是一个群体、一个组织,甚至是一个国家,这些行动者及其间的关系就构成了社会网络(Socia Network)
社会网络分析,英文social network analysis。社会网络分析已经成为重要的研究思想,涉及了多个学科和研究领域,例如:数据挖掘领域、知识管理、数据可视化、统计分析、社会资本、小世界理论、信息传播等。
当然了,这么一种方法也可以用在文本挖掘中,好处多多:
These methods are especially efficient for large-scale datasets in which traditional approaches such as content analysis are prohibitively labor-intensive; however, even with relatively smaller textual data they can be effective in assisting manual analysis by identifying additional patterns which human coders may not recognize.
所以今天我们就来写一写如何用R语言做中文文本的社会网络分析。
数据准备及预处理
数据依然还是新年贺词,大家自己在网上一搜,贴在记事本中就行:
library(igraph)
library(tm)
library(Rwordseg)
library(tmcn)
heci <- readLines('C:/Users/hrd/Desktop/bootcamp/dataset/2021贺词.txt',encoding = 'UTF-8')
数据读入之后就是分词和向量化,建立语料库和去停用词:
ci <- segmentCN(heci)#此步可以自定义词典
docs <- Corpus(VectorSource(ci))
inspect(docs)
docs <- tm_map(docs, removeNumbers)
#自定义停用词
myStopwords <- readLines('C:/Users/hrd/Desktop/bootcamp/dataset/Chinese-StopWords.txt',
encoding = 'UTF-8')
myStopwords<-myStopwords[Encoding(myStopwords)!="unknown"]
docs <- tm_map(docs, removeWords, myStopwords)
toSpace <- content_transformer(function(x, pattern) { return (gsub(pattern, " ", x))})
docs <- tm_map(docs, toSpace, "c")
docs <- tm_map(docs, stripWhitespace)
处理好了之后,就建立文档词矩阵:
tdm <- createTDM(docs, language = "zh")
tdm_removed<-removeSparseTerms(tdm, 0.9)##去掉低于95%的的稀疏条数
dim(tdm_removed)#查看词和文档的数量
社会网络分析
我们不考虑网络中边的粗细,只考虑链接关系,所以将词文档矩阵中的大于1的数字都转化为1:
m <- as.matrix(tdm)
m[m>=1] <- 1
然后我们生成社会网络分析的专用矩阵,这个矩阵叫做term-term adjacency matrix,是词文档矩阵和文档词矩阵的矩阵乘积:
#转化为term-term adjacency matrix
termMatrix <- m%*%t(m)
接下来我们就可以画出社会网络分析的图了:
#建立graph
g <- graph.adjacency(termMatrix,weighted = T,mode = 'undirected')
g <- simplify( g, remove.multiple = T, remove.loops = F,
edge.attr.comb=c(weight="sum", type="ignore") )
V(g)$label <- V(g)$name
V(g)$degree <- degree(g)
plot(g, vertex.label.dist=1.5
运行代码就可以得到图如下:
这个图还有很多可以完善的地方,我还在慢慢探索中,以后再继续更新。
小结
今天给大家写了中文文本的社会网络分析,现学现卖,还请大神点拨,感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么编程基础没有从零学Python和R的,加油。数据分析问题咨询,代处理请私信。