Суммирование и Анализ Pandas DataFrame

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

Вы узнаете, как проводить исследовательский анализ данных (EDA), который является критическим первым шагом в любом виде анализа данных или машинного обучения. Этот процесс позволяет вам обнаруживать закономерности и аномалии в ваших данных. Это позволяет вам формулировать предположения и начинать создавать тесты для их проверки. Изучение этих навыков будет критически важно для многих других задач по манипуляции и работе с данными. Давайте начнем!

Содержание

Загрузка примера Pandas DataFrame

Давайте загрузим пример Pandas DataFrame, который мы будем использовать на протяжении всего урока. Урок размещается на нашей странице GitHub и может быть загружен путем копирования и вставки приведенного ниже кода. Также выведем первые пять записей нашего DataFrame с помощью функции .head().

# Загрузка нашего Pandas DataFrame
df = pd.read_csv('https://raw.githubusercontent.com/datagy/data/main/sales.csv')
print(df.head())

# Возвращает:
#         date  gender      region  sales
# 0  8/22/2022    Male  North-West  20381
# 1   3/5/2022    Male  North-East  14495
# 2   2/9/2022    Male  North-East  13510
# 3  6/22/2022    Male  North-East  15983
# 4  8/10/2022  Female  North-West  15007

Мы видим, что у нас есть четыре различных столбца:

  1. Столбец date, который содержит дату транзакции

  2. Столбцы gender и region, которые содержат категориальные переменные

  3. Столбец sales, который содержит сумму продаж

Давайте углубимся в проведение исследовательского анализа данных нашего DataFrame!

Сводные функции Pandas

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

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

Нахождение Среднего Значения в Pandas DataFrame

Давайте начнем с простого вычисления: нахождения среднего (или среднего значения) в Pandas DataFrame. Pandas предоставляет удобный метод для этого — .mean(). Мы можем применить этот метод к одному столбцу или к нескольким столбцам. Давайте посмотрим, как это делается:

# Вычисление среднего значения для одного столбца
print(df['sales'].mean())

# Возвращает: 19044.489

Мы видим здесь, что применение метода .mean() к одному столбцу возвращает скалярное значение. Это означает, что мы можем легко получить это значение напрямую, присвоить его переменной и использовать в других местах. Что произойдет, если мы применим этот метод ко всему DataFrame? Pandas позволяет нам указать, что мы хотим вычислить среднее только для числовых столбцов, используя параметр numeric_only = True.

# Вычисление среднего значения для всего dataframe
print(df.mean(numeric_only=True))

# Возвращает: 
# sales    19044.489
# dtype: float64

Это фактически возвращает pandas Series – что означает, что мы можем индексировать значения, которые нас интересуют. Например, если бы мы вывели df.mean(numeric_only=True)['sales'], то вернулось бы то же значение, как и при вычислении среднего только для одного столбца. По умолчанию Pandas игнорирует пропущенные значения при вычислении среднего. Однако мы можем включить их в расчет, указав skipna=False в качестве параметра.

Нахождение Стандартного Отклонения в Pandas DataFrame

Pandas также предоставляет удобный метод для вычисления стандартного отклонения. Стандартное отклонение является полезной мерой для определения, насколько распределены данные. Например, небольшое стандартное отклонение означает, что данные сгруппированы близко друг к другу. Наоборот, большое стандартное отклонение указывает на то, что данные имеют гораздо большее разбросание. Для вычисления стандартного отклонения в Pandas мы используем метод .std(). Как и метод .mean(), мы можем применить этот метод к одному столбцу, к нескольким столбцам или ко всему DataFrame. Одним из преимуществ использования Pandas является то, что многие методы используют похожую конвенцию и позволяют передавать те же параметры. Давайте применим метод ко всему DataFrame, указывая, чтобы пропуски игнорировались и включались только числовые столбцы:

# Вычисление стандартного отклонения для всего dataframe
print(df.std(numeric_only=True))

# Возвращает: 
# sales    5484.674161
# dtype: float64

Аналогично нашему предыдущему примеру, этот метод возвращает pandas Series при применении к более чем одному столбцу.

Нахождение Асимметрии (Skew) в Pandas DataFrame

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

Значение асимметрии
Направление
Степень асимметрии

< -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(). Давайте посмотрим, что происходит, когда мы вычисляем асимметрию только для числовых столбцов:

# Вычисление асимметрии с помощью .skew()
print(df.skew(numeric_only=True))

# Возвращает: 
# sales    0.827105
# dtype: float64

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

Чтение Документации Pandas

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

Посмотрите на документацию для метода .mean(), которую можно найти здесь. Ниже приведена картинка из документации, которая поможет вам понять, как использовать этот метод:

Эта документация предоставляет информацию о параметрах и возвращаемых значениях метода, а также примеры использования.

В документации pandas есть четыре основных раздела:

  1. Method Name: здесь мы видим, например, что рассматриваем метод DataFrame (в отличие от метода Series).

  2. Description: это предоставляет простое описание на английском языке того, что делает метод.

  3. Parameters: различные параметры, которые принимает метод и как с ними работать. Мы видим, например, что по умолчанию Pandas пропускает отсутствующие данные.

  4. Returns: то, что возвращает метод (то есть, что ожидать).

Теперь ваша очередь! Попробуйте найти метод, который суммирует значения столбца. Затем в вашем редакторе кода попробуйте написать строку кода для суммирования всех значений в столбце sales.

