基于知识图谱分析贸易关系走向

基于知识图谱分析贸易关系走向

  • 前言
  • 一、基础数据
  • 二、贸易规则
  • 三、知识图谱可视化
  • 四、完整代码

前言

  • 知识图谱是一种用图模型来描述知识和建模世界万物之间的关联关系的技术方法。在贸易关系的分析中,知识图谱可以将各个国家、地区、商品、贸易政策等作为节点,而它们之间的贸易关系、依赖程度、政策影响等作为边,从而形成一个复杂的网络结构。本文主要分析企业之间的贸易关系来往。
  • 基于收集和处理后的数据,构建知识图谱。每个企业用一个节点表示,而企业之间的关系用边表示。利用可视化技术,将知识图谱以图形化的方式展示出来,便于直观地观察和分析贸易关系的走向。
  • 通过分析企业之间的贸易依存度,可以了解它们之间的贸易紧密程度,从而预测贸易关系的走向。通过基于知识图谱的贸易关系分析,我们可以更深入地了解各个企业之间的贸易关系,预测其未来的走向,为政策制定和商业决策提供有力的支持。此外,通过可视化展示,我们还可以更直观地观察和分析贸易关系的动态变化,提高分析的效率和准确性。

一、基础数据

本博文利用random生成一些随机关系数据,生成关系数据中有两个参数,具体的含义解释如下。

参数含义
n n n最多有 n n n 个节点出发生成关系数据
n e i g h b o r neighbor neighbor每个节点的关系最多走向 n e i g h b o r neighbor neighbor个节点,在数学上成为出度

详细构造数据的函数代码如下:

import random
#构造一个有向图
def build_graph(n, neighbor):#n最大起始节点个数#neighbor最大出度#存储图结构node_name = [i for i in range(2*n)]graph = dict()#存储起始节点start = set()for i in range(n):node = random.choice(node_name)if node in start:continueelse:start.add(node)graph[node] = list()for j in range(neighbor):target = random.choice(node_name)if target != node and target not in graph[node]:graph[node].append(target)nodes = []rela = 0for i in graph.keys():nodes.extend(graph[i])rela += len(graph[i])nodes.extend(list(graph.keys()))nodes = list(set(nodes))print("Build graph success: %d nodes, %d edges." % (len(nodes), rela))return graph

二、贸易规则

序号规则内容
1企业优先与大企业发生贸易
2企业暂停与小企业发生贸易
3大企业为与之发生贸易较多的企业
4小企业为与之发生贸易较少的企业
  • 企业优先与大企业发生贸易
    演进过程中,企业选择与其非关联的企业发生关系时,选择那入度最大的企业。
  • 企业暂停与小企业发生贸易
    演进过程中,企业删除与邻居企业中入度最小的关系,如果邻居企业是知识图谱中入度最大的企业则不删除。
  • 大企业为与之发生贸易较多的企业
    大企业假设为入度比较大的企业。
  • 小企业为与之发生贸易较少的企业
    小企业假设为入度比较小的企业。
def iter(G):#代表贸易收入in_degree = pd.DataFrame(G.in_degree(), columns = ['node', 'in_degree'])add_relas = []delete_relas = []for node in nodes:#找到贸易收入最大的客群max_degree = max(G.in_degree(), key=lambda x:x[1])[1]max_nodes = in_degree.loc[in_degree['in_degree']==max_degree]['node']neighbors = list(G.successors(node))#增加贸易关系add_nodes = list(set(max_nodes) - {node} -set(neighbors))[:]add_rela = [(node, j) for j in add_nodes]add_relas.extend(add_rela)#减少邻居中贸易较低的客户delete_rela = []if len(neighbors)>1:min_v = min([G.in_degree()[neighbor] for neighbor in neighbors])for neighbor in neighbors:if G.in_degree()[neighbor] == min_v and min_v != max_degree:delete_rela.append((node, neighbor))delete_relas.extend(delete_rela[:])G.add_edges_from(add_relas)G.remove_edges_from(delete_relas)G = graph_plot(G.nodes(), G.edges())

三、知识图谱可视化

  • 为了能够看清楚知识图谱演进过程,利用nx.draw_networkx中,固定位置pos作图。
  • 因为graph_plot函数不仅是作图可视化,同时也要返回更新后的G,方便下一步迭代。
#利用字典构造一张图
import networkx as nx
import matplotlib.pyplot as plt
def graph_plot(nodes, relas):num = int(len(nodes)**(0.5)) + 1earth = []for i in range(num):for j in range(num):earth.append((i,j))G = nx.DiGraph()# 添加对应的边和点for node in nodes:# 结点名称不能为str,desc为标签即结点名称G.add_node(node, desc=str(node))# 添加边,参数name为边权值G.add_edges_from(relas)pos = earth[:]# 按pos所定位置画出节点,无标签无权值nx.draw_networkx(G, pos, with_labels=None, node_color="tab:blue", edge_color="tab:green", node_size = 800)# 画出标签node_labels = nx.get_node_attributes(G, 'desc')nx.draw_networkx_labels(G, pos, labels=node_labels)plt.title('fixed graph', fontsize=10)plt.show()return G

