Jupyter AI 入門実践ガイド

data-sciencebeginner

## Jupyter AI入門:実践ガイド

私は長年Jupyterノートブックを使ってきましたが、壁にぶつかったのは複雑なデータクリーニングスクリプトを書く必要があった時です。その週に同じ正規表現パターンを5回も書いていたことに気づきました。そこで、コード生成とチャットをノートブック環境に直接もたらす拡張機能、Jupyter AIを試してみることにしました。1週間の徹底的なテストの後、学んだことをお伝えします。壊れた部分とその修正方法も含めて。

## セットアップ:実際に必要なもの

まず、基本を押さえましょう。必要なのはJupyterLab 3.5以上(私は3.6.1を使用)とPython 3.8以上です。インストールは簡単ですが、注意点があります。開始前にAIプロバイダーを決める必要があります。

**ステップ1:Jupyter AIのインストール**

```bash

pip install jupyter-ai

```

これでコアパッケージがインストールされます。ただし、モデルプロバイダーも必要です。私は2つをテストしました。

- **OpenAI**(APIキーが必要、GPT-4およびGPT-3.5で動作)

- **Hugging Face**(無料ですが、低速)

**ステップ2:プロバイダーの設定**

OpenAIの場合:

```bash

export OPENAI_API_KEY="your-key-here"

```

Hugging Face(無料オプション)の場合:

```bash

pip install jupyter-ai-huggingface

export HUGGINGFACEHUB_API_TOKEN="your-token"

```

**警告:** APIコールが失敗する原因のデバッグに30分費やしました。環境変数名にタイポがあったのです。`HUGGINGFACEHUB_API_TOKEN`('HUB'に注意)を再確認してください。

## インターフェース:魔法を見つける場所

JupyterLabを再起動すると、左側のサイドバーに新しいAIアイコン(キラキラしたもの)が表示されます。クリックするとチャットパネルが表示されます。しかし、最初に混乱したのは、**ただチャットを始められない**ことです。最初にモデルを選択する必要があります。

チャットパネルで:

1. 歯車アイコン(設定)をクリック

2. ドロップダウンからプロバイダーを選択(例:GPT-4の場合は`openai-chat`)

3. モデルを設定(複雑なタスクには`gpt-4`、簡単な作業には`gpt-3.5-turbo`を使用)

**プロのヒント:** 予算が限られている場合は、無料のHugging Faceの`microsoft/DialoGPT-medium`を使用してください。ただし、応答時間は5〜10秒かかります。

## 最初の実際のテスト:データクリーニングスクリプトの自動化

50,000行の顧客データを含む乱雑なCSVファイルがありました。チャットパネルに入力した内容は次のとおりです。

```

'email'、'phone'、'age'のカラムを持つDataFrameをクリーニングするPython関数を書いてください。

メールが欠落している行を削除し、電話番号を(XXX) XXX-XXXXの形式にフォーマットし、

年齢を整数に変換してください。

```

Jupyter AIが約3秒でこのコードを生成しました。

```python

def clean_customer_data(df):

# メールが欠落している行を削除

df = df.dropna(subset=['email'])

# 電話番号をフォーマット

import re

def format_phone(phone):

digits = re.sub(r'\D', '', str(phone))

if len(digits) == 10:

return f"({digits[:3]}) {digits[3:6]}-{digits[6:]}"

return phone

df['phone'] = df['phone'].apply(format_phone)

# 年齢を整数に変換

df['age'] = pd.to_numeric(df['age'], errors='coerce').astype('Int64')

return df

```

**感心した点:** `errors='coerce'`を指定した`pd.to_numeric`を使用していたことです。まさに私が書くであろうコードでした。また、NaN値を適切に処理する`Int64`(nullable整数)を使用していました。

**壊れた点:** 電話番号のフォーマットが国コード(+1)を処理していませんでした。修正を依頼したところ、20行の正規表現ソリューションを生成しましたが、やりすぎでした。結局、自分でよりシンプルなバージョンを書きました。

## 真の力:%%aiマジックコマンド

チャットも便利ですが、Jupyter AIの真価はマジックコマンドにあります。セル内で`%%ai`を使用すると、コードをインラインで生成できます。

**例:可視化スクリプトの生成**

新しいセルに次のように入力します。

```python

%%ai openai-chat

dfというDataFrameから'sales'対'profit'の散布図を作成するmatplotlibコードを書いてください。

'region'カラムに色を使用してください。

```

AIがセル内に直接コードを生成します。

