Часть 6: Пушистик за работой

Ранее в этой серии мы установили библиотеку fuzzywuzzy и импортировали модули fuzz и process из библиотеки fuzzywuzzy.

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

$ process.extract('George R.R. Martin', df.author, limit=5)

Мы использовали process.extract, чтобы найти наиболее близкие совпадения с именем нашего автора и вернуть первые пять результатов.

Мы получаем

[('George R.R. Martin', 100, 118),
 ('George R.R. Martin', 100, 119),
 ('George R.R. Martin', 100, 120),
 ('George R. R. Martin', 97, 5),
 ('George R. R. Martin', 97, 6)]

Следовательно, в имени автора Р. Р. Мартин есть опечатка: пробел между двумя буквами «Р».

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

Еще один автор с такой же проблемой — автор книги «Гарри Поттер и самый худший поход на свете», моей любимой книги из этой серии. Это напоминает мне о тьме в наших сердцах и о том, как мы все страдаем из-за «больших ожиданий» — еще одна книга, которую стоит прочитать.

$ process.extract('J.K. Rowling', df.author, limit=10)

На этот раз мы получим десять ближайших совпадений в нашем выводе;

[('J.K. Rowling', 100, 102),
 ('J.K. Rowling', 100, 153),
 ('J.K. Rowling', 100, 154),
 ('J.K. Rowling', 100, 156),
 ('J.K. Rowling', 100, 157),
 ('J.K. Rowling', 100, 353),
 ('J. K. Rowling', 96, 155),
 ('J. K. Rowling', 96, 159),
 ('Jim Collins', 52, 139),
 ('Jim Collins', 52, 140)]

Мы можем исправить эти опечатки с помощью метода replace(). То есть;

$ df = df.replace('George R. R. Martin', 'George R.R. Martin')
$ df = df.replace('J. K. Rowling', 'J.K. Rowling')

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

$ df.genre.unique()

Это возвращает массив и тип данных в нашем столбце жанра.

array(['Non Fiction', 'Fiction'], dtype=object)

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

$ df.year.sort_values().unique()

Еще раз, он возвращает массив.

array([2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019])

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

Мы удаляем нашу колонку года.

$ del df['year']

Как только столбец года будет удален, давайте снова удалим дубликаты в нашем наборе данных.

$ df = df.drop_duplicates(keep = 'first')

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

Помните, для нашей модели; нам не нужны дубликаты, нам нужна просто уникальная запись для каждых данных в строках.

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

Приближается:

Часть 7: Процесс очистки и повторение