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

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

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

前言

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

一、基础数据

本博文利用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:
            continue
        else:
            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 = 0
    for 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)) + 1
    earth = []
    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 + 1
        if count > 5:
            break
    iter(G)

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为坤灵管理型交换机S300,S500,S310,S210,S220,S200 web端开局配置

一. 准备线缆 笔记本或没有COM口的电脑,需准备转接线,并安装好随线光盘的驱动,检查设备管理器中COM口是否正常 2.连接电脑与交换机的CONSOLE口 二,准备软件putty。 Download PuTTY: latest release (0.81) 配置步骤如下: 开启HTTP服务。设置https://1…

路由策略实验2

对R7,重发布直连路由 对R2,做双向 对R3同样 先不改优先级 查看,知道所有给R3的路由为151,全部为OSPF。 知道了是错误的,先把3,4之间的线路断掉 接着对R3,让优先级全部回到100(displa…

STL中vector动态二维数组理解(杨辉三角)

题目链接&#xff1a;118.杨辉三角 题目描述&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 题目指要&#xff1a; 本题的主要目的是理解vector<vector<int&…

【Modelground】个人AI产品MVP迭代平台(1)——平台简介

文章目录 背景什么是Modelground&#xff1f;什么是Mediapipe&#xff1f;目标读者总结 背景 这个时代是AI的时代。相信你也能感觉到&#xff0c;最近几年&#xff0c;AI大模型层出不穷&#xff0c; 且迭代速度极快。无论你是哪个行业&#xff0c;都有必要严肃认真地考虑AI会给…

小公司的软件开发IT工具箱

目录 工具链困境 难题的解决 达到的效果 资源要求低 工具箱一览 1、代码管理工具 2、自动化发版&#xff08;测试&#xff09;工具 3、依赖库&#xff08;制品包&#xff09;管理 4、镜像管理 5、授权管理&#xff08;可选&#xff09; 待讨论&#xff1a;为什么不是…

模糊小波神经网络(MATLAB 2018)

模糊系统是一种基于知识或规则的控制系统&#xff0c;从属于智能控制&#xff0c;通过简化系统的复杂性&#xff0c;利用控制法来描述系统变量之间的关系&#xff0c;采用语言式的模糊变量来描述系统&#xff0c;不必对被控对象建立完整的数学模型。相比较传统控制策略&#xf…

Django 注册应用

上一章Django 创建项目及应用-CSDN博客 创建的应用&#xff0c;需要在主项目的myshop.settings.py 文件下注册 INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.sta…

集成算法:Bagging模型、AdaBoost模型和Stacking模型

概述 目的&#xff1a;让机器学习效果更好&#xff0c;单个不行&#xff0c;集成多个 集成算法 Bagging&#xff1a;训练多个分类器取平均 f ( x ) 1 / M ∑ m 1 M f m ( x ) f(x)1/M\sum^M_{m1}{f_m(x)} f(x)1/M∑m1M​fm​(x) Boosting&#xff1a;从弱学习器开始加强&am…

[激光原理与应用-95]:电控 - PCB布线常见降低信号干扰的手段

目录 一、降低信号干扰的PCB布线 二、常见规则与技巧 2.1. 布线规则 (1) 信号线和电源线分开布线 (2) 信号线和地线相邻布线 (3) 高频信号线短而直 (4) 电源线宽而短 (5)地线密集布线 2.2. 布线技巧 (1)使用层间连接 (2)使用电容和电感 (3)使用阻抗匹配 一、降低信…

一本企业画册怎么制作成二维码分享

​在这个数字化时代&#xff0c;二维码已经成为一种便捷的分享方式。企业画册&#xff0c;作为展示企业形象、宣传产品和服务的重要工具&#xff0c;也可以通过二维码进行分享。现在我来教你如何将一本企业画册制作成二维码分享。 1. 准备好制作工具&#xff1a;FLBOOK在线制作…

如何高效管理团队任务?强大的在线管理团队多任务的神器-YesDev

任务是最小的工作项&#xff0c;工时是可以对研发产能进行量化。 一员工工时 工作组工时登记配置 针对于工作组&#xff0c;你可以开启/关闭工时登记。关闭工作组的工时登记后&#xff0c;整个工作组将取消工时登记&#xff0c;重新开启后恢复。 在同一个工作组内&#xff0c…

如何在路由器上安装代理服务:详细教程

如何在路由器上安装代理服务&#xff1a;详细教程 步骤一&#xff1a;通过漏洞进入路由器系统开启Telnet服务使用Telnet登录路由器系统查看系统信息和CPU信息步骤二&#xff1a;交叉编译MIPS程序 Go对MIPS的支持 安装TFTP Server使用BusyBox tftp传输文件在路由器系统中下载编译…

Kubernetes——Pod控制器

目录 一、Pod控制器 1.定义 2.Pod与控制器的关系 3.作用 4.Pod控制器的类型组成及特点 4.1Pod控制器的类型 4.1.1ReplicaSet 4.1.2Deployment 4.1.3DaemonSet 4.1.4StateSet 4.1.5Job 4.1.6CronJob 4.2Pod与控制器的关系 二、Kubernetes中的服务发现 1.服务发现的…

【论文阅读】遥感大模型GeoChat : Grounded Large Vision-Language Model for Remote Sensing

论文概述 本文是遥感领域的大模型相关的一篇工作&#xff0c;发表在CVPR2024。 本文标题&#xff1a;GeoChat : Grounded Large Vision-Language Model for Remote Sensing 论文地址&#xff1a;https://arxiv.org/abs/2311.15826 开源代码&#xff1a;https://github.com/mbz…

网络编程TCP

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:Java网络编程(下)&#x1f649; &#x1f439;今日诗词: 壮士当唱大风哥, 宵小之徒能几何&#xff1f;&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微…

Liunx音频

一. echo -e "\a" echo 通过向控制台喇叭设备发送字符来发声&#xff1a; echo -e "\a"&#xff08;这里的 -e 选项允许解释反斜杠转义的字符&#xff0c;而 \a 是一个响铃(bell)字符&#xff09; 二. beep 下载对应的包 yum -y install beep 发声命令 be…

Linux shell编程学习笔记55:hostname命令——获取或设置主机名,显示IP地址和DNS、NIS

0 前言 2024年的网络安全检查又开始了&#xff0c;对于使用基于Linux的国产电脑&#xff0c;我们可以编写一个脚本来收集系统的有关信息。其中主机名也是我们要收集的信息之一。 1. hostname命令 的功能、格式和选项说明 我们可以使用命令 hostname --help 来查看hostname命令…

[vue2项目]vue2+supermap[mapboxgl]+天地图之地图的基础操作(画线+自定义打点)

二、地图的基础操作 1、画线 案例(1) this.map.on("load", () => {let geometryLine = {type: "Feature",geometry: {// 定义类型type: "LineString",coordinates: [[113.39793764, 34.05675322],[113.35187554, 32.4392251],[112.476851…

电子电器架构 --- 什么是域控制器?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

JAVA流程控制do...while循环

1.对于while语句而言&#xff0c;如果不满足条件&#xff0c;则不能进入循环。但有时候我们需要即使不满足条件&#xff0c;也至少执行一次 2.do...while循环和while循环相似&#xff0c;不同的是&#xff0c;do...whlie循环至少会执行一次 do{ //代码语句 }while&#xff08;…