近来学习聚类,发现聚类中有一个非常有趣的方向—社交网络分析,这篇只是一篇概况,并没有太多的公式推导和代码,基本是用人话解释社交网络分析中的常用的几种算法。详细到每个算法的以后有空再把详细的公式和代码补上。
目录:
1.应用场景
2.分析指标
3.社区发现算法
3.1 GN算法
3.2 Louvain算法
3.3 LPA与SLPA

  1. 应用场景

社交网络分析中最常用的就是社交圈子的识别,所谓物以类聚,人以群分,一旦能对社交圈子进行分类,能做的事情就会很多。

FaceBook和微信是关于人与人之间的强关系网络,划分社交圈有助于朋友间相互推荐。
领英是关于职业的社交的社交网络,有助于求职和商务合作交流。
微博,Twitter,豆瓣,微信公众号是关于关注与被关注的的弱关系网络,有助于消息和知识的传播。

分好社交网络之后可以对人进行精准化营销,推荐个性化的商品和服务,比如京东;
疾病传播也是由一个中心点向外扩散,切断网络中的关键节点就可以有效阻止传染病的传播;
识别互联网金融行业中的欺诈团伙,进行反欺诈预测;

这只是其中的三个方面,还有很多应用在此不作细讲。

2.分析指标

图,简单来说就是人物(事物)关系的形象化表示。节点(node)代表一个人物,边(edge)代表人物关系。有向图用箭头表示人物间的关系,无向图用线段表示人物间的关系。
顺便提供两份图数据集,可以自己拿来做实验:
斯坦福大学实验数据

网络分析数据集

这里重点讲述社交网络算法的分析指标。

度(Degree)
连接点活跃性的度量;与点相连的边的数目。在有向图中,以顶点A为起点记为出度(out degree)OD(A),以顶点A为终点入度(In degree)ID(A),则顶点A的度为D(A) = OD(A) + ID(A)。
Igraph是图计算和社交网络分析的常用工具,提供了python的接口,安装方式参考官网:Igraph官网点这

算了,还是拿权游的数据玩一下比较爽。
计算度:

import csv
edges = []
firstline = True
with open('/Users/huanghuaixian/desktop/stormofswords.csv','r') as f:for row in csv.reader(f.read().splitlines()):if firstline == True:firstline = Falsecontinueu,v,weight = [i for i in row]edges.append((u,v,int(weight)))
from igraph import Graph as IGraph
g = IGraph.TupleList(edges ,directed = True ,vertex_name_attr = 'name' ,edge_attrs = None ,weights = True)
print(g)
for p in g.vs:print(p['name'],p.degree())

分析一下网络结构:

#角色数
g.vcount()
#143个角色
#网络直径,网络中最长最短路径
print(g.diameter())
#输出7

最短路径

print(g.shortest_paths("Sansa","Margaery"))
print([ names[x] for x in g.get_all_shortest_paths("Sansa","Margaery")[0]])
for p in g.get_all_shortest_paths('Sansa'):print([names[x]for x in p])
#输出1和所有以Sansa开始的最短路径

紧密中心性(closness centrality)
节点V到达其他节点的难易程度,也就是到其他所有节点距离的平均值的倒数。

代码实现:

ccvs = []
for p in zip(g.vs, g.closeness()):ccvs.append({"name": p[0]["name"], "cc": p[1]})
sorted(ccvs, key=lambda k: k['cc'], reverse=True)[:10]

[{‘cc’: 0.5120772946859904, ‘name’: ‘Tyrion’},
{‘cc’: 0.5096153846153846, ‘name’: ‘Sansa’},
{‘cc’: 0.5, ‘name’: ‘Robert’},
{‘cc’: 0.48847926267281105, ‘name’: ‘Robb’},
{‘cc’: 0.48623853211009177, ‘name’: ‘Arya’},
{‘cc’: 0.4796380090497738, ‘name’: ‘Jaime’},
{‘cc’: 0.4796380090497738, ‘name’: ‘Jon’},
{‘cc’: 0.4796380090497738, ‘name’: ‘Stannis’},
{‘cc’: 0.4690265486725664, ‘name’: ‘Tywin’},
{‘cc’: 0.4608695652173913, ‘name’: ‘Eddard’}]

