您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页链接分析与预测

链接分析与预测

来源:测品娱乐

一、图数据概述

import pandas as pd  # 导入Pandas库
import networkx as nx  # 导入NetworkX库
import matplotlib.pyplot as plt  # 导入Matplotlib库

# 创建一个DataFrame,其中包含两个人之间的关系
df = pd.DataFrame([("Dave", "Jenny"), ("Peter", "Jenny"), ("John", "Jenny"),
                  ("Dave", "Peter"), ("Dave", "John"), ("Peter", "Sam"),
                  ("Sam", "Albert"), ("Peter", "John")], columns=['from', 'to'])
# 创建一个无向图
G = nx.from_pandas_edgelist(df, 'from', 'to')

# 绘制图,显示节点标签,节点颜色为浅蓝色,节点大小为600
nx.draw(G, with_labels=True, node_color='lightblue', node_size=600)

# 显示图形
plt.show()
# 使用nx.DiGraph创建一个有向图
G = nx.from_pandas_edgelist(df, 'from', 'to',
                         create_using=nx.DiGraph())

# 绘制有向图,显示节点标签,节点颜色为浅蓝色,节点大小为600
nx.draw(G, with_labels=True, node_color='lightblue', node_size=600)

# 显示图形
plt.show()

二、基本中心度分析

c_degree= nx.degree_centrality(G)
c_degree

# 打印“介数”字串
print('Betweenness: ')

# 计算图G的介数中心性,未归一化
betweenness_centrality_unnormalized = nx.betweenness_centrality(G, normalized=False)
print(betweenness_centrality_unnormalized)

# 计算图G的介数中心性,已归一化
betweenness_centrality_normalized = nx.betweenness_centrality(G)
print(betweenness_centrality_normalized)

第一行 print 输出的是未归一化的介数中心性,这意味着返回的结果没有除以最大可能的介数中心性值。第二行 print 输出的是归一化的介数中心性,即介数中心性值被除以最大可能的介数中心性值,使得结果在0到1之间。

#
print(nx.closeness_centrality(G))

三、Web中心度分析

四、Pagerank

N = np.array([[0,1/2,0,0],
              [1/3,0,0,1/2],
              [1/3,0,0,1/2],
              [1/3,1/2,0,0]])
N

NT=N.T
NT

A=np.array([1/4,1/4,1/4,1/4])

C=[]
for i in range(100):
    B=NT.dot(A)
    A=B
    C.append(B)
C[99]

# 第一段代码:
N = np.array([[0, 0, 0, 1, 0],
            [0, 0, 0.5, 0, 0.5],
            [1, 0, 0, 0, 0],
            [0, 0.33, 0.33, 0, 0.33],
            [0.1, 0, 0, 0, 0]])

# 第二段代码:
Nr = np.full((5, 5), 0.2)
M = 0.9*N + 0.1*Nr

# 计算 M 转置后的特征值和特征向量
eigenvalues, eigenvectors=np.linalg.eig(M.T)

# 输出特征值
eigenvalues

# 导入NumPy库
import numpy as np

# 定义矩阵A
A = np.array([[0, 1, 1],
            [0, 0, 1],
            [1, 0, 0]])

# 定义矩阵N
N = np.array([[0, 1/2, 1/2],
            [0, 0, 1],
            [1, 0, 0]])

# 获取N的转置
Nt = N.T

# 创建一个3x3的矩阵,每个元素都是1/3
m = (1/3)*np.ones((3, 3))

# 定义矩阵A,它是Nt和m的加权和
A = 0.85*Nt + 0.15*m

# 初始化p0为全1数组(表示初始概率分布)
p0 = np.array([1, 1, 1])

# 定义p等于p0
p = p0


# 使用for循环迭代22次
for i in range(22):
    # 计算新的状态概率分布pk,这是由A和当前的p相乘得到的
    pk = A.dot(p)

    # 找到最大概率的位置i
    i = np.argmax(pk)

    # 将pk除以其第i个元素,使得其总和为1
    lam = pk[i]/p[i]
    pk = pk/lam
    
    # 更新p为新的概率分布
    p = pk

    # 如果两次迭代之间的差异足够小,则跳出循环(这里没有实现该条件判断)
    #if np.sqrt((p-pk).dot(p-pk))<1e-10:
        #break

# 输出最终的结果
print(p)

这段代码首先创建了一个名为 m 的3x3矩阵,所有元素均为1/3。然后定义了矩阵 A,它是之前定义的 Nt 矩阵和 m 矩阵的线性组合。接下来,初始化一个名为 p0 的一维数组,表示初始的状态概率分布。之后进入一个循环,在每次迭代中,计算出新的状态概率分布 pk,它是通过将 A 矩阵和当前的 p 相乘得到的。然后找到 pk 中的最大值位置 i ,并将 pk 除以其第 i 个元素,使其总和为1。最后,更新 p 为新的概率分布。

五、HITS

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务