Python и R — это два ключевых игрока в экосистеме науки о данных. Я работал над проектами, написанными как на Python, так и на R. Они отлично решают задачи, связанные с очисткой, управлением и анализом данных.
Но иногда требуется перевести базу кода с R на Python или наоборот. Это связано с уровнем профессиональной подготовки специалистов компании. Если большая часть из них программирует на Python, а меньшая — на R, то лучше вести проекты на Python.
Бывают случаи, когда особые требования проекта диктуют необходимость перевести базу кода с одного языка на другой. Так, Python славится своей универсальностью, охватывая такие области, как веб-разработка, разработка ПО и машинное обучение. Зато R лучше подходит для статического анализа и визуализации. В связи с этим если проект предполагает сложный статический анализ или создание замысловатых графических представлений, то целесообразнее перевести код Python на R.
Для осуществления этой процедуры нужны специалисты с навыками программирования на обоих языках, найти которых непросто. К счастью, можно воспользоваться ChatGPT, который обладает приличным уровнем навыков почти во всех языках программирования.
В статье мы сформулируем инструкцию для ChatGPT. В соответствии с ней он переведет код R, написанный посредством пакета data.table
, на Python с помощью библиотеки pandas
.
Мы просто предоставим код, не сообщая, что он делает или для чего предназначен. Прежде всего, пишем начальную инструкцию, в которой определяем задачу для ChatGPT и ожидаемые результаты:
Начальная инструкция. Ты инженер ПО с многолетним опытом программирования на Python и R. Твоя задача — преобразовать код R в Python. Код R чистит данные и управляет ими с помощью пакета
data.table
. Ты должен преобразовать этот код в Python, используя библиотекуpandas
.
В качестве первого примера рассмотрим строку кода, которая создает новый столбец в таблице данных:
Convert the following R code that uses `data.table` package
to Python using the `pandas` library:
```
melb[, Price_per_area := Price / Landsize]
```
Ответ ChatGPT:
Предоставленный код R создает новый столбец
Price_per_area
, который является результатом деленияPrice
наLandsize
посредством библиотекиdata.table
.
Эквивалентная операция в Python с использованием библиотеки
pandas
выглядит так:
ChatGPT не только выдает код, но и объясняет, что он делает. Это очень помогает тем, кто не владеет исходным или целевым языком.
Во втором примере создается подмножество таблицы данных путем фильтрации по столбцам Price
(цена) и Type
(тип).
Convert the following R code that uses `data.table` package
to Python using the `pandas` library:
```
subset <- melb[Price > 1000000 & Type == "h"]
```
Ответ ChatGPT:
В предоставленном коде R создается подмножество датафрейма
melb
, в которомPrice
больше 1000000, аType
равенh
.
Эквивалентная операция в Python с использованием библиотеки
pandas
выглядит так:
Обратимся к более сложному примеру. Строка кода в следующей инструкции вычисляет среднюю цену дома в разных регионах для домов с типом u
:
Convert the following R code that uses `data.table` package
to Python using the `pandas` library:
```
melb[Type == "u", .(avg_price = mean(Price)), by="Regionname"]
```
Ответ ChatGPT:
В предоставленном коде R средняя цена
Price
вычисляется для каждогоRegionname
, гдеType
равенu
.
Эквивалентная операция в Python с использованием библиотеки
pandas
выглядит так:
Код из вышеуказанного скрина:
avg_price = melb[melb['Type'] == 'u'].groupby('Regionname')['Price'].mean().reset_index().rename(columns={'Price': 'avg_price'})
Он успешно выполняет задачу, но я бы предпочел задействовать именованные агрегации, которые и короче, и легче для чтения. Инструктируем ChatGPT их задействовать:
Convert the following R code that uses `data.table` package
to Python using the `pandas` library. Used named aggregations.
```
melb[Type == "u", .(avg_price = mean(Price)), by="Regionname"]
```
Ответ ChatGPT:
Эквивалентный код Python с использованием именованных агрегаций в библиотеке
pandas
выглядит так:
Код из вышеуказанного скрина:
avg_price = melb[melb['Type'] == 'u'].groupby('Regionname').agg(avg_price=('Price', 'mean')).reset_index()
Этот вариант получше, так как не требует последующего переименования столбцов. Можно также применить параметр as_index
функции groupby
и задать ему значение False
, чтобы не сбрасывать индекс после вычисления.
В следующей инструкции код R вычисляет среднюю цену дома и общее количество домов в каждом регионе, после чего сортирует результаты в порядке убывания.
Convert the following R code that uses `data.table` package
to Python using the `pandas` library. Used named aggregations.
```
melb[
Type == "u",
.(avg_price = mean(Price), number_of_houses=.N),
by="Regionname"
][order(-avg_price)]
```
Ответ ChatGPT:
Код Python выполняет следующие действия:
1. Фильтрует датафрейм, где столбец
Type
равенu
.
2. Группирует отфильтрованный датафрейм по столбцу
Regionname
.
3. Подсчитывает среднее значение и количество домов столбца
Price
для каждой группы, называя полученные столбцы соответственноavg_price
иnumber_of_houses
.
4. Преобразует объект
groupby
обратно в датафрейм.
5. Сортирует датафрейм в порядке убывания по
avg_price
.
Как и в предыдущих примерах, пошаговое объяснение способствует полному пониманию и отладке кода.
Последний пример иллюстрирует изменение названий столбцов. В данной инструкции код R переименовывает столбец Type
в HouseType
, а Distance
— в DistanceCBD
.
Convert the following R code that uses `data.table` package
to Python using the `pandas` library.
```
setnames(melb,
c("Type", "Distance"),
c("HouseType", "DistanceCBD"))
```
Ответ ChatCPT:
Код R переименовывает столбец
Type
вHouseType
, аDistance
— вDistanceCBD
.
Эквивалентная операция в Python с использованием библиотеки
pandas
выглядит так:
Предлагаемая строка кода Python делает то же самое: переименовывает столбец
Type
вHouseType
иDistance
вDistanceCBD
в датафреймеmelb
.
Примечание. Параметр
inplace=True
гарантирует, что изменения вносятся непосредственно в датафрейм без присвоения результата новой переменной.
Код из вышеуказанного скрина:
melb.rename(columns={'Type': 'HouseType', 'Distance': 'DistanceCBD'}, inplace=True)
Отметим весьма полезное примечание относительно параметра inplace
, поскольку данное обстоятельство легко упустить из виду.
Заключение
Рассмотренные примеры показывают, насколько успешно ChatGPT переводит код с одного языка программирования на другой. В статье мы выполняли построчный перевод. Следует отметить, что такой перевод не может считаться доказательством того, что ChatGPT способен перевести всю базу кода.
При этом бесспорным остается факт, что при работе с большой базой кодой использование ChatGPT для решения подобных задач экономит массу времени. Всегда можно подстраховаться и проверить результат, чтобы убедиться в корректной работе кода.
Читайте также:
- Язык R: прокачайте свои навыки до следующего уровня
- Как писать промпты для ChatGPT
- Рекурсивное программирование
Читайте нас в Telegram, VK и Дзен
Перевод статьи Soner Yıldırım: Using ChatGPT to Translate R Code to Python