🚀

OpenAI APIを活用して元からある項目を元に新しい項目を追加してみた!

2024/12/12に公開

こんにちは!今回は、PythonとOpenAIのAPIを使って、元からある項目を読み込ませた上で、新しい情報を追加する方法について解説していきます!

今回の記事の例として、CSVデータにある商品名カラムから、「季節フラグ」を追加する方法を紹介します。

例えば、「浴衣」なら夏、「ニット」なら秋冬といった感じで商品に合った季節のフラグを付けたいこと、ありませんか?手作業だと面倒なので、OpenAI APIを活用して効率化してみました!


やりたいこと

  • 商品リスト(CSV形式)を用意
  • OpenAI APIに「商品名から季節フラグを生成して!」とお願い
  • 最終的に、以下のような形のCSVを出力
商品名,春フラグ,夏フラグ,秋フラグ,冬フラグ
"浴衣",FALSE,TRUE,FALSE,FALSE
"ニット",FALSE,FALSE,TRUE,TRUE
"バッグ",TRUE,TRUE,TRUE,TRUE

実装の流れ

1. 必要なライブラリをインストール

まず、以下のライブラリをインストールしておきましょう。

pip install openai pandas
2. コードの概要

今回のコードをざっくり説明すると、以下のような流れです。

  1. CSVファイルを読み込んでDataFrameに変換
  2. データを200行ずつ分割(APIの負荷軽減のため)
  3. 各チャンクをOpenAI APIで処理
  4. APIの結果を結合して、最終的なCSVとして保存

コード解説

以下が実際のコードです。

from io import StringIO
import pandas as pd
from openai import OpenAI

# OpenAIのクライアントを初期化
client = OpenAI(api_key="sk-xxxxx")

# 空のデータフレームを作成して、最終的な出力結果を格納
result_df = pd.DataFrame(columns=["商品名", "春フラグ", "夏フラグ", "秋フラグ", "冬フラグ"])

# CSVをアップロードしてデータフレームに変換
df = pd.read_csv('商品リスト')

# OpenAI APIの呼び出し関数
def process_content(content):
    instructions = """
    あなたはCSV出力機です。文字列を正しいcsvにパースしてください。csvのみを出力して。コードブロックも不要です。

    1. 商品名、春フラグ、夏フラグ、秋フラグ、冬フラグの5列のCSVを入力してください。
    2. バッグなど季節を問わない商品は、全てのフラグをTRUEにしてください。
    """
    
    completion = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": instructions},
            {"role": "user", "content": content},
        ]
    )
    return completion.choices[0].message.content.strip()

# データを200行ごとに分割して処理
chunk_size = 200
for start_row in range(0, len(df), chunk_size):
    chunk = df.iloc[start_row:start_row + chunk_size]
    chunk_csv = chunk.to_csv(index=False)
    processed_content = process_content(chunk_csv)
    chunk_result_df = pd.read_csv(StringIO(processed_content))
    result_df = pd.concat([result_df, chunk_result_df], ignore_index=True)
    print(f"{start_row + len(chunk)} 行目まで処理しました。")

# 結果をCSVファイルとして保存
output_path = '商品リスト_季節フラグ追加済.csv'
result_df.to_csv(output_path, index=False)
print(f"結果を保存しました: {output_path}")
3. 実行のポイント
  • データ分割
    OpenAI APIにはトークン制限があります。大きなデータセットを一度に処理するとエラーになる可能性があるので、分割して処理しています。

  • APIの説明文
    APIに渡す指示文(instructions)は具体的でわかりやすいものにしましょう。ここでは「バッグなら全てのフラグをTRUEにする」といったルールも明記しています。

  • エラーハンドリング
    実際の運用では、API呼び出しエラー時のリトライ処理を追加すると安心です。


結果

このコードを実行すると、季節フラグが追加されたCSVが出力されます。

例えば、以下のような商品リストが...

商品名
浴衣
ニット
バッグ

以下のように変換されます!

商品名,春フラグ,夏フラグ,秋フラグ,冬フラグ
"浴衣",FALSE,TRUE,FALSE,FALSE
"ニット",FALSE,FALSE,TRUE,TRUE
"バッグ",TRUE,TRUE,TRUE,TRUE

最後に

この方法を使えば、データのラベル付けが簡単に自動化できます!

OpenAI APIは柔軟に使えるので、他のカラム追加やデータ変換にも応用可能です。ぜひ試してみてください!

何か質問があれば、コメントで教えてくださいね。

Discussion