```python

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))

for region in df['region'].unique():

subset = df[df['region'] == region]

plt.scatter(subset['sales'], subset['profit'], label=region, alpha=0.6)

plt.xlabel('Sales')

plt.ylabel('Profit')

plt.title('Sales vs Profit by Region')

plt.legend()

plt.show()

```

**重要なヒント:** `%%ai`コマンドはセル全体の内容を置き換えます。既存のコードがある場合、上書きされます。この方法で50行の関数を失いました。**%%aiを実行する前に、必ずセルの内容をコピーしてください。**

## 発見した欠点

1週間の集中的な使用後、次の点に不満を感じました。

1. **コンテキストウィンドウが小さい** - AIは5分前の会話を覚えていません。DataFrameの構造を数クエリごとに再説明する必要がありました。

2. **コード実行のフィードバックがない** - AIはコードを実行して動作を確認しません。実際のDataFrameに存在しないカラムを参照する関数が生成されました。

3. **Hugging Faceモデルが遅い** - 無料モデルは応答に10〜15秒かかります。OpenAIのGPT-4はほぼ瞬時です。

4. **セキュリティ上の懸念** - `%%ai`を使用すると、セル全体の内容(機密データを含む)がAIプロバイダーに送信されます。誤って顧客メールを含むDataFrameをOpenAIのサーバーに送信してしまいました。

## 実際に機能する実用的なワークフロー

試行錯誤の結果、推奨するワークフローは次のとおりです。

1. **コード生成には%%aiを使用し、チャットは使わない** - チャットパネルも使えますが、マジックコマンドの方が高速で焦点が絞られています。

2. **常にモデルを指定する** - デフォルトに依存しないでください。複雑なタスクには`%%ai openai-chat -m gpt-4`を使用します。

3. **生成されたコードは別のセルでテストする** - AIの出力を盲目的に信頼しないでください。生成されたコードを新しいセルにコピーし、小さなサンプルでテストします。

4. **/fixコマンドを使用する** - 生成されたコードにエラーがある場合、`/fix`の後にエラーメッセージを入力します。デバッグに驚くほど優れています。

5. **コンテキストを2〜3メッセージに制限する** - 3回のやり取りを超えると、AIは幻覚を起こし始めます。長い会話の後、存在しないpandas関数を提案することがわかりました。

## 実世界の例:ETLパイプラインの構築

完全な例を説明します。ログファイル用のETLパイプラインを構築する必要がありました。

**ステップ1:データの読み込み**

```python

%%ai openai-chat

'logs/'というディレクトリからすべてのCSVファイルを読み取り、

1つのDataFrameに結合し、ファイル名を含む'source_file'カラムを追加するpandasコードを書いてください。

```

**ステップ2:データのクリーニング**

```python

%%ai openai-chat

'timestamp'、'level'、'message'、'user_id'のカラムを持つDataFrameから:

- 'timestamp'をdatetimeとして解析

- 'level'が'DEBUG'の行をフィルタリング

- 'message'の重複エントリを削除

```

**ステップ3:サマリーの生成**

```python

%%ai openai-chat

'level'と'message'のカラムを持つDataFrameを受け取り、

各ログレベルのカウントと上位10件のメッセージを含む辞書を返す関数を書いてください。

```

各ステップで生成されたコードを手動で組み合わせました。AIは定型作業の入力に約2時間の節約になりました。

## 結論:使用すべきか?

Jupyter AIは次のような場合に最適です。

- 定型コードの生成(データ読み込み、基本的なクリーニング)

- matplotlib/seabornの可視化の作成

- 複雑なpandas操作の説明

次のような場合には苦手です。

- ドメイン固有のロジック(例:財務計算)

- 過去のコンテキストを記憶する必要がある複数ステップのワークフロー

- データベースやAPIと連携するコード

**最大の推奨事項:** 最終的な解決策ではなく、出発点として使用してください。生成されたコードは下書きのように扱い、入力の手間を省いてくれますが、本番データで実行する前に必ずレビューとテストを行ってください。

## 次のステップ

読むだけでなく、今すぐ試してみてください。Jupyterノートブックを開き、`jupyter-ai`をインストールして、次のコマンドを実行してください。

```python

%%ai openai-chat

'customer_id'、'name'、'email'、'signup_date'、'plan_type'のカラムを持つ

モック顧客データの10行をランダムに生成してください。

```

次に、生成されたコードを実行して動作を確認してください。その力と限界の両方をすぐに理解できるでしょう。そして、必ず何か間違ったものが生成された場合(必ずそうなります)、`/fix`を使用してデバッグしてください。そこで本当の学びが得られます。