3 быстрых и простых способа визуализации ваших данных с помощью Pandas
3 быстрых и простых способа визуализации ваших данных с помощью Pandas
Визуализация данных является важным аспектом анализа данных. Она поможет вам в кратчайшие сроки выявить тенденции и закономерности в ваших данных.
Кроме того, визуализация данных помогает вам представить результаты вашего анализа более эффективным способом, что способствует свободному обсуждению этих результатов, а не представлению обыденных цифр. Вот почему Эл Шаллоуэй, основатель и генеральный директор Net Objectives, однажды процитировал —
“Визуализации действуют как костёр, вокруг которого мы собираемся, чтобы рассказывать истории”.
Однако для визуализации данных в вашем data analytics-проекте вам не всегда требуется программное обеспечение, такое как PowerBI, Tableau, или вам не нужно устанавливать какую-либо отдельную библиотеку визуализации данных, когда вы используете Python.
Вы можете использовать pandas — одну из наиболее часто используемых библиотек для обработки данных — для визуализации данных наряду с их преобразованием.
Хотя pandas не является библиотекой, строго направленной на визуализацию данных, она обладает встроенными функциями для создания базовых, но эффективных визуализаций. Она может легко преобразовывать табличные данные в эффективные диаграммы и графики.
Если вы хотите создавать графики только ради EDA, то вы должны освоить визуализацию данных с помощью Pandas.
В этой статье мы рассмотрим 3 простых и экономящих время способа визуализации ваших данных с помощью Pandas. Кроме того, я приложил Jupyter-Notebook со всеми примерами в конце этой статьи.
Давайте начинать!
Для этой статьи я использую самый популярный набор данных в репозитории машинного обучения UC Irvine — Iris, который создан R.A. Fisher и доступен по лицензии CC BY 4.0.
Давайте импортируем набор данных в pandas DataFrame с помощью df
:
import pandas as pd
df = pd.read_csv("iris.data",
header=None,
names=["sepal_length", "sepal_width",
"petal_length","petal_width","class"])
df.head()
Это простой набор данных размером 150 x 5, содержащий информацию о 5 классах ириса.
Давайте начнём с самого простого для создания разнообразных диаграмм в Pandas.
pandas.DataFrame.plot
Это самый простой способ быстрого создания диаграмм на основе фрейма данных pandas. Всё, что вам нужно сделать, это добавить .plot()
в конце имени фрейма данных.
df.plot()
По умолчанию создаётся линейный график, как показано выше, который не очень понятен из-за двух вещей —
- Он содержит все числовые столбцы фрейма данных, поскольку вы использовали
.plot()
для всего фрейма данных. - Ось X диаграммы – это просто индекс строки, поэтому она, по сути, не показывает, “к какому классу” принадлежит конкретная точка данных.
Давайте исправим это!
Первым делом выберите только необходимые переменные и создайте график ещё раз. Например, вы можете выбрать только переменную — sepal_length
— и воссоздать график, как показано ниже.
df["sepal_length"].plot(figsize=(15,7))
Он немного улучшен, но всё ещё неполон, потому что ось X – это просто номер строки. Вы можете сделать её более значимой, используя pandas Groupby.
Самое лучшее, что есть в pandas.DataFrame.plot
– это то, что вы можете использовать его в верхней части любого преобразования данных.
Например, предположим, что вы суммировали длину чашелистика по классам. Вы можете использовать метод .plot()
поверх df.groupby()
, как показано ниже.
df.groupby("class")["sepal_length"].sum().plot(figsize=(15,7))
Он быстро создаёт линейный график, поскольку это тип визуальных данных по умолчанию в функции .plot()
.
Хотя ось X теперь более значима, линейный график, как показано выше, не может быть хорошим выбором для визуализации категориальных данных, поскольку линейные графики хороши для того, чтобы показать, как данные изменяются в течение ряда или периода времени.
Чтобы сравнить длину чашелистиков для каждого сорта ириса, вам лучше использовать столбчатую диаграмму.
Вы можете добиться этого, используя один из необязательных параметров pandas.DataFrame.plot
— kind
— который определяет тип создаваемого графика.
Чтобы получить столбчатую диаграмму, вы можете просто присвоить тип ‘bar
’ параметру kind
, как показано ниже:
df.groupby("class")["sepal_length"].sum().plot(kind='bar',figsize=(15,7))
Это довольно просто!
Теперь это выглядит гораздо информативнее, поскольку ось X – это класс ириса, а ось Y – общая длина чашелистиков в каждом классе.
Тем не менее, трудно прочитать названия отдельных столбцов по оси X, не наклоняя шею.
Поэтому лучше сделать эту диаграмму горизонтальной, присвоив параметру kind
тип ‘barh
’ вместо ‘bar
’, как показано ниже.
df.groupby("class")["sepal_length"].sum().plot(kind='barh',figsize=(15,7))
Таким образом, в зависимости от требуемого типа графика вы можете присвоить параметру kind
любой из типов line , bar , barh , hist , box , area , pie
или scatter
. Вы также можете обратиться к документации, чтобы узнать больше обо всех других его параметрах.
В качестве альтернативы, если вы не хотите иметь дело с этим дополнительным параметром, вы можете напрямую использовать pandas.DataFrame.plot.barh
, который вы можете записать как df.groupby(“class”)[“sepal_length”].sum().plot.barh()
, чтобы получить точно такую же столбчатую диаграмму.
В другом сценарии вы можете визуализировать распределение одной переменной с помощью pandas.DataFrame.plot.history
, передав hist
в качестве значения для параметра kind
.
df["sepal_length"].plot.hist(figsize=(15,7))
Как следует из названия, .hist()
создаёт гистограмму, которая, по сути, подсчитывает, сколько раз каждое значение появлялось в наборе данных, т.е. его частоту.
Вы можете видеть, что pandas.DataFrame.plot
может быть чрезвычайно полезным и гибким для поискового анализа данных, поскольку он предлагает множество функций, которые помогут вам выявить тенденции и распределение данных.
Забегая вперёд, предположим, что на самой ранней стадии вашего аналитического проекта вы хотели бы изучить взаимосвязи между несколькими переменными одновременно. Вам не нужно полагаться на df.plot()
для этого.
Pandas предлагает другую функцию, которая создаёт точечные диаграммы для всех переменных в вашем фрейме данных.
pd.plotting.scatter_matrix()
Функция scatter_matrix
из pandas plotting быстро создаёт матрицу точечных графиков. Таким образом, вы можете видеть взаимосвязь каждого столбца с любым другим столбцом того же фрейма данных.
Диагональ этой матрицы представляет собой отношение столбца к самому себе, которое представлено в виде гистограммы.
Давайте попробуем! Всё, что вам нужно сделать, это передать имя фрейма данных в эту функцию.
pd.plotting.scatter_matrix(df);
Она быстро создаёт матрицу точечных графиков для всех числовых столбцов фрейма данных.
Когда вы применяете эту функцию к большому фрейму данных, содержащему большее количество числовых столбцов, scatter_matrix
создаст такую диаграмму для всех этих столбцов, что не всегда требуется.
В таких случаях вы можете выбрать любые две, три или четыре колонки, чтобы получить наглядное представление, используя эту функцию, как показано ниже:
pd.plotting.scatter_matrix(df[["sepal_length",
"sepal_width"]], figsize=(15,7));
На данный процесс не нужно тратить много времени!
Таким образом, вы можете создать матрицу точечной диаграммы только для выбранных столбцов фрейма данных.
Как вы, возможно, заметили в приведённом выше коде и во всех предыдущих кодах в этой статье, вы можете в любое время настроить размер всего графика, используя параметр
figsize
.
Кроме того, функция scatter_matrix
поставляется с несколькими необязательными параметрами, которые могут помочь вам изменить визуальный элемент в соответствии с вашими требованиями.
Например, предположим, вы хотели бы изменить цвет точечных графиков на красный и по диагонали, вместо гистограммы вы хотите видеть график гистограммы плотности ядра.
Вы можете добиться этого, используя дополнительные параметры — diagonal
и color
— как показано ниже.
pd.plotting.scatter_matrix(df[["sepal_length",
"sepal_width"]],
figsize=(15,7),
diagonal='kde',
color='red');
Если вы уже использовали библиотеку Seaborn для визуализации данных, то вы можете получить точно такие же графики, используя функцию seaborn.pairplot().
Но теперь вы знаете, что Pandas может выполнять ту же задачу без каких-либо дополнительных усилий. Это может сэкономить вам, по крайней мере, минуту и хлопоты по установке или импорту отдельной библиотеки визуализации данных.
Далее вы также можете обобщить фрейм данных pandas и визуализировать его в той же строке, в которой вы могли использовать pandas.DataFrame.plot
.
pd.pivot_table().plot.barh()
По определению, функция pivot_table()
используется для быстрого обобщения большого объёма данных, что может помочь вам понять тенденции и сравнить различные переменные фрейма данных.
Таким образом, pandas.pivot_table()
по существу группирует указанные столбцы вместе и суммирует другие указанные числовые столбцы в соответствии с предоставленной агрегатной функцией.
Это помогает вам понять тенденции и закономерности в данных путём их агрегирования.
Ради этого примера давайте создадим ещё один столбец sepal_length_bucket
на основе значения в столбце sepal_length
, как показано ниже:
bins = [0,5,10]
labels = ["'0-5'","'6-10'"]
df['sepal_length_bucket'] = pd.cut(df['sepal_length'],
bins=bins, labels=labels)
df.head()
Теперь предположим, что вы хотели бы увидеть изменение ширины чашелистика в зависимости от его класса и диапазона длины. Вы можете напрямую использовать pivot_table()
для получения агрегированных данных, как показано ниже:
pd.pivot_table(data=df, index = ["class"],
columns=["sepal_length_bucket"],
values=["sepal_width"])
Здесь используется средняя агрегация по умолчанию. Итак, то, что вы видите в таблице выше – это средняя ширина чашелистика растения ириса, сгруппированного по его классу и длине.
Однако вам нужно просмотреть каждую строку, чтобы сравнить данные, что затрудняет сравнение. Таким образом, вместо представления цифр визуализация может помочь вам быстро перейти к сути.
И вам нужно просто добавить .plot()
перед сводной таблицей, созданной выше.
pd.pivot_table(data=df, index = ["class"],
columns=["sepal_length_bucket"],
values=["sepal_width"]).plot.barh(figsize=(15,7))
Теперь вы можете быстро определить, что средняя ширина чашелистиков для всех классов больше у растений с длиной чашелистиков более 5. Более того, вы можете быстро сравнить между двумя или более классами одновременно.
Таким образом, pandas может легко преобразовать ваши данные в информативные диаграммы, которые помогут вам легко понять и сравнить данные.
Я надеюсь, что вы прочитали эту статью и нашли её полезной в вашем путешествии по анализу данных.
Знание этих особенностей pandas может помочь вам быстро и легко визуализировать данные из фрейма без какой-либо специальной библиотеки визуализации данных. Освоение этих экономящих время приёмов может сделать pandas вашим незаменимым инструментом для этой области анализа данных.