На этом шаге мы рассмотрим назначение и использование функции lineplot().
Для визуализации отношений в данных в виде линейного графика применяется функция lineplot(). Такой тип графика чаще всего используется для визуализации временных рядов и зависимостей между переменными, имеющими непрерывный характер, например, такими как температура, давление, стоимость и т.д.
Начнем с построения простой зависимости одной переменной от другой. Для начала импортируем необходимые библиотеки:
import matplotlib.pyplot as plt import seaborn as sns import numpy as np
Установим стиль оформления графиков:
sns.set_style("darkgrid")
Сгенерируем набор случайных данных и воспользуемся функцией lineplot() для отображения зависимости между ними:
np.random.seed(123) x = [i for i in range(10)] y = np.random.randint(10, size=len(x)) sns.lineplot(x, y)
Полный текст приложения:
import matplotlib.pyplot as plt import seaborn as sns import numpy as np sns.set_style("darkgrid") np.random.seed(123) x = [i for i in range(10)] y = np.random.randint(10, size=len(x)) sns.lineplot(x, y) plt.show()
В первой строке задается зерно генератора, это нужно сделать для того, чтобы каждый раз при запуске программы генерировались одни и те же данные. После этого создаем наборы данных для оси абсцисс (ось х) - последовательность от 0 до 9, оси ординат (ось у) - случайные числа в диапазоне от 0 до 9 в количестве, равном числу элементов в списке х. Далее вызываем функцию lineplot() для отображения зависимости между созданными наборами. В нашем случае, мы воспользовались вариантом, когда данные передаются в функцию напрямую, в виде векторов. Результат работы программы представлен на рисунке 1.
Рис.1. Результат работы функции lineplot()
На практике данные для анализа чаще всего подготавливаются в виде структур Series или DataFrame библиотеки pandas. Создадим ещё несколько наборов данных:
np.random.seed(123) sample = [i for i in range(10)] y = np.random.randint(10, size=len(sample)) z = np.random.randint(4, size=len(sample)) data = [sample, y, z]
Объединим их в один DataFrame, это можно сделать так:
df = pd.DataFrame(data).transpose() df.columns = ['sample', 'y_val', 'z_val']
df = pd.DataFrame({'sample': sample, 'y_val': y, 'z_val': z})
Посмотрим на получившийся набор данных: содержимое структуры df представлено в таблице 1.
sample | y_val | z_val |
---|---|---|
0 | 2 | 2 |
1 | 2 | 3 |
2 | 6 | 1 |
3 | 1 | 0 |
4 | 3 | 2 |
5 | 9 | 0 |
6 | 6 | 3 |
7 | 1 | 1 |
8 | 0 | 3 |
9 | 1 | 2 |
Отобразим зависимость y_val от sample из набора df с помощью функции lineplot():
sns.lineplot(x='sample', y='y_val', data=df)
Через параметр x задаётся имя признака из набора данных для оси абсцисс, через у - для оси ординат, data - это DataFrame, из которого данные будут извлечены.
Вот полный текст приложения:
import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd sns.set_style("darkgrid") np.random.seed(123) sample = [i for i in range(10)] y = np.random.randint(10, size=len(sample)) z = np.random.randint(4, size=len(sample)) data = [sample, y, z] df = pd.DataFrame({'sample': sample, 'y_val': y, 'z_val': z}) sns.lineplot(x='sample', y='y_val', data=df) plt.show()
Рис.2. Визуализация зависимости признака y_val от sample
Если необходимо отобразить все элементы из DataFrame набора, то можно его передать в lineplot() через параметр data, при этом не задавая x и у:
Полный текст приложения:
import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd sns.set_style("darkgrid") np.random.seed(123) sample = [i for i in range(10)] y = np.random.randint(10, size=len(sample)) z = np.random.randint(4, size=len(sample)) data = [sample, y, z] df = pd.DataFrame({'sample': sample, 'y_val': y, 'z_val': z}) sns.lineplot(data=df) plt.show()
Рис.3. Отображение всего набора данных df
На следующем шаге мы продолжим изучение этого вопроса.