Практическое руководство, демонстрирующее, как использовать пакет Pandas для очистки, обработки и анализа данных.

1. Введение

Если вы когда-нибудь пытались анализировать большие наборы данных в Excel, вам следовало бы рассмотреть Pandas, мощный набор инструментов для программирования и анализа данных, который позволяет вам манипулировать точками данных с миллионами строк за миллисекунды с высокой вычислительной мощностью и производительностью пользователя. Фактически, Pandas — это библиотека Python с открытым исходным кодом, представленная разработчиком программного обеспечения Уэсом МакКинни в 2008 году, которая включает высокоуровневые структуры данных и инструменты программирования для выполнения анализа данных и манипуляций с различными типами данных, будь то числа, текст или даты и т. д. Этот учебник предоставляет вам необходимые знания, чтобы начать применять Pandas в своих проектах.

2. Цель

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

Этот учебник поможет вам развить и использовать знания Pandas для:

1- импортировать и читать файл CSV

2- создать базовое понимание данных

3- выбирать и фильтровать данные в зависимости от условий

4- применять различные инструменты работы с данными, такие как создание новых переменных или изменение типов данных

5- выполнить агрегацию данных, используя методы группировки и сводной таблицы.

6- превратить аналитические идеи в бизнес-рекомендации.

#load the needed packages and modules 
import pandas as pd
import numpy as np
from datetime import date
import datetime as dt

3. Анализ данных

3.1 Загрузите данные

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

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

#load the data and make sure to change the path for your local
directory 
data = pd.read_csv('C:/Users/Smart PC/Desktop/project_data.csv')

3.2 Получите базовое понимание

После загрузки данных мы можем использовать различные методы для просмотра и понимания переменных. Например, data.head() позволяет нам просматривать первые 5 строк фрейма данных, тогда как data.tail() возвращает последние 5 строк. Если вы хотите получить первые 10 строк, вам нужно указать их в методе как data.head(10).

#first 5 rows
data.head()

#last 5 rows 
data.tail()

Еще один интересный метод — data.info(), который дает нам количество точек данных и переменных набора данных. Он также отображает типы данных. Мы видим, что наш набор данных содержит 499 точек данных и 12 переменных, начиная от личной информации клиентов и заканчивая покупками, звонками, внутренней связью и жалобами.

#check the basic information of the data
data.info()

Мы можем проверить форму набора данных, используя data.shape; это указывает на то, что наш набор данных имеет 449 строк и 12 столбцов.

#extract the shape of the data
data.shape

Предположим, что нам интересно узнать уникальные значения поля семейного положения, тогда мы должны выбрать столбец и применить уникальный метод. Как показано ниже, переменное семейное положение имеет 5 уникальных категорий. Однако мы заметили, что widow и widowed — это два разных имени для одной и той же категории, поэтому мы можем сделать их согласованными, используя метод замены для значений столбца, как показано ниже.

data['marital_status'].unique()

data[‘marital_status’] = data[‘marital_status’].replace(‘Widow’, ‘Widowed’)

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

round(data['educational_level'].value_counts(normalize=True),2)

Мы можем проверить наличие дубликатов и нулевых значений во всем наборе данных, используя методы .duplicated и .isnull. Кроме того, мы можем выбрать одну интересующую переменную в наборе данных, чтобы обнаружить ее отсутствующие значения или дубликаты, как показано ниже.

data.isnull()
data.duplicated().sum()
data['educational_level'].isnull().sum() #specifying Education as a variable where we should look for the sum of missing values

3.3 Выбор и фильтрация данных: loc и iloc

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

subset_data = data[['year_of_birth ', 'educational_level', 'annual_income']]
subset_data

Мы можем выбрать уникальную категорию образования, указав, что из фрейма данных должен быть возвращен только «Мастер».

data[data["educational_level"] == "Master"]

Два других популярных метода выбора данных из фрейма данных: loc и iloc. Основное различие между этими двумя методами заключается в следующем: loc основан на метках, что означает, что мы должны указывать строки и столбцы на основе заголовков. Тем не менее, iloc основан на целочисленной позиции, поэтому мы должны выбирать строки и столбцы по их значениям позиции в виде целых чисел, то есть: 0,1,2. Чтобы узнать больше о выборе данных с помощью этих методов, перейдите по этой ссылке.

Как мы заметили ниже, мы выбираем первые семь точек данных, используя метод loc, но для переменных «educational_level» и «regency». Мы также можем добиться того же результата с помощью iloc, но указав строки и столбцы как целочисленные значения.

data.loc[:6, ['educational_level', 'recency']] #specify the rows and columns as labels

data.iloc[:6, [2,6]] #speciy rows and columns as integer based values

Еще одним мощным инструментом является фильтрация данных с использованием методов loc и isin(), посредством которых мы выбираем интересующую переменную и выбираем нужные категории. Например, ниже мы выбираем всех клиентов с семейным положением, описанным только как «Холостяк» или «Разведен».

