社交网络分析——信息传播模型(附带三个模型的python实现)

article/2025/11/7 19:27:18

摘要:主要讲解一些基本的信息传播模型,以及IC模型、SI模型和SIR模型的python实现及可视化。


  • 2021.10.06更新
  • 有需要的可以点击传送门

  • 2020.09.26更新
  • 更新了SIR模型的实现,请点击传送门,就不放在这篇博客里了

  • 2020.09.03更新
  • 更新了SI模型和IC模型用不同颜色表示每次激活的节点,在本文最后

author:xiao黄
缓慢而坚定的生长


信息传播模型

影响力模型

  • IC模型
  • LT模型

传染模型

  • SI模型
  • SIR模型
  • SIS模型
  • SIRS模型

Influence Models

  • 影响模型可模拟用户如何影响网络中的每个人
  • 节点有两个状态
    未激活:节点未收到信息
    激活:节点收到信息并且能够传播给他们的邻居

Independent Cascade (IC) Model

  • 在 t 时刻被激活的节点在 t+1 时刻仅有一次机会去激活其邻居
  • 假设节点 v 在 t 时刻被激活,对于 v 的任何邻居 w ,w 在 t+1 时刻被激活的概率是 P v w Pvw Pvw
  • 如果是无权重的话,可以都设置为0.5,那么这样传播与不传播的概率就是一半一半了
    在这里插入图片描述

例子
在这里插入图片描述

Liner Threshold (LT) Model

  • 在任意时刻,激活的点都可以影响未被激活的点
  • 每个节点都有激活阈值
  • 如果影响程度超过该节点的阈值,则这节点被激活

Infection Models

  • 传染模型也叫流行病模型,用于描述个人传播传染病的方式
  • 节点有两种状态
    易感人群:易感节点可能会感染疾病
    感染人群:感染节点有机会去感染易感人群
    免疫人群:感染节点被治愈后不会再得疾病的人群

Susceptible Infected (SI) Model

  • 节点有两个状态
    易感节点(S)
    感染节点(I)
  • 如何传染
    一个节点被感染,它将持续传染周围的节点
    在每个离散时间中,每个被感染的节点尝试以概率p去感染它的易感(未感染)邻居
    在这里插入图片描述

Susceptible Infected Recovered (SIR) Model

  • Intuition:一些被感染的节点以一定的概率成为免疫节点,免疫节点不能被感染疾病或者传播疾病
  • 节点有三种状态:
    易感节点;感染节点;免疫节点
  • 节点的变化
    在这里插入图片描述
    β:易感节点被成功感染的概率
    γ:感染节点被治愈的概率

Susceptible Infected Susceptible (SIS) Model

  • Intuition:感染节点以一定的概率变成易感节点,又有一定的概率被感染成感染节点
  • 节点有两种状态
    易感节点;感染节点
  • 节点的变化
    在这里插入图片描述
    β:易感节点被成功感染的概率
    γ:感染节点被治愈成易感节点的概率

Susceptible Infected Recovered Susceptible (SIRS) Model

  • Intuition:免疫节点有一定的概率变成易感节点
  • 节点的变化
    在这里插入图片描述
    β:易感节点被成功感染的概率
    γ:感染节点被治愈成免疫节点的概率
    λ:免疫节点有一定的概率转化成易感节点

IC模型的python实现

先上代码,这里我就不解释了,代码里面的注释我觉得很详细了,不懂可以评论或者私信。

