今回はChatGPTが
簡単なコードでもどこまで書けるか
色々試してみることにしました


解説動画はこちら



今回はChatGPTを用いて
コードを書かずにプロンプトの指定だけで
どこまでプログラミング 出来るかを
試してみました



プロンプトプログラミング

ChatGPTを用いると
簡単なプログラムコードを
作成させる事ができます

そのプログラムコードが
上手くいくものになるかどうかは
「プロンプト」の指定が
正しく行われている事が前提となっています

なので正しく動作するプログラムを生成したければ
それなりにプロンプトの指定を
きちんと指定を行う必要があります

上手くいくコツとしては

1.どのようなものを作るのかを指定する
2.前提条件を指定する
3.機能面を細かく指定する

というのがポイントとなります

まず初めに簡単なプログラムを指定しました

前提条件:
コードにはコメントを記載する
Python 3.8を使用する
グローバル変数の使用を避けて関数の引数を介して必要な変数を渡す

機能条件:

1.以下の構造を持つ関数「read_csv_file」を作成する
seaborn ライブラリの tips データセットを読み込みする
データフレームを戻り値として返す

2.機能条件1で作成したデータを読み込み以下の形式でプロットする関数「plot_data」を作成する
matplotlib ライブラリを用いて読み込んだデータフレームの
数値型の列のデータを1つ箱髭図でプロットする

こんな感じで指定を行うと
次のようなコードが生成されました

import seaborn as sns
import matplotlib.pyplot as plt

def read_csv_file():
    # seabornライブラリのtipsデータセットを読み込む
    df = sns.load_dataset('tips')
    # データフレームを返す
    return df

def plot_data(df, column_name):
    # 指定された列のデータを取得
    data = df[column_name]
    # 箱ひげ図を描画
    fig, ax = plt.subplots()
    ax.boxplot(data)
    ax.set_title(column_name)
    plt.show()

関数の指定しかしていないので
関数だけが作成されましたが
動作としては正常に動作するものになりました

要は指定通りです


次はGUIを作成してみました

データの読み込みは一緒にして
ボタンを配置するなどの機能を指定します

ボタンをクリックしたら
描画する様に指定してみます

以下の条件を満たすPythonコードを生成して下さい

前提条件:
コードにはコメントを記載する
Python 3.8を使用する
グローバル変数の使用を避けて関数の引数を介して必要な変数を渡す

機能条件:

1.以下の構造を持つ関数「read_csv_file」を作成する
seaborn ライブラリの tips データセットを読み込みする
データフレームを戻り値として返す

2.ipywidgetsを使ってGUIを作成する
 2-1.で作成した関数を用いてデータフレームを作成する
 2-2.データフレームのデータを数値型だけに絞り込む
 2-3.ipywidgetsで2-2で作成したデータのカラムを選択できるセレクトボックスを作る
 2-4.ipywidgetsでボタンを作成し「plot」と表示する
 2-5.2-4で作成したボタンをクリックしたら読み込みしたデータをmatplotlibライブラリでプロットする

出来上がったコードはこれ

import seaborn as sns
import ipywidgets as widgets
from IPython.display import display
import matplotlib.pyplot as plt

def read_csv_file():
    # seabornライブラリのtipsデータセットを読み込む
    df = sns.load_dataset('tips')
    # データフレームを返す
    return df

def plot_data(df, column_name):
    # 指定された列のデータを取得
    data = df[column_name]
    # 箱ひげ図を描画
    fig, ax = plt.subplots()
    ax.boxplot(data)
    ax.set_title(column_name)
    plt.show()

def on_button_clicked(b):
    # カラムを選択するセレクトボックスの値を取得
    column_name = dropdown.value
    # 指定されたカラムのデータをプロットする
    plot_data(numeric_df, column_name)

# データフレームを読み込む
df = read_csv_file()
# 数値型のカラムだけを抽出したデータフレームを作成する
numeric_df = df.select_dtypes(include=['float64', 'int64'])

# カラムを選択するセレクトボックスを作成する
dropdown = widgets.Dropdown(options=list(numeric_df.columns))

# ボタンを作成する
button = widgets.Button(description='plot')
# ボタンがクリックされたらon_button_clicked関数を呼び出す
button.on_click(on_button_clicked)

# セレクトボックスとボタンを表示する
display(dropdown)
display(button)

ボタンもきちんと配置され
機能面も指定通りです

クリックすると描画も行われます
数値型の絞り込みもバッチリですが
クリックごとに描画が増えてしまうので
そこを消す指定をしてあげないと
クリックするたびに画像が増えてしまいます

プロンプトで指定していない機能は
実装されない様ですね

最後はWEBからデータを取得して
描画させる様にしました

以下の条件を満たすPythonコードを生成して下さい

前提条件:
コードにはコメントを記載する
Python 3.8を使用する
グローバル変数の使用を避けて関数の引数を介して必要な変数を渡す
データの作成はPandasライブラリを使用する

機能条件:

1.以下の要件を満たすコードを作成する
1-1.以下のWEBサイトからPandasライブラリを用いてデータを取得する
 「https://finance.yahoo.co.jp/quote/998407.O/history」

1-2.取得したデータの1番目のデータをデータフレームとして読み込みする
1-3.Plotlyライブラリを用いて5列目のデータを折れ線グラフでプロットする
WEBからのデータ取得は上手くいくのでしょうか?
出来上がったコードはこれ

import pandas as pd
import plotly.express as px

# Yahoo Financeからデータを取得
url = 'https://finance.yahoo.co.jp/quote/998407.O/history'
df = pd.read_html(url)[0]

# 1番目のデータを取得
df = df.iloc[[0]]

# 5列目のデータを折れ線グラフでプロット
fig = px.line(df, x='日付', y=df.columns[4])
fig.show()

データの取得は出来ましたが
描画の方が少しおかしいところが出てきました

表示されるラベルが違っていたり
データが足りなかったり
データの造り込みなどを指定する部分が
少し甘かった様です

このようにきちんとプロンプトを指定すれば
コードの方もきちんとしたものが返ってきます


コードの作成に時間がかかる様なものをつくりたければ
仕様をきちんと文字起こしすれば
上手く機能するコードに直す事が
一瞬で出来そうですね


プログラミング初心者が
どうコードを書いて良いかわからない場合に
お手本となるサンプルプログラムを
解説付きで生成出来たりもするので

これからはプロンプトプログラミングが
主流になっていくんじゃないかと思います

プログラム言語の知識に加えて
その周辺のプロンプト活用の知識も
必須になって来ますね

今回はプロンプトを活用して
ChatGPTでノーコードプログラミングを
試してみました

今日は
ここまでです
それでは