
Книгу Чистый код обязательно должны прочитать инженеры-программисты, но часто не знакомят с ней специалистов по данным или специалистов по машинному обучению. Это прискорбно, поскольку может оказать такое же, если не большее, влияние на эффективность групп данных и машинного обучения.
Что такое чистый код?
Я настоятельно рекомендую прочитать о том, что такое чистый код и почему он так важен, в статье Эллы Бор Чистый код для специалистов по данным
Часть 1 — Мотивация». В своей статье они объясняют: Чистый код удобочитаем, поэтому его легче отлаживать и рефакторить. Эта простота делает код удобным в сопровождении, поэтому его добавление или изменение не составляет большого труда. Я думаю, мы все можем согласиться с тем, что эти результаты являются огромным преимуществом для команд Data Science и Machine Learning (ML).
В этом посте я углублюсь в конкретные принципы чистого кода и поделюсь тем, что я считаю главными принципами чистого кода для проектов данных и машинного обучения. Я включу примеры кода, чтобы вы могли увидеть их на практике и облегчить себе применение.
- Чистый код аккуратен
- Хорошо очищайте кодовые имена
- Чистый код не повторяется
- Чистый код должен говорить сам за себя
- Чистый код выразителен
Чистый код – это аккуратно
Используйте рекомендации по стилю
Один из ключевых выводов Гвидо ван Россума, создателя Python, заключается в том, что код читается гораздо чаще, чем пишется. Рекомендации PEP8 предназначены для улучшения читабельности кода и разблокировки ментальных ярлыков (например, отсутствие необходимости запоминать имя переменной в дополнение к тому, как вы ее отформатировали), которые можно использовать для увеличения скорости, с которой вы или другой специалист по данным можете расширять ваш код. Используй их!
Будьте последовательны
Согласованные методы в коде также могут помочь улучшить читабельность. Например, использование двух разных подходов к чтению файла вызывает дополнительное умственное напряжение, поскольку одна и та же задача просто выполняется дважды.
Хорошо очищайте кодовые имена
Хорошее имя имеет смысл
Имена переменных делают больше, чем просто хранят объекты. Они могут быть ключевой подсказкой для читателей вашего кода, чтобы понять дополнительный контекст. Следует избегать таких переменных, как df или data (за исключением общей функции). В приведенном ниже примере имя переменной tweets дает более четкое представление о данных, считанных в кадр данных, чем общее имя переменной data.
Хорошие названия ясны, но лаконичны
Хотя имена переменных всегда должны быть осмысленными, они также должны быть краткими. В приведенном ниже примере вместо длинных pre_cleaned_tweet_tokens или post_cleaned_tweet_tokens можно использовать простую tweet_tokens. Оба этих более длинных имени переменных увеличивают вероятность опечатки и затрудняют быстрый вызов имени переменной при повторном вызове.
Хорошие имена последовательны
Помимо того, что имена переменных должны быть осмысленными и лаконичными, они также должны быть согласованными. Переключение между tokens и words может ввести в заблуждение и вызвать у обозревателя или нового разработчика вопрос — есть ли тонкая разница между этими двумя переменными, которую я упустил?
Чистый код не повторяется
В функциях
Не повторяйтесь (также известное как DRY) — это ключевой принцип чистого кода, который очень применим к задачам Data Science. Один и тот же код часто необходимо применять к нескольким файлам или набору данных для обучения и проверки. Копирование кода увеличивает риск различий в приложении, увеличивает общую длину кода и требует выполнения обновлений в нескольких местах. Если вы копируете и вставляете код, это хороший признак того, что это должна быть функция.
В константах
Принцип DRY применим и к константам. Если константа (например, значение параметра или строка) используется в нескольких местах вашего кода, назначьте константу переменной. Опять же, это снижает риск и уменьшает количество необходимых изменений, если это значение обновляется.
Чистый код должен говорить сам за себя
Используйте комментарии с умом
Одним из самых неожиданных для меня выводов из «Чистого кода» стала рекомендация свести к минимуму использование комментариев. Это противоречило инструкциям, которые мне давали в школе, но как только я понял принцип, он действительно нашел отклик. Комментарии занимают много места и могут быть излишними (ненужно отнимающими у читателя дополнительное время). Кроме того, они часто остаются неизменными при обновлении кода. Это может привести к несоответствию комментариев и кода, что усугубит путаницу для другого специалиста по данным или будущего, когда вы будете смотреть на свой код.
Комментарии следует использовать при написании необычного, непонятного или неожиданного кода. В приведенном ниже примере комментарий помогает объяснить код, который находит «при упоминании» в твите. «Код говорит, как что-то делается. Комментарии объясняют, почему».
Чистый код выразителен
Функции должны инкапсулировать функциональность
Функции следует использовать для инкапсуляции последовательности шагов, необходимых для выполнения задачи. В приведенном ниже примере код вычисляет разницу между количеством подписчиков учетной записи и числом подписчиков, а затем сравнивает ее с пороговым значением, чтобы определить, является ли учетная запись ботом. Создав функцию «flag_bot_account()», рецензент кода может легко увидеть, почему были выполнены эти шаги и какая информация была необходима для принятия такого решения.
Функции должны делать одно дело
Функции должны быть атомарными, то есть выполнять только одну задачу. В приведенном ниже примере первая функция загружает и фильтрует твиты. Если я хочу загрузить все твиты, я не могу использовать эту функцию. Создав две функции, одну для загрузки и другую для фильтрации, я получил больше гибкости для повторного использования и больше ясности для читателей этого кода. Исследователь данных может увидеть функцию под названием «get_tweets» и не понять, что короткие твиты удаляются. Это может сильно повлиять на анализ.
Спасибо за прочтение. Я надеюсь, что эти концепции помогут вам и вашей команде писать более читаемый и удобный для сопровождения код и высвободят больше времени для выполнения великих задач с данными и машинным обучением!
Это сообщение основано на выступлении Хоуп Макинтайр на встрече Женщины в науке о данных (теперь гендерное разнообразие вокруг оси (GDATA)) Meetup в среду, 17 апреля 2019 г. Доклад был спонсирован и размещено на Storyblocks.