import randomimport matplotlib.pyplot as plt
import networkx as nx
import numpy as npmax_iter_num = 10 # 模拟的次数
G = nx.karate_club_graph() # 空手道俱乐部for edge in G.edges:G.add_edge(edge[0], edge[1], weight=random.uniform(0,1)) # 可不可以作为权值
for node in G:G.add_node(node, state = 0) # 用state标识状态 state=0 未激活,state=1 激活seed = 33 # 选定33作为初始激活节点
G.node[seed]['state'] = 1 # 表示33被激活activated_graph = nx.Graph() # 被激活的图
activated_graph.add_node(seed)all_active_nodes = [] # 所有被激活的节点放在这里
all_active_nodes.append(seed)start_influence_nodes = [] # 刚被激活的节点 即有影响力去影响别人的节点
start_influence_nodes.append(seed)for i in range(max_iter_num):new_active = list()t1 = '%s time' % i + ' %s nodes' % len(all_active_nodes)print(t1) # 当前有多少个节点激活# 画图plt.title(t1)nx.draw(activated_graph, with_labels=True)plt.show()for v in start_influence_nodes:for nbr in G.neighbors(v): if G.node[nbr]['state'] == 0: # 如果这个邻居没被激活edge_data = G.get_edge_data(v, nbr)if random.uniform(0, 1) < edge_data['weight']:G.node[nbr]['state'] = 1new_active.append(nbr)activated_graph.add_edge(v, nbr) # 画图 添加边start_influence_nodes.clear() # 将原先的有个影响力的清空start_influence_nodes.extend(new_active) # 将新被激活的节点添加到有影响力all_active_nodes.extend(new_active) # 将新被激活的节点添加到激活的列表中print('all_active_nodes',all_active_nodes) # 打印

程序运行结果图:
在这里插入图片描述

节点图,这里我就放了9张,第十张不放了,你们运行的时候会看到的
在这里插入图片描述

SI模型的python实现

先上代码,这里我就不解释了,代码里面的注释我觉得很详细了,不懂可以评论或者私信。

import randomimport matplotlib.pyplot as plt
import networkx as nx
import numpy as npmax_iter_num = 5 # 模拟的次数
G = nx.karate_club_graph() # 空手道俱乐部for edge in G.edges:G.add_edge(edge[0], edge[1], weight=random.uniform(0,1)) # 可不可以作为权值 病毒的感染能力
for node in G:G.add_node(node, state = 0) # 用state标识状态 state=0 未激活,state=1 激活seed = 33 # 选定33作为传染源
G.node[seed]['state'] = 1 # 表示33是感染的all_infect_nodes = [] # 所有被感染的节点放在这里
all_infect_nodes.append(seed)infected_graph = nx.Graph() # 被激活的图
infected_graph.add_node(seed)for i in range(max_iter_num):new_infect = list() # 新被感染的t1 = '%s time' % i + ' %s nodes' % len(all_infect_nodes)print(t1) # 当前有多少个节点被感染# 画图plt.title(t1)nx.draw(infected_graph, with_labels=True)plt.show()# 感染的机会不止一次for v in all_infect_nodes:for nbr in G.neighbors(v):if G.node[nbr]['state'] == 0: # 如果这个邻居节点没被感染edge_data = G.get_edge_data(v, nbr)if random.uniform(0, 1) < edge_data['weight']:G.node[nbr]['state'] = 1new_infect.append(nbr)infected_graph.add_edge(v, nbr) # 画图 添加边all_infect_nodes.extend(new_infect) # 将新感染的添加到print('all_active_nodes:', all_infect_nodes)

运行结果:
在这里插入图片描述

节点效果图:
在这里插入图片描述

IC模型的python实现更新版(2020.09.03)

