Рубрики
Без рубрики

Библиотека Pandas для визуализации данных в Python

Автор оригинала: Usman Malik.

В моей предыдущей статье я объяснил , как библиотека Seaborn может быть использована для расширенной визуализации данных в Python. Сиборн-отличная библиотека, и я всегда предпочитаю работать с ней, однако это немного продвинутая библиотека, и ей нужно немного времени и практики, чтобы привыкнуть.

В этой статье мы увидим, как Pandas, которая является еще одной очень полезной библиотекой Python, может быть использована для визуализации данных в Python. Pandas в основном используется для импорта и управления набором данных в различных форматах, как описано в статье Учебник для начинающих по библиотеке Python Pandas . Возможности визуализации данных Панд менее известны. В этой статье вы сосредоточитесь на возможностях визуализации данных Панд.

Уместно отметить, что, как и Seaborn, возможности визуализации данных Pandas также основаны на библиотеке Matplotlib . Но с помощью Pandas вы можете напрямую строить различные типы визуализаций непосредственно из фрейма данных Pandas, который мы увидим в этой статье.

Основные Сюжеты

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

Набор данных

Набор данных, который мы будем использовать для построения этих графиков, – это знаменитый набор данных “Титаник”. Набор данных можно загрузить с сайта Kaggle. В этой статье мы будем использовать файл train.csv .

Прежде чем импортировать набор данных в наше приложение, нам нужно импортировать необходимые библиотеки. Выполните следующий сценарий

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

Следующий сценарий импортирует набор данных;

titanic_data = pd.read_csv(r"E:\Datasets\train.csv")

Давайте посмотрим, как на самом деле выглядит наш набор данных. Запустите следующий скрипт:

titanic_data.head()

Вывод выглядит следующим образом:

Вы можете видеть, что набор данных содержит информацию о пассажирах несчастного корабля “Титаник”, затонувшего в Северной Атлантике в 1912 году. Набор данных включает в себя такую информацию, как имя, возраст, класс пассажира, выжил ли пассажир или нет и т. Д.

Давайте построим несколько основных графиков, используя эту информацию.

Гистограмма

Чтобы нарисовать гистограмму для любого столбца, необходимо указать имя столбца, за которым следует метод hist () , показанный ниже:

titanic_data['Age'].hist()

Вы можете видеть, как легко построить гистограмму для столбца возраста с помощью Pandas dataframe. Вывод приведенного выше скрипта выглядит следующим образом:

Вы можете передать параметры на основе Matplotlib в метод hist () , так как за сценой Pandas использует библиотеку Matplotlib. Так, например, вы можете увеличить количество ячеек для вашей гистограммы с помощью атрибута bin следующим образом:

titanic_data['Age'].hist(bins=20)

В приведенном выше сценарии мы устанавливаем количество ячеек для нашей гистограммы равным 20. Вывод выглядит следующим образом:

Вы можете улучшить стиль графиков, импортировав библиотеку Seaborn и установив значение для ее атрибута set_style . Например, давайте установим стиль сетки на темно-серый. Выполните следующий сценарий:

import seaborn as sns
sns.set_style('darkgrid')

Теперь снова постройте гистограмму, используя следующий скрипт:

titanic_data['Age'].hist(bins=20)

На выходе вы увидите темно-серые сетки на заднем плане нашего участка:

Существует два способа использования фрейма данных для построения графиков. Один из способов-передать значение параметра kind функции plot , как показано ниже:

titanic_data['Age'].plot(kind='hist', bins=20)

Вывод выглядит следующим образом:

Другой способ заключается в непосредственном вызове имени метода для графика с помощью функции plot без передачи имени функции в атрибут kind . Далее мы будем использовать второй метод (вызов имени метода для графика с помощью функции plot ).

Линейные графики

Чтобы построить линейные графики с помощью Pandas dataframe, вы должны вызвать метод line() с помощью функции plot и передать значение для индекса x и оси y, как показано ниже:

titanic_data.plot.line(x='Age', y='Fare', figsize=(8,6))

Приведенный выше сценарий строит линейный график, где ось x содержит возраст пассажиров, а ось y-тарифы, оплаченные пассажирами. Вы можете видеть, что мы можем использовать атрибут figsize для изменения размера участка. Вывод выглядит следующим образом:

Точечные графики

Чтобы построить линейные графики с помощью Pandas dataframe, вы должны вызвать метод scatter() с помощью функции plot и передать значение для индекса x и оси y, как показано ниже:

titanic_data.plot.scatter(x='Age', y='Fare', figsize=(8,6))

Вывод приведенного выше скрипта выглядит следующим образом:

Коробочный сюжет

Фреймы данных Pandas также можно использовать для построения бокс-графика. Все, что вам нужно сделать, это вызвать метод box() с помощью функции plot фрейма данных pandas:

