Шаги по повышению вашей продуктивности в качестве Data Scientist

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

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

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

1. Объединение наборов данных без знания уровня/первичных ключей данных

Уровень данных определяется как столбец или комбинация столбцов, которые имеют уникальное значение для каждой строки. Уровень данных обычно определяется некоторыми переменными идентификатора (например, идентификатором клиента). Давайте разберемся с этим на примерах:

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

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

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

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

Объединение наборов данных по непервичным ключам может привести к неверным результатам.

2. Не фильтруются нужные строки

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

Плохая практика

Step 1: Transform data 
Step 2: Apply join operation
Step 3: More transformation 
Step 4: Filter rows

Рекомендации

Step 1: Filter row
Step 2: Transform data 
Step 3: Apply join operation
Step 4: More transformation

3. Использование большого количества объединений/самосоединений

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

Представьте, что у нас есть данные о зарплатах сотрудников внутри организации.

Мы хотим добавить столбец с общей заработной платой всех сотрудников в рамках должности, соответствующей текущей строке (специалист по данным, аналитик данных, инженер по данным). Нам нужен вывод, как показано ниже:

Будете ли вы использовать самосоединение, чтобы получить приведенный выше вывод? Это самый оптимальный способ?

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

Плохая практика

## Using Joins 
select a.EMPID, a.NAME, a.JOB, b.TOTAL_JOB
FROM employee_table a 
INNER JOIN
(select EMPID, NAME, sum(SALARY) as TOTAL_JOB
FROM employee_table
GROUP BY EMPID, NAME) b
on a.EMPID = b.EMPID
and a.NAME = b.NAME

Рекомендации

## Using the window function 
select EMPID, NAME, JOB, SALARY, 
sum(SALARY) over() as TOTAL
FROM
employee_table



4. Не фильтровать нужные столбцы

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

Плохая практика

### Selecting all the columns #######
select a.*, b.* 
from 
member_data as a
join 
claims_data as b
on a.member_id = b.member_id

Рекомендации

### Selecting the required columns 
select a.member_id, a.age,
a.address, b.claim_id
from 
member_data as a
join 
claims_data as b
on a.member_id = b.member_id

5. Не выполнять проверки качества после каждого запроса

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

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

  1. Подсчитайтеколичество входных строк/столбцови выходных строк/столбцов запроса и убедитесь, что вы получаете ожидаемое количество строк/ столбцы.
  2. Проверьте сводную статистику(различные значения, процентили и т. д.) в обработанных столбцах. Это гарантирует, что вы получите ожидаемые значения в столбцах.
  3. Проверьте первые несколько строк наборов данных. Это похоже на проверку выборки строк, чтобы сделать вывод о правильности набора данных.

Поделитесь в комментариях шагами проверки качества, которые вы выполняете при работе с данными.

Краткое содержание

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

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

Спасибо

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

Если вам нравится работать с Medium, поддержите меня и тысячи других авторов, подписавшись на членство. Это стоит всего 5 долларов в месяц, это очень поддерживает нас, писателей, и вы получаете доступ ко всем удивительным историям на Medium.

Истории, которые могут вам понравиться!