import randomimport matplotlib.pyplot as plt
import networkx as nx
import numpy as npmax_iter_num = 10 # 模拟的次数
G = nx.karate_club_graph() # 空手道俱乐部for edge in G.edges:G.add_edge(edge[0], edge[1], weight=random.uniform(0,1)) # 可不可以作为权值
for node in G:G.add_node(node, state = 0) # 用state标识状态 state=0 未激活,state=1 激活seed = 33 # 选定33作为初始激活节点
G.node[seed]['state'] = 1 # 表示33被激活# activated_graph = nx.Graph() # 被激活的图
# activated_graph.add_node(seed)all_active_nodes = [] # 所有被激活的节点放在这里
all_active_nodes.append(seed)start_influence_nodes = [] # 刚被激活的节点 即有影响力去影响别人的节点
start_influence_nodes.append(seed)color_list = ['brown','orange','r','g','b','y','m','gray','black','c','pink','brown','orange','r','g','b','y','m','gray','black','c','pink']
res = [[seed]]
for i in range(max_iter_num):new_active = list()t1 = '%s time' % i + ' %s nodes' % len(all_active_nodes)print(t1) # 当前有多少个节点激活# 画图# plt.title(t1)# nx.draw(activated_graph, with_labels=True,node_color=color_list[i])# plt.show()for v in start_influence_nodes:for nbr in G.neighbors(v): if G.node[nbr]['state'] == 0: # 如果这个邻居没被激活edge_data = G.get_edge_data(v, nbr)if random.uniform(0, 1) < edge_data['weight']:G.node[nbr]['state'] = 1new_active.append(nbr)# activated_graph.add_edge(v, nbr) # 画图 添加边print('激活',new_active)start_influence_nodes.clear() # 将原先的有个影响力的清空start_influence_nodes.extend(new_active) # 将新被激活的节点添加到有影响力all_active_nodes.extend(new_active) # 将新被激活的节点添加到激活的列表中res.append(new_active)print('all_active_nodes',all_active_nodes) # 打印
# print(res)res = [c for c in res if c]
pos = nx.spring_layout(G) # 节点的布局为spring型
nx.draw(G,pos, with_labels=True, node_color='w', node_shape = '.')
color_list = ['brown','orange','r','g','b','y','m','gray','black','c','pink','brown','orange','r','g','b','y','m','gray','black','c','pink']
for i in range(len(res)):nx.draw_networkx_nodes(G, pos, with_labels=True, node_color=color_list[i], nodelist=res[i])
plt.show()

结果图:
在这里插入图片描述

SI模型的python实现更新版(2020.09.03)

import randomimport matplotlib.pyplot as plt
import networkx as nx
import numpy as npmax_iter_num = 5 # 模拟的次数
G = nx.karate_club_graph() # 空手道俱乐部for edge in G.edges:G.add_edge(edge[0], edge[1], weight=random.uniform(0,1)) # 可不可以作为权值 病毒的感染能力
for node in G:G.add_node(node, state = 0) # 用state标识状态 state=0 未感染,state=1 激活seed = 33 # 选定33作为传染源
G.node[seed]['state'] = 1 # 表示33是感染的all_infect_nodes = [] # 所有被感染的节点放在这里
all_infect_nodes.append(seed)
res = [[seed]]# infected_graph = nx.Graph() # 被激活的图
# infected_graph.add_node(seed)for i in range(max_iter_num):new_infect = list() # 新被感染的t1 = '%s time' % i + ' %s nodes' % len(all_infect_nodes)print(t1) # 当前有多少个节点被感染# 画图# plt.title(t1)# nx.draw(infected_graph, with_labels=True)# plt.show()# 感染的机会不止一次for v in all_infect_nodes:for nbr in G.neighbors(v):if G.node[nbr]['state'] == 0: # 如果这个邻居节点没被感染edge_data = G.get_edge_data(v, nbr)if random.uniform(0, 1) < edge_data['weight']:G.node[nbr]['state'] = 1new_infect.append(nbr)# infected_graph.add_edge(v, nbr) # 画图 添加边res.append(new_infect)all_infect_nodes.extend(new_infect) # 将新感染的添加到print('all_active_nodes:', all_infect_nodes)res = [c for c in res if c]
pos = nx.spring_layout(G) # 节点的布局为spring型
nx.draw(G,pos, with_labels=True, node_color='w', node_shape = '.')
color_list = ['brown','orange','r','g','b','y','m','gray','black','c','pink','brown','orange','r','g','b','y','m','gray','black','c','pink']
for i in range(len(res)):nx.draw_networkx_nodes(G, pos, with_labels=True, node_color=color_list[i], nodelist=res[i])
plt.show()

