Посмотрите, как Copilot выполняет повседневные задачи по анализу данных одним нажатием клавиши

Введение

Я сказал себе, что для того, чтобы заставить меня переключиться с PyCharm на VSCode, потребуется нечто большее, чем помощник по кодированию ИИ. Это было, когда Copilot Beta была только что выпущена, и она была эксклюзивной для VSCode.

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

Затем, несколько дней назад, я увидел, что кто-то в Твиттере упомянул Copilot для задач по науке о данных, и у меня возник соблазн попробовать его хотя бы раз, даже если мне пришлось установить VSCode. К моему удовольствию, я обнаружил, что меня не только исключили из списка ожидания, но я также могу установить его в PyCharm.

Я не стал долго ждать, чтобы начать писать эту статью после того, как немного поигрался с инструментом. Итак, вот оно.

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

Давайте начнем с чего-нибудь небольшого, например с импорта:

Для импорта других стандартных библиотек требуется всего одна строка для импорта Matplotlib. Кроме того, после одного оператора Sklearn Copilot начинает предлагать другие классы из библиотеки.

Если вы заметили, после изменения одного из операторов импорта для загрузки всех классов в модуле с *, Copilot подхватил шаблон для импорта других модулей целиком.

Затем я немного сосредоточился на задачах предварительной обработки, как показано ниже:

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

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

Столбцы object в Pandas DataFrames хуже всего — они отсасывают вашу оперативную память.

Следующая функция не подлежит обсуждению, если вы утверждаете, что являетесь настоящим любителем Python:

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

В одном из них я обсуждал, как приведение типов данных столбцов к наименьшему возможному подтипу может уменьшить размер набора данных до 90%. Что ж, я попросил Copilot воспроизвести точно такую ​​же функцию, и она великолепно подошла к случаю:

Представьте, что вы печатаете это!

Визуализация

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

Первое, что пришло в голову, это, конечно же, создать тепловую карту корреляции:

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

Затем я попросил Copilot создать сетку графиков KDE для каждого числового столбца данных. Это популярное изображение на Kaggle для просмотра распределения функций:

На этот раз Copilot даже удивил меня строкой документации функции, написанной в стиле NumPy Docs — еще один из моих любимых.

Для следующего я хотел бросить вызов Copilot — я сказал ему создать функцию, которая строит два временных ряда для сравнения их роста:

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

Меня также немного позабавило, что второй пилот написал первый комментарий от первого лица. Но я разочарован тем, что второй пилот поместил два столбца временных рядов друг против друга, а не сверху.

Недавно мне очень понравился UMAP и то, как он проецирует данные в два 2D без потери основной структуры. Мне было интересно, может ли Copilot создать функцию для создания 2D-проекции с помощью UMAP и построения графика результатов.

Я был удивлен, что это возможно, потому что UMAP считается довольно молодой библиотекой, и на GitHub не так много кода для нее:

Очевидно, я был неправ.

Задачи машинного обучения

Для задач машинного обучения я хотел начать с малого, например, попросить второго пилота подобрать модель линейной регрессии:

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

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

Предложение было очень грубым и мало сравнимым с превосходными функциями, которые есть в модуле statsmodels TSA. Но мы должны отдать ему должное за правильную интерпретацию моего мотива.

Наконец, главная задача — я хотел, чтобы Copilot реализовал PCA с нуля, используя только NumPy:

Это было сложнее всего сделать правильно — мне пришлось несколько раз изменить комментарий и даже несколько раз открыть/закрыть файл, чтобы получить разумное предложение.

Разнообразный

Здесь вы можете увидеть некоторые другие функции, над которыми я работал по прихоти.

Вычисление манхэттенского расстояния между двумя координатами:

Создание зашумленного изображения:

Целевая кодировка для категориальных столбцов:

Анализ ноутбуков Jupyter как JSON:

Второй пилот — Вердикт

При использовании Copilot я заметил несколько вещей.

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

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

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

Я получил наилучшие результаты, будучи максимально конкретным в комментариях или строках документации. Использование только таких слов, как DataFrame вместо X, y, привело к другим функциям или параметрам.

Буду ли я продолжать использовать его? Черт, да!

Хотя я провожу большую часть своего времени в Jupyter Lab, как и многие другие специалисты по данным, я предполагаю, что Copilot будет чрезвычайно полезен, когда люди захотят переключиться на науку о данных с открытым исходным кодом на уровне производства. На этом этапе вы перенесете большую часть кода из блокнотов в сценарии, где сможете с радостью воспользоваться помощью Copilot.

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

Спасибо за чтение!

Понравилась эта статья и, скажем прямо, ее причудливый стиль написания? Представьте себе, что у вас есть доступ к десяткам таких же, написанных блестящим, обаятельным, остроумным автором (кстати, это я :).

Всего за 4,99 $ членства вы получите доступ не только к моим историям, но и к сокровищнице знаний от лучших и самых ярких умов на Medium. А если вы воспользуетесь моей реферальной ссылкой, то получите мою сверхновую благодарность и виртуальную пятерку за поддержку моей работы.