本文主要总结近期学习的Social Network Analysis(SNA)中的各种Centrality度量,我暂且翻译为中心度。本文主要是实战,理论方面几乎没有,因为对于庞大的SNA,我可能连门都没有入,但是我觉得这不影响我理解原理后使用他们。

本文为原创,如有不小心侵权的问题出现,请联系本人删除。本文不允许任何形式的转载!!!

一、Centrality的定义

在SNA领域的centrality是用于衡量图中节点的重要度,不同的centrlity算法会对同一节点给出差异很大的centrality。如Wikipedia中的这幅图。

图片链接:https://en.wikipedia.org/wiki/Centrality

 二、Centrality的相关资源

1. wiki: https://en.wikipedia.org/wiki/Centrality

2. ttang pageRank networkx: http://www.cnblogs.com/fstang/archive/2013/06/01/3113352.html

3. 讲network的一个网站:https://www.sci.unich.it/~francesc/teaching/network/

4. 各种语言的centrality代码资源集合: http://www.centiserver.org/?q1=software

三、Networkx中的EigenCentrality, PageRank和KatzCentrality的对比

本文主要考察的是EigenCentrality, PageRank和KatzCentrality之间的区别和联系。PageRank广为人知,是Google对网页排序的基础方法之一。其实Google的PageRank和KatzCentrality都是EigenCentrality的变形。

EigenCentrality的基本思想跟google是一样的,都是认为与得分(centrality)高的点相连的点更加重要。EigenCentrality就是用图的邻接矩阵来计算EigenCentrality(engenvector centrality,  特征向量中心度)。具体的公式和推到可以参考上面给出的维基百科链接,代码实现可以参考networkx,还有https://www.sci.unich.it/~francesc/teaching/network/,但是我打开页面,里面的公式显示有问题,这个网站的解释非常的简洁明了,适合入门,还有R代码和相应的图演示。

参考ttang的博客,我做了EigenCentrality, PageRank和KatzCentrality的对比,在此表示由衷的感谢。ttang的pageRank实现代码参考链接:

http://www.cnblogs.com/fstang/archive/2013/06/01/3113352.html

下面是本文的代码实现:

 import matplotlib.pyplot as plt
import networkx as nx G=nx.binomial_graph(10, 0.3, directed=True) #the graph
G.add_node(10); # add a sole node
layout = nx.spring_layout(G) plt.figure("source graph")
nx.draw(G, pos=layout, node_color='y') plt.figure("eigenCentrality without personalization")
pr=nx.eigenvector_centrality(G)
print("eigenCentrality without personalization" ,pr)
nx.draw(G, pos=layout, node_size=[x * 6000 for x in pr.values()],node_color='m',with_labels=True) plt.figure("eigenCentrality with personalization")
pr=nx.eigenvector_centrality(G, nstart={0:1, 1:1, 2:10, 3:1, 4:1, 5:1, 6:1, 7:1, 8:1, 9:1, 10:1})
print("eigenCentrality with personalization" ,pr)
nx.draw(G, pos=layout, node_size=[x * 6000 for x in pr.values()],node_color='m',with_labels=True) plt.figure("pageRank without personalization")
pr=nx.pagerank(G,alpha=0.85)
print("pageRank without personallization", pr)
nx.draw(G, pos=layout, node_size=[x * 6000 for x in pr.values()],node_color='m',with_labels=True) plt.figure("pageRank with personalization ")
pr=nx.pagerank(G,alpha=0.85, personalization={0:1, 1:1, 2:10, 3:1, 4:1, 5:1, 6:1, 7:1, 8:1, 9:1, 10:1})
print("pageRank with personalization" , pr)
nx.draw(G, pos=layout, node_size=[x * 6000 for x in pr.values()],node_color='m',with_labels=True) plt.figure("katzcentrality without personalization")
pr=nx.katz_centrality(G, alpha=0.3);
print("katzcentrality without personallization ", pr)
nx.draw(G, pos=layout, node_size=[x * 6000 for x in pr.values()],node_color='m',with_labels=True) plt.figure("katzcentrality with personalization")
pr=nx.katz_centrality(G,alpha=0.3, nstart={0:1, 1:1, 2:10, 3:1, 4:1, 5:1, 6:1, 7:1, 8:1, 9:1, 10:1})
print("katzcentrality with personalization" , pr)
nx.draw(G, pos=layout, node_size=[x * 6000 for x in pr.values()],node_color='m',with_labels=True)
plt.show()

这是画出来的图,自己跑一下看得清楚写,这里贴出来的图只是示意。

最左边一列是pageRank有无personalization,也就是节点预先设定的重要度的对比情况;

中间一列是eigenCentrality有无personalization的对比;

右边一列是katzCentrality有无personalization的对比。

上次我看这个图的时候,觉得节点预设重要度对pageRank算法的影响很小,对katzCentrality的影响比较大,不过今天看,感觉好像都差不多。

由于节点10没有边与其它节点相连,有没有pageRank的转移概率,有没有katzCentrality的beta,因此节点10在eigenCentrality里centrality为0.

Social Network Analysis的Centrality总结,以及networkx实现EigenCentrality,PageRank和KatzCentrality的对比的更多相关文章

  1. Call for Papers IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM)

    IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 In ...

  2. IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 Industry Track Call for Papers

    IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 In ...

  3. 社会网络分析——Social Network Analysis

    什么是社会网络分析,英文social network analysis.现在这个分析越来越时髦,也越来越显现其在社会科学的研究价值.我在2000年的时候受祝建华老师的邀请到香港城市大学作研究,接触到 ...

  4. Applied Social Network Analysis in Python 相关笔记3

    如果是option2的话,答案选A. 这里节点s,从左边的选择,节点t从右边选择. 这里计算还是用以前的值,不用更新过的值.

  5. Applied Social Network Analysis in Python 相关笔记

  6. Complex social network Partition for Balanced Subnetworks---Hao Lan Zhang,Jiming Liu,Chunyu Feng,Chaoyi Pang,Tongliang Li,Jing He阅读

    摘要:Abstract—Complex social network analysis methods have been applied extensively in various domains ...

  7. Social Network 社交网络分析

    Social Network 社交网络分析 一:什么是SNA-社交网络分析 社交网络分析的威力何在?我想几个案例来说明. 案例1:对一个毫无了解的组织(这个组织可以是一个公司,亦或是一个组织),如果能 ...

  8. [Network Analysis] 复杂网络分析总结

    在我们的现实生活中,许多复杂系统都可以建模成一种复杂网络进行分析,比如常见的电力网络.航空网络.交通网络.计算机网络以及社交网络等等.复杂网络不仅是一种数据的表现形式,它同样也是一种科学研究的手段.复 ...

  9. [CareerCup] 10.2 Data Structures for Large Social Network 大型社交网站的数据结构

    10.2 How would you design the data structures for a very large social network like Facebook or Linke ...

随机推荐

  1. Thinkphp中的内置标签用法

    Thinkphp中的内置标签有:Volist,Foreach,For,Switch,比较标签,范围判断标签,IF,Present,Empty,Defined,Assign,Define,标签嵌套,im ...

  2. Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...

  3. PHP基础入门(四)---PHP数组实用基础知识

    PHP数组 数组是特殊的变量,它可以同时保存一个以上的值. ***关键词:数组基础.数组遍历.超全局数组.数组功能.数组函数. 下面来和大家分享一下有关PHP的数组基础知识,希望对你PHP的学习有所帮 ...

  4. unity3d项目导入android studio

    第一步 拿到unity3d项目,里面包含以下文件 第二步 在android studio下新建一个project 第三步 将unity3d项目目录下的libs下的jar文件复制黏贴到android s ...

  5. selenium及webdriver的原理

    主要内容转自:http://blog.csdn.net/ant_ren/article/details/7968582和http://blog.csdn.net/ant_ren/article/det ...

  6. 4.Smarty模板之间调用

    {include file="header.tpl" name="cai"}

  7. CSS3学习系列之动画

    Transitions功能使用方法 在css3中,transitions功能通过将元素的某个属性从一个属性值在指定的时间内平滑过渡到另一个属性值来实现动画功能,可通过transitions属性来使用t ...

  8. 极简单的方式序列化sqlalchemy结果集为JSON

    继承 json.JSONEncoder 实现一个针对sqlalchemy返回类型的处理方式. sqlalchemy的返回类型有大都有两种,一种是Model对象,一种是Query集合(只查询部分字段). ...

  9. HTTP通过请求和响应的交换达成通信

    1. 通过请求和响应的交换达成通信 首先我们来看一个HTTP请求报文: GET/index.htm HTTP/1.1 HOST : hacker.jp HTTP协议起始行开头的GET表示请求访问服务器 ...

  10. 对X86汇编的理解与入门

    本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令.逻辑计算指令.算数运算指令),以及函数的调用规则.个人认为:在理 ...