У вас есть файл .csv. Что теперь?

На начальном этапе своего пути к науке о данных я разговаривал с профессионалами, которые уже работают в этой области. Они дали мне много советов и поделились своими историями, но все они (я имею в виду, все до единого) сказали, что большую часть времени в качестве специалиста по данным вы не будете строить причудливые модели, вы будете очистка ваших данных. Набор данных, с которым вы работаете, может находиться на разных стадиях «загрязнения». Если вы просто тренируете свои навыки на наборах данных Iris или Titanic, они довольно чистые и готовы к игре. Но если вам нужно сначала получить данные, например, с помощью веб-скрейпинга, скорее всего, вам нужно будет потратить минуту своего времени, прежде чем приступить к моделированию.

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_csv(‘yourdatafile.csv’)

Перво-наперво нам нужно взглянуть на наши данные. Используйте простые команды, например:

  • df.shape - даст вам представление о том, сколько строк и столбцов в вашей таблице
  • df.columns - возвращает имена столбцов
  • df.isna (). sum () - покажет, сколько пропущенных значений или NaN имеется в каждом столбце.
  • df.describe - предоставит вам базовую статистику, такую ​​как среднее значение, стандартное отклонение и т. д. для столбцов с числовыми значениями.
  • df.dtypes - сообщает вам, какой тип данных представляет собой значения для каждого столбца. Примечание: то, что мы называем строками в ванильном питоне, панда называет «объектом».
  • df.head () - показывает первые пять строк таблицы, чтобы вы могли понять, с чем имеете дело. (df.tail () дает вам последние пять строк, возможно, вам нужно их больше, чем первые пять)

Теперь, когда вы знакомы со своим набором данных, вы можете приступить к решению всех мелких проблем. Следующий хороший шаг - выяснить, сколько существует пропущенных значений и что с ними делать. Если есть всего пара строк с пропущенными значениями, считайте, что вам повезло. Вы, вероятно, можете отказаться от них, не нарушая общей картины. Используйте df.dropna (), но сначала прочтите документацию, возможно, вы найдете то, что ищете. Если много пропущенных значений, пора проявить творческий подход. Есть много способов справиться с этой проблемой, но истина заключается в том, что вам действительно нужно знать контекст.

Один из способов - заменить NaN нулями. Например, вы имеете дело с опросом о состоянии здоровья, и столбец с множеством пропущенных значений называется «Years_Of_Smoking». Мы можем предположить, что некурящие ничего не указали бы в этом столбце, поэтому мы можем смело заменить его нулем.

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

Другие способы включают в себя творческий подход к замене NaN путем построения мини-регрессионных моделей для прогнозирования этих недостающих значений. Но что, если вам не хватает строк? Однажды интервьюер задал мне задачу, попросив обработать недостающие значения в таблице записей банковских транзакций. Он спросил меня, что я буду делать с пропавшим адресом. Я сказал, что восстановлю эти данные, используя имя продавца: если мы знаем, что «Самая крутая кофейня» находится по адресу 123 Main Street, мы определенно сможем решить проблему, если адрес или имя продавца отсутствует.

После принятия решения о том, что делать с отсутствующими значениями, вам необходимо убедиться, что все данные относятся к правильным типам данных. Даты могут храниться как целые числа или объекты, числа с плавающей запятой и целые числа могут быть смешаны и т. Д. Ознакомьтесь с документацией pandas о том, как использовать astype, to_numeric, to_datetime и другие очень полезные команды.

Наконец, есть шанс, что часть информации находится не в том столбце! Это не такая уж большая проблема, если эта информация может принимать ограниченное количество значений. Позвольте привести пример. Когда я создавал систему рекомендаций по уходу за кожей Sephora, мне требовалось нечто, называемое пользовательскими характеристиками: тон кожи, тип кожи, цвет глаз и цвет волос. После нескольких дней соскабливания и очистки пользовательской таблицы я понял, что каждое слово находится в отдельном столбце, и вместо этого мне нужны столбцы с именами «тип кожи», «цвет волос» и т. Д. С соответствующими значениями.

Вот как я справился с проблемой оттенков кожи:

skintones = [‘Porcelain’, ‘Fair’, ‘Light’, ‘Medium’, ‘Tan’, ‘Olive’, ‘Deep’, ‘Dark’, ‘Ebony’]
tonelist = []
for value in split[9]:
 if value in skintones:
  tonelist.append(value)
 else:
  tonelist.append(‘No data’)
 
split[‘Skin_Tone’] = tonelist
split

Аналогично для цвета глаз:

eyecolors = [‘Brown’, ‘Blue’, ‘Hazel’, ‘Green’, ‘Gray’]
eyelist = []
for value in split[3]:
 if value in eyecolors:
  eyelist.append(value)
 else:
  eyelist.append(‘No data’)
 
split[‘Eye_Color’] = eyelist
split

Это просто пример того, как вы можете проявить творческий подход к очистке данных, когда вы знакомы с контекстом.

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