Ценный анализ данных с помощью Pandas Value Counts
Вы можете проводить больше анализа данных, чем вы думаете, с помощью этого простого инструмента.
Функция value_counts()
в популярной библиотеке науки о данных Python Pandas - это быстрый способ подсчета уникальных значений в одном столбце, также известном как ряд данных.
Эта функция чрезвычайно полезна для очень быстрого выполнения базового анализа данных для определенных столбцов данных, содержащихся в Pandas DataFrame. Для введения в pandas DataFrames, пожалуйста, прочтите сообщение за последнюю неделю, которое можно найти здесь.
В статье ниже я покажу вам несколько советов по использованию этого инструмента для анализа данных. В этом посте вы узнаете, как с помощью нескольких дополнений к вашему коду вы можете проводить довольно много анализа с помощью этой функции.
Данные
В примерах, показанных в этой статье, я буду использовать набор данных, взятых с веб-сайта Kaggle. Он разработан для задачи классификации машинного обучения и содержит информацию о медицинских приемах и целевую переменную, которая указывает, явился ли пациент на прием.
Его можно скачать здесь.
В приведенном ниже коде я импортировал данные и библиотеки, которые буду использовать на протяжении всей статьи.
import pandas as pd import matplotlib.pyplot as plt %matplotlib inline data = pd.read_csv('KaggleV2-May-2016.csv') data.head()
Основные подсчеты
Функцию value_counts()
можно использовать следующим образом, чтобы получить количество уникальных значений для одного столбца в наборе данных. В приведенном ниже коде указано количество каждого значения в столбце Пол.
data['Gender'].value_counts()
Чтобы отсортировать значения в порядке возрастания или убывания, мы можем использовать аргумент sort. В приведенном ниже коде я добавил sort=True
, чтобы отображать счетчики в столбце Возраст в порядке убывания.
data['Age'].value_counts(sort=True)
Комбинировать с groupby ()
Функция value_counts может быть объединена с другими функциями Panadas для более обширных методов анализа. Одним из примеров является сочетание с функцией groupby()
. В приведенном ниже примере я подсчитываю значения в столбце «Пол» и применяю groupby()
, чтобы лучше понять количество неявок в каждой группе.
data['No-show'].groupby(data['Gender']).value_counts(sort=True)
Нормализовать
В приведенном выше примере отображение абсолютных значений не позволяет нам легко понять различия между двумя группами. Лучшим решением было бы показать относительные частоты уникальных значений в каждой группе.
Мы можем добавить аргумент normalize в value_counts (), чтобы отображать значения таким образом.
data['No-show'].groupby(data['Gender']).value_counts(normalize=True)
Биннинг
Для столбцов, содержащих большое количество уникальных значений, вывод функции value_counts () не всегда особенно полезен. Хорошим примером этого может быть столбец «Возраст», для которого мы ранее в этом посте отображали количество значений.
К счастью, value_counts () имеет аргумент bins. Этот параметр позволяет нам указать количество бункеров (или групп, на которые мы хотим разделить данные) как целое число. В приведенном ниже примере я добавил bins=5
, чтобы разделить счетчик возраста на 5 групп. Теперь у нас есть количество значений в каждой из этих ячеек.
data['Age'].value_counts(bins=5)
Опять же, показ абсолютных чисел не особенно полезен, поэтому давайте также добавим аргумент normalize=True
. Теперь у нас есть полезный анализ.
data['Age'].value_counts(bins=5, normalize=True)
Комбинировать с nlargest ()
В нашем наборе данных есть и другие столбцы, которые имеют большое количество уникальных значений, для которых биннинг по-прежнему не дает нам полезной части анализа. Хорошим примером этого может служить столбец Окрестности.
Если мы просто запустим value_counts () против этого, мы получим вывод, который не особенно информативен.
data['Neighbourhood'].value_counts(sort=True)
Лучшим способом отобразить это может быть просмотр 10 лучших районов. Мы можем сделать это, объединив с другой функцией Pandas, называемой nlargest()
, как показано ниже.
data['Neighbourhood'].value_counts(sort=True).nlargest(10)
Мы также можем использовать nsmallest()
для отображения 10 нижних окрестностей, что также может оказаться полезным.
data['Neighbourhood'].value_counts(sort=True).nsmallest(10)
Сюжет
Еще одна удобная комбинация - это функция построения графиков Pandas вместе с value_counts (). Возможность отображать результаты анализа, полученные от value_counts (), в виде визуализаций, может значительно упростить просмотр тенденций и закономерностей.
Мы можем отобразить все приведенные выше примеры и многое другое с помощью большинства типов графиков, доступных в библиотеке Pandas. Полный список доступных опций можно найти здесь.
Давайте посмотрим на несколько примеров.
Мы можем использовать гистограмму, чтобы просмотреть 10 лучших районов.
data['Neighbourhood'].value_counts(sort=True).nlargest(10).plot.bar()
Мы можем сделать круговую диаграмму, чтобы лучше визуализировать столбец «Пол».
data['Gender'].value_counts().plot.pie()
Функция value_counts () часто является одной из моих первых отправных точек для анализа данных, поскольку она позволяет мне очень быстро строить тенденции и извлекать аналитические данные из отдельных столбцов в наборе данных. В этой статье дается краткий обзор различных типов анализа, для которых вы можете использовать это, но эта функция имеет больше применений, выходящих за рамки этой публикации.
Спасибо за прочтение!