0Pricing
Pandas & NumPy Academy · Урок

Контрольный список профилирования набора данных

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

«Контрольный список профилирования набора данных» — бесплатный урок Pandas & NumPy Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Pandas & NumPy Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Pandas & NumPy Academy содержит 4 уроков всего.

Первые пять минут работы с набором данных

Опытные аналитики данных используют систематический контрольный список для профилирования всякий раз, когда сталкиваются с новым набором данных. Вместо того чтобы сразу переходить к анализу, они сначала отвечают на ряд диагностических вопросов: каков размер данных? Какие типы у столбцов? Сколько значений пропущено? Есть ли очевидные аномалии? Такой структурированный подход предотвращает многочасовую напрасную работу из-за неверно понятых типов данных или скрытых пустых значений, искажающих вычисления.

import pandas as pd

# Simulate loading a new dataset
df = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')

# Step 1: size
print('Shape:', df.shape)
print('Rows:', len(df))

Шаг 1: форма, столбцы и типы данных

Первые три проверки всегда касаются формы (строки × столбцы), имён столбцов (соответствуют ли они ожиданиям?) и типов данных (действительно ли числовые столбцы содержат числа?). Часто оказывается, что числовые столбцы были загружены с типом object, поскольку содержат текстовые записи вроде 'unknown' или числа с запятыми в разных форматах. Обнаружение этой проблемы на этапе профилирования избавляет от агрегирования, которое без предупреждения возвращает неверные результаты.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('Shape:', df.shape)
print('\nColumns:', df.columns.tolist())
print('\nData Types:')
print(df.dtypes)

Шаг 2: проверка пропущенных значений

Вызовите df.isna().sum(), чтобы посчитать пропущенные значения в каждом столбце, а затем разделите результат на len(df), чтобы получить долю. Столбцы, в которых пропущено более 50% значений, обычно следует удалить; пропуски в диапазоне 1–20% обычно требуют заполнения; отсутствие пропусков (0%) нуждается в дополнительной проверке — идеальная полнота сама по себе может вызывать подозрения, если реальные данные редко бывают настолько чистыми. Отсортируйте результат по убыванию, чтобы сначала увидеть столбцы с наибольшим количеством пропусков.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Missing value audit
missing = df.isna().sum()
missing_pct = (missing / len(df) * 100).round(1)
audit = pd.DataFrame({'count': missing, 'pct': missing_pct})
audit = audit[audit['count'] > 0].sort_values('pct', ascending=False)
print(audit)

Шаг 3: основные описательные статистики

df.describe() за один вызов возвращает для каждого числового столбца количество, среднее, стандартное отклонение, минимум, квартили и максимум. Всегда проверяйте минимум и максимум на наличие невозможных значений (например, возраст = -3 или возраст = 999), среднее и медиану на асимметрию (большой разрыв указывает на выбросы), а также количество (если оно меньше общего числа строк, присутствуют пустые значения). Добавьте include='all', чтобы включить статистики и для столбцов типа object (число уникальных значений, наиболее частое значение и его частоту).

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Describe numeric columns
print('Numeric statistics:')
print(df.describe().round(2))

print('\nObject column statistics:')
print(df.describe(include='object'))

Шаг 4: подсчёт уникальных значений

Для категориальных столбцов проверьте число уникальных значений с помощью df[col].nunique(), а наиболее распространённые значения изучите с помощью value_counts(). Обращайте внимание на столбцы, которые выглядят категориальными, но содержат сотни уникальных значений (возможно, это поле со свободным текстом или идентификатор), а также на столбцы, которые должны быть логическими, но содержат три значения (True, False и NaN). Проверьте и единообразие регистра: 'Male' и 'male' будут считаться отдельными категориями.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

categorical = df.select_dtypes(include='object').columns
for col in categorical:
    n = df[col].nunique()
    top_vals = df[col].value_counts().head(3).to_dict()
    print(f'{col}: {n} unique — top3: {top_vals}')

Шаг 5: выборка строк с помощью head и tail

df.head(10) и df.tail(10) показывают соответственно первые и последние строки. Важно изучать и те, и другие, поскольку наборы данных часто содержат чистые строки заголовка и неаккуратные конечные строки, появившиеся из-за артефактов экспорта (например, строку итогов 'Total', добавленную в экспорт CSV). Также используйте df.sample(10), чтобы посмотреть случайную выборку строк и избежать смещения в пользу начала набора данных.

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

print('First 3 rows:')
print(df.head(3))

print('\nLast 3 rows:')
print(df.tail(3))

print('\nRandom sample of 3:')
print(df.sample(3, random_state=42))

Шаг 6: проверка дубликатов

Вызовите df.duplicated().sum(), чтобы посчитать полностью дублирующиеся строки (в которых совпадает каждый столбец). Если набор данных заявлен как содержащий уникальные записи клиентов, даже один дубликат является тревожным сигналом, указывающим на проблемы с качеством данных. Используйте df[df.duplicated(keep=False)], чтобы изучить сами дублирующиеся строки. Если таблица должна иметь уникальные ключи (например, ID пользователя), также проверьте уникальность на уровне ключей с помощью df['id'].duplicated().sum().

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

# Full-row duplicates
full_dups = df.duplicated().sum()
print(f'Fully duplicated rows: {full_dups}')

