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

визуализация 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
}

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

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

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

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.

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

Блог SkillFactory
Добавить комментарий