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

Почему наличие повторяющихся записей в данных является проблемой?

Присутствие повторяющихся значений в данных часто игнорируется многими программистами. Но очень важно иметь дело с повторяющимися записями в данных.

Наличие повторяющихся записей может привести к неправильному анализу данных и принятию решений.

Например, что происходит, когда вы заменяете пропущенные значения (вменение) средними значениями в данных с повторяющимися записями?

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

Рассмотрим следующие данные. Данные содержат два столбца: «Имя» и «Вес». Обратите внимание, что значение веса для «Джона» повторяется. Кроме того, значение веса «Стива» отсутствует.

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

(98 + 50 + 67 + 66 + 50)/5 = 66.2

Но фактическое среднее значение данных, игнорируя повторяющееся значение, равно

(98 + 50 + 67 + 66)/4 = 70.25

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

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

Таким образом, с дублирующими записями данных следует бороться, чтобы избежать проблем с данными.

Теперь давайте рассмотрим различные методы борьбы с повторяющимися записями в данных.

Выявление повторяющихся значений в данных

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

Теперь давайте разберемся с повторяющимися значениями на примере.

## Importing required libraries
import numpy as np
import pandas as pd

import warnings
warnings.filterwarnings('ignore')

## Creating a dataframe
Name = ['Mark', 'John', 'Jotaro', 'Mark', 'John', 'Steve']
Weight = [98, 50, 67, 66, 50, np.nan]
Height = [170, 175, 172, 170, 175, 166]

df = pd.DataFrame()
df['Name'] = Name
df['Weight'] = Weight
df['Height'] = Height
df

Выявление повторяющихся значений:

## Identifying the duplicated values (default behavior)
df.duplicated()

Мы получаем значение True, если присутствует повторяющаяся запись, и False, если присутствуют уникальные записи.

Обратите внимание, что по умолчанию метод duulated() использует все столбцы для поиска повторяющихся записей. Но мы можем использовать подмножество столбцов и для поиска дубликатов. Для этого метод дублированный() имеет параметр с именем subset. Параметр subset принимает список имен столбцов, которые мы хотим использовать для поиска дубликатов.

## subset parameter of duplicated() method
df.duplicated(subset=['Name','Height'])

Кроме того, метод duulated() имеет еще один важный параметр с именем keep. Значение параметра keep определяет, будем ли мы считать первую или последнюю запись уникальной среди всех дублированных записей. У нас также есть возможность считать все повторяющиеся записи неуникальными.

keep = ‘first’: первая запись среди всех повторяющихся записей считается уникальной.

keep = ‘last’: последняя запись во всех повторяющихся записях считается уникальной.

keep = False: все повторяющиеся записи считаются неуникальными.

## keep parameter of duplicated() method
df.duplicated(keep='first')

Обратите внимание, что первое повторяющееся значение (с индексом 1) считается уникальным, а все остальные (с индексом 4) — дубликатами.

## keep parameter of duplicated() method
df.duplicated(keep='last')

Обратите внимание, что последнее повторяющееся значение (с индексом 4) считается уникальным, а все остальные (с индексом 1) считаются дубликатами.

## keep parameter of duplicated() method
df.duplicated(keep=False)

Обратите внимание, что здесь показаны все повторяющиеся записи (с индексом 1 и индексом 4).

Как бороться с повторяющимися записями в данных

Следующим шагом после выявления повторяющихся записей является борьба с ними.

Существует два способа борьбы с повторяющимися записями в данных.

Удаление повторяющихся записей

Начнем с подхода, при котором мы удаляем повторяющиеся записи.

Для этого мы можем использовать метод pandas drop_duulates().

По умолчанию метод drop_duulates() сохраняет первую запись из набора всех повторяющихся записей, а затем удаляет остальные из данных. Кроме того, по умолчанию метод drop_duulates() использует все столбцы для идентификации повторяющихся записей.

Но это поведение по умолчанию можно изменить с помощью двух параметров метода drop_duplications(). Они есть

  1. сохранить
  2. подмножество

Они работают точно так же, как работают параметры keep и subset метода duulated().

"""dropping duplicate values using the pandas drop_duplicates() method 
  (default behavior)"""

df1 = df.drop_duplicates()
df1

"""dropping duplicate values using the pandas drop_duplicates() 
  method with subset and keep parameters (custom behavior)"""

df2 = df.drop_duplicates(subset=['Weight'], keep='last')
df2

Обновление повторяющихся записей

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

df.duplicated(keep=False)

Здесь у нас есть повторяющиеся записи по индексам 1 и 4. Теперь, если мы изменили значение столбца «Имя» по индексу 1, у нас больше не будет повторяющихся значений.

## changing the 'Name' value for the first duplicate record
df.iloc[1, 0] = 'Dio' 
df

Мы изменили значение «Имя» для первой повторяющейся записи. Теперь давайте еще раз проверим, есть ли в данных дублированные записи или нет.

df.duplicated()

Теперь у нас нет дубликатов записей.

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

Вы затрудняетесь выбрать, что прочитать дальше? Не волнуйтесь, я знаю статью, которая, я думаю, вам будет интересна.



и еще один…



Шивам Шинде

  • Свяжитесь со мной в LinkedIn
  • Аналогично вы можете подписаться на меня на Medium

Хорошего дня!

Ссылки: