Хабрахабр

[Перевод] Многомерные графики в Python — от трёхмерных и до шестимерных

Примеры многомерных графиков

Введение

В туториале мы будем рисовать графики вплоть до 6 измерений. Визуализация — важная часть анализа данных, а способность посмотреть на несколько измерений одновременно эту задачу облегчает.

Модуль устанавливается как обычно — pip install plotly. Plotly — это питоновская библиотека с открытым исходным кодом для разнообразной визуализации, которая предлагает гораздо больше настроек, чем известные matplotlib и seaborn. Его мы и будем использовать для рисования графиков.

Давайте подготовим данные

перев.), которые представляют собой 26 характеристик для 205 машин (26 столбцов на 205 строк). Для визуализации мы используем простые данные об автомобилях от UCI (Калифорнийский университет в Ирвине — прим. Для визуализации шести измерений мы возьмём такие шесть параметров.

Здесь показаны только 4 строки из 205

Загрузим данные из CSV с помощью pandas.

import pandas as pd
data = pd.read_csv("cars.csv")

Теперь, подготовившись, начнем с двух измерений.

Двухмерная диаграмма рассеяния

Из 6 параметров, price и curb-weight используются ниже как Y и X соответственно. Диаграмма рассеяния — весьма простой и распространенный график.

# Импорт необходимых модулей
import plotly
import plotly.graph_objs as go # Создаём figure
fig1 = go.Scatter(x=data['curb-weight'], y=data['price'], mode='markers') # Создаём layout
mylayout = go.Layout(xaxis=dict(title="curb-weight"), yaxis=dict( title="price")) # Строим диаграмму и сохраняем HTML
plotly.offline.plot(, auto_open=True)

Мы должны создать layout и figure, передав их в функцию offline.plot, после чего результат будет сохранён в HTML файл в текущей рабочей директории. В plotly процесс немного отличен от аналогичного в Matplotlib. В конце статьи будет ссылка на GitHub репозиторий с готовыми интерактивными HTML-графиками. Вот скриншот того, что получится.

Двухмерная диаграмма рассеяния

Диаграмма рассеяния в 3D

Plotly предоставляет функцию Scatter3D для построения интерактивных трёхмерных графиков. Мы можем добавить третий параметр horsepower (количество лошадиных сил) на ось Z.

3D график

Вместо того чтобы вставлять код сюда каждый раз, я добавлял его в репозиторий.

перев.) (Удобнее всего смотреть релевантный код в соседней вкладке параллельно со чтением — прим.

Добавление четвёртого измерения

Мы знаем, что использовать больше трёх измерений напрямую нельзя, но есть обходной путь: мы можем эмулировать глубину для визуализации более высоких измерений с помощью цвета, размера или формы.

Более светлый оттенок маркера будет означать меньший пробег. Здесь, наряду с тремя предыдущими характеристиками, мы будем использовать пробег в городских условиях — city-mpg как четвертое измерение, за которое будет отвечать параметр markercolor функции Scatter3D.

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

4D график с оттенками в качестве 4-го измерения

Добавление пятого измерения

Мы используем характеристику engine-size (размер двигателя) для параметра markersize функции Scatter3D. Размер маркера можно использовать для визуализации 5-го измерения.

Чем выше цена, тем больше двигатель. Наблюдения: размер двигателя связан с некоторыми из предыдущих параметров. Ра́вно как и: ниже пробег — больше двигатель.

5D график с величиной маркера в качестве пятого измерения (размер двигателя)

Добавление шестого измерения

Plotly даёт на выбор 10 различных фигур для 3D графика (звёздочка, круг, квадрат и т.д.). Форма маркера отлично подходит для визуализации категорий. Таким образом, в качестве формы можно показать до 10 различных значений.

Преобразуем эти значения в фигуры: квадрат для 4 дверей, круг для 2 дверей. У нас есть характеристика num-of-doors, которая содержит целые числа — количество дверей (2 или 4). Используется параметр markersymbol функции Scatter3D.

Продолжая изучать график, можно будет сделать больше предположений и выводов. Наблюдения: такое чувство, что у всех самых дешёвых машин по 4 двери (круги).

6D график с формой маркера в качестве шестого измерения (количество дверей)

Можем ли мы добавить больше измерений?

У маркеров есть больше свойств, таких как непрозрачность и градиенты, которые можно задействовать. Конечно можем! Но чем больше измерений мы добавляем, тем труднее удержать их все в голове.

Исходный код

Код на Python и интерактивные графики для всех фигур доступны на GitHub здесь.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть