Работа с pandas
В машинном обучении значительная часть времени уделяется подготовке данных. Одним из базовых инструментов для работы с данными в Python является библиотека pandas, которая уже предустановлена в Google Colab.
Основной тип данных в pandas – DataFrame, который представляет из тебя двухмерный массив (читай: таблицу как в Excel) и позволяет просматривать, сортировать, фильтровать и визуализировать данные. Одна колонка в этой таблице (одномерный массив, усложнённый стандартный list) называется Series.
Первым делом нам нужно импортировать библиотеку, общепринятое сокращение для pandas – pd.
python
import pandas as pdЗагрузка и просмотр данных
Загрузка файлов
Чтобы лучше понимать работу с файловой системой, рекомендуется почитать раздел Работа с файлами из доп. материала Специфика Google Colab.
Для начала данные нужно загрузить из файла в переменную. Файлы могут быть разных типов, но самый простой и частотный формат – CSV (.csv), где значения в каждой строке обычного текстового документа разделены запятыми. Для чтения такого файла используется метод pd.read_csv().
Сразу после загрузки нам нужно посмотреть на данные, чтобы понять, с чем мы имеем дело. Выводить всю таблицу на экран не стоит (она может состоять из миллионов строк), лучше посмотреть на первые несколько строк с помощью метода .head(), узнать размер таблицы через .shape и получить общую техническую информацию о таблице через .info(). Вместо привычной print() для табличных данных лучше использовать специализированную глобальную функцию display().
python
# Загружаем таблицу из файла example.csv
data = pd.read_csv('example.csv')
# Выводим первые 5 строк таблицы
display(data.head())
# Можно указать количество строк
display(data.head(8))
# Получаем количество строк и колонок
# Важно: у shape нет скобок
print(data.shape)
# Получаем техн. информацию (названия, типы данных, наличие пустых ячеек)
print(data.info())Essentials
Подробнее о базовых операциях pandas можно почитать во вводной статье и материале 10 minutes to pandas.
Задача 1
Загрузите скачанный с Kaggle датасет (файл .csv) в любую переменную. Выведите на экран первые 4 строки вашей таблицы. Распечатайте размер вашей таблицы. Выведите общую информацию о таблице, чтобы посмотреть названия всех колонок.
Выбор колонок
Очень часто нам нужна не вся таблица, а только конкретные столбцы (например, в будущем мы захотим взять только колонку с текстом письма и колонку с пометкой «спам/не спам»).
Чтобы получить одну колонку, нужно написать имя переменной с таблицей, и в квадратных скобках указать название колонки в кавычках. Если нужно выбрать сразу несколько колонок, мы передаем список названий (то есть используем двойные квадратные скобки).
python
# Выбираем одну колонку "Category" и сохраняем в новую переменную
category_column = data["Category"]
# Выводим первые 5 элементов этой колонки
print(category_column.head())
# Выбираем две колонки: "Category" и "Price".
# Обратите внимание на ДВОЙНЫЕ квадратные скобки.
# Внешние скобки - это обращение к таблице, внутренние - это список колонок.
subset = data[["Category", "Price"]]
# Смотрим, что получилось
display(subset.head())Задача 2
Посмотрите на названия колонок вашего датасета (вы их выводили в первой задаче). Выберите одну любую текстовую колонку из вашего датасета и выведите первые 5 строк из неё. Создайте новую таблицу, состоящую из двух любых колонок вашего датасета, и выведите её на экран.
Подсчет значений
В машинном обучении (особенно в задачах классификации) нам критически важно знать, сколько у нас примеров того или иного класса. Например, сколько у нас спама, а сколько обычных писем. Узнать это можно с помощью метода .value_counts(), который применяется к конкретной колонке. Он считает, сколько раз встречается каждое уникальное значение.
python
status_counts = data["Status"].value_counts()
print("Распределение статусов:")
print(status_counts)Задача 3
Выберите в вашем датасете колонку, которая содержит категории (какие-то повторяющиеся текстовые значения). Посчитайте, сколько раз встречается каждая категория в этой колонке, и выведите результат на экран.
Фильтрация данных
В pandas существует несколько отфильтровать таблицу, оставив только те строки, которые соответствуют какому-то условию. Один из вариантов выглядит следующим образом: чтобы отфильтровать таблицу df (от DataFrame), мы пишем df[условие].
Например, условие может быть df["Price"] > 100, или df["Category"] == 'Electronics', или даже составным – df[(df["distace"] > 50) & (df["arriving"] == "Frifay")].
python
# Фильтрация по числу: оставляем только те товары, где цена больше 350
expensive_items = items[items["Price"] > 350]
print("Товары дороже 350:")
display(expensive_items.head())
# Фильтрация по тексту: оставляем только выполненные задачи
finished_tasks = tasks[tasks["Status"] == "Done"]
print("Выполненные задачи:")
display(finished_tasks.head())Задача 4
Сделайте фильтрацию вашей таблицы по любой числовой колонке (например, значения больше, меньше или равны какому-то числу). Сохраните результат в новую переменную и выведите на экран. Сделайте фильтрацию по текстовой колонке (оставьте строки, где значение точно равно какому-то слову). Выведите результат.
Предобработка данных
Реальные данные почти всегда нужно предобработать для конкретных целей. В них часто не хватает значений (например, пользователь не указал свой возраст). В pandas пустые ячейки обозначаются как NaN (Not a Number).
Сначала мы проверяем, есть ли пустые ячейки с помощью связки .isna().sum() (это подсчитает сумму пустых ячеек в каждой колонке). А затем удаляем строки с пропусками методом .dropna().
python
# Проверяем, сколько пустых ячеек в каждой колонке
print("Количество пропусков:")
print(df.isna().sum())
# Удаляем все строки, в которых есть хотя бы одна пустая ячейка
df_clean = df.dropna()
# Проверяем результат (ожидаем 0)
print("Количество пропусков:")
print(df_clean.isna().sum())
print("Размер таблицы изменился:")
print("Был:", df.shape)
print("Стал:", df_clean.shape)Задача 5
Проверьте ваш датасет: сколько пустых значений содержится в каждой колонке? Создайте новую таблицу, удалив из исходной все строки с пропусками. Выведите размер (shape) новой таблицы без пропусков и сравните его с размером изначального датасета. Сколько строк было удалено?
Построение графиков
Pandas имеет хорошую совместимость с библиотекой Matplotlib (также встроенной в Google Colab), предназначенной для построения графиков. Импортируем из неё сам плоттер как plt.
python
import pandas as pd
import matplotlib.pyplot as pltMatplotlib может строить великое множество графиков (примеры), однако простые случаи покрывает метод .plot() у Series и DataFrame, который использует plt.plot() под капотом. Имейте ввиду, что не любые датасеты будут хорошо смотреться из коробки, поэтому данные необходимо подготавливать, а графики – настраивать.
Примеры работы
Подробнее о работе с графиками в pandas можно почитать в материале Chart visualization.