ビジネスに使える無料Webツールを公開しました

PythonとChatGPT APIでGoogleシートの各行にAIの処理を適用させる方法

本日は、PythonとChatGPT APIを利用して、Googleシートにある大量のデータに対して各行にAIによる処理を適用する方法を解説します。

以下のような場面で有効です。

  1. SEOのキーワードデータがGoogleスプレッドシートに5万個あるため、各キーワードを「指名系」と「一般系」に分類したい。
  2. ユーザーフィードバックのデータがGoogleスプレッドシートに10万個あるため、それを分類したい。
  3. Googleシートに英語の単語が5000個あるため、全てを翻訳したい。

今回は1番目の「各キーワードを分類する」という作業内容をお見せします。

必要な環境と費用

以下の環境で行います。

  • データ:Googleスプレッドシート
  • コードエディタ:Google Colab
  • 生成AIのAPI:OpenAIのAPIを使用します。

データは架空のECサイト「NIDAS(ナイダス)」のキーワードデータをChatGPTに生成させました。

シートをコピーする

かかる費用は、「chatgpt-4o-mini」というモデルを使用すれば、5万行で数百円以内に済みます。

ヘイショー

有料APIを利用して大量の処理を行うため、試す場合は必ず最初は20行くらいで試してください。もし間違えて高価な費用を課金されてしまった場合の責任は負いかねますので、ご了承ください。

STEP 1. Open AIのサイトから、APIキーを取得する

手順1
OpenAIのAPIキー取得ページへアクセス

» API keys | OpenAI

APIキーはこちらのリンクから取得ください。

手順2
APIキーをコピペする

STEP 2. Google ColabにAPIキーを設定する

STEP 3. Google ColabにPythonコードを入力、実行

コード

!pip install openai
import pandas as pd
from google.colab import auth, drive
from google.colab import userdata
import gspread
from google.auth import default
from openai import OpenAI
import os # Import os to manage environment variables

# Googleシートを認証する
drive.mount('/content/drive', force_remount=True)
auth.authenticate_user()
creds, _ = default()
gc = gspread.authorize(creds)

# Googleシートのファイルを開ける
filename = "sample-gsc-data"
ss = gc.open(filename)
# Googleシートのシートを読み込む
def load_sheet_data(sheet_name):
    worksheet = ss.worksheet(sheet_name)
    data = worksheet.get_all_values()
    return pd.DataFrame(data[1:], columns=data[0])
sheet = "sample_gsc_data_ja"
df = load_sheet_data(sheet)

# OpenAI APIを設定する
OPENAI_API_KEY = userdata.get('OPENAI_API_KEY')
client = OpenAI(api_key=OPENAI_API_KEY)
gpt_model = "gpt-4o-mini"
def apply_chatgpt(keyword):
    response = client.chat.completions.create(
        model= gpt_model,
        messages=[{"role": "user", "content":
        f"""
        Classify the following keyword as either 'Branded' or ''Generic'
        A branded keyword is a keyword related to the company 'Nidas(ナイダス)',
        including its name in English or Japanese, common synonyms, or product      
        names.
        No explanation needed, just answer by either 'Branded' or 'Generic'
        Keyword: {keyword}.
        """
        }],
        max_tokens=100)
    result = response.choices[0].message.content
    return result.strip()

# 処理を実行する
start_row = 4
worksheet = ss.worksheet(sheet)
for index, row in df.iterrows():
    if index + 2 < start_row: # Skip rows before the start row
        continue
    result = apply_chatgpt(row['Query'])
    df.at[index, 'Category'] = result
    worksheet.update_cell(index + 2, df.columns.get_loc('Category') + 1, result)

まとめ

もしコードが動かなければお知らせください。

ヘイショー

ご精読ありがとうございました。