四、完整代码

贸易关系最终流向大贸易企业,当然这与我们假设条件的设定有很大的关系。

from build_graph import build_graph
from graph_plot import graph_plot
import networkx as nx
import pandas as pd
graph = build_graph(12, 3)
nodes = []
relas = []
for i in graph.keys():nodes.extend(graph[i])nodes.extend(list(graph.keys()))relas.extend([(i, j) for j in graph[i]])
nodes = list(set(nodes))
print("Get the data graph success: %d nodes, %d edges." % (len(nodes), len(relas)))
G = graph_plot(nodes, relas)
def iter(G):tmp = G.copy()#代表贸易收入in_degree = pd.DataFrame(G.in_degree(), columns = ['node', 'in_degree'])add_relas = []delete_relas = []for node in nodes:#找到贸易收入最大的客群max_degree = max(G.in_degree(), key=lambda x:x[1])[1]max_nodes = in_degree.loc[in_degree['in_degree']==max_degree]['node']neighbors = list(G.successors(node))#增加贸易关系add_nodes = list(set(max_nodes) - {node} -set(neighbors))[:]add_rela = [(node, j) for j in add_nodes]add_relas.extend(add_rela)#减少邻居中贸易收入较低的客户delete_rela = []if len(neighbors)>1:min_v = min([G.in_degree()[neighbor] for neighbor in neighbors])for neighbor in neighbors:if G.in_degree()[neighbor] == min_v and min_v != max_degree:delete_rela.append((node, neighbor))delete_relas.extend(delete_rela[:])G.add_edges_from(add_relas)G.remove_edges_from(delete_relas)G = graph_plot(G.nodes(), G.edges())
v_index = 0
count = 0
for i in range(100):print('=>'*20, i)if max(G.in_degree(), key=lambda x:x[1])[1] > v_index:v_index = max(G.in_degree(), key=lambda x:x[1])[1]else:count = count + 1if count > 5:breakiter(G)

初始图
在这里插入图片描述

演进图
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人脸识别模型与人类视觉识别的对比——评估人脸识别模型存在偏见是否比人类的偏见大?

