2016-07-06 4 views
1

У меня есть набор структурированных строк. Есть ли чистый способ визуализации этих данных с помощью дерева? В настоящее время я читаю http://www.graphviz.org/ и https://pypi.python.org/pypi/pydot, но мне кажется, что мне нужно будет сделать много рефакторинга, чтобы получить свои строки в их формате.Дерево с несколькими строками, Python

String       Occurrence 
A:B:C:D       355 
A:B:C:D:F      330 
A:B:C:E:H      78 
A:B:C:D:G      37 
A:B:C:E:I      33 
...        ... 

EDIT: Есть ли способ, чтобы инструмент считывал это «:» разделенное форматирование данных? enter image description here

+0

Вопрос очень неясно. Вы спрашиваете, как лучше всего визуализировать строки или как использовать graphviz и pydot, или как преобразовать строки в требуемый формат? В случае последнего, что это - необходимый формат? –

+0

_it Кажется, мне нужно будет сделать много рефакторинга, чтобы получить свои строки в их формате. Да, когда вы используете свой собственный формат данных вместо стандартизованных форматов, таких как * .DOT, вам нужно написать свои собственные адаптеры/конвертеры. Что именно вы ожидали, что есть какой-то инструмент в юниверсе, который на 100% соответствует вашему собственному формату данных и выводит данные точно так, как вы хотите? Удачи с этим. [DOT] (https://en.wikipedia.org/wiki/DOT_ (graph_description_language)) является стандартом для описания графиков, graphviz - один из лучших бесплатных инструментов для извлечения их из файлов DOT. Используйте его –

+0

Там мы идем. Преобразование в формат * .DOT - это то, что я искал. Спасибо, Рогальский. Простой способ: https://en.wikipedia.org/wiki/DOT_(graph_description_language) – user3155053

ответ

0

Преобразуя «:» в «->» и обертывая с помощью .DOT-форматирования, прорисовку легко.

digraph graphname { 
A -> B -> C -> D; 
A -> B -> C -> D -> F; 
A -> B -> C -> E -> H; 
A -> B -> C -> D -> G; 
A -> B -> C -> E -> I; 
} 

Я проверил мой маленький фрагмент кода здесь: http://sandbox.kidstrythisathome.com/erdos/

1

не «простой» подход, но этот сценарий будет разобрать ваш файл в дерево, с каждым значением «размер», хранящегося в None индекс :

tree.txt

A:B:C:D       355 
A:B:C:D:F      330 
A:B:C:E:H      78 
A:B:C:D:G      37 
A:B:C:E:I      33 

tree.py

import re 
f = open('tree.txt', 'r') 
tree = {} 
for line in f: 
    parts = re.split('\s+', line) 
    if parts[0] and parts[1]: 
     pointer = tree 
     node = parts[0].split(':') 
     for key in node: 
      if not key in pointer: 
       pointer[key] = {None: None} 
      pointer = pointer[key] 
     try: 
      pointer[None] = int(parts[1]) 
     except: 
      pass 
print(tree) 

tree будет выглядеть следующим образом:

{ 
    'A': { 
     'B': { 
      'C': { 
       'D': { 
        'F': {None: 330}, 
        'G': {None: 37}, 
        None: 355 
       }, 
       'E': { 
        'H': {None: 78}, 
        'I': {None: 33}, 
        None: None 
       }, 
       None: None 
      }, 
      None: None 
     }, 
     None: None 
    } 
} 
Смежные вопросы