データ分析・アプリケーション開発・スクレイピングなど、多様な用途で使うことができ、最も人気のプログラミング言語になりつつあるPython。
プログラミング学習や実務ために、ChatGPTを活用したい方も多いのではないでしょうか?
しかし、「良いプロンプト」の定義はまだふわっとしており、書き方や具体例をしりたいという方もいらっしゃるのではないでしょうか?
そこで、本記事では現役データサイエンティストとして日々Pythonに携わっている経験をもとに、ChatGPTを活用したPythonのプロンプト例を紹介していきます。
監修者
經田 原弘
東京大学大学院新領域創成科学研究科複雑理工学専攻修了。大学時代は3次元の医療データの平滑化処理を研究テーマとし、大学院時代はJAXAと協業し、月探査機かぐやの衛星データから、月面上の水の存否について調査していた。新卒では株式会社リクルートにてレコメンドシステムの開発等に従事し、現在は製造業系スタートアップにてデータサイエンティストとして勤務。応用情報技術者試験・E資格合格者。
ChatGPTとは
ChatGPTはOpenAIが開発した大量のテキストデータから学び、テキストを生成するAIです。インターネット上の数百万ページにわたるテキストを読み込み、その中からパターンを見つけ出し、新たなテキストを創り出すことができます。
これにより、ユーザーが「質問」や「指示」をすることで得たい情報や回答を即座に得ることができます。
PythonでのChatGPT活用例
たとえば、Pythonでデータ分析をしたいとき、ChatGPTを活用してどのようなことができるのか見てみましょう。
➀サンプルデータを生成する
Pythonでデータ分析のモデル構築をするとき、膨大なサンプルデータが必要になりますが、モデル構築に必要な学習データやテストデータは過去のデータの蓄積が少ないと十分なデータ量を集めることができません。
ChatGPTを活用すると、データをもとにサンプルデータを生成し、それをPandasのデータフレームとして得ることができるので、データ量が少なくてもデータ分析のモデル構築ができるようになります。
さらに、ChatGPTでサンプルデータを生成することで、既存のデータセットには存在しない新たなデータからより精度の高いモデルを構築できるようになります。
②コードのデバッグ処理ができる
コードにエラーがあるとき、そのエラーについて質問すると、そのエラーが何を意味するのか、どのように修正すればよいかを解説してくれます。
たとえば、下記のようにコードと共にエラーの原因と理由を尋ねると、エラーの理由と併せて、正しいコードを返してくれます。
- num = 10
text = "Hello"
result = text + num
print(result)
のコードを入力するとエラーが返ってきます。
どこがどのように間違えているのか教えてください。
加えて、その対処方法も教えてください。 -
このコードでエラーが発生する理由は、異なるデータ型の演算を行っているためです。
numは整数型(int)であり、textは文字列型(str)です。文字列と整数の直接的な加算はPythonではサポートされていません。正しいコードは、整数を文字列に変換してから結合する必要があります。以下は修正したコードです:num = 10 text = "Hello" result = text + str(num) print(result)
修正後のコードでは、numをstr(num)として文字列に変換し、それをtextと結合しています。これにより、文字列同士の結合が行われ、"Hello10"が出力されます。
自分でひとつひとつエラーの対処方法を調べていると膨大な時間がかかってしまいますが、ChatGPTを活用することで、素早くデバッグ処理を終えることができます。
このほかにもさまざまなことができるので、ChatGPTを活用することでタスクに費やす時間を短縮でき、業務効率化を実現できるでしょう。
良いプロンプトを書くポイント
良いプロンプトを書かなければ、ChatGPTの返答が曖昧であったり、間違えた返答になってしまいます。
では、PythonのコードをChatGPTで自動生成するとき、どのようなプロンプトを書けばほしいコードが返ってくるのでしょうか。ここでは、プロンプトを書くときに注意するべき2つのポイントを紹介します。
- どのようなコードがほしいのかを明確に伝える
- タスクの詳細を伝える
ポイント➀:どのようなコードがほしいのかを明確に伝える
ChatGPTではほしいコードを明確に伝えなければ、意図しないコードが返ってくることがあります。そのため、どのようなコードが必要なのか明確に伝えることが重要です。
たとえば、Pythonでソートするコードを知りたいとき、指示によって以下のような違いがあります。
- Pythonでリストをソートする方法を教えてください。
-
# 一般的なリストをソートする方法 my_list = [4, 2, 9, 1] my_list.sort() print(my_list)
上記の質問では何をソートしたいのか具体的には示されていないので、汎用的な返答になります。一方で、より具体的な指示を出すと、その情報を元に具体的なコードが返ってきます。
- Pythonで文字列のリストをアルファベット順にソートする方法を教えてください。
-
# 文字列のリストをアルファベット順にソートする方法 str_list = ["banana", "apple", "cherry"] str_list.sort() print(str_list)
ソートしたい対象が「文字列のリスト」であり、そのソート方法が「アルファベット順」であることが具体的に指定されています。そのため、目的に合ったコードが返答されます。
自分のほしいコードをすぐに得ることができるので、このようにほしいコードを詳しく伝えるようにしましょう。
ポイント②:タスクを詳細に伝える
プログラミングやデータ分析のタスクは、同じタスクでも多くの異なる方法で実行することができます。そのため、タスクの詳細も伝えることで、自分のほしいコードが得られるようになります。
たとえば、以下の4つのポイントを最低限伝えることを意識しましょう。
- ①データの型
-
データ型によって扱い方が異なります。たとえば、リスト型のコードがほしいとき、「Pythonで整数のリスト[1, 3, 2]をソートするコードを書いてください」と指定すると、整数のリストをソートするコードを得ることができます。
- ②ファイル形式
-
ファイル形式によって読み込み方法が異なるため、コードも異なります。
たとえば、JSONファイルを読み込みたいとき、「PythonでJSONファイル"data.json"を読み込むコードを書いてください」と指定すると、JSONファイルを読み込む適切なコードを得ることができます。 - ➂関数の引数
-
関数の引数を指定することで、より具体的なコードを得ることができます。
たとえば、「Pythonで引数として整数のリストを受け取り、それをソートする関数を書いてください」と指定すると、ソートする一般的なコードでなく、詳細なコードが返ってきます。 - ④処理の詳細
-
どのような処理を行いたいのかを明確にすることも重要です。
たとえば、「Pythonで"age"と"salary"の列が含まれるpandasのDataFrameから、"age"の列の平均値と"salary"の列の合計値を計算するコードを書いてください」のように、列名やどのライブラリを使いたいのかも示すとよいでしょう。
上記の4つのポイントを抑えると、自分のほしいコードが明確になるため、ほしいコードが返答されやすくなるでしょう。
Pythonのデータ分析に使えるプロンプト
ここからは実際にPythonでデータ分析をしたいときに活用できるプロンプトを見ていきましょう。編集部がPythonのデータ分析で活用できるプロンプトを3つまとめてみました。
ここでは下記のようにある店舗の顧客IDに紐づいた商品のCSV形式の購入データを活用して、それぞれデータ分析するためのプロンプトを学習していきます。
顧客ID,購入日,商品,量,費用
C023,2022-07-25,Onigiri,2,200
C014,2022-07-25,Sandwich,1,300
C050,2022-07-25,Beer,3,600
C037,2022-07-26,Onigiri,2,200
C002,2022-07-26,Chips,1,150
C017,2022-07-26,Onigiri,3,300
C005,2022-07-27,Beer,3,600
C049,2022-07-27,Sandwich,1,300
C032,2022-07-28,Tea,2,280
※実際に活用したサンプルデータはこちらからダウンロードできます。
読み込ませるデータを変えると、さまざまなデータを使ってデータ分析することができるようになるので、ぜひプロンプトを活用しましょう。
日付ごとの売上を集計するプロンプト
下記のようにある店舗の顧客IDに紐づいた商品の購入データをもとに日付ごとの売上を算出してみましょう。
- 顧客ID 購入日 商品 量 費用
C023 2022-07-25 Onigiri 2 200
C014 2022-07-25 Sandwich 1 300
C050 2022-07-25 Beer 3 600
C037 2022-07-26 Onigiri 2 200
C002 2022-07-26 Chips 1 150
C017 2022-07-26 Onigiri 3 300
C005 2022-07-27 Beer 3 600
C049 2022-07-27 Sandwich 1 300
C032 2022-07-28 Tea 2 280
のcsv形式の購買履歴データに対して、日付ごとの売上を集計するプログラムをpython形式で書いてください。 -
import csv # 購買履歴データを読み込み、日付ごとの売上を集計する関数 def aggregate_sales_by_date(filename): sales_by_date = {} with open(filename, 'r') as file: reader = csv.reader(file) next(reader) # ヘッダ行をスキップ for row in reader: purchase_date = row[1] sales = int(row[4]) if purchase_date in sales_by_date: sales_by_date[purchase_date] += sales else: sales_by_date[purchase_date] = sales return sales_by_date # 購買履歴データのファイルパス data_file = '購買履歴データ.csv' # 日付ごとの売上を集計 sales_by_date = aggregate_sales_by_date(data_file) # 集計結果の出力 for date, sales in sales_by_date.items(): print(f'{date}: {sales}')
すると、下記のように日別ごとに売上を集計することができます。
売上を棒グラフで可視化するプロンプト
下記のようにある店舗の顧客IDに紐づいた商品の購入データをもとに日付ごとの売上を棒グラフで可視化してみましょう。
- 顧客ID 購入日 商品 量 費用
C023 2022-07-25 Onigiri 2 200
C014 2022-07-25 Sandwich 1 300
C050 2022-07-25 Beer 3 600
C037 2022-07-26 Onigiri 2 200
C002 2022-07-26 Chips 1 150
C017 2022-07-26 Onigiri 3 300
C005 2022-07-27 Beer 3 600
C049 2022-07-27 Sandwich 1 300
C032 2022-07-28 Tea 2 280
のcsv形式の購買履歴データに対して、日付ごとの売上を棒グラフで可視化するコードをPython形式で教えてください。 -
from google.colab import files import pandas as pd import matplotlib.pyplot as plt # CSVファイルをアップロードします uploaded = files.upload() # pandasでCSVファイルを読み込みます # ファイル名を指定します。 df = pd.read_csv('sales.csv') # 商品ごとに売上を集計します sales_by_product = df.groupby('商品')['費用'].sum() # 棒グラフで表示します sales_by_product.plot(kind='bar') plt.title('Sales by Product') plt.xlabel('Product') plt.ylabel('Sales') plt.show()
すると、下記のように商品ごとの売上を棒グラフで可視化することができます。
日付ごとの売上推移を折れ線グラフで可視化するプロンプト
下記のようにある店舗の顧客IDに紐づいた商品の購入データをもとに日付ごとの売上推移を折れ線グラフで可視化してみましょう。
- 顧客ID 購入日 商品 量 費用
C023 2022-07-25 Onigiri 2 200
C014 2022-07-25 Sandwich 1 300
C050 2022-07-25 Beer 3 600
C037 2022-07-26 Onigiri 2 200
C002 2022-07-26 Chips 1 150
C017 2022-07-26 Onigiri 3 300
C005 2022-07-27 Beer 3 600
C049 2022-07-27 Sandwich 1 300
C032 2022-07-28 Tea 2 280
のcsv形式の購買履歴データに対して、日付ごとの売上を折れ線グラフで可視化するプログラムをpython形式で書いてください。 -
from google.colab import files import pandas as pd import matplotlib.pyplot as plt # CSVファイルをアップロードします uploaded = files.upload() # pandasでCSVファイルを読み込みます # ファイル名を指定します。ここでは'sales.csv'としています。 # ファイル名は先ほどアップロードしたファイルに合わせて変更してください。 df = pd.read_csv('sales.csv') # '購入日'を日付型に変換します df['購入日'] = pd.to_datetime(df['購入日']) # 日付ごとに売上を集計します sales_by_date = df.groupby('購入日')['費用'].sum() # 折れ線グラフで表示します sales_by_date.plot() plt.title('Sales Trend Over Time') plt.xlabel('Date') plt.ylabel('Sales') plt.show()
すると、下記のように日付と売上の折れ線グラフを作成することができます。
まとめ
本記事では、Pythonのデータ分析で活用できるChatGPTプロンプトについてまとめました。実際に、手元で実行して同様の結果を得られたでしょうか。
プロンプトをパターン化して覚えることで、さまざまなデータ分析ができるようになります。ぜひ今回紹介したデータ分析の基本となるプロンプトを覚えて活用してみましょう。
また、編集部ではPythonに関連する記事をほかにも公開しています。興味のある方はぜひこちらの記事もご覧ください。