визуализация python

5 простых способов визуализации данных на Python. Пишем код

Зачем визуализировать?

При анализе данных очень важна наглядность. Чаще всего недостаточно просто собрать что-то и сгруппировать — данные ещё нужно показать. А ещё лучше отобразить данные так, чтобы одного взгляда было достаточно для принятия решений.

Как это работает?

Для визуализации данных в Python чаще всего используют библиотеки Matplotlib, ggplot, Bokeh, pygal, seaborn. А как их использовать, в каком случае и использовать ли вообще, сейчас разберёмся.

Подключим библиотеки Matplotlib и seaborn к проекту:

from math import pi
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
import seaborn as sns

Сначала нам нужны данные для экспериментов: я нашла несколько вакансий на должность веб-разработчика в разных странах и взяла предлагаемую зарплату. Получились такие словари:

salary_2017 = {
  "USA": "1400",
  "China": "1100",
  "Russia": "1350",
  "Germany": "1300",
  "Hungary": "1200",
  "Ukraine": "1200",
  "France": "1400",
  "Sweden": "1500",
  "UK": "1250",
  "Spain": "1300"
}

salary_2018 = {
  "USA": 1700,
  "China": 1300,
  "Russia": 1450,
  "Germany": 1400,
  "Hungary": 1500,
  "Ukraine": 1300,
  "France": 1500,
  "Sweden": 1600,
  "UK": 1500,
  "Spain": 1400
}

Курс по нейронным сетям
Идет набор в группу 49 900 ₽

Теперь нужно решить что именно мы хотим узнать:

  • Какие у нас есть страны и заплаты? (столбчатая диаграмма)
  • Какая самая распространенная зарплата для веб-разработчика? (гистограмма или тепловая карта)
  • Насколько разные зарплаты предлагают? (диаграмма размаха)
  • Как стать веб-разработчиком? (радиальная диаграмма)

1. Столбчатая диаграмма

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

d = OrderedDict(sorted(salary_2018.items(), key=lambda x: x[1]))
values = list(d.values())
keys = list(d.keys())
plt.bar(range(len(d)),values,tick_label=keys)
plt.show()
столбчатая диаграмма визуализация Python

2. Гистограмма

Гистограмма один из вариантов столбчатой диаграммы для оценки распределения значений. Можно оценить частоту появления одного значения или наложить несколько для сравнения. Посмотрим распределение зарплат:

data = list(salary_2018.values())
plt.hist(data, bins=30)
plt.show(
гистограмма визуализация Python

3. Тепловая карта

Тепловая карта разворачивает гистограмму в другую плоскость. Здесь мы цветом показываем частоту разных значений. Посмотрим количество разработчиков по странам. Точного значения мы не знаем, набросаем случайные числа в csv-файл:

workers.csv:
country,salary,workers
USA,1700,130
China,1300,300
Russia,1450,200
Germany,1400,185
Hungary,1500,75
Ukraine,1300,68
France,1500,54
Sweden,1600,100
UK,1500,89
Spain,1400,45

Тогда код будет выглядеть так:

data = pd.read_csv('workers.csv')
df = data.pivot(index='salary', values='workers', columns='country')
df.head()
heatmap_plot = sns.heatmap(df, center=0, cmap='gist_ncar')
plt.show()
тепловая карта визуализация Python
Курс «Python для анализа данных»
Идет набор в группу 31 900 ₽

4. Диаграмма размаха

Диаграмма размаха ещё называется «ящик с усами» — смотрим среднее значение и «усами» показываем максимальные отклонения от него. Построим так:

data= np.array(list(salary_2018.values())).astype(np.int)
plt.boxplot(data)
plt.show()
диаграмма размаха визуализация Python

5. Радиальная диаграмма

Радиальная диаграмма удобна, когда мы хотим сравнить параметры у одной сущности. Например, какие скиллы нужны веб-разработчику:

from math import pi
import matplotlib.pyplot as plt

# Вносим данные - какие скиллы хотим видеть в веб-разработчике
cat = ['Speed', 'Laziness', 'Responsibility', 'Teamwork', 'Decency']
values = [70, 20, 80, 70, 65]

N = len(cat)

x_as = [n / float(N) * 2 * pi for n in range(N)]

# Связываем последнее значение с первым чтобы построить радиальный график
values += values[:1]
x_as += x_as[:1]

# Устанавливаем цвет и толщину линий
plt.rc('axes', linewidth=0.5, edgecolor="#888888")

# Создаем диаграмму
ax = plt.subplot(111, polar=True)

# Устанавливаем стили для сетки
ax.xaxis.grid(True, color="#888888", linestyle='solid', linewidth=0.5)
ax.yaxis.grid(True, color="#888888", linestyle='solid', linewidth=0.5)
ax.set_theta_offset(pi / 2)
ax.set_theta_direction(-1)
ax.set_rlabel_position(0)

# Убираем стандартные метки
plt.xticks(x_as[:-1], [])

# Выводим шаг значения на график
plt.yticks([30, 60], ["30", "60"])

# Берем данные для диаграммы
ax.plot(x_as, values, linewidth=0, linestyle='solid', zorder=3)

# Заполняем область под значениями
ax.fill(x_as, values, 'b', alpha=0.3)

# Ограничиваем области
plt.ylim(0, 100)

# Отрисовываем все элементы
for i in range(N):
    angle_rad = i / float(N) * 2 * pi

    if angle_rad == 0:
        ha, distance_ax = "center", 10
    elif 0 < angle_rad < pi:
        ha, distance_ax = "left", 1
    elif angle_rad == pi:
        ha, distance_ax = "center", 1
    else:
        ha, distance_ax = "right", 1

    ax.text(angle_rad, 100 + distance_ax, cat[i], size=10, horizontalalignment=ha, verticalalignment="center")


# Показываем итоговую диаграмму
plt.show()

Что делать дальше?

Мы рассмотрели самые простые варианты визуализирования данных, но для некоторых задач этого может быть недостаточно, поэтому:

  1. Читайте документацию библиотек Maptolib, ggplot, Bokeh, pygal, seaborn.
  2. Следите за новыми разработками для визуализации.
  3. Записывайтесь на курс по Python для анализа данных от SkillFactory.

Специализация Аналитик Данных

Специализация Data Science

текст: Ушакова Катерина

Поделиться:
Опубликовано в рубрике PythonTagged ,

SkillFactory.Рассылка