本文主要总结近期学习的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. linux 下用renameTo方法修改java web项目中文件夹名称问题

    经测试,在Linux环境中安装tomcat,然后启动其中的项目,在项目中使用java.io.File.renameTo(File dest)方法可行. 之前在本地运行代码可以修改,然后传到Linux服 ...

  2. java源码学习(三)Enum

    Enum Enum类是java.lang包中一个类,他是Java语言中所有枚举类型的公共基类. 一.定义 public abstract class Enum<E extends Enum< ...

  3. js函数一些小的知识点

    var scope="123"; function aa(){ console.log(scope);//undefind var scope="234"; c ...

  4. 【LeetCode】110. Balanced Binary Tree

    题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...

  5. 【LeetCode】219. Contains Duplicate II

    题目: Given an array of integers and an integer k, find out whether there are two distinct indices i a ...

  6. JS,HTML,CSS

    HTML定义了网页的内容 CSS定义了网页的布局 JavaScript定义了网页的行为

  7. .net 实现aop的三种方法。

    动态代理 透明代理 编译时注入

  8. input的文件上传图片

    <img id="headIMG" src="img/header_default.jpg"/> <input type="file ...

  9. [随笔]_ELVE_git命令复习

    mkdir: XX (创建一个空目录 XX指目录名) pwd: 显示当前目录的路径. git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件. git add XX 把xx文件添 ...

  10. 关于shiro权限管理的一些总结

    项目中最近开发用到了shiro,shiro作为一款轻量级的权限管理框架,在项目中主要想管理用户的登陆之后的页面访问,按钮,数据的显示.主要借用了shiro自己的页面权限标签. 当用户登录时->先 ...