Создавайте красивые и интерактивные диаграммы аккордов с помощью Python
По мнению специалистов по данным, R против Python - это постоянная борьба, когда речь заходит о том, какой язык лучше. Хотя у каждого языка есть свои сильные стороны, на мой взгляд, у R есть один передовой трюк, который трудно превзойти: R имеет фантастические инструменты для передачи результатов посредством визуализации.
Этот конкретный момент выделился для меня на этой неделе, когда я пытался найти привлекательный способ визуализировать корреляцию между функциями в моих данных. Я наткнулся на диаграммы аккордов! (К которым мы вернемся через минуту). Я видел несколько примеров R для создания диаграмм аккордов с помощью Circlize, где вы могли просто передать данные правильной формы в функцию chordDiagram ()!
Вы должны были видеть мое выражение лица, когда я нашел реализацию Chord Diagram в Python Plotly. Даже чтобы получить базовую фигуру, нужно было приложить немало усилий. Казалось, что конечный результат не стоит затраченных усилий. Я почти отказался от идеи использовать диаграмму аккордов, когда наткнулся на chord on pypi.
Что такое диаграмма аккордов?
Диаграмма аккордов представляет собой потоки между набором отдельных элементов. Эти элементы, известные как узлы, отображаются по кругу, а потоки отображаются как соединения между узлами, показанные в виде дуг.
Если это не объясняет четко, давайте взглянем на пример:
Приведенная выше хордовая диаграмма визуализирует количество раз, когда два объекта (в данном случае города) встречаются вместе в маршруте путешественника, это позволяет нам изучить поток между ними.
Как с минимальными усилиями создать красивую диаграмму аккордов?
Позвольте мне провести вас через процесс подготовки данных, а затем создать диаграмму аккордов.
Монтаж:
Предполагая, что Pandas уже установлен, вам необходимо установить пакет chord из pypi, используя -
pip install chord
Подготовка данных:
Я использую набор данных о ценах на жилье в Бостоне, который можно скачать здесь.
# импорт библиотеки Pandas
import pandas as pd
# чтение данных из csv
df = pd.read_csv("housing.csv")
Моя цель - визуализировать корреляцию между функциями в наборе данных. Итак, для краткости опущу несколько столбцов. У меня останется только 6 функций. (Вы можете пропустить это, если хотите)
# Список удаляемых столбцов и их удаление.
delete = ['ZN', 'INDUS', 'CHAS', 'DIS','RAD','PTRATIO','B','LSTAT']
df.drop(delete, axis=1, inplace=True)
Теперь создадим корреляционную матрицу с помощью функции Pandas corr ().
# Теперь матрица содержит матрицу значений 6x6.
matrix = df.corr()
# Замена отрицательных значений на 0, поскольку функции могут иметь отрицательную корреляцию.
matrix[matrix < 0] = 0
# Умножение всех значений на 100 для ясности, поскольку значения корреляции лежат ч / б 0 и 1.
matrix = matrix.multiply(100).astype(int)
# Преобразование DataFrame в 2D-список, поскольку это требуемый формат ввода.
matrix = matrix.values.tolist()
Теперь эти данные идеально подходят для построения графиков!
Построение диаграммы:
Единственный шаг, оставшийся до построения графика, - это сохранение имен объектов в виде списка. В моем случае это названия функций.
# Названия функций.
names = ["Crime Rate","N-Oxide","Number of rooms","Older buildings","Property Tax","Median Price"]
Теперь все, что нам нужно сделать, это импортировать пакет -
from chord import Chord
Затем передайте матрицу и имена в функцию Chord ().
Chord(matrix, names).show()
#Примечание. Функция show () работает только с Jupyter Labs.
# (Не блокнот Jupyter)
Это будет ваш результат:
Прежде чем мы пойдем дальше и исследуем другие параметры стиля и вывода, доступные в библиотеке Chord, давайте посмотрим, что представляет собой вывод.
Как видите, когда вы наводите курсор на уровень преступности, вы можете видеть, что он связан с налогом на имущество, старыми зданиями и уровнем N-оксида, но не имеет связи со средней ценой или количеством комнат. Теперь вы можете навести указатель мыши на соединение, и вы увидите значение корреляции между этими функциями.
Вы можете заметить, что медианная цена на 100% коррелирует сама с собой, как и все функции. Это происходит потому, что мы получаем идеальное значение корреляции, когда сравниваем функцию с самой собой. Если хотите, мы можем исправить это с помощью одной строчки кода.
# Работаем с данными перед их преобразованием в 2D-список
# Мы просто конвертируем все 100 единиц идеальной корреляции (в основном единицы) в 0.
matrix[matrix == 100] = 0
matrix = matrix.values.tolist()
Вот ваш результат, гораздо более чистая диаграмма аккордов:
Экспортируйте диаграмму аккордов как HTML:
Поскольку пакет использует в своей основе d3-chord, он также дает нам возможность вывести ChordDiagram в виде полностью редактируемого HTML-файла! Как это круто?
Опять же, один вызов метода сделает это за вас -
Chord(matrix, names).to_html()
# Это создаст файл out.html в вашем текущем каталоге.
Вы можете открыть HTML-код в браузере, чтобы найти ту же интерактивную диаграмму аккордов, или вы можете открыть .html в редакторе кода и настроить остальную часть своей страницы!
Вот мой результат,
То, что я сделал, очень просто. Дело в том, что вывод в формате HTML открывает множество возможностей для использования диаграммы аккордов.
Стиль и настройка:
Цвета:
Вы можете изменить цвета аккордовой диаграммы, передав любые цвета из категориальной палитры d3. Вы можете найти образцы результатов в Официальном руководстве. Но вот пара примеров:
# Просто добавьте параметр цвета и передайте значение.
Chord(matrix, names, colors="d3.schemeDark2").show()
# Просто добавьте параметр цвета и передайте значение.
Chord(matrix, names, colors="d3.schemeAccent").show()
# Добавить все цвета в список.
coloursList = ["#f50057", "#2196f3", "#00e676", "#ff5722", "#00000", "#ff9100"]
# Передать список параметру цветов.
Chord(matrix, names, colors=coloursList).show()
Другие настройки:
Вы также можете настроить метки и прозрачность, ознакомившись с официальным руководством для этого.
Выводы:
Создание визуализаций почти всегда является частью работы Data Scientist. Часть здесь является ключевым словом, потому что это означает, что вы не можете тратить много времени, чтобы привести их в форму, и поэтому мы ищем варианты, которые обеспечивают простую, но функциональную реализацию. Это то, что я пытаюсь изучить в этой статье, создав эффективную диаграмму аккордов с минимальными усилиями.