加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

文本挖掘:社交网络、社群划分

发布时间:2021-11-12 12:35:57 所属栏目:大数据 来源:网络整理
导读:副标题#e# 作者:Matt ? 自然语言处理实习生 http://blog.csdn.net/sinat_26917383/article/details/51444536 回复此公众号 “ 社交网络 ”获取word版原文查看。向小编咨询问题,联系 微信:hai299014 一、关系网络数据类型 关系网络需要什么样子的数据呢?

weight代表线权重,但是与随机游走不同,其要自己赋上去,weight=E(g)$label不能少;spins代表产生的社群数,默认值为25。
这个社群分类函数有了自己定义分类数量的效果。


4、中间中心度社群发现


文本挖掘:社交网络、社群划分


  1. member<-edge.betweenness.community(g.undir,weight=E(g)$weight,directed=F)??


有默认的线权重,并且默认是无向线的,directed=T时就代表有向线。


5、传播标签社群发现


文本挖掘:社交网络、社群划分


  1. #社群发现方法五:标签传播社群发现??

  2. member<-label.propagation.community(g.undir,weights=V(g.undir)$weight)??

  3. V(g.undir)$member??

  4. member<-label.propagation.community(g.undir,weights?=?E(g.undir)$weight,initial?=?c(1,-1,1))??

  5. V(g.undir)$member??

  6. member<-label.propagation.community(g.undir,??

  7. ????????????????????????????????????initial?=?c(1,1),fixed=c(T,F,T))??


initial是社群初始化函数,默认为-1(不设置初始值),当然这里你也可以设置;如initial=c(1,2)就代表1,2个数为社群1;3、4不设置初始值;5个为社群2
fixed是用来固定函数的,当然如果没有设定初始值,如3.4.6则T,F都无效;如果设定了初始值,T则代表固定在原设定上。


二、衡量社群的指标


1、模块化指标Q——modularity


相当于是组内误差。


  1. modularity(g.undir,membership=c(1,2))??#社群总差异,membership设置社群号??


membership是每个点的各自分组情况。

文本挖掘:社交网络、社群划分



2、网络聚类系数——transitivity


是表示一个图形中节点聚集程度的系数,一个网络一个值。

    3、网络密度——graph.density


    跟网路聚类系数差不多,也是用来形容网络的结构复杂程度。越大,说明网络越复杂,说明网络越能够放在一块。


    1. graph.density(g.zn)??

    2. graph.density(group1)??

    3. graph.density(group2)??

    4. #从中可以看到不同社群与整体之间的网络密度情况(关联程度)??


    三、画 图

    由于关系网络图很复杂,而且数据量一大,小的图片形式网路图基本就是一坨浆糊。所以这里JPEG一定要足够大,最好的就是SVG格式。SVG格式的好处就是矢量图,你可以自己放大缩小,而且还可以用工具进行修改。但是最不好就是,一般的工具还打开不了,要用一些特有的工具,打开之后也会出现一些问题。

    当然你是可以直接plot的。


    1、直接plot

    1. plot(g.test,layout=layout.fruchterman.reingold,edge.arrow.size=0.1,vertex.color=rainbow(7,alpha=0.3),edge.arrow.mode?=?"-")??


    代码解读:edge.arrow.size=0.1箭头大小;

    vertex.color=rainbow(7,alpha=0.3)颜色,七种;

    edge.arrow.mode = "-"连接方式用-。

    其中还有很多参数类型:


    1. #vertex.size=1表示节点的大小??

    2. #layout表示布局方式(发散性)??

    3. #vertex.label=NA,不显示任何点信息,默认显示idx号??

    4. #vertex.color=V(g)$color?点的颜色设置??

    5. #mark.groups表示设置分组??

    6. #vertex.shape='none'不带边框???

    7. #vertex.label.cex=1.5,?#节点字体大小??

    8. #vertex.label.color='red'??

    9. #edge.arrow.size=0.7?#连线的箭头的大小??

    10. #edge.color?=?grey(0.5)#线的颜色??

    11. #edge.arrow.mode?=?"-"?箭头换成线??

    12. #vertex.label.dist=5??点标签和节点之间的距离一般0.1,便于错开重叠??

    2、简易画图自编译函数

    R语言与网站分析中还专门写了一个画图函数。


    1. plot.membership<-function(graph,membership,main=""){??

    2. ??V(graph)$member<-membership??

    3. ??mem.col<-rainbow(length(unique(membership)),alpha=0.3)??

    4. ??V(graph)$color<-mem.col[membership]??

    5. ??plot(graph,edge.width=E(graph)$weight,vertex.color=V(graph)$color,main=main)??

    6. }??

    函数需要输入三样东西(关系网络,分组情况,标题)。这里借助上面的社群分类都是可以得到的。用点连接来举个例子:


    1. plot.membership(g.undir,clusters(g.undir)$membership,"无向图的社群发现")??


    3、SVG如何画高质量图

    画一个好看的图你需要考虑这么几个问题:

    不同重要性的点是否需要不同的大小?——V(g)$size

    重要的点是否要加入其名字标签?——V(g)$label

    不同社群的点,是否需要不同的颜色?——V(g)$member

    (1)设置点大小

    1. V(gg)$size?=?5??

    2. V(gg)[degree(g)>=3000]$size?=?15??


    其他节点尺寸都是5,而点度数大于3000的节点尺寸是15;

    (2)设置不同社群颜色

    1. mem.col<-rainbow(length(unique(V(g)$member)),alpha?=?0.3)??

    2. V(g)$color<-mem.col[V(g)$member]??

    rainbow是生成颜色的参数,比如"#FF00004D" "#00FFFF4D"
    第二句话是将每个点附上颜色。

    (3)设置重点词标签

    1. V(g)$label=NA??

    2. V(g)[degree(g)>=3000]$label=V(gg)[degree(g)>=3000]$name??


    非重点词不给标签,重点词点度大于3000的给标签名字。

    最后的SVG画图函数就是:


    1. svg(filename=paste("C:/Users/long/Desktop","/1.svg",sep?=?""),width?=?40,height?=?40)??

    2. (编辑:西安站长网)

      【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读