Представляете иерархию деревьев с использованием электронной таблицы Excel, которая легко анализируется с помощью Python CSV-читателя?

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

Клиент уже знает иерархию продуктов и хотел бы поместить все в таблицу Excel для анализа.

Какой формат мы можем использовать, что позволяет клиенту легко вводить и поддерживать данные, и что я могу легко проанализировать дерево с помощью Python CSV? Переход с столбцом для каждого уровня не лишен его икоты (особенно если ввести несколько типов node)

Ответ 1

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

Electronics | Computers    | Laptops
Electronics | Computers    | Desktop
Electronics | Game Systems | Xbox
Electronics | Game Systems | PS3
Electronics | Game Systems | Wii
Electronics | MP3 Players  | iPod Shuffle
Clothing    | Menswear     | Pants         | Shorts
Clothing    | Menswear     | Pants         | Pajamas

В script, Python перемещается по строкам, по ячейкам, отслеживая как текущую строку, так и предыдущую строку. Поскольку вы переходите с левого на правое, вы переходите от корня к листу. Если текущий столбец в текущей строке всегда отличается от текущего столбца в предыдущей строке, мы должны были спуститься по новой ветке, и мы добавим новый node к нашему дереву.

Ответ 2

Если в этом решении необходима таблица, иерархия может быть представлена ​​отступами на стороне Excel (пустые ячейки в начале строк), одна строка на node/лист. На стороне Python можно разделить их на древовидную структуру (конечно, нужно отфильтровать пустые строки и некоторые другие исключения). Тип Node может быть указан в его собственном столбце. Например, это может быть даже первая непустая ячейка.

Я предполагаю, что уровень иерархии ограничен (скажем, максимум 8 уровней), в противном случае Excel вообще не является хорошей идеей.

Кроме того, существует библиотека под названием openpyxl, которая может помочь напрямую считывать файлы Excel, без необходимости конвертировать их в CSV (это добавляет удобство для общего подхода).

Другой подход состоит в том, чтобы поместить номер уровня в первую ячейку. Число никогда не должно увеличиваться на 2 или более.

Еще один подход заключается в использовании некоторых идентификаторов для каждого Node, и каждый лист Node должен указать родительский идентификатор. Но это не очень удобно.