在本文中,我们将不讨论提交的有关CFC的通知的法律方面,关于参与CFC的法律方面,我们将考虑该问题的技术方面。
毫无疑问,如果所涉及的控股公司将自己表示为LLC-> KIK-> Russian类型的简单结构,那么在机器的参与下在此处建造一些东西是不切实际的,如果结构分支,翻倍并且没有这些交织的数量,则是另一回事。
让我们看一下几种现有的图形解决方案,它们可以使您的工作变得更轻松。
为了方便可视化,将使用jupyter笔记本和python环境。
Networkx
该解决方案是提出的解决方案中最早的,并且不能吹嘘其交互性。在哈布雷(Habré)上也有关于此包裹的同一篇古代文章。
但是,旧的并不意味着不好,并且此选项在绘图和计算方面是最成功的选项之一。
通过jupyter安装和导入模块:
!pip install networkx
import networkx as nx
我们还导入其他添加。可以帮助您绘制形状的模块:
from matplotlib import pyplot as plt
%matplotlib inline
plt.rcParams.update({
'figure.figsize': (7.5, 7.5),
'axes.spines.right': False,
'axes.spines.left': False,
'axes.spines.top': False,
'axes.spines.bottom': False})
让我们使用networkx构建第一个网络:
from pathlib import Path
data_dir = Path('.') / 'data'
# Read edge list
G = nx.read_edgelist('example.edgelist')
# Draw network
#pos = nx.spring_layout(G)
pos = nx.spectral_layout(G)
#pos = nx.planar_layout(G)
nx.draw_networkx(G, pos)
plt.gca().margins(0.15, 0.15)
这是发生的事情:
如您所见,伊万诺夫拥有两个CFC,而这些CFC又拥有俄罗斯法人实体。通过人。
让我们分析上面的代码。
我们导入了模块,并指定了从以下位置读取磁盘上数据的位置:
from pathlib import Path
data_dir = Path('.') / 'data'
当前目录被读取为“ example.edgelist”:
G = nx.read_edgelist('example.edgelist')
* example.edgelist是一个纯文本文件,如下所示:
# source target
1
2
1 2
1 _
2 _
这些值是由某人记录的,它们之间有一个空格。
接下来,我们确定了网络的外观:
pos = nx.spectral_layout(G)
如果我们更改为pos = nx.spring_layout(G),则它将采用以下形式:
奇怪的是,这种安排最适合较大的结构。
最后,我们绘制了网,标记了缩进:
nx.draw_networkx(G, pos)
plt.gca().margins(0.15, 0.15)
保存图片很容易:
plt.savefig('plot.png')
如何在Networkx中绘制线段
#
H = G.subgraph(['', '1', '_'])
plt.subplot(212)
print(":")
nx.draw_networkx(H)
我们在这里没有
缩进,名称为“ left”:Networkx使用节点和它们之间的链接的概念进行操作。在我们的情况下,节点是Ivanov,KIK1,KIK2,Romashka_OOO,Bucket_AO。链接是example.edgelist文件中的链接。
您只需参考G.nodes和G.edges方法即可看到它们:
networkx中的方向图(有向边列表)
让我们稍微澄清一下构造的网络,添加箭头:
# Read edge list
G = nx.read_edgelist(
str('example.edgelist'),
create_using=nx.DiGraph)
pos = nx.spectral_layout(G)
# Draw network
nx.draw_networkx(G, pos, arrowsize=20)
plt.gca().margins(0.15, 0.15)
进行微小的更改就可以更清晰地描绘谁是谁的所有者:
如您所见,在代码中,更改很小。
下一步是构建一个图形,在该图形中所有权包的大小将可见。
为此,您需要熟悉weight(重量)的概念是networkx可以使用的第三个主要参数。要将其包括在工作中,您需要将这些权重添加到文本文件中,例如:
# source target
1 100
2 100
1 2 50
1 _ 100
2 _ 100
现在,让我们使用权重重建网络并在图中指定权重:
# Read edge list
G = nx.read_weighted_edgelist(
str('example2.edgelist'))
# Extract weights
weights = [d['weight'] for s, t, d in G.edges(data=True)]
nx.draw_networkx(G,pos)
labels = nx.get_edge_attributes(G,'weight')
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels)
plt.gca().margins(0.15, 0.15)
* example2.edgelist是上面带有权重生成的文件。
我们得到以下图片:
谁拥有谁以及如何拥有,networkx
现在,作为律师兼程序员,我们需要了解Ivanov拥有的顺序和数量,例如Bucket_AO公司,以及他是否完全拥有它。为了确定分支控股公司和目标LLC(JSC)的所有链中的所有权的事实,这是必需的,以便以后可以在CFC通知中注册这些链。
使用networkx,您可以按照以下步骤进行操作:
list(nx.all_simple_paths(G,'', '_'))
第一个参数是所有者节点,第二个参数是我们要构建路径的节点。
使用此方法,您可以看到Ivanov的Bucket_AO属于以下链:
[['', '1', '2', '_'], ['', '2', '_']]
通过图形确认。
您可以通过乘以相应节点之间的权重来找到所有权份额:1 * 0.5 * 1 = 0.5,1 * 1 = 1。份额超过25%,必须提交通知。
在代码中,乘法是通过以下拐杖完成的(尚未找到更优雅的方法):
x=0
b=0
c=[]
for i in list(nx.all_simple_paths(G,'', '_')):
for a in i:
if x>len(i)-2:
pass
else:
b=int(nx.bidirectional_dijkstra(G, i[x],i[x+1])[0])#
x+=1
c.append(b/100)
print(c)
import numpy as np
print(np.prod(c))
x=0
b=0
c=[]
for i in list(nx.all_shortest_paths(G,'', '_')):
for a in i:
if x>len(i)-2:
pass
else:
b=int(nx.bidirectional_dijkstra(G, i[x],i[x+1])[0])#
x+=1
c.append(b/100)
print(c)
import numpy as np
print(np.prod(c))
在第一种情况下,它将显示0.5的分数,在第二种情况下,它将显示0.5的分数
。例如,Netwulf。
净水
文档在这里。
网络本身是交互式的,这是其主要优势。安装python软件包后,让我们构建网络:
import netwulf as nw
plt.figure(figsize=(200,200))
G = nx.read_weighted_edgelist(str('example2.edgelist'),create_using=nx.DiGraph)
pos = nx.spring_layout(G)
nw.visualize(G)
运行代码后,jupyter冻结,并且在打开的其他浏览器窗口中,您可以看到结果:
在面板的右侧,您可以看到选项,这些选项的更改会影响在线构建的网络。
该软件包的缺点是尚无法显示节点之间的权重和箭头,但作者承诺对其进行改进。
*要返回jupyter,您需要单击“发布到python”选项:
此类python可视化的另一个不错的选择是年轻的webweb项目。
网路
文档在这里。
该网络以类似的方式构建:
from webweb import Web
web = Web(title='kitchen_sink')
web.display.networkName = 'tree'
web.display.networkLayer = 2
web.display.colorBy = 'ring'
web.display.sizeBy = 'degree'
web.display.gravity = .3
web.display.charge = 30
web.display.linkLength = 15
web.display.colorPalette = 'Greens'
web.display.scaleLinkOpacity = False
web.display.scaleLinkWidth = True
from pathlib import Path
data_dir = Path('.') / 'data'
# Read edge list
G = nx.read_edgelist('example.edgelist',create_using=nx.DiGraph)
plt.figure(figsize=(200,200))
# Draw network
pos = nx.spring_layout(G)
Web(list(G.edges)).show()
与netwulf相比的明显优势是:能够用颜色突出显示关键节点,可以在网络上用文本搜索具有突出显示的节点:
总而言之,我们可以说networkx的发展后代-netwulf和webweb有助于快速了解小型公司的结构。这两个模块都有冻结模式,可冻结由于图的交互性而将一堆粘在一起的节点冻结。但是,即使使用它们,使用大型结构(节点数量超过200个)也不容易。
财政部的“基座”,交叉和环所有权
构造这样的结构时,如果不是因为一件事破坏了整个画面,那么一切都会很好。但是,这是因为公司的控股权是通过其他法人实体拥有的。脸,这称为交叉所有权或戒指所有权。
财政部来信中的图片(例如,自02.07.2013-4-13/ 11912起)看起来像这样。
交叉所有权: 环形
:
让我们看看networkx如何为D参与B的交叉所有权计划定义链接。
让我们创建一个具有链接的边列表:
# source target
D B 45
B A 40
A B 55
E A 60
建立具有权重的网络后,您可以看到A和B之间的反馈未得到反映:
如果您构建的没有权重的网络(带有箭头)可以看出:
计算结果如何? D在B中的累积份额是多少?
这里的一切似乎都是透明的,有45%
,networkx给出了命令列表(nx.all_simple_paths(G,'D','B')):
[['D','B']]
但是并不是所有的事情都那么简单。
财政部表示,D在B中的总份额由以下公式确定:
并且将为57.69%。
该怎么办? networkx是无能为力的吗?
完全没有,networkx会揭示这种情况,但是根据“法律信”,计算公式将有所不同。
通过将
AA
BB条目添加到边缘列表,可以部分解决此问题
此外,使用命令列表(nx.nodes_with_selfloops(G)),您可以查看自身参与的节点,但是在确定从D到B的路径时仍未考虑到这一点。
jupyter笔记本下载-此处。