结果:
在这里插入图片描述

  • 说在最后,因为是随机的,所以每次运行的结果可能是不一样的

http://chatgpt.dhexx.cn/article/U3pC4oXq.shtml

相关文章

MOODLE安装

https://baijiahao.baidu.com/s?id1648898834478394333&wfrspider&forpc

Moodle 安装的时候提示 original IP

在安装 Moodle 的时候提示下面的错误&#xff0c;导致安装不能进行。 Installation must be finished from the original IP address, sorry 这是因为第一次安装的时候访问的 IP 地址与系统中记录的不一致。 你可以登录使用的数据库后运行下面的 SQL UPDATE mdl_user set la…

Wamp5与Moodle安装

最近在更改本科同学关于MOODLE平台的安装的实验报告的时候&#xff0c;发现他们大部分都是用easyphp安装的&#xff0c;他们在报告中体现出来一些的问题&#xff0c;如&#xff1a;日历产生乱码、安装不了中文版本、无法打开http://localhost/mysql/ 等问题&#xff0c;于是我…

linux安装moodle最新版,在linux下安装moodle

上两篇文章介绍了虚拟机中安装linux server 及相关服务&#xff0c;有了这些基础后&#xff0c;安装一个应用服务 moodle 2.7 是使用最广的网络课程平台。 在安装moodle之前&#xff0c;需要支持软件有mysql phpmyadmin apache php5 1.下载moodle安装文件&#xff0c;moodl…

linux安装moodle最新版,于linux已安装moodle

本文介绍了两个虚拟机的安装linux server 及相关服务&#xff0c;随着后这些基础。安装应用程序服务 moodle 2.7 它是使用最广泛的平台&#xff0c;网络课程。 在安装过程中moodle之前&#xff0c;需要支持软件mysql phpmyadmin apache php5 1.下载moodle安装文件&#xff…

phpstudy环境下安装部署moodle平台

引言&#xff1a; 最近尝试在自己电脑上安装部署一个moodle学习平台&#xff0c;因为之前学习对phpstudy比较熟悉&#xff0c;它是Apache MySQL PHP的集成的开发包&#xff0c;所以打算利用phpstudy集成开发包搭建平台。搭建安装环境可以通过单个软件的安装&#xff0c;但是利…

备忘--moodle安装

php -v //查看版本 sudo apt-get --purge remove php5.5* //删除旧版本 sudo add-apt-repository ppa:ondrej/php //添加源 sudo apt-get update //更新源 sudo apt-get install php7.2 //安装 php -v //查看版本 sudo apt-get install php7.2-my…

Moodle安装教程以及phpMyAdmin无法访问解决

这几天我在使用moodle的框架开发一个教务系统&#xff0c;在安装Moodle环境过程中出现了很多问题&#xff1a; 1. 首先是使用官网集成包&#xff0c;按照说明一步步走结果总是出错。 2. 接着尝试使用xammp安装&#xff0c;结果安装成功之后&#xff0c;第二次无法打开MySQL&a…

Moodle 安装出现访问空白和open_basedir问题

首先要感谢&#xff0c;使用Moodle 的前辈&#xff0c;写下问题处理的办法 最近需要使用Moodle,安装Moodle&#xff0c;先装XAMPP&#xff0c;后将下载的Moodle解压后拷贝到xampp/htdocs下&#xff0c;访问http://localhost/moodle,开始安装Moodle, 一开始都挺顺&#xff0c;可…

阿里云CentOS下搭建LNMP环境和Moodle安装

阿里云CentOS下搭建LNMP环境和Moodle安装 Moodle是一个开源课程管理系统&#xff0c;采用PHPMySQL方式运行的自由开源软件&#xff0c;遵循GNU公共许可协议。世界各地教育工作者越来越喜欢使用Moodle为学生建立网上动态网站。Moodle平台界面简单、精巧&#xff0c;您可以根据需…

moodle安装时出现时间超限,无法进行安装