titanic_data.plot.box(figsize=(10,8))

В выходных данных вы увидите прямоугольники для всех числовых столбцов набора данных Titanic:

Шестиугольные Участки

Шестиугольные графики постройте шестиугольники для пересекающихся точек данных по осям x и y. Чем больше точек пересекается, тем темнее шестиугольник. Чтобы построить гексагональные графики с помощью Pandas dataframe, вы должны вызвать метод hexbin() с помощью функции plot и передать значение для индекса x и оси y, как показано ниже:

titanic_data.plot.hexbin(x='Age', y='Fare', gridsize=30, figsize=(8,6))

На выходе вы увидите гексагональный график с возрастом по оси x и тарифом по оси y.

Графики плотности ядра

Подобно Seaborn и Matplotlib, мы также можем рисовать графики плотности ядра с помощью библиотеки Pandas. Чтобы построить графики плотности ядра с помощью фрейма данных Pandas, необходимо вызвать метод kde() с помощью функции plot :

titanic_data['Age'].plot.kde()

Вывод приведенного выше скрипта выглядит следующим образом:

В этом разделе мы увидели, как библиотека Панд может быть использована для рисования некоторых из самых простых сюжетов. Однако применение библиотеки Pandas для визуализации данных не ограничивается такими базовыми графиками. Скорее, панды также могут быть использованы для визуализации данных временных рядов, которые мы увидим в следующем разделе.

Панды для визуализации временных рядов

Данные временных рядов – это тип данных, в которых атрибуты или объекты зависят от индекса времени, который также является элементом набора данных. Некоторые из наиболее распространенных примеров данных временных рядов включают количество проданных товаров в час, дневную температуру и ежедневные цены акций. Во всех этих примерах данные зависят от некоторой единицы времени и изменяются в соответствии с этой единицей времени. Единицей измерения времени может быть час, день, неделя, год и так далее.

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

Набор данных

Как было сказано ранее, одним из примеров данных временных рядов являются цены акций, изменяющиеся во времени. В этом разделе мы будем использовать цены акций AAPL за 5 лет (с 12-11-2013 по 12-11-2018) для визуализации данных временных рядов. Набор данных можно загрузить по ссылке this Yahoo Finance link . Для получения других данных тикера компании просто зайдите на их веб-сайт, введите название компании и период времени, на который вы хотите загрузить свои данные. Набор данных будет загружен в формате CSV.

Давайте импортируем библиотеки, которые мы будем использовать для визуализации данных временных рядов в Pandas. Выполните следующий сценарий:

import numpy as np
import pandas as pd

%matplotlib inline
import matplotlib.pyplot as plt

Далее для импорта набора данных мы будем использовать метод read_csv() библиотеки Pandas следующим образом:

apple_data = pd.read_csv(r'F:/AAPL.csv')

Чтобы увидеть, как выглядит наш набор данных, мы можем использовать функцию head () . Выполните следующий сценарий:

apple_data.head()

В выходных данных вы увидите первые пять строк набора данных.

Вы можете видеть, что набор данных содержит дату, цену открытия и закрытия акции за день, самую высокую и самую низкую цену акции за день, скорректированную цену закрытия и объем акции. Вы можете видеть, что все столбцы зависят от даты. Изменение столбца Даты вызывает изменение всех остальных столбцов. Таким образом, Дата в данном случае является столбцом индекса. Однако в нашем наборе данных дата по умолчанию рассматривается как строка. Сначала нам нужно изменить тип столбца Date со string на DateTime, а затем установить столбец Date в качестве индексного столбца.

Выполните следующий сценарий, чтобы изменить тип столбца DateTime на string.

apple_data['Date'] = apple_data['Date'].apply(pd.to_datetime)

В приведенном выше скрипте мы применили метод to_datetime к столбцу даты нашего набора данных, чтобы изменить его тип.

Далее нам нужно установить столбец даты в качестве столбца индекса. Это делает следующий сценарий:

apple_data.set_index('Date', inplace=True)

В приведенном выше скрипте мы используем метод set_index фрейма данных Pandas и передаем ему столбец ‘Date’ в качестве параметра. Атрибут inplace=True означает, что преобразование будет происходить на месте и вам не нужно хранить результат в другой переменной.

Теперь давайте снова напечатаем первые пять строк нашего набора данных с помощью функции head() :

apple_data.head()

Вывод приведенного выше скрипта выглядит следующим образом:

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

Прежде чем мы перейдем к разделу сдвига времени, давайте просто построим график цены закрытия акций Apple. Выполните следующий сценарий:

plt.rcParams['figure.figsize'] = (8,6)   # Change the plot size
apple_data["Close"].plot(grid=True)

