README.md

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): Определяет, каким образом будет показан вес ветвей дерева. Может принимать три значения:
    1. numbers”: показывает количество предметовс данным признаком
    2. relative_percents”: показывает вес в процентах, принимая за 100% количество особей в ветви, которая является корневой по отношению к данной
    3. absolute_percents”: показывает вес в процентах, принимая за 100% количество особей во всех ветвях
  • -st (--styles): определяет, какие стили пудут переданы через внедренный css. Может принимать три значения:
    1. all”: внедряются стили всех элементов
    2. “no-color-styles”: внедряются все стили кроме стилей цветов.
    3. “no-all-styles”: не внедряются никакие стили. Это нужно, если вы, например, захотите внедрить полученный svg рисунок дерева в html страницу и самостоятельно определить характер каждого из его элементов
  • -cs (--circle_size): определяет размер кружков в узлах дерева. Может принимать два значения:
    1. small
    2. big
Описание

Скрипт, предназначенный для визуализации распределения признаков, среди большей группы предметов

Конвейеры
0 успешных
0 с ошибкой