介数中心性(betweenness centrality)
核心思想是两个非邻接成员间的相互作用依赖于网络中的其他成员,特别是两成员间路径上的成员,它们对两非邻接成员间起着某种控制或依赖关系。如果一个成员A位于其他成员的多条最短路径上,那么成员A的作用就比较大,也具有较大的介数中心性。
本质:网络中包含成员B的所有最短路径条数占所有最短路径条数的百分比。
计算公式如下:

计算步骤:
1.计算每对节点(i,j)的最短路径(需要得到具体的路径)
2. 对各节点判断v是否在最短路径下
3. 累加经过v的最短路径条数

#偷懒一下
btvs = []
for p in zip(g.vs, g.betweenness()):btvs.append({"name": p[0]["name"], "bt": p[1]})
sorted(btvs, key=lambda k: k['bt'], reverse=True)[:10]

结果:

[{‘bt’: 332.9746031746032, ‘name’: ‘Tyrion’},
{‘bt’: 244.63571428571433, ‘name’: ‘Samwell’},
{‘bt’: 226.2047619047619, ‘name’: ‘Stannis’},
{‘bt’: 208.62301587301587, ‘name’: ‘Robert’},
{‘bt’: 138.66666666666666, ‘name’: ‘Mance’},
{‘bt’: 119.99563492063493, ‘name’: ‘Jaime’},
{‘bt’: 114.33333333333334, ‘name’: ‘Sandor’},
{‘bt’: 111.26666666666665, ‘name’: ‘Jon’},
{‘bt’: 90.65, ‘name’: ‘Janos’},
{‘bt’: 64.59761904761905, ‘name’: ‘Aemon’}]

3 . 社区发现算法

社区相当抱团,类似群的概念,同一个社区内的连接紧密,而社区间的连接非常稀疏。社区发现可以理解为在图中发现n个社区,他们连接非常紧密。

3.1 GN 算法

边介数(betweenness):网络中经过该边的最短路径占所有最短路径的比例。
GN算法计算步骤:
1. 计算网络中所有边的介数
2. 找到介数最高的边,并将它从网络中移除
3. 重复以上步骤,直到每个节点就是一个社区为止。

3.2 Louvain 算法
Louvain算法是基于模块度的算法,其优化目标就是最大化整个社区网络结构的模块度。

模块度
它的物理含义是社区内节点的连边数与随机情况下节点的连边数之差,它可以衡量一个社区紧密程度的度量。因此模块度就可以作为优化函数优化社区的分类。
计算方法如下:

其中AijA_{ij}是节点i与节点j之间的权重,网络不是带权图时,所有边的权重看作是1;kik_i=∑jAij\sum_{j} A_{ij}表示所有与节点i相连的权重之和;cic_i表示节点i所属的社区;
m=12∑ijAij\frac{1}{2}\sum_{ij}A_{ij}表示所有边的权重之和,取值范围:[-1/2,1)。

算法思想
1. 不断遍历网络中的节点,尝试把单个节点加入能使模块度提升最大的社区,直到所有节点不再改变
2. 将第一阶段形成的一个个小的社区并为一个节点,重新构造网络。这时边的权重为两个节点内所有原始节点的边权重之和。
3. 重复以上两步

更多请参考:点这

3.3 LPA与SLPA

LPA算法思想:
1. 初始化每个节点,并赋予唯一标签
2. 根据邻居节点最常见的标签更新每个节点的标签
3. 最终收敛后标签一致的节点属于同一社区

SLPA算法思想:
SLPA是LPA的扩展。
1. 给每个节点设置一个list存储历史标签
2. 每个speaker节点带概率选择自己标签列表中标签传播给listener节点。(两个节点互为邻居节点)
3. 节点将最热门的标签更新到标签列表中
4. 使用阀值去除低频标签,产出标签一致的节点为社区。

参考:
代码部分取自该博客
七月在线算法课程课件
概念解释的通俗易懂

