
Выбор источников данных для будущего датасета

Качество итогового датасета напрямую зависит от исходных источников. При выборе важно учитывать формат, полноту и юридические ограничения. На практике применяются четыре основных типа источников.
| Тип источника | Примеры | Особенности |
|---|---|---|
| Открытые данные | Kaggle Datasets, data.gov, data.gov.ru | Быстрый доступ, готовые описания, но ограниченное обновление |
| API сервисов | Twitter API, OpenWeatherMap, GitHub API | Динамические данные, возможность фильтрации, ограничения по частоте запросов |
| Веб-скрейпинг | Новости, интернет-магазины, форумы | Гибкость в сборе, но необходима очистка, соблюдение правил robots.txt |
| Собственные данные | Логи приложений, результаты экспериментов | Максимальный контроль, уникальность, но высокая стоимость подготовки |
Перед сбором данных стоит проверить лицензию и условия использования. Для интеграции в Python чаще всего применяются библиотеки requests для API, pandas для CSV/JSON и BeautifulSoup или Scrapy для парсинга сайтов. Если данные поступают из нескольких источников, необходимо заранее определить ключи для их объединения.
Загрузка и чтение данных с помощью pandas

Библиотека pandas поддерживает работу с разными форматами файлов: CSV, Excel, JSON, SQL-базы и Parquet. Основная функция для загрузки – read_*, где вместо «*» указывается тип источника.
pd.read_csv("data.csv")– чтение CSV-файлов.pd.read_excel("data.xlsx", sheet_name="Лист1")– импорт таблиц из Excel.pd.read_json("data.json")– работа с JSON-структурами.pd.read_sql("SELECT * FROM users", conn)– запросы к базе данных.pd.read_parquet("data.parquet")– загрузка Parquet-формата.
При чтении файлов рекомендуется сразу задавать параметры:
sep=";"– разделитель в CSV.encoding="utf-8"– кодировка.usecols=["id","value"]– выбор конкретных столбцов.dtype={"id": int, "value": float}– явное указание типов.parse_dates=["date"]– автоматическое преобразование дат.
Чтобы проверить корректность загрузки, используйте:
df.head()– просмотр первых строк.df.info()– структура и типы данных.df.describe()– статистика по числовым признакам.
Очистка данных от пропусков и дубликатов

При работе с таблицами в Python чаще всего используют библиотеку pandas. Для загрузки и первичного анализа:
import pandas as pd
df = pd.read_csv("data.csv")
df.info()
Проверка пропусков:
df.isnull().sum()
Заполнение или удаление пропусков зависит от характера данных:
| Метод | Пример кода | Когда использовать |
|---|---|---|
| Удаление строк | df.dropna(inplace=True) |
Если количество пропусков в строке велико |
| Удаление столбца | df.drop(columns=["col"], inplace=True) |
Если столбец заполнен менее чем на 30% |
| Заполнение средним | df["col"].fillna(df["col"].mean(), inplace=True) |
Для числовых признаков с нормальным распределением |
| Заполнение модой | df["col"].fillna(df["col"].mode()[0], inplace=True) |
Для категориальных признаков |
| Интерполяция | df["col"].interpolate(method="linear", inplace=True) |
Для временных рядов |
Проверка дубликатов:
df.duplicated().sum()
Удаление дубликатов:
df.drop_duplicates(inplace=True)
Если требуется учитывать только определённые поля:
df.drop_duplicates(subset=["col1","col2"], inplace=True)
Нормализация и стандартизация числовых признаков

Нормализация используется для приведения значений к диапазону [0,1]. Это особенно важно, если признаки имеют разные масштабы: например, цена в тысячах и площадь в метрах. Наиболее распространённый метод – Min-Max Scaling, при котором каждое значение преобразуется по формуле:
x_norm = (x - x_min) / (x_max - x_min)
Стандартизация переводит данные к нулевому среднему и единичному стандартному отклонению. Это позволяет алгоритмам чувствительным к масштабу (например, логистическая регрессия, SVM) работать корректнее. Формула стандартизации:
x_std = (x - μ) / σ
Где μ – среднее значение признака, σ – стандартное отклонение. В Python удобно применять StandardScaler и MinMaxScaler из библиотеки scikit-learn:
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler_std = StandardScaler()
X_std = scaler_std.fit_transform(X)
scaler_minmax = MinMaxScaler()
X_norm = scaler_minmax.fit_transform(X)
При подготовке датасета важно применять трансформацию только к обучающей выборке, а затем использовать полученные параметры (среднее, стандартное отклонение, минимумы и максимумы) для преобразования тестовой выборки. Это предотвращает утечку информации.
Объединение и разбиение датасетов

Для объединения таблиц в pandas применяют функции concat, merge и join. concat используется для вертикального или горизонтального объединения, когда необходимо склеить датафреймы по строкам или столбцам. merge подходит для объединения по ключевым столбцам, аналогично SQL JOIN. join применяют для объединения по индексам.
Пример объединения по ключу:
import pandas as pd
df1 = pd.DataFrame({"id": [1, 2], "name": ["Анна", "Иван"]})
df2 = pd.DataFrame({"id": [1, 2], "score": [90, 85]})
merged = pd.merge(df1, df2, on="id", how="inner")
print(merged)
Для разделения датасета на обучающую и тестовую выборки используют train_test_split из библиотеки scikit-learn. Аргумент test_size определяет долю тестовой части. Для воспроизводимости фиксируют random_state.
from sklearn.model_selection import train_test_split
X = merged[["score"]]
y = merged["name"]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
При работе с несбалансированными классами целесообразно использовать параметр stratify, чтобы сохранить пропорции меток в обучающем и тестовом поднаборах.
Сохранение датасета в различных форматах

