Представляете иерархию деревьев с использованием электронной таблицы 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 должен указать родительский идентификатор. Но это не очень удобно.