社交网络分析算法(SNA)相关推荐

  1. 社交网络分析与反欺诈

    一.总体概述 目前针对图网络结构,比较热门的一个部分就是知识图谱,知识图谱是基于二元关系知识库,构成网络结构,基本组成单位是"实体-关系-实体"的三元组,实体之间通过关系相互联结. ...

  2. 【2017年第2期】社交网络分析在公共安全领域的应用

    邵蓥侠, 冯是聪 北京明略软件系统有限公司,北京 102218 摘要:社交网络分析技术是一种通用有效的研究社会人员之间复杂关系模式的方法.以公安领域为背景,首先介绍了社交网络分析理论,然后详细阐述该技 ...

  3. Social Network 社交网络分析

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

  4. 简单的社交网络分析(基于R)

    原文链接:http://cos.name/2011/04/exploring-renren-social-network/#comment-2281 最近四五年间,互联网行业似乎总是绕不开社交网络这个 ...

  5. 关于R语言和社交网络分析的几篇文章

    [转载]初学社交网络分析-<庶民的微胜利:R与社交网络分析> 关键词:igraph 图表输出 图形优化 初次尝试igraph包 igraph包入门 R语言画社交关系图 根据用户分享的歌曲, ...

  6. 社交网络分析--python-igraph

    #coding:utf-8 import scrapy import xlwt, lxml import re, json import matplotlib.pyplot as plt import ...

  7. 社交网络分析:网络中心性

    原文地址:社交网络分析:网络中心性作者:酸嘢 本文为Social Network Analysis学习笔记,课程地址为https://www.coursera.org/course/sna. 对于中心 ...

  8. python用社交网络分析_Python社交媒体情感分析入门

    python用社交网络分析 自然语言处理(NLP)是一种机器学习,可解决口语/书面语言与这些语言的计算机辅助分析之间的相关性. 从写作帮助和建议到实时语音翻译和口译,我们在日常生活中经历了NLP的众多 ...

  9. 图算法(二十五):子图匹配(Subgraph Matching)【基本的图查询操作,意在发掘图重要的子结构】【适用场景:社交网络分析、群体发现、异常检测】【在一个给定的大图里找到与给定小图同构的子图】

    一.概述 子图匹配(subgraph matching)算法的目的是在一个给定的大图里面找到与一个给定小图同构的子图,这是一种基本的图查询操作,意在发掘图重要的子结构. 适用场景:子图匹配(subgr ...

  10. 基于GraphX实现社交网络分析

    一.社交网络分析的主要应用 在分析复杂的社会.技术以及信息系统时,我们常把这些系统描述成网络的形式.在这样的关系网络中,节点代表一个成员,而边就代表成员之间的关系.在现实生活中,一个人可能从属于不同的 ...

最新文章

  1. ORB_SLAM2代码阅读(5)——Bundle Adjustment
  2. python 串口_如何使用Python开发串口通讯上位机(一)
  3. 唯一的超级语言,前进的步伐不可阻挡
  4. 5.2.8.字符设备驱动代码实践1
  5. ESP8266之ESP8266WebServer库学习
  6. 【Unity3D】UGUI之Dropdown
  7. centos安装部署webssh
  8. 解决win10安装portal v13/v15要求反复重启问题
  9. 为什么c语言输出到文件慢,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
  10. Eslint的严格模式
  11. 使用navicat进行mysql数据库拷贝
  12. 如何让图片变成全景图,vr全景图怎么拍摄和制作
  13. nexus 仓库类型_Nexus仓库构建
  14. 毕业一年感想~微思顾轻展望
  15. TypeError: Direct assignment to the reverse side of a related set is prohibited. Use parent_id.set()
  16. [Qt C++] 连连看
  17. Chrome Webdriver的下载安装
  18. FOC开环驱动电机(开源小项目==FOC控制BLDC电机)
  19. Win10 Python 3.7全流程安装教程及详细解释
  20. webpack 生产环境打包后 浏览器自动刷新

热门文章

  1. java超市进销存系统_基于SSM的超市进销存管理系统、基于JavaWeb的超市进销存管理系统...
  2. h5页面如何预览excel文件_在网页中预览word和excel
  3. Silvaco TCAD 2014 Win10下安装说明!
  4. SMC在线气动制图软件PneuDraw
  5. 基于ERDAS软件的高分三号(GF-3)SAR影像的预处理
  6. 倒计时小插件,懒人专用
  7. NPDP|程序员转产品经理好转吗?
  8. iphone屏幕镜像如何全屏_iOS 11屏幕镜像无法投屏怎么办?大神教你只需三步完美解决!...
  9. 高大上的PPT表格都是怎样制作完成的
  10. 【傻瓜攻略】深度学习之海森矩阵(九)