После подготовки данных важно выбрать формат хранения, чтобы обеспечить удобство последующей обработки и совместимость с инструментами анализа. В Python это выполняется с помощью библиотек pandas, csv или json.
- CSV: простой текстовый формат с разделителями. Подходит для обмена данными между системами и открытия в Excel.
- JSON: используется для хранения структурированных данных, включая вложенные объекты.
- Excel (XLSX): сохраняет данные с форматированием и несколькими листами, полезен для офисных задач.
- Parquet: колоннарный бинарный формат, оптимизированный для больших объемов данных и работы в системах Big Data.
- SQL: позволяет напрямую сохранять таблицы в базы данных.
Примеры сохранения с использованием pandas.DataFrame:
import pandas as pd
# Пример датасета
data = {'id': [1, 2], 'value': ['A', 'B']}
df = pd.DataFrame(data)
# CSV
df.to_csv("dataset.csv", index=False, sep=";")
# JSON
df.to_json("dataset.json", orient="records", force_ascii=False)
# Excel
df.to_excel("dataset.xlsx", index=False, sheet_name="Лист1")
# Parquet
df.to_parquet("dataset.parquet", engine="pyarrow", index=False)
# SQL
from sqlalchemy import create_engine
engine = create_engine("sqlite:///dataset.db")
df.to_sql("table_name", engine, index=False, if_exists="replace")
Выбор формата зависит от сценария: CSV удобен для быстрого обмена, Parquet эффективен для хранения больших массивов, SQL полезен при интеграции с приложениями.
Проверка качества подготовленного датасета

Далее проверяем дублирующиеся строки: df.duplicated().sum() покажет количество повторов. Все дубли следует удалить методом df.drop_duplicates(inplace=True), чтобы избежать смещения анализа.
Для числовых признаков важно оценить распределение данных. Используем df.describe() для выявления аномалий: отрицательных значений там, где их быть не должно, или выбросов, превышающих 3 стандартных отклонения от среднего. Для точного обнаружения выбросов применяем scipy.stats.zscore или межквартильный размах (IQR).
Для категориальных признаков проверяем консистентность значений: df['column'].value_counts() покажет редкие или неожиданные категории. Их следует объединить или удалить, если они встречаются менее чем в 1% строк.
Также оцениваем баланс целевой переменной. Для классификации разница между классами не должна превышать 1:3, иначе необходимо применять методы балансировки: SMOTE или RandomUnderSampler.
Важно проверять уникальность идентификаторов и ключевых полей. Метод df['id'].nunique() должен совпадать с числом строк len(df). Несоответствие указывает на дублирование ключей или ошибку при объединении таблиц.
Наконец, проверяем типы данных. Метод df.dtypes позволяет убедиться, что числовые колонки имеют тип int или float, а даты преобразованы через pd.to_datetime(). Неправильный тип может вызвать ошибки при анализе и построении моделей.
Вопрос-ответ:
Какие библиотеки Python лучше всего использовать для создания собственного датасета?
Для формирования датасета в Python часто используют библиотеки pandas и NumPy. Pandas позволяет удобно работать с таблицами и CSV-файлами, а NumPy обеспечивает быстрые операции с массивами чисел. Для работы с изображениями полезны OpenCV и Pillow, а для текстовых данных — библиотека NLTK или spaCy.
Как правильно организовать данные перед сохранением в CSV-файл?
Сначала нужно определить структуру таблицы: какие столбцы будут содержать данные и в каком формате. Например, если это данные о товарах, столбцы могут быть: название, цена, количество. После этого следует проверить, чтобы все записи имели одинаковое количество столбцов и правильный тип данных. Только после этого можно использовать pandas для записи данных в CSV с помощью метода to_csv.
Можно ли создавать датасет напрямую из веб-страниц?
Да, для этого используют методы веб-скрапинга. С помощью библиотеки requests можно получить HTML-код страницы, а с помощью BeautifulSoup или lxml удобно извлекать нужные элементы. После обработки полученные данные можно сохранить в таблицу pandas, а затем экспортировать в CSV или Excel. Важно учитывать правила сайта и не нарушать их условия использования.
Какие ошибки чаще всего встречаются при сборе данных в Python?
Типичные ошибки включают: несоответствие типов данных (например, текст вместо числа), пропуски в столбцах, дубликаты записей, неправильная кодировка символов и неравномерные форматы дат. Проверку можно выполнить средствами pandas: методами info(), describe(), isnull() и drop_duplicates(). Это помогает получить чистый и пригодный для анализа набор данных.
Как можно автоматически генерировать данные для тестового датасета?
Для создания тестовых наборов удобно использовать модуль Faker, который генерирует случайные имена, адреса, даты и другие типы информации. Можно также применять NumPy для генерации числовых рядов с заданными распределениями. После генерации данные обычно собирают в pandas DataFrame, чтобы их было удобно редактировать и экспортировать в нужный формат.