今天突然想起来&#xff0c;安装moodle时遇到的一个问题&#xff1a;时间超限。我觉得这个对某些读者有帮助&#xff0c;so 就想把它分享出来。 当时&#xff0c;我根据网页上的错误提示&#xff0c;找到了出错文件的位置&#xff0c;但是发现这个文件根本不是“案发现场”&am…

Moodle安装步骤

1、安装xampp 2、关闭IIS,如果不关闭,就修改端口号80为别的,避免与Apache服务器端口冲突。 3、修改httpd-ssl.conf

moodle环境安装linux,在Ubuntu 18.04/Debian 9上安装Moodle的步骤

本文介绍在Ubuntu 18.04/Debian 9系统上安装Moodle的的详细步骤&#xff0c;需要准备PHP、Apache/Nginx Web服务器及MySQL/MariaDB数据库。 简介 Moodle是一个免费的开源学习管理系统&#xff0c;用PHP编写&#xff0c;并在GNU通用公共许可证下发布。从Moodle创建学习课程&…

安装moodle3.6

一、下载安装phpstudy ​​​​​​小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; 按官网步骤&#xff0c;很容易安装 二、官网下载moodle 本文中下载的是3.6的版本&#xff0c;最新有到4.0版&#xff0c;安装过程(中间产生的错误)可能不同&#xff0c;请慎…

mysql的安装版本有无开发版_moodle 2.0.2 安装图文教程 2——PHP Mysql环境搭建和moodle安装 - 乔木的日志 - ICT教育 - 中小学信息技术教育和教育信息化网站...

moodle 2.0.2 安装图文教程 2——PHPMysql环境搭建和moodle安装 热度 6已有 211 次阅读 2011-3-29 16:49 ||关键词:moodle 2 图文安装教程 php环境 本文承蒙本站lsstarboy 和laolaotang等多位网友给与技术指导和大力支持&#xff0c;一并致谢&#xff01; 最后修改&#xff1a;…

Moodle安装指导手册

Moodle安装指导手册 此文档用于指导在Ubuntu(版本号&#xff1a;16.04)下进行Moodle安装及基本配置 Reference 参考引用 Moodle DocumentInstalling MoodleStep by step installation guide for UbuntuHow to install Moodle on Ubuntu 16.04安装Moodle Requirments 安装要…

Ubuntu 18.04 安装 Moodle

由于小组学习需要&#xff0c;我计划在导师的服务器上安装一个属于自己的 Moodle。 环境介绍 服务器为 Ubuntu 18.04。 先安装软件 更新软件 不多废话&#xff0c;上手就是更新软件。 sudo apt update -y sudo apt upgrade -y 安装 Apache2 由于 Moodle 从 3.0.1 版本开…

moodle安装图解

moodle安装图解 本案例是moodle的单机版安装图解 一、 安装前的准备 1、将moodle.rar文件解压&#xff0c;你将看到moodle 文件夹和本安装说明文件&#xff1b;2、解压后将moodle 文件夹拷贝到你准备放的磁盘路径下&#xff0c;注意不要放在中文目录中&#xff0c;例如&…

MOODLE的安装与基本配置

MOODLE的安装与基本配置 MOODLE简介MOODLE安装&#xff0c;Windows或Mac安装包A&#xff0e;根据自身系统下载相应版本安装包&#xff08;红框框中部分&#xff09;B&#xff0e;双击运行上图中的Start Moodel.exe文件C&#xff0e;打开浏览器&#xff0c;进行配置D&#xff0e…

moodle平台安装及环境配置(包括安装过程详细截图)

一 前言&#xff1a; Moodle是一个开源课程管理系统&#xff08;CMS&#xff09;&#xff0c;也被称为学习管理系统&#xff08;LMS&#xff09;或虚拟学习环境&#xff08;VLE&#xff09;&#xff0c;它通常用来播放符合SCORM标准的课件&#xff0c;但功能远不止课程管理…