1. 概述 人脸识别系统是一个几十年来一直备受关注的研究领域。而且在过去的几年中。公司和政府一直在积极引入人脸识别系统,并且我们看到越来越多的机会可以看到人脸识别系统。例如,有的系统可以随便介绍,如搜索特定人的图像(图像…

Appium安装及配置(Windows环境)

在做app相关自动化测试,需要使用appium来做中转操作,下面来介绍一下appium的环境安装配置 appium官方文档:欢迎 - Appium Documentation 一、下载appium 下载地址:https://github.com/appium/appium-desktop/releases?page3 通…

网络安全岗秋招面试题及面试经验分享

Hello,各位小伙伴,我作为一名网络安全工程师曾经在秋招中斩获🔟个offer🌼,并在国内知名互联网公司任职过的职场老油条,希望可以将我的面试的网络安全大厂面试题和好运分享给大家~ 转眼2024年秋招又快到了金…

悬剑武器库5.04版

工具介绍 悬剑5 基于“悬剑网盘”精选工具集悬剑5“飞廉”云武器库制作。 操作系统:Windows 10 专业版 锁屏密码:secquan.org 解压密码: 圈子社区secquan.org 镜像大小:33.1GB 系统占用空间63.0 GB 镜像导入 下载镜像,文末…

TinTinLand Web3 + AI 共学月|五周上手,捕获浪潮碰撞下的无限机遇

近期,斯坦福大学人文x人工智能研究所(Stanford HAI)发布了《2024 年人工智能指数报告》(Artificial Intelligence Index Report 2024),指出当前人工智能的发展已全面改变社会的前沿风向,其中据 …

使用正则表达式分割字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 split()方法用于实现根据正则表达式分割字符串,并以列表的形式返回。其作用同字符串对象的split()方法类似,所不同的就是分割…

ODBC访问达梦数据库Ubuntu18.04 x86-x64(亲测有效)

ODBC访问达梦数据库Ubuntu18.04 x86-x64 第1步:安装unixodbc驱动,使用下面命令。第2步:拷贝已经安装好的达梦数据库驱动程序第3步:配置ODBC必要的参数文件,如下图第4步:设置环境变量第5步:连接测试 说明&am…

如何 使用Cubemax配置串口1.5得停止位

title: Cubemax配置串口1.5得停止位 tags: STM32HalCubemax Cubemax里面没有这个修改停止位为1.5得 我去配置函数里面也没看见 然后我去刨基础库 发现了 1.5倍 发现 原来就是 那个寄存器的值 改成 》 0x3000 后来自己修改几笔 HAL 库里面好像也有 改之 USART_CR2_STOP_Po…

【农村电商1004】 电子商务进农村示范县名单:全面数据集等你探索!

今天给大家分享的发表在国内顶级期刊金融研究的2023年论文《农村发展电子商务能减缓资本与劳动力要素外流吗?——以电子商务进农村综合示范案例为例》使用到的重要数据集电子商务进农村综合示范政策县数据,该论文采用了双重差分法和全国县域面板数据研究…

JDK JRE JVM 三者的关系

总结: 1. jdk 中 的 javac 编译器将 .java 文件编译为 .class 字节码文件 (编译) 2. jre 执行 .class 字节码文件 (运行) 3. jre 通过 jvm 运行程序,确保程序能够在不同平台上正确执行(实现跨平…

【Spring Cloud】微服务日志收集系统-ELK+Kafka

目录 任务背景本文相关文件资料Elasticsearch特性 LogstashKibanaELKELK的缺点引入消息中间件 ELKKafkaKafka概念 ELKKafka环境搭建1.将安装素材上传至服务器 cd /usr/local/soft2.防止Elasticsearch因虚拟内存问题启动失败3.创建镜像li/centos7-elasticsearch4.创建容器5.验证…

FOC - BLDC六步换相驱动原理

文章目录 1 . 前言2 . 电机旋转原理3 . BLDC特点4 . BLDC反电动势投影位置5 . BLDC换相时刻6 . BLDC换相注意事项7 . 小结 【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 1 . 前言 无刷直流电机在这里区分为两种,一是永磁无刷直流电…

MedSAM 学习笔记(续):训练自定义数据集

1、下载官方权重 官方的预训练权重:https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth 下载后保存在:work_dir/SAM/sam_vit_b_01ec64.pth 目录 2、摆放数据集 因为MedSAM 分割模型需要对3D数据集进行切片处理,也就是对nii.gz 数据处理成 npy 格式 …

掌握这三点软文营销秘诀,快速实现品牌用户增长

在信息爆炸的时代,品牌用户如何快速实现增长已成为每个企业发展的必经之虑。而软文营销,作为品牌推广中不可或缺的一环,也正逐渐受到越来越多企业的青睐。它与传统的硬广告相比,不会直接的进行产品销售,软文更注重与读…

iOS ------ 多线程 GCD

一,GCD简介 GCD是Apple开发的一个多线程的较新的解决方案。它主要用于优化应用程序以支持多核处理器以及其他对称处理系统。它是一个在线程池模式的基础上执行的并发任务。 为什么要使用GCD? GCD!可用于多核的并行运算GCD会自动利用更多的…

Linux配置java,maven,marshalsec环境

文章目录 一. Linux配置java环境1.下载jdk文件2.解压tar.gz文件3.设置java环境变量4.验证是否成功 二. Linux配置maven环境1.下载压缩包2.解压tar.gz3. 配置环境变量 三. Linux配置marshalsec环境 一. Linux配置java环境 1.下载jdk文件 mkdir /opt/javawget https://repo.hua…

STM32使用ST-LINK下载程序中需要注意的几点

使用keil5的ST-link下载界面 前提是ST-LINK已经连接好,(下图中是没有连接ST-link设备),只是为了展示如何查看STlink设备是否连接的方式 下载前一定设置下载完成后自启动 这个虽然不是必须,但对立即看到新程序的现象…

CVE-2020-0688 远程代码执行漏洞

CVE-2020-0688 远程代码执行漏洞 漏洞产生的主要原因就是在Exchange ECP组件中发现,邮件服务在安装的过程中不会随机生成秘钥,也就是说所有默认安装的Exchange服务器中的validationKey和decryptionKey的值都是相同的,攻击者可以利用静态秘钥…

【深度学习基础】使用Pytorch搭建DNN深度神经网络与手写数字识别

目录 写在开头 一、DNN的搭建 问题描述与数据集 神经网络搭建 模型训练 模型评估 模型复用 二、手写数字识别 任务描述 数据集 神经网络搭建 模型训练 模型评估 写在最后 写在开头 本文将介绍如何使用PyTorch框架搭建深度神经网络模型。实现模型的搭建、模…

USART串口外设

USART介绍 USART:另外我们经常还会遇到串口,叫UART,少了个S,就是通用异步收发器,一般我们串口很少使用这个同步功能,所以USART和UART使用起来,也没有什么区别。 其实这个STM32的USART同步模式&a…