Зарегистрируйтесь, чтобы продолжить обучение

Решение аналитической задачи с помощью Jupyter Notebook Python: Anaconda

Сегодня мы продолжаем знакомство с Anaconda.

Подготовка к работе

Давайте начнем с вводных. У нас есть датасет, который мы скачали с сайта Kaggle.com, известной платформы для данных и машинного обучения. Этот датасет содержит информацию о клиентах магазина, включая их идентификаторы, пол, возраст, годовой доход и покупательную активность (spending score).

Файл датасета представляет собой CSV-файл (Comma-Separated Values) с разделителем запятаями. CSV-формат широко используется для хранения и обмена данными в табличной форме. Если бы мы попробовали открыть этот файл в текстовом редакторе или табличном процессоре, все данные были бы объединены в одну колонку. Однако Python может легко обработать CSV-файлы и разбить данные на столбцы для дальнейшего анализа.

Также у нас есть файл с расширением .ipynb. Это стандартное расширение для Jupyter Notebook. Эти файлы сохраняются в формате JSON и могут быть легко переносимыми между разными системами и устройствами.

Для решения этой аналитической задачи мы будем использовать Anaconda Navigator, включающую в себя Jupyter Notebook, а также Python. Мы создадим новое рабочее окружение, установим необходимые библиотеки (Pandas и Matplotlib) и выполним задачу.

Сначала мы создадим новое окружение в Anaconda Navigator и установим необходимые библиотеки. Затем мы загрузим и откроем Jupyter Notebook, где будем работать с датасетом и решать задачу.

Убедитесь, что вы следите за этим процессом, так как это важная часть аналитической работы с использованием Anaconda и Jupyter Notebook.

Загрузка библиотек

У нас есть настроенная среда для работы, но пока не доступна плашка с выбором рабочей среды (environment). Как только она станет доступной, мы выберем не базовую среду (base route), а уже созданную, с настройками и библиотеками для решения задачи.

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

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

Теперь давайте перейдем к новой рабочей среде. Здесь мы видим все приложения, которые доступны. Однако Jupyter Lab пока не установлен. Я нажимаю "Install," и приложение начинает скачиваться из интернета.

Нашей основной задачей на этом уроке является научиться создавать и запускать Jupyter Notebooks. В этом блокноте, у меня есть разделы Markdown, в которых я комментирую и объясняю, что мы делаем. Также есть блоки с кодом, которые мы будем выполнять. Markdown-блоки представляют собой комментарии к коду и служат для описания процесса и целей.

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

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

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

Теперь давайте начнем работу с данными.

Работа с данными

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

Далее мы предпринимаем шаги, чтобы сделать нашу таблицу более удобной для работы. Мы присваиваем индексной колонке имя "customer ID" и убираем колонку с индексами, что делает работу с таблицей более удобной.

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

Далее мы проводим работу с группировкой данных — вычисляем суммы и количество повторений годового дохода по возрастным группам. Затем мы строим фрейм данных (data frame) на основе этой информации и выводим первые 200 записей.

В завершение, давайте создадим точечный график распределения возраста по баллам "score," используя библиотеку Matplotlib. Сперва, определим оси X и Y, выберем тип графика и добавим названия осей и графика. В результате мы получили график, который показал, что у клиентов до 40 лет баллы "score" выше, чем у клиентов старше 40 лет.

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


Самостоятельная работа

Создайте новый Jupyter-notebook в Anaconda, добавьте библиотеки pandas и matplotlib. Загрузите датасет

Шаг 1. Установите в качестве индекса поле customer_id

Нажмите, чтобы увидеть результат
import pandas as pd
import matplotlib.pyplot as plt


data = pd.read_csv("customer_shopping_data.csv")
data.head(200)

data.set_index("customer_id", inplace=True)
data.head(200)

# invoice_no customer_id gender age category quantity price payment_method invoice_date
# 0 I138884 C241288 Female 28 Clothing 5 1500.40 Credit Card 5/8/2022
# 1 I317333 C111565 Male 21 Shoes 3 1800.51 Debit Card 12/12/2021
# 2 I127801 C266599 Male 20 Clothing 1 300.08 Cash 9/11/2021
# 3 I173702 C988172 Female 66 Shoes 5 3000.85 Credit Card 16/05/2021
# 4 I337046 C189076 Female 53 Books 4 60.60 Cash 24/10/2021
# ... ... ... ... ... ... ... ... ... ...
# 195 I220863 C131497 Male 21 Books 4 60.60 Cash 22/07/2021
# 196 I530401 C526660 Female 32 Technology 2 2100.00 Cash 25/09/2022
# 197 I219555 C266961 Male 47 Clothing 3 900.24 Credit Card 10/9/2021
# 198 I316629 C204741 Female 41 Souvenir 3 35.19 Cash 16/01/2022
# 199 I795251 C181619 Male 33 Cosmetics 5 203.30 Cash 13/11/2022
# 200 rows × 9 columns

Шаг 2. Сделайте анализ данных с помощью метода descibe()

Нажмите, чтобы увидеть результат
data.describe()

# age quantity price
# count 99457.000000 99457.000000 99457.000000
# mean 43.427089 3.003429 689.256321
# std 14.990054 1.413025 941.184567
# min 18.000000 1.000000 5.230000
# 25% 30.000000 2.000000 45.450000
# 50% 43.000000 3.000000 203.300000
# 75% 56.000000 4.000000 1200.320000
# max 69.000000 5.000000 5250.000000

Шаг 3. Выведите только столбцы gender, age и price

Нажмите, чтобы увидеть результат
df = data[["age", "gender", "price"]]
df.head(200)

# age gender price
# customer_id
# C241288 28 Female 1500.40
# C111565 21 Male 1800.51
# C266599 20 Male 300.08
# C988172 66 Female 3000.85
# C189076 53 Female 60.60
# ... ... ... ...
# C131497 21 Male 60.60
# C526660 32 Female 2100.00
# C266961 47 Male 900.24
# C204741 41 Female 35.19
# C181619 33 Male 203.30
# 200 rows × 3 columns

Шаг 4. Сгруппируйте данные по возрасту только для gender == "Female", посчитайте сумму продаж каждой категории, постройте график

Нажмите, чтобы увидеть результат
female_df = df[df.gender == "Female"].groupby(["age"]).sum("price")
plt.figure()
female_df.plot()

plot

Для полного доступа к курсу нужен базовый план

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

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff