LEVEL 10 ・ AI × Python / Lesson 28

結果がおかしいとき、AIに直してもらう

エラーは出ないのに、結果が合わないとき。検算して、期待と実際を伝えて、直してもらいます。

目安 20分 ・ インストール不要

このレッスンが終わったら

「結果がおかしいときは、期待と実際を数字で伝える。頼む・読む・試す・検算する・直す、を何周かまわす」と言える。

STEP 1

できることを見る

AIが書いたコードが、うまく動かないとき、直してもらうことができます。ただし、うまく直してもらうには、状況を、正しく伝えることが大切です。

直してもらう場面は、2種類あります。

  1. ① エラーが出るコードが止まる
  2. ② 結果がおかしい動くが、数字が合わない
①は、エラーの全文を渡します。②は、「期待した結果」と「実際の結果」を渡します。

①は、エラー講座で学びました。今回は、見つけにくい**②「エラーは出ないが、結果がおかしい」**を、中心に学びます。

STEP 2

動かしてみる

AIが書いた、「営業部の売上の合計」を出すコードです。実行してみてください。

AIが書いたコード(営業部の合計)pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

エラーは出ません。数字も表示されました。334000 です。でも、これは、合っているでしょうか?

STEP 3

1行ずつ読む

確かめる方法は、自分で、別の方法で求めて、見比べることです。(検算)Excelで、sales.xlsx の営業部の金額を足すと、478000 です。数字が合いません。

コードを、日本語にしてみましょう。

1行ずつ日本語にしてみる
df = pd.read_excel("sales.xlsx")sales.xlsx を読み込む
sales_dept = df[df["部署"] != "営業"]部署が、「営業」では**ない**行を、取り出す
print(sales_dept["金額"].sum())その金額の合計を、表示する

日本語にすると

営業部「以外」の売上の合計を、表示するコードになっている。

!= は、「等しくない」という意味でしたね。営業部の合計が欲しいのに、==(等しい)ではなく、!= と書かれているのが、原因です。エラーは出ないのに、結果は違う、典型的な間違いです。

STEP 4

1か所だけ変える

原因が分かったら、!= を == に直します。

直したコードpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

478000 になり、Excelでの検算と一致しました。

結果がおかしいときの、AIへの文章

次のPythonコードの結果が、期待と違います。原因と、直し方を教えてください。

【やりたいこと】
営業部の、金額の合計を表示したい

【期待する結果】
478000(Excelで、手計算した結果)

【実際の結果】
334000

【コード】
(ここにコード全体を貼る)

直したあとは、「どこを、なぜ直したか」も説明してください。

「期待する結果」と「実際の結果」を、数字で伝えるのが、コツです。AIは、数字の差から、原因を推理できます。

STEP 5

自分で書く

お題① 次のコードは、「営業部の金額の合計」を出す、というお願いに対して、AIが書いたものです。しかし、結果が、期待(478000)と違います。直してください。

お題①:結果がおかしいコードを直すpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます
ヒントを見る

mean() は「平均」です。合計は、sum() でした。

答えの例を見る
import pandas as pd

df = pd.read_excel("sales.xlsx")
sales_dept = df[df["部署"] == "営業"]
print(sales_dept["金額"].sum())

お題② 今度は、「営業部の件数(何行あるか)」が欲しいのに、合計が表示されます。直してください。(6)

お題②:合計ではなく、件数にするpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます
ヒントを見る

件数は、行の数です。len(sales_dept) と書きます。

答えの例を見る
import pandas as pd

df = pd.read_excel("sales.xlsx")
sales_dept = df[df["部署"] == "営業"]
print(len(sales_dept))
STEP 6

仕事ならどう使う?