Rで解析:RからChatGPTを利用!!「chatgpt」パッケージ

Rの解析に役に立つ記事

RからChatGPTを利用できるパッケージの紹介です。利用にはChatGPTサイトでアカウント登録とAPIキーの取得が必要です。RからChatGPTへ質問だけでなく、コードへコメントを記入、コードの内容から変数名を作成、コード内容の説明、コードの問題点を指摘、コードの最適化?などのコマンドが収録されています。

なお、RStudioへadd inとして追加するコマンドもヘルプなどに記載がありますが、紹介バージョンでは”could not find function”となります。

パッケージバージョンは0.1.5。実行コマンドはR version 4.2.2で確認しています。

スポンサーリンク
スポンサーリンク

ChatGPTのAPIキーを取得する

下記URLにアクセスし、アカウントを作成してください。アカウント作成後にログインしてください。

OpenAI API: https://platform.openai.com/account/api-keys

ログイン後、下記画像のように右上部のアカウント名アイコンをクリックし「View API keys」をクリックします。

表示される「API keys」内の「Create new secret key」をクリックしてAPIキーをメモ帳などにコピーします。後は実行コマンドを参考にパッケージを利用してください。

パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("chatgpt")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("chatgpt")

#ChatGPTのAPIキーを設定
#"sk-XXXXXXXXXXX"を取得したAPIキーで置き換えます
Sys.setenv(OPENAI_API_KEY = "sk-XXXXXXXXXXX")

###RからChatGPTへ質問する:ask_chatgptコマンド#####
cat(ask_chatgpt("ggplot2パッケージで箱ひげ図を作りたい"))

#結果例
#*** ChatGPT input:
#ggplot2パッケージで箱ひげ図を作りたい
#ggplot2パッケージを使用すると、箱ひげ図を作成することが可能です。
#以下のサンプルコードを使用することで、箱ひげ図を作成することができます。
#```
# データフレームの作成
#df <- data.frame(
#  group=gl(3, 10, labels=c("A", "B", "C")), 
#  value=c(rnorm(10, 10, 2), rnorm(10, 8, 1.5), rnorm(10, 5, 2))
)
# 箱ひげ図の作成
#library(ggplot2)
#ggplot(df, aes(x=group, y=value)) +
#  geom_boxplot()
#```

#こんな使い方も可能
cat(ask_chatgpt("ChatGPTとRの関係性を具体的に教えてください"))

#結果例
#*** ChatGPT input:
#ChatGPTとRの関係性を具体的に教えてください
#RとChatGPTの関係性は、RとChatGPTが非常に似ていると考えられています。
#Rは非常に高度なプログラミング言語で、ChatGPTは自然言語処理技術の一つです。
#ChatGPTを使用すると、自然言語テキストを解析して、意味を理解することが可能になります。
#Rを使用すると、複雑なデータ分析を行うための高度なアルゴリズムを実装することができます。
#しかし、RとChatGPTを一緒に使用することは、非常に困難です。
########

###コードへコメントを記入:comment_codeコマンド#####
cat(comment_code('PlotData +
                   geom_point(aes(x = carat, y = price, color = color)) +
                   facet_grid(.~color) +
                   labs(x = "carat", y = "price", colour = "Colour")'
                 ))

#結果例
#*** ChatGPT input:
#Add inline comments to the following R code: "PlotData +
#                   geom_point(aes(x = carat, y = price, color = color)) +
#                   facet_grid(.~color) +
#                   labs(x = "carat", y = "price", colour = "Colour")"

# Plot data points, each point color-coded according to the color category
#geom_point(aes(x = carat, # x-axis is the carat size of each diamond
#               y = price, # y-axis is the price of each diamond
#               color = color)) # color of each point according to the color category

# Group each plot by color category
#facet_grid(.~color)

# Define axis labels
#labs(x = "carat", # x-axis label is carat
#     y = "price", # y-axis label is price
#     colour = "Colour") # color legend label is Colour
########

###コードの内容から変数名を作成:create_variable_nameコマンド#####
cat(create_variable_name("sample(c('あ', 'い'), n = 5, replace = TRUE)"))

#結果例
#*** ChatGPT input:
#Give a good variable name to the result of the following R code: 
#"sample(c('あ', 'い'), n = 5, replace = TRUE)"
#sampled_words
#######

###コード内容の説明:explain_codeコマンド#####
cat(explain_code("sample(c('あ', 'い'), n = 5, replace = TRUE)"))

#*** ChatGPT input:
#Explain the following R code: "sample(c('あ', 'い'), n = 5, replace = TRUE)"
#This code will generate a random sample of size 5 from the vector c('あ', 'い'),
#with replacement. This means that each element of the sample can appear multiple 
########

###コードの問題点を指摘:find_issues_in_codeコマンド#####
#あげるとすればset.seedコマンドを実行していないのでコマンド例は再現性がない
cat(find_issues_in_code("sample(c('あ', 'い'), n = 5, replace = TRUE)"))

#結果例
#*** ChatGPT input:
#Find issues or bugs in the following R code: "sample(c('あ', 'い'), n = 5, replace = TRUE)"
#1. The code does not specify the random number generator to use,
#so the result may vary depending on the random number generator.
#2. The code does not include an argument to set the seed,
#so the result may not be reproducible.

#結果例:当然このような回答も
#*** ChatGPT input:
#Find issues or bugs in the following R code: "sample(c('あ', 'い'), n = 5, replace = TRUE)"
#No issues or bugs were found.
########

#コマンドの最適化?:optimize_codeコマンド
#i=1は1,i=2は2,それ以外は3,4が表示される
#ifではなくelse ifやwhichコマンドで置き換える?
cat(optimize_code(
  "if(i == 1){
    print(1)
  }else{
    if(i == 2){
      print(2)
    }else{
      print(3)
    }
    print(4)
  }"))

#結果例:例の内容が悪い?
#*** ChatGPT input:
#Optimize the following R code: "if(i == 1){
#    print(1)
#  }else{
#    if(i == 2){
#      print(2)
#    }else{
#      print(3)
#    }
#    print(4)
#  }"

#if(i == 1){
#  print(1)
#} else if(i == 2){
#  print(2)
#} else {
#  print(3)
#  print(4)
#}
########

#RStudioへadd inとして追加:run_addin/run_addin_ask_chatgptコマンド
#version 0.1.5ではcould not find function 
#run_addin("ChatGPT")
#run_addin_ask_chatgpt()

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました