Как перевести код R в Python с помощью ChatGPT

Как перевести код R в Python с помощью ChatGPT


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 для решения подобных задач экономит массу времени. Всегда можно подстраховаться и проверить результат, чтобы убедиться в корректной работе кода.



Перевод статьи Soner YıldırımUsing ChatGPT to Translate R Code to Python



Report Page