Суммирование и Анализ Pandas DataFrame
Last updated
Last updated
В этом уроке вы узнаете, как быстро суммировать и анализировать Pandas DataFrame. К концу этого урока вы сможете проводить некоторый исследовательский анализ вашего набора данных с помощью pandas. Вы узнаете, как рассчитывать общие характеристики вашего набора данных, такие как меры центральной тенденции или меры разброса. Вы также узнаете, как считать уникальные значения и легко получать сводную статистику для всего DataFrame.
Вы узнаете, как проводить исследовательский анализ данных (EDA), который является критическим первым шагом в любом виде анализа данных или машинного обучения. Этот процесс позволяет вам обнаруживать закономерности и аномалии в ваших данных. Это позволяет вам формулировать предположения и начинать создавать тесты для их проверки. Изучение этих навыков будет критически важно для многих других задач по манипуляции и работе с данными. Давайте начнем!
З
Давайте загрузим пример Pandas DataFrame, который мы будем использовать на протяжении всего урока. Урок размещается на нашей странице GitHub и может быть загружен путем копирования и вставки приведенного ниже кода. Также выведем первые пять записей нашего DataFrame с помощью функции .head()
.
Мы видим, что у нас есть четыре различных столбца:
Столбец date
, который содержит дату транзакции
Столбцы gender
и region
, которые содержат категориальные переменные
Столбец sales
, который содержит сумму продаж
Давайте углубимся в проведение исследовательского анализа данных нашего DataFrame!
Pandas предоставляет множество сводных функций, которые помогают нам лучше понять наш набор данных. Эти функции достаточно умны, чтобы определить, к Series или DataFrame мы применяем эти функции. Pandas автоматически будет размещать сводный метод там, где это необходимо.
В следующих разделах вы рассмотрите только несколько ключевых методов, доступных вам. Вы узнаете, как найти среднее значение столбца, стандартное отклонение и асимметрию, а также сложить столбец и получить полезную сводную статистику за один раз.
Давайте начнем с простого вычисления: нахождения среднего (или среднего значения) в Pandas DataFrame. Pandas предоставляет удобный метод для этого — .mean(). Мы можем применить этот метод к одному столбцу или к нескольким столбцам. Давайте посмотрим, как это делается:
Мы видим здесь, что применение метода .mean()
к одному столбцу возвращает скалярное значение. Это означает, что мы можем легко получить это значение напрямую, присвоить его переменной и использовать в других местах. Что произойдет, если мы применим этот метод ко всему DataFrame? Pandas позволяет нам указать, что мы хотим вычислить среднее только для числовых столбцов, используя параметр numeric_only = True
.
Это фактически возвращает pandas Series – что означает, что мы можем индексировать значения, которые нас интересуют. Например, если бы мы вывели df.mean(numeric_only=True)['sales']
, то вернулось бы то же значение, как и при вычислении среднего только для одного столбца. По умолчанию Pandas игнорирует пропущенные значения при вычислении среднего. Однако мы можем включить их в расчет, указав skipna=False
в качестве параметра.
Pandas также предоставляет удобный метод для вычисления стандартного отклонения. Стандартное отклонение является полезной мерой для определения, насколько распределены данные. Например, небольшое стандартное отклонение означает, что данные сгруппированы близко друг к другу. Наоборот, большое стандартное отклонение указывает на то, что данные имеют гораздо большее разбросание. Для вычисления стандартного отклонения в Pandas мы используем метод .std()
. Как и метод .mean()
, мы можем применить этот метод к одному столбцу, к нескольким столбцам или ко всему DataFrame. Одним из преимуществ использования Pandas является то, что многие методы используют похожую конвенцию и позволяют передавать те же параметры. Давайте применим метод ко всему DataFrame, указывая, чтобы пропуски игнорировались и включались только числовые столбцы:
Аналогично нашему предыдущему примеру, этот метод возвращает pandas Series при применении к более чем одному столбцу.
Асимметрия измеряет асимметрию нормального распределения от среднего значения этого распределения. Значение асимметрии может быть положительным или отрицательным, в зависимости от направления смещения. Таблица ниже разбивает некоторые распространенные диапазоны значений асимметрии:
< -1
Left
High
> -1 and < -0.5
Left
Moderate
> -0.5 and < 0
Left
Approximately symmetric
0
N/A
Completely symmetric
> 0 and < 0.5
Right
Approximately symmetric
> 0.5 and < 1
Right
Moderate
> 1
Right
High
Мы можем измерить асимметрию с помощью метода .skew()
. Аналогично предыдущим примерам, мы можем вычислить асимметрию для одного столбца, нескольких столбцов и всего DataFrame с использованием метода .skew()
. Давайте посмотрим, что происходит, когда мы вычисляем асимметрию только для числовых столбцов:
В приведенном выше примере данные о продажах имеют умеренную положительную асимметрию, что означает, что данные склонены вправо.
Перед тем как продолжать искать различные способы исследования и анализа вашего набора данных, давайте рассмотрим чтение документации Pandas. Почему это важно? Способность читать документацию может показаться немного пугающей сначала, но в конечном итоге оказывается невероятно ценным ресурсом.
Эта документация предоставляет информацию о параметрах и возвращаемых значениях метода, а также примеры использования.
В документации pandas есть четыре основных раздела:
Method Name: здесь мы видим, например, что рассматриваем метод DataFrame (в отличие от метода Series).
Description: это предоставляет простое описание на английском языке того, что делает метод.
Parameters: различные параметры, которые принимает метод и как с ними работать. Мы видим, например, что по умолчанию Pandas пропускает отсутствующие данные.
Returns: то, что возвращает метод (то есть, что ожидать).
Теперь ваша очередь! Попробуйте найти метод, который суммирует значения столбца. Затем в вашем редакторе кода попробуйте написать строку кода для суммирования всех значений в столбце sales
.
В предыдущих разделах вы узнали, как рассчитывать отдельные статистики, такие как среднее или стандартное отклонение. Хотя этот подход работает, часто возникает необходимость получить общее представление о наборе данных. В этом случае приходит на помощь метод Pandas .describe()
.
Метод предоставляет несколько полезных статистик, таких как среднее, стандартное отклонение и квартили данных. Давайте попробуем использовать этот метод, чтобы посмотреть, что он возвращает:
Этот код выведет таблицу со сводными статистиками для числовых столбцов DataFrame, включая среднее значение, стандартное отклонение, минимум, квартили и максимум.
Метод .describe()
возвращает целый массив информации о числовых столбцах в нашем DataFrame. Когда метод применяется к одному столбцу, он возвращает Series. В то же время, когда он применяется к нескольким столбцам, возвращается DataFrame.
Другая распространенная операция, которую вы будете выполнять, — это идентификация различных уникальных значений, существующих в данном столбце. Поскольку ввод данных часто несовершенен, мы можем использовать поиск уникальных значений как способ выявить качество данных в наборе данных. Это также дает нам представление о полноте данных и любых проблемах с целостностью данных, которые могут возникнуть.
Давайте рассмотрим пример: мы хотим увидеть, какие уникальные значения есть в столбце region
. Для этого можно использовать метод .unique()
.
Этот код выведет массив уникальных значений, присутствующих в столбце region
.
Мы видим, что метод возвращает список уникальных значений в нашем столбце. Существует много других нюансов этого метода, но понимание того, как получать уникальные значения, — отличный первый шаг.
В этом финальном разделе мы рассмотрим создание кросс-таблицы из нашего набора данных. Кросс-таблица показывает взаимосвязь между двумя или более категориальными переменными, отображая количество записей, попадающих в пересечение этих двух переменных.
Это может быть полезно для демонстрации того, как данные распределяются по различным категориальным или числовым переменным.
Давайте рассмотрим пример создания кросс-таблицы:
Мы видим, что по умолчанию Pandas предоставляет количество записей для этих различных категорий. Однако мы также можем изменить это поведение, чтобы получить другую агрегацию.
Например, мы можем передать параметры values=
и aggfunc=
, чтобы переопределить нормальное поведение. Давайте, например, рассмотрим те же две категории, но предоставим сумму всех продаж:
Этот код создаст кросс-таблицу, показывающую сумму продаж для каждой комбинации значений в столбцах region
и category
.
Мы видим, как полезна эта типовая предварительная аналитика! Например, мы можем выявить, что продажи в южном регионе значительно выше, а продажи в северо-западном регионе наименьшие.
Пришло время проверить свои знания! Посмотрите на упражнения ниже и попробуйте решить их. Решения доступны, нажав кнопку переключения рядом с каждым вопросом.
В этом руководстве вы узнали, как исследовать данные с помощью Pandas DataFrame. Вы научились использовать некоторые методы для расчета статистик, а также как использовать метод .describe()
, чтобы получить некоторые инсайты в DataFrame. Вы также узнали, как использовать метод .crosstab()
для подсчета частот и других ценных инсайтов. Наконец, вы научились использовать документацию Pandas для поиска и понимания других полезных методов и функций.
Для изучения связанных тем ознакомьтесь с статьями ниже:
Pandas Describe: Описательная статистика вашего DataFrame
Как вычислить коэффициент корреляции Пирсона в Python
Как рассчитать Z-оценку в Python (4 способа)
Pandas value_counts для подсчета уникальных значений
Посмотрите на документацию для метода .mean()
, которую можно найти . Ниже приведена картинка из документации, которая поможет вам понять, как использовать этот метод:
Решение Поскольку вы хотите сложить все значения в данном столбце или по всему DataFrame, мы знаем, что хотим рассчитать сумму. При поиске метода sum
возвращается несколько различных элементов, включая страницу . Здесь можно увидеть, что мы можем просто применить этот метод к DataFrame или к столбцу.