美文网首页
R文本挖掘:社会网络分析

R文本挖掘:社会网络分析

作者: Codewar | 来源:发表于2021-01-18 09:49 被阅读0次

    社会网络分析是综合运用图论、数学模型来研究行动者与行动者、行动者与其所处社会网络、以及一个社会网络与另一社会网络之间关系的一种结构分析方法。在这个定义中的“行动者”,或称“节点”,可以是一个个体,也可以是一个群体、一个组织,甚至是一个国家,这些行动者及其间的关系就构成了社会网络(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
    

    运行代码就可以得到图如下:

    image

    这个图还有很多可以完善的地方,我还在慢慢探索中,以后再继续更新。

    小结

    今天给大家写了中文文本的社会网络分析,现学现卖,还请大神点拨,感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么编程基础没有从零学Python和R的,加油。数据分析问题咨询,代处理请私信。

    (站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)

    往期内容:

    R文本挖掘:文本聚类分析

    R文本挖掘:中文文本聚类

    R文本挖掘:中文词云生成

    R文本挖掘:中文词云生成,以2021新年贺词为例

    R文本挖掘:手把手教你做词云图,小白教程

    R文本挖掘:词云图怎么做,worldcloud2初识

    相关文章

      网友评论

          本文标题:R文本挖掘:社会网络分析

          本文链接:https://www.haomeiwen.com/subject/xykzaktx.html