[備忘録] Gemini APIのコード実行機能でデータ分析を自動化しよう

## はじめに

GoogleのGemini APIには**コード実行機能**があり、自然言語の指示だけでPythonコードを生成・実行してデータ分析ができます。この記事では、シンプルな売上データを例に、この機能の使い方と利点を紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/f703e983-3923-4f18-8fab-a16290733593.png)

## Gemini APIのコード実行機能とは？

Gemini APIのコード実行機能（ToolCodeExecution）を使うと、以下のことが自動で行われます：

1. テキストによる指示からPythonコードを生成
2. 生成したコードを安全な仮想環境で実行
3. 実行結果を確認して必要に応じてコードを改良
4. 最終的な分析結果や可視化結果を出力

これにより、データ分析の専門知識がなくても、日本語で「売上の傾向を分析して」と指示するだけで、グラフ付きの分析結果が得られます。

## 基本的な使い方

前提として、以下の実装はGoogle Colab上での動作を想定しています。

```python
!pip -q install pydantic-ai
!pip -q install nest_asyncio

import nest_asyncio
nest_asyncio.apply()

print("Setup complete!")
```

```python
from google import genai
from google.genai import types
from google.colab import userdata
import pandas as pd

# API設定
client = genai.Client(api_key=userdata.get('GEMINI_API_KEY'))

# コード実行機能を有効にしたチャット作成
chat = client.chats.create(
    model="gemini-2.0-flash",  
    config=types.GenerateContentConfig(
        tools=[types.Tool(code_execution=types.ToolCodeExecution)]
    ),
)
```

**重要なポイント**: `types.Tool(code_execution=types.ToolCodeExecution)`を指定することで、Geminiがコードを実行できるようになります。

## 実装例：売上データの自動分析

シンプルな売上データを使った例を見てみましょう：

```python
# サンプルデータの作成
sales_data = pd.DataFrame({
    '月': ['1月', '2月', '3月', '4月', '5月'],
    '売上': [120, 150, 180, 160, 200],
    '商品カテゴリ': ['家電', '服飾', '家電', '書籍', '服飾']
})

# データをCSV形式に変換
csv_str = sales_data.to_csv(index=False)

# Geminiに分析を依頼
prompt = f"""
以下の売上データを分析してください：

## 分析してほしいこと：
1. 月別の売上推移をグラフで表示
2. カテゴリ別の売上合計
3. 売上の傾向についてコメント

データ:
{csv_str}
"""

response = chat.send_message(prompt)

# 結果の表示
for part in response.candidates[0].content.parts:
    if part.text:
        print("分析結果:", part.text)
    if part.executable_code:
        print("実行されたコード:", part.executable_code.code)
    if part.code_execution_result:
        print("実行結果:", part.code_execution_result.output)
```

## 実行結果の例

Geminiは以下のようなコードを自動生成・実行します：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/c8fda48d-7d25-49c9-baf3-e5a8c8150757.png)


```text
分析結果: 売上データを分析します。具体的には、以下の内容を実行します。

1.  月別の売上推移をグラフで表示
2.  カテゴリ別の売上合計を計算
3.  売上の傾向についてコメント

まずは、必要なデータを整理し、計算を行います。

実行されたコード: import pandas as pd
import matplotlib.pyplot as plt

data = {'月': ['1月', '2月', '3月', '4月', '5月'],
        '売上': [120, 150, 180, 160, 200],
        '商品カテゴリ': ['家電', '服飾', '家電', '書籍', '服飾']}

df = pd.DataFrame(data)

# 月別の売上推移グラフ
plt.figure(figsize=(8, 4))
plt.plot(df['月'], df['売上'], marker='o')
plt.title('月別売上推移')
plt.xlabel('月')
plt.ylabel('売上')
plt.grid(True)
plt.show()

# カテゴリ別の売上合計
category_sales = df.groupby('商品カテゴリ')['売上'].sum()
print("カテゴリ別売上合計:")
print(category_sales)

実行結果: カテゴリ別売上合計:
商品カテゴリ
家電    300
書籍    160
服飾    350
Name: 売上, dtype: int64

分析結果: 分析結果：

1.  **月別の売上推移**: 1月から5月にかけて、全体的に売上が増加傾向にあります。3月には一時的に増加し、4月には減少しましたが、5月には再び増加しています。

2.  **カテゴリ別の売上合計**: 服飾が350で最も高く、次いで家電が300、書籍が160となっています。

3.  **売上の傾向**: 全体的に売上が増加傾向にあり、特に服飾カテゴリの売上が好調です。家電製品も比較的高い売上を維持しています。書籍の売上は他のカテゴリと比較して低いですが、一定の需要があることがわかります。
```
などの洞察を自動で提供してくれます。

## この機能の利点

Gemini APIのコード実行機能の主な利点は、プログラミングの知識がなくても自然言語の指示だけで迅速にデータ分析ができることです。分析結果を確認しながら対話的に追加の質問もでき、生成されたコードを見ることでデータ分析の手法も学習できます。

## 活用シーン

- 売上レポートの自動生成
- アンケート結果の分析
- Webサイトのアクセス解析
- ログデータの可視化
- 障害票一覧の分析

テーブル形式でデータ構造が明確に決まっている場合や、分析内容がシンプルで具体的な場合は、うまく動作しやすいと感じました。

## まとめ

Gemini APIのコード実行機能を使えば、自然言語で「このデータの傾向を教えて」と指示するだけで、コードの生成・実行・可視化までを自動で行ってくれます。

ただし、データ構造が複雑だったり、プロンプトが曖昧な場合はうまく動作しないことがあります。メタ情報を含めたデータの提示や、分析内容を明確に伝えることで、より安定した動作が確認できました。

## 参考リンク

- [Gemini API ドキュメント](https://ai.google.dev/gemini-api/docs?hl=ja)
- [コードの実行 | Gemini API](https://ai.google.dev/gemini-api/docs/code-execution?hl=ja)