ChatGPTにPythonコードを提示したうえで訂正文を指示して修正コードを取得してみた

ChatGPTにPythonコードを提示したうえで、訂正内容を指示して修正コードを取得してみました。

訂正元になるコードは以下です。これはpandas_datareaderで2000年1月1日以降の日経平均株価四本値を取得してデータフレームに入れたものです。


from pandas_datareader import data as pdr
import datetime
import yfinance as yf 

start = "2000-1-1" 
end = datetime.date.today()
ticker = "^N225" 


yf.pdr_override() 

df = pdr.get_data_yahoo(ticker, start, end)
df
        

指示文(プロンプト)1:

下記のPythonコードを以下のように訂正してください。

1. df内の全行数を表示する
2. openよりcloseが下回る件数の割合を計算して表示する
3. openよりcloseが上回る件数の割合を計算して表示する

〜以下に先ほどのコードを入れる

回答:

以下が訂正されたPythonコードです。


from pandas_datareader import data as pdr
import datetime
import yfinance as yf 

start = "2000-1-1" 
end = datetime.date.today()
ticker = "^N225" 

yf.pdr_override() 

df = pdr.get_data_yahoo(ticker, start, end)
# 1. df内の全行数を表示する
print("全行数:", len(df))

# 2. openよりcloseが下回る件数の割合を計算して表示する
lower_count = len(df[df['Open'] > df['Close']])
lower_percentage = lower_count / len(df) * 100
print("OpenよりCloseが下回る件数の割合(%):", lower_percentage)

# 3. openよりcloseが上回る件数の割合を計算して表示する
higher_count = len(df[df['Open'] < df['Close']])
higher_percentage = higher_count / len(df) * 100
print("OpenよりCloseが上回る件数の割合(%):", higher_percentage)

        

訂正内容:

df内の全行数を表示するために、len(df)を使ってDataFrameの行数を取得し、print()関数で表示するようにしました。
OpenよりCloseが下回る件数の割合を計算して表示するために、DataFrameの条件抽出を行い、件数と割合を計算してprint()関数で表示するようにしました。
OpenよりCloseが上回る件数の割合を計算して表示するために、同様にDataFrameの条件抽出を行い、件数と割合を計算してprint()関数で表示するようにしました。

結果:

以下のように成功しました。

 

 

指示文(プロンプト)2:

openよりcloseが下回るケースが3回以上続く場合の割合

回答:

以下が修正後のPythonコードです。


from pandas_datareader import data as pdr
import datetime
import yfinance as yf 

start = "2000-1-1" 
end = datetime.date.today()
ticker = "^N225" 

yf.pdr_override() 

df = pdr.get_data_yahoo(ticker, start, end)
# 1. df内の全行数を表示する
print("全行数:", len(df))


# openよりcloseが下回るケースが3回以上続く場合の割合を計算して表示する
lower_consecutive_3_count = 0
for i in range(len(df)-2):
    if (df.iloc[i]['Open'] > df.iloc[i]['Close']) and (df.iloc[i+1]['Open'] > df.iloc[i+1]['Close']) and (df.iloc[i+2]['Open'] > df.iloc[i+2]['Close']):
        lower_consecutive_3_count += 1

lower_consecutive_3_percentage = lower_consecutive_3_count / (len(df)-2) * 100
print("OpenよりCloseが下回るケースが3回以上続く場合の割合(%):", lower_consecutive_3_percentage)

訂正内容: OpenよりCloseが下回るケースが3回以上続く場合の割合を計算して表示するために、DataFrameの各行のOpenとCloseの値を比較し、3回以上続く場合をカウントするループ処理を追加し、割合を計算してprint()関数で表示するようにしました。

結果:

以下のように成功しました。

いわゆるローソク足ですが、陽線、陰線のほか、上ヒゲでの陰線引けがn回以上続く確率などを対話的に求められます。Jupyter Notebookだとコードも追加して対話的に記述できるので、直近のローソク足の状況を自然文で記述して、確率を推測してみるとか、その場の思いつきで探索ができそうですね。