0Pricing
Learn AI with Python · Урок

Рабочий процесс EDA и профилирование данных

df.info(), df.describe(), проверка пропущенных значений и типов данных, анализ кардинальности.

«Рабочий процесс EDA и профилирование данных» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Что такое разведочный анализ данных

Разведочный анализ данных (EDA) — это первое, что выполняют с любым набором данных перед построением модели. Его цель — понять структуру данных, выявить проблемы и сформировать интуитивное представление о них.

Дисциплинированный контрольный список первичного ознакомления с помощью EDA отвечает на вопросы: каков объём данных? Какие типы имеют столбцы? Где находятся пропущенные значения? Есть ли дубликаты? Как распределены значения?

  • Рано выявить проблемы с качеством данных
  • Определить, какие признаки требуют очистки
  • Сформулировать гипотезы для последующей проверки

Загрузка данных

Всё начинается с загрузки DataFrame и быстрого просмотра с помощью head() и shape.

shape возвращает кортеж (rows, columns), поэтому Вы сразу понимаете масштаб данных, с которыми работаете.

import pandas as pd

df = pd.read_csv("customers.csv")
print(df.shape)        # (10000, 8)
print(df.head())       # first 5 rows

df.info() — типы и количество непустых значений

df.info() — самая полезная первая команда. Она выводит имя каждого столбца, его тип данных и количество непустых значений.

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

df.info()
# <class pandas.DataFrame>
# RangeIndex: 10000 entries
# age      9800 non-null  float64
# city     10000 non-null object
# income   9500 non-null  float64

df.describe() — сводка по числовым данным

df.describe() возвращает для каждого числового столбца количество значений, среднее, стандартное отклонение, минимум, квартили (25/50/75%) и максимум.

Ищите признаки проблем: min, равное -1 в столбце возраста, значение max, значительно превышающее 75-й процентиль (выбросы), или среднее значение, сильно отличающееся от медианы (асимметрия).

print(df.describe())
# Use include="all" to also summarize categorical columns
print(df.describe(include="all"))

df.isnull().sum() — подсчёт пропущенных значений

Объединение isnull() и sum() подсчитывает пропущенные значения для каждого столбца. Добавьте ещё один .sum(), чтобы получить общий итог.

Переведите результат в проценты, чтобы оценить серьёзность проблемы: столбец, в котором пропущено 60% значений, возможно, стоит удалить, а 2% пропусков легко заполнить.

print(df.isnull().sum())

missing_pct = df.isnull().sum() / len(df) * 100
print(missing_pct.sort_values(ascending=False))

df.duplicated().sum() — поиск дублирующихся строк

df.duplicated() возвращает логический ряд, отмечающий строки, которые полностью совпадают с одной из предыдущих строк. Суммирование этого ряда показывает количество дубликатов.

С помощью subset можно искать дубликаты только по ключевым столбцам — это полезно, когда значение id должно быть уникальным.

print(df.duplicated().sum())            # exact duplicate rows
print(df.duplicated(subset=["id"]).sum()) # duplicate ids

df = df.drop_duplicates()

value_counts() — частоты категорий

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

Используйте normalize=True, чтобы увидеть доли вместо абсолютных частот, и dropna=False, чтобы включить пропущенные значения в подсчёт.

print(df["city"].value_counts())
print(df["city"].value_counts(normalize=True))
print(df["city"].value_counts(dropna=False))

Проверка кардинальности

Кардинальность — это количество различных значений в столбце; его возвращает nunique().

  • Низкая кардинальность (несколько категорий) → хорошо подходит для кодирования методом one-hot.
  • Высокая кардинальность (тысячи уникальных строк, например ID пользователей) → обычно не является полезным признаком без дополнительной обработки.
for col in df.select_dtypes("object").columns:
    print(col, "->", df[col].nunique(), "unique")

Поиск постоянных столбцов и столбцов, похожих на ID

При профилировании стоит обратить внимание на две крайности:

  • Постоянные столбцы (nunique() == 1) не содержат информации — удалите их.
  • Столбцы, похожие на ID (nunique() == len(df)) имеют уникальное значение в каждой строке и обычно не дают большинству моделей полезной информации.
n = len(df)
for col in df.columns:
    u = df[col].nunique()
    if u == 1:
        print(col, "is constant")
    elif u == n:
        print(col, "is ID-like")

dtypes и использование памяти

Проверьте df.dtypes, чтобы убедиться, что столбцы хранятся правильно, а с помощью df.memory_usage(deep=True) найдите столбцы, занимающие много памяти.

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

print(df.dtypes)
print(df.memory_usage(deep=True))

df["city"] = df["city"].astype("category")

Повторно используемый фрагмент для профилирования

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

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

def profile(df):
    print("Shape:", df.shape)
    print(df.info())
    print("Missing:\n", df.isnull().sum())
    print("Dupes:", df.duplicated().sum())
    for c in df.select_dtypes("object"):
        print(c, df[c].nunique(), "unique")

profile(df)

Быстрая проверка: пропущенные значения

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

Повторение: контрольный список первичного EDA

Теперь у Вас есть повторяемая начальная процедура для любого набора данных:

  • shape и head() — для определения масштаба и предварительного просмотра
  • info() — для проверки типов данных и количества непустых значений
  • describe() — для сводки по числовым данным и поиска признаков выбросов
  • isnull().sum() — для анализа пропусков
  • duplicated().sum() — для поиска дублирующихся строк
  • value_counts() и nunique() — для анализа частот категорий и кардинальности

Далее мы подробно рассмотрим отдельные столбцы с помощью одномерного анализа.

Часто задаваемые вопросы

Урок «Рабочий процесс EDA и профилирование данных» бесплатный?

Да — полный текст урока «Рабочий процесс EDA и профилирование данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Рабочий процесс EDA и профилирование данных»?

df.info(), df.describe(), проверка пропущенных значений и типов данных, анализ кардинальности. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Рабочий процесс EDA и профилирование данных»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Рабочий процесс EDA и профилирование данных
  2. Одномерный анализ
  3. Двумерный и многомерный анализ
  4. Анализ распределения признаков и целевой переменной
← Назад к Learn AI with Python