当前位置: 首页 > news >正文

简单PageRank —— 希拉里邮件门

如何计算每个人物在邮件关系网络中的影响力?

      我们用pagerank来查看,各个点的影响力,以及用nexworkx中的graph来展示其关系。

      如图ABCD代表着4个网页,其中箭头指向表示,从某网页跳转到另一个网页,那么我们来计算一下这4个网页的影响力

pagerank算法原理就是:一个网页的影响力 = 所有入链集合的页面的加权影响力之和。

Google 的两位创始人都是斯坦福大学的博士生,他们提出的 PageRank 算法受到了论文影响力因子的评价启发。当一篇论文被引用的次数越多,证明这篇论文的影响力越大。正是这个想法解决了当时网页检索质量不高的问题

import matplotlib.pyplot as plt
import networkx as nx
G = nx.DiGraph()
# 有向图之间边的关系
edges = [("A", "B"), ("A", "C"), ("A", "D"), ("B", "A"), ("B", "D"), ("C", "A"), ("D", "B"), ("D", "C")]
for edge in edges:
    G.add_edge(edge[0], edge[1])
pagerank_list = nx.pagerank(G, alpha=1)#alpha为阻尼因子,alpha=0.85表示跳转率为15%
print("pagerank 值是:", pagerank_list)
nx.set_node_attributes(G,values=pagerank_list,name='pagerank_list')

# 绘制圆环图像
positions=nx.circular_layout(G)
#绘制反射图像
# positions=nx.spring_layout(G)
# 绘制节点
nx.draw_networkx_nodes(G, positions,  alpha=0.4)
# 绘制边
nx.draw_networkx_edges(G, positions,  alpha=0.2)
# 绘制节点的 label
nx.draw_networkx_labels(G, positions, font_size=10)
plt.show()

 https://www.cnblogs.com/jpcflyer/p/11180263.html

 

 接下来我们看下如何利用pagerank和graph来展示希拉里的邮件

 

import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
from collections import defaultdict

emails = pd.read_csv("E:/数据学习网站/PageRank-master/input/Emails.csv")
file = pd.read_csv("E:/数据学习网站/PageRank-master/input/Aliases.csv")
aliases={}
for index,row in file.iterrows():
    aliases[row['Alias']]=row['PersonId']
# print(aliases)

file = pd.read_csv("E:/数据学习网站/PageRank-master/input/Persons.csv")
persons={}
for index,row in file.iterrows():
    persons[row['Id']]=row['Name']

# 单词间的转换
def unify_name(name):
    name =str(name).lower()
    name=name.replace(",","").split("@")[0]
    if name in aliases.keys():
        return persons[aliases[name]]
    return name

def show_graph(graph,layout='spring_layout'):
    if layout=="circular_layout":
        position=nx.circular_layout(graph)
    else:
        position=nx.spring_layout(graph)
    nodesize=[x['pagerank']*20000 for v,x in graph.node(data=True)]
    edgesize=[np.sqrt(e[2]['weight']) for e in graph.edges(data=True)]
    nx.draw_networkx_nodes(graph,position,node_size=nodesize,alpha=0.4)
    nx.draw_networkx_edges(graph,position,edge_size=edgesize,alpha=0.2)
    nx.draw_networkx_labels(graph,position,font_size=10)
    plt.show()

emails.MetadataTo=emails.MetadataTo.apply(unify_name)
emails.MetadataFrom=emails.MetadataFrom.apply(unify_name)

edges_weights_temp=defaultdict()
for row in zip(emails.MetadataTo,emails.MetadataFrom,emails.RawText):
    temp=(row[0],row[1])
    if temp not in edges_weights_temp:
        edges_weights_temp[temp]=1
    else:
        edges_weights_temp[temp]=edges_weights_temp[temp]+1

edges_weight=[(key[0],key[1],val) for key,val in edges_weights_temp.items()]

graph=nx.DiGraph()
graph.add_weighted_edges_from(edges_weight)
pagerank=nx.pagerank(graph)
nx.set_node_attributes(graph,name='pagerank',values=pagerank)
show_graph(graph)

pagerank_threshold=0.005
small_graph=graph.copy()
for n,p_rank in graph.node(data=True):
    if p_rank["pagerank"]<pagerank_threshold:
        small_graph.remove_node(n)
show_graph(small_graph,"circular_layout")

 

 

 

 

 

参考:https://www.jianshu.com/p/a942d8622890

相关文章:

  • Python NetworkX
  • Python复杂网络结构可视化——matplotlib+networkx
  • FairScale
  • Pytorch学习率lr衰减(decay)(scheduler)
  • Pytorch获取中间变量的梯度grad
  • Pytorch梯度裁剪 nn.utils.clip_grad_norm_()
  • Layer Normalization(LN) 层标准化
  • TF_CPP_MIN_LOG_LEVEL
  • Python sys.argv
  • pytorch模型可复现设置(cudnn.benchmark 加速卷积运算 cudnn.deterministic)
  • Python sys.stdout
  • Python vars()函数
  • Python类的self
  • Python输出numpy array带逗号和不带逗号
  • center loss 中心损失
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Docker 笔记(2):Dockerfile
  • ECMAScript入门(七)--Module语法
  • happypack两次报错的问题
  • Iterator 和 for...of 循环
  • Javascript 原型链
  • JavaScript的使用你知道几种?(上)
  • JS专题之继承
  • Python学习之路13-记分
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • webpack+react项目初体验——记录我的webpack环境配置
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 解决iview多表头动态更改列元素发生的错误
  • 如何用vue打造一个移动端音乐播放器
  • 王永庆:技术创新改变教育未来
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • #{} 和 ${}区别
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • %check_box% in rails :coditions={:has_many , :through}
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)JAVA使用POI操作excel
  • (附源码)springboot教学评价 毕业设计 641310
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十一)c52学习之旅-动态数码管
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)3D模板阴影原理
  • .cn根服务器被攻击之后
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net Application的目录
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net6使用Sejil可视化日志
  • .NET的数据绑定
  • .net和php怎么连接,php和apache之间如何连接
  • @SentinelResource详解
  • [Angular] 笔记 6:ngStyle