Создать древовидный граф из CSV - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть следующий CSV-файл (ниже приведен пример), и я хочу создать карту сайта, используя python:

title, url, id, parentid
'HomePage', 'www.example.com ',' 1111 ',' 0000 '' FirstPage ',' www.example.com/firstpage','2222 ', '1111' 'SecondPage', 'www.example.com/secondpage','3333',' 1111 '

Я считаю, что древовидный граф является наиболее подходящим.Существует отношение один ко многим.Сайт может иметь несколько дочерних сайтов, но принадлежит только одному.Я ищу простую библиотеку Python для достижения этой цели, так как я не очень разбираюсь в графиках.graph

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Рядом с деревом для его отображения можно использовать модуль Python Graph networkx .

import matplotlib.pyplot as plt
import networkx as nx
import csv
G=nx.DiGraph()
lables = {}
edge=[]
with open('test.csv') as f:
     reader = csv.reader(f)
     next(reader)  # skip the first line in the input file
     for i,row in enumerate(reader):
         print(row)
         lables[row[2]] = row[0]
         if i!= 0:
            edge.append((row[2],row[3]))
G.add_edges_from(edge)
# positions for all nodes
pos = nx.spring_layout(G)
# nodes
nx.draw_networkx_nodes(G, pos,node_size=1000)
# edges
nx.draw_networkx_edges(G, pos, with_labels = False ,width=6)
# labels
nx.draw_networkx_labels(G, pos,lables,font_size=16)
plt.axis('off')
plt.show()

site map

0 голосов
/ 01 февраля 2019

Предположим, у вас есть следующий CSV-файл:

title, url, id, parentid
HomePage, www.example.com, 1111,0000
FirstPage, www.example.com/ firstpage, 2222,1111
SecondPage, www.example.com / secondpage, 3333,1111

Запустите этот скрипт для файла CSV:

import csv
from anytree import Node
from anytree.exporter import DotExporter

nodes = {}
with open('file.csv') as f:
    reader = csv.reader(f)
    next(reader)  # skip header
    for i, row in enumerate(reader):
        name = '{}\n{}'.format(row[0], row[1])
        node_id = row[2]
        parent_id = row[3]
        if i == 0:
            node = Node(name)  # root node
        else:
            node = Node(name, nodes[parent_id])
        nodes[node_id] = node

DotExporter(nodes[next(iter(nodes))]).to_picture('tree.png')  # graphviz required

И вы 'получите:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...