Очистка данных с помощью Pandas

Очистка данных с помощью Pandas краткое изложение

 

Введение

 

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

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

 

Набор данных

 

Я буду работать с известным набором данных Iris. Набор данных Iris содержит измерения четырех характеристик трех видов ирисов: длина чашелистика, ширина чашелистика, длина лепестка и ширина лепестка. Мы будем использовать следующие библиотеки:

  • Pandas: Мощная библиотека для манипулирования и анализа данных
  • Scikit-learn: Предоставляет инструменты для предобработки данных и машинного обучения

 

Шаги по очистке данных

 

1. Загрузка набора данных

 

Загрузите набор данных Iris с помощью функции read_csv() библиотеки Pandas:

column_names = ['id', 'sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']
iris_data = pd.read_csv('data/Iris.csv', names= column_names, header=0)
iris_data.head()

 

Вывод:

id sepal_length sepal_width petal_length petal_width species
1 5.1 3.5 1.4 0.2 Iris-setosa
2 4.9 3.0 1.4 0.2 Iris-setosa
3 4.7 3.2 1.3 0.2 Iris-setosa
4 4.6 3.1 1.5 0.2 Iris-setosa
5 5.0 3.6 1.4 0.2 Iris-setosa

 

Параметр header=0 указывает, что первая строка CSV-файла содержит имена столбцов (заголовок).

 

2. Изучение набора данных

 

Чтобы получить информацию о наборе данных, мы выведем некоторую базовую информацию, используя встроенные функции в pandas

print(iris_data.info())
print(iris_data.describe())

 

Вывод:

RangeIndex: 150 entries, 0 to 149
Data columns (total 6 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   id            150 non-null    int64  
 1   sepal_length  150 non-null    float64
 2   sepal_width   150 non-null    float64
 3   petal_length  150 non-null    float64
 4   petal_width   150 non-null    float64
 5   species       150 non-null    object 
dtypes: float64(4), int64(1), object(1)
memory usage: 7.2+ KB
None

 

 

Функция info() полезна для понимания общей структуры фрейма данных, количества ненулевых значений в каждом столбце и использования памяти. Сводная статистика дает обзор числовых характеристик вашего набора данных.

 

3. Проверка распределения классов

 

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

print(iris_data['species'].value_counts())

 

Вывод:

Iris-setosa        50
Iris-versicolor    50
Iris-virginica     50
Name: species, dtype: int64

 

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

 

4. Удаление отсутствующих значений

 

Поскольку из метода info() ясно, что у нас есть 5 столбцов без отсутствующих значений, мы пропускаем этот шаг. Но если вы столкнетесь с отсутствующими значениями, используйте следующую команду для их обработки:

iris_data.dropna(inplace=True)

 

5. Удаление дубликатов

 

Дубликаты могут исказить наши анализы, поэтому мы удаляем их из нашего набора данных. Сначала мы проверим их существование с помощью нижеприведенной команды:

duplicate_rows = iris_data.duplicated()
print("Количество дублирующихся строк:", duplicate_rows.sum())

 

Вывод:

Количество дублирующихся строк: 0

 

У нас нет ни одного дубликата для этого набора данных. Тем не менее, дубликаты можно удалить с помощью функции drop_duplicates().

iris_data.drop_duplicates(inplace=True)

 

6. Кодирование One-Hot

 

Для категориального анализа мы выполним кодирование в формате One-Hot для столбца species. Этот шаг выполняется из-за тенденции алгоритмов машинного обучения лучше работать с числовыми данными. Процесс кодирования One-Hot преобразует категориальные переменные в бинарный формат (0 или 1).

encoded_species = pd.get_dummies(iris_data['species'], prefix='species', drop_first=False).astype('int')
iris_data = pd.concat([iris_data, encoded_species], axis=1)
iris_data.drop(columns=['species'], inplace=True)

 

 

7. Нормализация столбцов с числовыми значениями с плавающей точкой

 

Нормализация – это процесс масштабирования числовых признаков так, чтобы их среднее значение было равно 0, а стандартное отклонение – 1. Этот процесс выполняется для того, чтобы убедиться, что признаки одинаково вносят вклад в анализ. Мы будем нормализовать столбцы с числовыми значениями с плавающей точкой для обеспечения одинакового масштабирования.

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
cols_to_normalize = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
scaled_data = scaler.fit(iris_data[cols_to_normalize])
iris_data[cols_to_normalize] = scaler.transform(iris_data[cols_to_normalize])

 

 

8. Сохранение очищенного набора данных

 

Сохраните очищенный набор данных в новый файл CSV.

iris_data.to_csv('cleaned_iris.csv', index=False)

 

Заключение

 

Поздравляю! Вы успешно провели очистку своего первого набора данных с помощью pandas. Возможно, вам придется столкнуться с дополнительными сложностями при работе с сложными наборами данных. Однако основные техники, описанные здесь, помогут вам начать и подготовить данные для анализа.

    Канвал Мехрин – молодой разработчик программного обеспечения с большим интересом к науке о данных и применению искусственного интеллекта в медицине. Канвал была выбрана как Google Generation Scholar 2022 для региона APAC. Канвал любит делиться техническими знаниями, пиша статьи по актуальным темам, и стремится улучшить представление женщин в технической индустрии.