# Key-level duplicates (e.g. passenger class + name)
key_dups = df.duplicated(subset=['pclass', 'sex', 'age', 'fare']).sum()
print(f'Near-duplicate rows (pclass+sex+age+fare): {key_dups}')

Шаг 7: столбцы с датами и временем

Если набор данных содержит столбцы с датами или временными метками, проверьте, что Pandas загрузил их как datetime64, а не как object. Выполните преобразование с помощью pd.to_datetime(df['col']). Затем изучите диапазон дат: df['date'].min() и df['date'].max(). Ищите временные метки, отстоящие далеко в будущем (например, 2099 год) или прошлом (нулевая эпоха: 1970-01-01), поскольку они могут быть специальными значениями, используемыми для обозначения пропущенных дат.

import pandas as pd

# Synthetic example with a date column
df = pd.DataFrame({
    'order_id': [1, 2, 3, 4],
    'order_date': ['2024-01-10', '2024-02-05', '1970-01-01', '2024-12-31']
})

df['order_date'] = pd.to_datetime(df['order_date'])

print('Date range:', df['order_date'].min(), 'to', df['order_date'].max())
print('\nSuspect dates (before 2020):')
print(df[df['order_date'] < '2020-01-01'])

Автоматизация контрольного списка с помощью функции

Объединение шагов профилирования в повторно используемую функцию гарантирует, что одни и те же проверки будут единообразно выполняться для каждого набора данных. Функция должна выводить структурированный отчёт с формой данных, пропущенными значениями, типами данных, количеством дубликатов и основными статистиками. Её можно расширить визуализациями или сохранить в виде отчёта HTML. Подобные функции являются стандартным инструментом профессиональных команд по работе с данными, в которых несколько аналитиков работают над одним конвейером.

import pandas as pd

def profile(df, name='DataFrame'):
    print(f'=== Profile: {name} ===')
    print(f'Shape: {df.shape[0]} rows x {df.shape[1]} cols')
    print(f'Duplicates: {df.duplicated().sum()}')
    print(f'\nMissing values (top 5):')
    missing = (df.isna().sum() / len(df) * 100).sort_values(ascending=False)
    print(missing[missing > 0].head(5).round(1).to_string())
    print(f'\ndtypes:')
    print(df.dtypes.value_counts().to_string())
    print('=' * 35)

import seaborn as sns
df = sns.load_dataset('titanic')
profile(df, 'Titanic')

ydata-profiling для автоматизированного EDA

Библиотека ydata-profiling (ранее pandas-profiling) создаёт подробный отчёт HTML из DataFrame одной строкой: ProfileReport(df).to_file('report.html'). Отчёт содержит гистограммы, корреляционные матрицы, тепловые карты пропущенных значений, обнаружение дубликатов и графики взаимодействий. Это самый быстрый способ передать полный профиль набора данных заинтересованному лицу, которому нужно понять данные без написания кода.

# Install: pip install ydata-profiling
# from ydata_profiling import ProfileReport
# import pandas as pd
# import seaborn as sns

# df = sns.load_dataset('titanic')
# profile = ProfileReport(df, title='Titanic Profiling Report', explorative=True)
# profile.to_file('titanic_profile.html')

# The above generates a full HTML report automatically.
# Alternatively, use minimal mode for faster generation:
# profile = ProfileReport(df, minimal=True)
print('ydata-profiling generates HTML EDA reports automatically.')
print('Run: pip install ydata-profiling')

Итоги контрольного списка профилирования

Полный контрольный список профилирования любого нового набора данных состоит из семи шагов: 1) форма и столбцы, 2) типы данных и подозрительные назначения типов, 3) количество и доля пропущенных значений в каждом столбце, 4) описательные статистики (минимум, максимум, среднее, медиана), 5) уникальные значения и их частоты для категориальных столбцов, 6) обнаружение дублирующихся строк и 7) проверка диапазона дат. Выполнение этого списка до начала анализа предотвращает незаметные ошибки, которые впоследствии искажают результаты.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли контрольный список профилирования набора данных из этого урока.

Итоги урока

В этом уроке Вы узнали о 7-шаговом контрольном списке профилирования (форма, типы данных, пропущенные значения, статистики, количество уникальных значений, дубликаты и даты), объединении проверок в повторно используемую функцию профилирования и использовании ydata-profiling для автоматического создания отчётов HTML. Далее мы перейдём к одномерному анализу — изучению каждого столбца отдельно для выявления выбросов, асимметрии и необычных распределений.

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

Урок «Контрольный список профилирования набора данных» бесплатный?

Да — полный текст урока «Контрольный список профилирования набора данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Pandas & NumPy Academy, подпишись на CoddyKit PRO. Курс Pandas & NumPy Academy содержит 4 уроков всего.

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

Систематически проверяйте размер, dtypes, количество пропусков, уникальные значения и основные статистики при работе с новым набором данных. Ты практикуешь Pandas & NumPy Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Pandas & NumPy Academy?

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

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

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

Можно ли писать и запускать код в этом уроке Pandas & NumPy Academy?

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

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

  1. Контрольный список профилирования набора данных
  2. Одномерный анализ
  3. Двумерный анализ и анализ корреляций
  4. Обобщение результатов в отчёте
← Назад к Pandas & NumPy Academy