Решение Поскольку вы хотите сложить все значения в данном столбце или по всему DataFrame, мы знаем, что хотим рассчитать сумму. При поиске метода sum возвращается несколько различных элементов, включая страницу pandas.DataFrame.sum. Здесь можно увидеть, что мы можем просто применить этот метод к DataFrame или к столбцу.

# Суммирование всех значений в столбце sales
print(df['sales'].sum())

Получение Сводных Статистик с Помощью Pandas describe

В предыдущих разделах вы узнали, как рассчитывать отдельные статистики, такие как среднее или стандартное отклонение. Хотя этот подход работает, часто возникает необходимость получить общее представление о наборе данных. В этом случае приходит на помощь метод Pandas .describe().

Метод предоставляет несколько полезных статистик, таких как среднее, стандартное отклонение и квартили данных. Давайте попробуем использовать этот метод, чтобы посмотреть, что он возвращает:

# Получение сводных статистик для всего DataFrame
print(df.describe())

# Возвращает: 
#               sales
# count   1000.000000
# mean   19044.489000
# std     5484.674161
# min     6084.000000
# 25%    15628.000000
# 50%    17983.500000
# 75%    21612.500000
# max    43775.000000

Этот код выведет таблицу со сводными статистиками для числовых столбцов DataFrame, включая среднее значение, стандартное отклонение, минимум, квартили и максимум.

Метод .describe() возвращает целый массив информации о числовых столбцах в нашем DataFrame. Когда метод применяется к одному столбцу, он возвращает Series. В то же время, когда он применяется к нескольким столбцам, возвращается DataFrame.

Нахождение Уникальных Значений в Pandas DataFrame

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

Давайте рассмотрим пример: мы хотим увидеть, какие уникальные значения есть в столбце region. Для этого можно использовать метод .unique().

# Получение уникальных значений из столбца region
unique_regions = df['region'].unique()
print(unique_regions)

# Возвращает:  ['North-West' 'North-East' 'South']

Этот код выведет массив уникальных значений, присутствующих в столбце region.

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

Создание Кросс-таблиц для Pandas DataFrame

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

Это может быть полезно для демонстрации того, как данные распределяются по различным категориальным или числовым переменным.

Давайте рассмотрим пример создания кросс-таблицы:

# Создание первой кросс-таблицы
tab = pd.crosstab(
    index=df['region'],
    columns=df['gender'],
)

print(tab)

# Возвращает:
# gender      Female  Male
# region                  
# North-East     177   170
# North-West     161   161
# South          167   164

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

Например, мы можем передать параметры values= и aggfunc=, чтобы переопределить нормальное поведение. Давайте, например, рассмотрим те же две категории, но предоставим сумму всех продаж:

# Сложение значений с помощью кросс-таблицы
tab = pd.crosstab(
    index=df['region'],
    columns=df['gender'],
    values=df['sales'],
    aggfunc='sum'
)

print(tab)

# Возвращает:
# gender       Female     Male
# region                      
# North-East  3051132  2981835
# North-West  2455899  2457091
# South       4135688  3962844

Этот код создаст кросс-таблицу, показывающую сумму продаж для каждой комбинации значений в столбцах region и category.

Мы видим, как полезна эта типовая предварительная аналитика! Например, мы можем выявить, что продажи в южном регионе значительно выше, а продажи в северо-западном регионе наименьшие.

Упражнения

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

Вопрос 1

Что является 75-й процентилем столбца sales?

Используйте метод .describe(), чтобы вычислить некоторые базовые статистики, а затем обратитесь к значению ['75%']:

# Доступ к 75-му перцентилю столбца sales
print(df['sales'].describe()['75%'])
# Возвращает: 21612.5
Вопрос 2

Сколько продаж совершили женщины в южном регионе?

Один из способов найти это — использовать кросс-таблицу и найти пересечение между Female и South:

# Определение количества продаж, совершенных женщинами в южном регионе
print(pd.crosstab(
    index=df['region'],
    columns=df['gender']
).loc['South', 'Female'])

# Возвращает: 167
Вопрос 3

Посчитайте количество уникальных значений в столбце ‘region’.

Поскольку метод .unique() возвращает список, мы можем легко передать этот список в функцию len(), чтобы вычислить его длину:

# Подсчет количества уникальных значений в столбце region
print(len(df['region'].unique()))

# Возвращает: 3
Вопрос 4

Какова была максимальная продажа?

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

# Поиск значения максимальной продажи
print(df['sales'].max())
# Возвращает: 21612.5

Заключение и повторение

В этом руководстве вы узнали, как исследовать данные с помощью Pandas DataFrame. Вы научились использовать некоторые методы для расчета статистик, а также как использовать метод .describe(), чтобы получить некоторые инсайты в DataFrame. Вы также узнали, как использовать метод .crosstab() для подсчета частот и других ценных инсайтов. Наконец, вы научились использовать документацию Pandas для поиска и понимания других полезных методов и функций.

Дополнительные ресурсы

Для изучения связанных тем ознакомьтесь с статьями ниже:

  • Pandas Describe: Описательная статистика вашего DataFrame

  • Как вычислить коэффициент корреляции Пирсона в Python

  • Как рассчитать Z-оценку в Python (4 способа)

  • Pandas value_counts для подсчета уникальных значений

Last updated