社交网络算法

社交网络算法
1
2
3
4
5
6
7
8
9
10
11
12
13
使用的包为igraph
衡量指标:
1.点度中心性:在网络中共有N个结点,每个节点由k个直接连接的节点,则该点的自由度为deg(x) = k,该点的点度中心性为deg(x)/(N-1),N-1为排除自身总共的节点
2.紧密度中间性:距离d为该点到其余各点带权的最短路径和,各个节点的紧密度中间性为d/(N-1)的结果的倒数.结果越大表示越'紧密'
3.介数中间性(公式见下图):
设节点x 和节点 y之间的最短路径数为σ(x,y),最短路径中通过节点 v 的路径数为σ(x,y|v)
eg:A-B-C-D-E(无向图)
对于A而言经过该节点的路线没有故介数中间性为0
对于B,经过该节点的为A-B-C,A-B-C-D,A-B-C-D-E,每一种情况的σ均为1,所以,B点的介数中心性为3/(4*3/2)
4.特征值中心性
N个节点的无向网络,可以转换成N*N的矩阵,不相连为0,相连则为1
使用特征方程Ix = λx===>(I-λE)x = 0可求解出特征值和特征向量,特征值作为向心度大小,特征向量作为向心度在各个连接的得分值
总:紧密度中间性可以降低远距离点的干扰,介数中间性可以找到大佬(公认).

介数中间性

igragh包安装
1
2
3
4
1.https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应python版本的igragh包
2.https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应Python版本的pycairo
3.pip instal 两个文件的路径
4.完成,无法使用的话卸载anaconda重新安装
1
2
g = igraph.Graph([(0,2),(0,3),(3,1),(3,4),(3,5),(1,4)])#创建图
igraph.plot(g)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import pandas as pd
import pymysql
import igraph
config1 = {
'host': '192.168.0.250',
'port': 3306, # MySQL默认端口
'user': 'user_rw', # mysql默认用户名
'password': '1a2s3d4f',
'db': 'pre_formal_1', # 数据库
'charset': 'utf8',
}
conn1 = pymysql.connect(**config1)
sql = "select app_text,inventors from zl_zu_20200526_L where applicant_other = '新疆恒泰艾普能源服务有限公司'"
df = pd.read_sql(sql,conn1)
ls = []
ls1 = []
for i in df.inventors:
i = i.split(',')
i = list(set(i))
ls.extend(i)
if len(i)>1:
for m in range(len(i)):
k = m+1
while k<len(i):
ls1.append((i[m],i[k]))
k+=1
else:
ls1.append((i[0],i[0]))
inv_ls = list(set(ls))
g = igraph.Graph()
vertex = inv_ls
g.add_vertices(vertex)
g.vs['label'] = g.vs['name']
edges = ls1
g.add_edges(edges)
igraph.plot(g)
dict1 = dict(zip(inv_ls,g.degree()))
sorted(dict1.items(),key = lambda x:x[1],reverse=True)