data.loc[data[‘marital_status’].isin([‘Single’, ‘Divorced’])]

Мы можем комбинировать iloc с оператором python для выбора данных, которые удовлетворяют двум условиям, таким как выбор клиентов с доходом выше 75 000 и со степенью магистра.

data.iloc[list((data.annual_income > 75000) & (data.educational_level == 'Master')),  :,]

3.4 Применение операций с данными: индекс, новые переменные, типы данных и многое другое!

Мы можем применять различные операции к набору данных с помощью Pandas, такие как, помимо прочего:
— установка нового индекса с интересующей нас переменной с использованием метода .set_index()
— сортировка фрейма данных по одному переменной с помощью .sort_values() в порядке возрастания или убывания; Для получения дополнительной информации о sort_values() посетите ссылку
- создание новой переменной, которая может быть результатом математической операции, такой как сумма других переменных
- построение категорий переменной с использованием pd метод .cut(); Для получения дополнительной информации о pd.cut() перейдите по ссылке
- изменение типа данных переменных на типы даты и времени или целочисленные типы
- определение возраста на основе года рождения
- создание дата недели (календарная неделя и год) с даты покупки
и многое другое; это всего лишь проблеск того, чего мы можем достичь с пандами!

#set the index as customer_id
data.set_index(‘customer_id’)

#sort the data by year_of_birth, ascending is default;
data.sort_values(by = ['year_of_birth '], ascending = True) # if we want it in descending we should set ascending = False

#create a new variable which is the sum of all purchases performed by customers
data['sum_purchases'] = data.online_purchases + data.store_purchases 
data['sum_purchases']

#create an income category (low, meduim, high) based on the income variable
income_categories = ['Low', 'Meduim', 'High'] #set the categories
bins = [0,75000,120000,600000] #set the income boundaries 
cats= pd.cut(data['annual_income'],bins, labels=income_categories) #apply the pd.cut method
data['Income_Category'] = cats #assign the categories based on income
data[['annual_income', 'Income_Category']]

#we can change the datatype of purchase_date to datetime and year_birth to integer
data['purhcase_date'] = pd.to_datetime(data['purhcase_date'])
data['year_of_birth '] = data['year_of_birth '].astype(int)
#find out the age of customers based on the current year
today = date.today()
year = int(today.year)
data['Age'] = year - data['year_of_birth ']
data['Age']

#extract the week_date from the purchase_date which shows the year of purchase and the calendar week
#make sure to change the purhcase_date varibale to datetime as shown above before applying the .isocalendar() method
data["week_date"] = [int(f'{i.isocalendar()[0]}{i.isocalendar()[1]}') for i in data.purhcase_date]
data["week_date

3.5 Выполнение агрегации данных: groupby и сводная_таблица

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

  1. groupby(): метод, который включает в себя разделение категорий, применение функции и объединение результатов, благодаря чему его можно использовать с математической операцией, такой как среднее, сумма или подсчет с агрегированным представлением с помощью группа. Для получения дополнительной информации об этой операции перейдите по этой ссылке

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

#apply groupby to find the mean of income, recency, number of web and store purchases by educational group
aggregate_view = pd.DataFrame(data.groupby(by='educational_level')[['annual_income', 'recency', 'store_purchases',  'online_purchases']].mean()).reset_index()
aggregate_view

#apply pivot table to find the aggregated sum of purchases and mean of recency per education and marital status group
pivot_table = pd.DataFrame(pd.pivot_table(data, values=['sum_purchases', 'recency'], index=['marital_status'],
                        columns=['educational_level'], aggfunc={'recency': np.mean, 'sum_purchases': np.sum}, fill_value=0)).reset_index()
pivot_table

4. Рекомендации

Теперь, когда мы завершили процесс очистки данных и выполнения операций и агрегирования в нашем наборе данных, мы можем сделать некоторые интересные выводы о нашей клиентской базе:

  • люди с докторской степенью имеют самый высокий доход, количество покупок в Интернете и магазинах; однако у выпускников средней школы самая высокая давность или количество дней с момента их последней покупки.
  • На простых людей приходится наименьшее количество покупок в Интернете и в магазинах.
  • Женатые люди с уровнем Graduation совершают самые большие покупки

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

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

5. Вывод

Наконец, я надеюсь, что вы нашли эту статью полезной, полезной и полезной для использования панд в вашем предстоящем упражнении по анализу данных. Вот итоговое резюме:
 – Pandas – это библиотека для анализа данных, созданная на основе языка программирования Python. – Pandas отлично справляется со сложными операциями с большими наборами данных с несколькими переменными.
 – Фрейм данных — это основная структура данных в pandas,
— loc и iloc используются для выбора и фильтрации данных,
— group_by и pivot_table — два самых известных метода агрегирования.

Оставайтесь с нами, чтобы узнать больше о машинном обучении и аналитике данных, чтобы делиться знаниями.