Целью лабораторной работы является формирование навыков табличного анализа данных с использованием библиотеки Pandas, включая:
·
создание и
загрузку DataFrame;
· работу с типами данных и пропусками;
· фильтрацию и сортировку данных;
· группировку и агрегирование;
· построение сводных таблиц;
· сравнение табличной модели с алгоритмической (ЛР2) и числовой (ЛР3).
Лабораторная работа закрепляет переход к профессиональной аналитической модели обработки данных.
2.1. DataFrame как табличная модель
В предыдущих лабораторных работах данные рассматривались либо как список словарей (list[dict]), либо как отдельные числовые массивы (ndarray). В Pandas используется более удобная и мощная структура – DataFrame. DataFrame можно представить как полноценную таблицу, где:
· каждая строка – это отдельное наблюдение (например, трек);
· каждый столбец – это признак (жанр, длительность, просмотры и т.д.);
· индекс позволяет обращаться к строкам и управлять их порядком.
В отличие от:
· list[dict], DataFrame предоставляет встроенные методы фильтрации, группировки и агрегирования;
· ndarray, DataFrame может одновременно хранить числовые, категориальные и текстовые данные.
Создание таблицы из CSV-файла выполняется одной командой:
import pandas as pd
df = pd.read_csv("data/spotify_edu_dataset_ru_complex.csv")
После загрузки данные становятся единым объектом анализа, к которому можно применять табличные операции высокого уровня.
После
загрузки данных в DataFrame важно понять, как Pandas интерпретировал столбцы. Для этого
используются методы:
df.info()
df.dtypes
Метод
info() позволяет увидеть:
· количество строк,
· типы данных по каждому столбцу,
· наличие пропусков.
Метод
dtypes показывает тип каждого столбца
отдельно. Это важно, поскольку числовые признаки могут быть автоматически
распознаны как строки, если в них присутствуют некорректные значения.
Работа с пропусками. Для анализа пропущенных значений используется:
df.isna().sum()
Эта команда показывает количество пропусков в каждом столбце. Если числовой столбец содержит строки или некорректные значения, его можно привести к числовому типу следующим образом:
df["duration_sec"] = pd.to_numeric(df["duration_sec"], errors="coerce")
Параметр
errors="coerce" означает, что некорректные
значения будут автоматически заменены на NaN. Таким образом, Pandas позволяет контролируемо привести данные к корректному типу и
подготовить их к дальнейшему анализу.
Одним из ключевых преимуществ DataFrame является возможность выполнять фильтрацию и сортировку данных на уровне таблицы, без явного использования циклов.
Фильтрация. Если требуется отобрать строки, удовлетворяющие определённому условию, используется логическое выражение:
df[df["energy"] > 0.8]
В данном случае будут выбраны только те треки, у которых показатель energy превышает 0.8. Такой способ фильтрации интуитивно напоминает работу с таблицей: мы задаём условие для столбца и получаем подтаблицу, содержащую только подходящие строки.
Сортировка. Для упорядочивания данных по значению признака используется метод sort_values():
df.sort_values("views", ascending=False)
Здесь строки таблицы сортируются по количеству просмотров в порядке убывания, что позволяет быстро определить наиболее популярные треки. Таким образом, фильтрация и сортировка в Pandas выполняются декларативно: мы задаём условие или критерий упорядочивания, а библиотека самостоятельно обрабатывает всю таблицу. Это существенно упрощает код по сравнению с алгоритмической реализацией в ЛР2.
2.4. Группировка и агрегирование
Одной
из самых важных возможностей Pandas
является группировка данных.
Она позволяет анализировать не отдельные строки, а целые группы наблюдений, объединённые
по какому-либо признаку. Например, если требуется узнать среднее количество
просмотров по жанрам, используется конструкция:
df.groupby("genre")["views"].mean()
В этом случае:
· данные разбиваются на группы
по значению столбца genre;
· для каждой группы вычисляется
среднее значение views.
Результатом будет таблица, где каждому жанру соответствует среднее число просмотров.
Несколько агрегатов одновременно. Pandas позволяет рассчитывать несколько статистических показателей за один шаг:
df.groupby("genre").agg({
"views": "mean","duration_sec": "median"
})
Здесь для каждой группы по жанру:
· вычисляется среднее количество просмотров;
· определяется медианная длительность трека.
Такой подход значительно упрощает анализ по сравнению с алгоритмической реализацией в ЛР2 или обработкой отдельных массивов в ЛР3. Таким образом, группировка и агрегирование переводят анализ на более высокий уровень: мы работаем не с отдельными значениями, а с закономерностями внутри категорий.
2.5. Сводные таблицы (pivot)
Сводная таблица позволяет обобщить данные по заданному признаку и получить компактное представление агрегированных результатов. В Pandas для этого используется функция pivot_table():
pd.pivot_table(
df,
values="views",
index="genre",
aggfunc="mean"
)
В данном случае:
· данные группируются по столбцу genre;
· для каждого жанра рассчитывается среднее значение views;
· результат представляется в виде новой таблицы.
По сути, сводная таблица выполняет ту же задачу, что и groupby(), но в более универсальной форме. Она позволяет:
· использовать несколько уровней группировки;
· рассчитывать разные агрегаты;
· строить многомерные представления данных.
Сводные таблицы широко применяются в аналитике, поскольку позволяют быстро выявлять закономерности внутри категорий без написания сложной логики обработки.
В лабораторной работе используется файл:
data/spotify_edu_dataset.csv
Работа
выполняется с тем же учебным набором данных, который был сформирован и очищен в
ЛР2 и использовался для численного анализа в ЛР3. Таким образом, в ЛР4 анализ
проводится уже над подготовленными данными, но в новой табличной модели
представления – DataFrame.
4. ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ
Этап 1. Загрузка и первичный анализ данных
1) Загрузить файл в DataFrame с использованием pd.read_csv().
2) Вывести первые 5 строк таблицы.
3) Проанализировать структуру данных (типы столбцов).
4) Определить количество пропущенных значений по каждому столбцу.
1) Привести столбцы, содержащие числовые данные, к корректному числовому типу.
2) Убедиться, что преобразование выполнено корректно: проверить типы столбцов и количество появившихся пропусков.
Этап 3. Фильтрация и сортировка
1) Отобрать треки, у которых показатель energy превышает 0.8.
2) Определить и вывести 10 треков с наибольшим числом просмотров.
3) Найти треки, длительность которых превышает среднее значение по выборке.
Этап 4. Группировка и агрегирование
1) Определить, сколько треков относится к каждому жанру.
2) Рассчитать среднее количество просмотров для каждого жанра.
3) Выявить жанр с наибольшим средним числом просмотров.
Этап 5. Построение сводной таблицы
1) Построить сводную таблицу, отражающую среднее количество просмотров по каждому жанру.
2) Сравнить полученные значения с результатами группировки, выполненной на этапе 4.
1) Сравнить объём и структуру кода.
2) Оценить читаемость и уровень абстракции решения.
3) Сформулировать вывод о преимуществах табличной модели анализа.
5. ИСПОЛЬЗОВАНИЕ ЭТАЛОННОГО КАРКАСА
Для выполнения лабораторной работы допускается использование эталонного кодового каркаса, приведённого в Приложении 5 («Эталон выполнения лабораторной работы №4»). Эталонный каркас демонстрирует:
·
рекомендуемую
структуру работы с DataFrame;
· порядок приведения типов данных;
· примеры фильтрации, сортировки и группировки;
· построение сводной таблицы.
Использование
эталона не освобождает от самостоятельной работы.
В отчёте должны быть представлены:
· собственные результаты выполнения этапов;
· аналитическая интерпретация полученных показателей;
· вывод о преимуществах табличной модели анализа.
Копирование кода без понимания логики его работы считается методически некоррект.
Отчёт по лабораторной работе должен быть оформлен в структурированном виде и содержать следующие разделы:
1) Цель работы. Необходимо кратко сформулировать цель лабораторной работы и указать, какие навыки табличного анализа были освоены.
2) Теоретическое обоснование. В связной форме изложить:
a.
особенности
структуры DataFrame;
b. принципы работы с типами данных и пропусками;
c. роль группировки и агрегирования в табличном анализе.
3) Код программы с комментариями. Решение должно быть структурировано (функции, логическая последовательность этапов). Комментарии должны пояснять:
· назначение ключевых операций;
· логику фильтрации, группировки и построения сводной таблицы.
4) Результаты фильтрации и сортировки. В отчёте необходимо представить полученные выборки и кратко пояснить результаты.
5) Результаты группировки и агрегирования. Следует привести вычисленные показатели по жанрам и дать краткую интерпретацию.
6) Сводная таблица. Необходимо представить построенную сводную таблицу и сопоставить её результаты с результатами группировки.
7) Сравнение с ЛР2 и ЛР3. Кратко проанализировать:
· различие в объёме кода;
· уровень абстракции;
· удобство табличной модели.
8) Ответы на контрольные вопросы.
9) Выполнение заданий к СРО.
10) Вывод по лабораторной работе. Вывод должен носить аналитический характер и отражать понимание перехода к табличной модели анализа данных.
1) В чём принципиальное отличие
структуры DataFrame от модели list[dict], использованной в ЛР2? Какие
преимущества даёт табличная модель?
2) Почему библиотека Pandas считается более удобным инструментом для табличного анализа по сравнению с базовыми средствами Python и массивами NumPy?
3) В чём различие между операцией groupby() и сортировкой данных? Какие
задачи решает каждая из этих операций?
4) Каким образом в Pandas обрабатываются пропущенные значения? Чем отличается поведение Pandas от NumPy при работе с пропусками?
5) В чём состоит назначение сводных таблиц? В каких случаях их использование предпочтительнее обычной группировки?
8. ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ ОБУЧАЮЩЕГОСЯ (СРО)
1) Рассчитать медианное количество просмотров по жанрам и сопоставить результаты со средними значениями. Сделать вывод о влиянии выбросов.
2) Определить трёх исполнителей с наибольшим суммарным числом просмотров и кратко проанализировать полученный результат.
3) Построить сводную таблицу по двум признакам (например, жанр и исполнитель) и интерпретировать выявленные закономерности.
4) Сравнить результаты агрегирования, полученные средствами Pandas, с реализацией аналогичных вычислений в NumPy. Оценить различие в сложности кода.
5) Проанализировать влияние пропущенных значений на результаты агрегирования (среднее, медиана) и пояснить, какие искажения могут возникать.
9. ВЫВОД ПО ЛАБОРАТОРНОЙ РАБОТЕ
В выводе необходимо представить аналитическое обобщение выполненной работы. Следует отразить:
·
каким
образом произошёл переход от алгоритмической и числовой модели анализа к
табличной модели (DataFrame);
· какие преимущества предоставляет Pandas при выполнении фильтрации, группировки и агрегирования данных;
· как изменился уровень абстракции и читаемость кода по сравнению с ЛР2 и ЛР3;
· каким образом освоенные методы подготавливают к более сложным задачам анализа и визуализации данных.
Вывод должен носить аналитический характер и демонстрировать понимание роли табличной модели в профессиональной аналитике.
В
лабораторной работе №4 освоена табличная модель анализа данных с использованием
DataFrame. Обучающийся научился
выполнять фильтрацию, сортировку, группировку и агрегирование данных на уровне
таблицы. В лабораторной работе №5 будет рассмотрена визуализация данных с
использованием библиотек Matplotlib и Seaborn. Это позволит перейти от численного
и табличного представления результатов к их графической интерпретации. Таким
образом, ЛР5 л огически продолжает ЛР4: если в текущей работе данные
анализируются средствами таблицы, то в следующей – результаты анализа будут
представлены в наглядной визуальной форме.