FitureGraph
Автор Константин Земоглядчук
Лицензия GPL
Зачем нужен этот скрипт
Программа предназначена для визуализации данных о множестве предметов, обладающих множеством признаков. Такой объем данных просто невозможно охватить полностью одним взглядом, однако хочется узнать такие элементарные вещи, как:
- Как признаки и их сочетания соотносятся друг с другом по своей распространенности
- Какие из сочетаний встречаются чаще всего
- Как много вариантов имеет каждый из анализируемых признаков
Проблема, побудившая меня написать этот скрипт состояла в следующим: у меня были данные о морфологии раковины множества видов наземных моллюсков: в таблицу были внесены более девятиста видов. Раковина каждого вида описывалась по семи признакам, а каждый признак мог иметь несколько вариантов своего проявления.
Входные данные для скрипта
Входными данными для программы служит таблица в формате CSV, где в строках находятся предметы, а в столбцах признаки, которыми обладают эти предметы, при этом каждый признак может иметь несколько вариантов.
Таблица данных, которую нужно визуализировать
признак 1 | признак 2 | признак 3 | признак 4 | признак 5 | |
---|---|---|---|---|---|
Предмет 1 | вариант 1 | вариант 2 | вариант 1 | вариант 1 | вариант 1 |
Предмет 2 | вариант 2 | вариант 2 | вариант 2 | вариант 1 | вариант 2 |
Предмет 3 | вариант 3 | вариант 1 | вариант 3 | вариант 1 | вариант 3 |
Предмет 4 | вариант 3 | вариант 3 | вариант 4 | вариант 1 | вариант 4 |
Предмет 5 | вариант 1 | вариант 2 | вариант 4 | вариант 2 | вариант 1 |
Формат таблицы должен удовлетворять следующим условиям:
- разделителем полей служит символ запятой – ‘,’
- во всех строках должно находится одинаковое количество признаков, ни одна ячейка признака не должна быть пустой
Результат работы скрипта
В результате работы скрипта генерируется рисунок в формате SVG с древовидной структурой
На получившемся рисунке, каждый уровень разветвления – это признак из соответсвующего столбца таблицы, каждая ветвь – это вариант этого признака. Чем больше дочерних ветвей выходит из родительской, тем больше вариантов признака из следующего столбца таблицы связаны с текущим вариантом признака из текущего столбца. Длинна ветви пропорционально доли предметов с данным признаком в выборки: чем длиннее ветвь, тем больше предметов с данным признаком.
Надо понимать, что для данного скрипта такие понятия как “дочерние” и “корневой” признаки очень условны. Дочерними ветвями скрипт делает те, которые находятся в следующем, по отношению к текущему, столбце
Для улучшения отображения дерева, для того чтобы свести к минимуму перекрывание ветвей во время его генерации скрипт придерживается следующих правил:
- Первые ветви выходят не из одной точки, а находятся друг от друга на некотором расстоянии
- Наиболее длинная ветвь помещается в центр куста, для того чтобы угол ее отклонения был минимален
- Ветви, находящиеся по своей длинне на втором и третьем месте, перемещаются на левый и правый края куста.
Аргументы коммандной строки
Скрипт может принимать следующие аргументы:
-i
(--input_file
): Путь к файлу с данными. Если аргумент не указан, скрипт ищет файл с названием data.csv в текущей директории-wd
, (--weight_displaing
): Определяет, каким образом будет показан вес ветвей дерева. Может принимать три значения:- “numbers”: показывает количество предметовс данным признаком
- “relative_percents”: показывает вес в процентах, принимая за 100% количество особей в ветви, которая является корневой по отношению к данной
- “absolute_percents”: показывает вес в процентах, принимая за 100% количество особей во всех ветвях
-st
(--styles
): определяет, какие стили пудут переданы через внедренный css. Может принимать три значения:- “all”: внедряются стили всех элементов
- “no-color-styles”: внедряются все стили кроме стилей цветов.
- “no-all-styles”: не внедряются никакие стили. Это нужно, если вы, например, захотите внедрить полученный svg рисунок дерева в html страницу и самостоятельно определить характер каждого из его элементов
-cs
(--circle_size
): определяет размер кружков в узлах дерева. Может принимать два значения:- “small”
- “big”
Описание
Скрипт, предназначенный для визуализации распределения признаков, среди большей группы предметов