Обратите внимание, что в приведенном выше скрипте мы просто вызываем метод plot в столбце ‘Close’. Мы не указывали никакой информации относительно даты, но поскольку столбец Даты является столбцом индекса, ось x будет содержать значения из столбца даты, а ось y будет показывать цену закрытия акций. Вывод приведенного выше скрипта выглядит следующим образом:

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

Сдвиг времени

Сдвиг времени относится к перемещению данных на определенное количество шагов вперед или назад. Сдвиг временных рядов-одна из важнейших задач анализа временных рядов.

Ранее мы построили график головной части набора данных, теперь сначала построим хвост нашего набора данных. Позже мы будем использовать эти кадры данных головы и хвоста, чтобы увидеть эффекты сдвига времени.

Чтобы построить хвост набора данных, мы можем использовать функцию tail() следующим образом:

apple_data.tail()

В выходных данных вы увидите последние пять строк набора данных, как показано ниже:

Давайте сначала перенесем данные вперед, чтобы увидеть, как смещение времени работает в положительном направлении. Чтобы переместить данные на определенное количество шагов вперед, вам просто нужно вызвать метод shift() для набора данных и передать ему положительное целое число. Например, следующий сценарий сдвигает данные на два шага вперед, а затем печатает заголовок данных:

apple_data.shift(2).head()

В выходных данных вы увидите, что данные для первых двух строк заголовка не будут отображаться, так как данные для этих строк будут перемещены на два шага вперед. В выходных данных вы увидите, что данные, которые ранее принадлежали первому индексу, т. е. 2013-12-10, после перемещения на два шага вперед, принадлежат третьему индексу, т. е. 2013-12-12, как показано ниже:

С другой стороны, чтобы сдвинуть данные назад, вы можете снова использовать функцию shift () , но вы должны указать отрицательное значение. Например, чтобы сдвинуть данные на 2 шага назад, вы можете использовать следующий сценарий:

apple_data.shift(-2).tail()

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

Временная выборка

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

Реализация временной выборки с помощью панд довольно проста. Вам нужно вызвать метод resample() с помощью фрейма данных Pandas. Вы также должны передать значение для атрибута rule . Это значение в основном является временным смещением, которое определяет временные рамки, для которых мы хотим сгруппировать наши данные.

Наконец, вам нужно вызвать функцию агрегации, такую как mean , max , min и т. Д. Следующий сценарий отображает максимальное значение для всех атрибутов для каждого месяца в наборе данных:

apple_data.resample(rule='M').max()

Вывод приведенного выше скрипта выглядит следующим образом:

Подробный список значений смещения для атрибута rule выглядит следующим образом:

B       business day frequency
C       custom business day frequency (experimental)
D       calendar day frequency
W       weekly frequency
M       month end frequency
SM      semi-month end frequency (15th and end of month)
BM      business month end frequency
CBM     custom business month end frequency
MS      month start frequency
SMS     semi-month start frequency (1st and 15th)
BMS     business month start frequency
CBMS    custom business month start frequency
Q       quarter end frequency
BQ      business quarter end frequency
QS      quarter start frequency
BQS     business quarter start frequency
A       year end frequency
BA      business year end frequency
AS      year start frequency
BAS     business year start frequency
BH      business hour frequency
H       hourly frequency
T       minutely frequency
S       secondly frequency
L       milliseonds
U       microseconds
N       nanoseconds

Приведенный выше список был взят из Официальной документации Панд .

Теперь давайте попробуем вывести средние ежеквартальные (каждые три месяца) значения для набора данных. Из списка смещений видно, что Q используется для ежеквартальной частоты. Выполните следующий сценарий:

apple_data.resample(rule='Q').mean()

Вывод приведенного выше скрипта выглядит следующим образом:

В дополнение к поиску агрегированных значений для всех столбцов набора данных. Вы также можете повторно выполнить выборку данных для определенного столбца. Давайте построим гистограмму, которая отображает среднегодовое значение атрибута “Закрыть” нашего набора данных. Выполните следующий сценарий:

plt.rcParams['figure.figsize'] = (7, 5)
apple_data['Close'].resample('A').mean().plot(kind='bar')

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

Аналогично, чтобы нарисовать линейный график, отображающий месячное максимальное значение цены акций для атрибута “Закрыть”, можно использовать следующий сценарий:

plt.rcParams['figure.figsize'] = (7, 5)
apple_data['Close'].resample('M').max().plot(kind='line')

Вывод приведенного выше скрипта выглядит следующим образом:

Вывод

Pandas-одна из самых полезных библиотек Python для науки о данных. Обычно Pandas используется для импорта, манипулирования и очистки набора данных. Однако панды также могут быть использованы для визуализации данных, как мы показали в этой статье.

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