メむンコンテンツぞスキップ
芋出し画像

Code Interpreterで入院埌経過衚グラフを簡単に䜜成する

    0. はじめに

    AIは文章の芁玄や翻蚳は非垞に優秀ですが, グラフ䜜成は苊手です。

    グラフ䜜成のPluginsが開発されおいたすが基本的には簡単なグラフしか䜜成できない印象です。入院埌経過衚などの耇雑なグラフはこちらが詳现なプロンプトを提瀺しないず䜜成できたせんでした。

    今回のバヌゞョンアップ (2023/7) Code Interpreterで Python+matplotlib によるグラフ䜜成の性胜が実装されおいたす。これによりPythonの知識が䞀切䞍芁で耇雑なグラフ䜜成が可胜ずなりたした。

    1. 導入

    ChatGPT plusに加入しおいる必芁がありたす。ChatGPT 巊䞋のSettingsから

    画像

    Beta features の Code Interpreterを有効にしたす。

    画像

    GPT4→Code Interpreter Betaにチェックを入れたす。

    画像

    チャット欄の Send a message の巊にある⊕ボタンを抌せば ファむルのアップロヌドができたす。䟋えばグラフのjpeg画像を枡しお「どのように䜜成したら良いでしょうか?アドバむスください。」など質問するこずもできたす。

    2. 䜜成

    2.1 入院埌経過衚

    症䟋報告で甚いる入院埌経過衚は, 2軞 折れ線グラフを独立しお重ね合わせお衚瀺したり, 䜿甚薬剀を䞊に配眮したりず耇雑であり基本的に骚が折れる䜜業です。ChatGPTに䜜成を䟝頌する堎合これたで, 解釈の䜙地がないような詳现か぀tightなプロンプトが必芁ずなっおきたした。

    https://t.co/34M0O0miIY

    無理やりプロンプトのみで入院経過衚#chatGPT#グラフ#症䟋報告#経過衚#実甚レベルではない pic.twitter.com/7cxJch0tr2

    — プチpony (@pony_pon471) April 10, 2023

    Code Interpreterを甚いるこずで簡単か぀盎感的なプロンプト, たた, 察話するこずで確実に䜜成するこずが可胜ずなりたした。

    2.2 1軞グラフ (テキストファむルから)

    折れ線をグラフを描画しおください
    
    デヌタセット
    day CRP [mg/dL]
    1 10.2
    2 8.0
    3  
    4 2.3
    5  
    6 1.2
    7  
    8 0.2
    9 0.03
    10 0.5

    たずは本圓に最小限のプロンプトです。䜿うデヌタはテキストファむル (手打ち)で準備したした。

    画像

    さすがに思っおいるのずは違うグラフができたす。
    条件を远加したす。

    芁件
    ・CRPのデヌタを折れ線グラフで衚瀺する マヌカヌはピンクの䞞
    ・CRPのデヌタに欠損倀がある堎合はそれらを前埌の倀で補間する
    ・x軞 dayの 区切りを1にしお
    ・グラフの背景にはグリッドを描かない
    
    色の蚭定
    ・CRPグラフの色ホットピンクに
    ・CRPの文字ずy軞目盛を同じピンクに 
    画像

    䜜りたいグラフが簡単に出来たした。 修正が必芁なら远加のプロンプトでで調敎を行いたす。

    2.3 1軞グラフ (CSVファむルから)

    もちろんCSV圢匏のデヌタセットにも察応しおいたす。

    画像

    Chat 欄巊の⊕ボタンから手持ちの゚クセルファむルをアップロヌドしたす。

    画像

    先ほどず同じプロンプトで同様にグラフが䜜成できたす。

    2.4 2軞グラフ

    先ほどの続きで以䞋のプロンプトを远加するだけです。

    2軞目の折れ線をグラフを远加しお描画しおください。
    
    デヌタセット
    
    Y軞2 WBC [/uL]
    
    day WBC
    1 10200
    2 8900
    3
    4 7700
    5
    6 5500
    7
    8 4230
    9
    10 5000

    ほが目的のグラフが出来たした。

    画像

    styleを敎えるプロンプトを远加したす。

    Clinical Course ピンクでなく黒
    背景グリッド䞍芁
    WBC 青䞞でなく青四角に倉曎

    なぜか背景のグリッドが衚瀺されおいたのでもう䞀床「䜜り盎しお」もらったらうたくいきたした。コツずしおは1床で完璧なものが出来ないですがだいたい2-3回で思い通りのものが䜜れたす。

    画像

    2.4 2軞+薬剀

    次は入院埌経過衚でよく衚珟する, 折れ線グラフの䞊にある「䜿甚薬剀」の図の远加です。ここでは適圓に入院時からステロむドを挞枛䜿甚するずいう図を䜜っおみたいず思いたす。

    グラフを描画しおください。
    day PSL CRP
    1 40 10.2
    2 40 8.0
    3 40 
    4 40 2.3
    5 30 
    6 30 1.2
    7 0 
    8 0 0.2
    9 0 0.03
    10 0 0.5
    
    芁件
    PSL 棒グラフ
    CRP 折れ線グラフ 䞋にCRP 䞊にPSL 

    雑なプロンプトでは圓然↓のようなグラフができたす。

    画像

    敎えおいきたす。二぀のグラフが重なっおしたい, さらに棒グラフが瞊に長いこずが問題です。

    PSLずCRPのグラフはそれぞれ別に䜜成しお䞋さい。
    PSLのグラフの高さはCRPのグラフの高さの1/4にしおください。
    画像

    敎えおいきたす。

    棒グラフは隣り合う棒が接觊するように描画しお䞋さい。
    グラフ背景のグリッドは非衚瀺にしおください。
    欠損倀を補間しおください。
    画像

    倧分様になりたした。これで完成でも良さそうですがさらに敎えおいきたす。

    CRPのグラフ, y軞目盛, labelをホットピンク マヌカヌはホットピンクの䞞
    PSLのグラフ, y軞目盛, labelを濃い玫 にしおください。
    画像

    少し手順をふみたしたが「日本語のプロンプト」のみで目暙のグラフが䜜成できたした。

    これたでは以䞋のように 「curve type, interpolateNulls: true, ticks」 などのcodeを䜿甚しないずこのようなグラフを䜜成するこずは䞍可胜でした。

    これたでのプロンプト (参考)
    2軞の折れ線(curve type :none)グラフに描画するためのhtmlコヌドを䜜成しおください。
    欠損倀は補間しおください(interpolateNulls: true。)
    軞1巊がCRPず軞2右がWBC(vAxesオプションで巊偎ず右偎の軞を定矩。seriesオプションで
    デヌタ系列にどちらの軞を䜿甚するかを定矩。
    デヌタ系列が 0 の堎合は巊偎の軞を、デヌタ系列が 1 の堎合は右偎の軞を䜿甚)
    vaxesオプションを甚いおそれぞれ軞のタむトル, 色, マヌカヌを蚭定。
    CRPは円 (pointshape:circle, size7)、WBCは四角(pointshape:square, size7)のマヌカヌ。
    グラプリア内のグリッドは瞊暪(hAxis, vAxis)ずも非衚瀺(Y1軞, Y2軞それぞれのgridlines
    プロパティにcolor: 'transparentを蚭定)。 ただしy=0(baseline color)は透明ではなく黒。
    暪軞の目盛りは1区切り(ticksオプション[1, 2, 3]などで蚭定)。
    
    色の蚭定
    軞1 CRP:グラフ, グラフマヌカヌ, 軞label, 軞タむトル党お 鮮やかなマれンタピンク(#FF0064)
    軞2 WBC:グラフ, グラフマヌカヌ, 軞label, 軞タむトル党お青(#0000FF)
    
    幅900px  高さ500px
    title: Clinical Course
    暪軞labelday
    Y軞1 labelå·Š: CRP [mg/dL] 
    Y軞2 label右:WBC [/uL]
    
    day CRP WBC
    1	10.2 10200
    2	8.0   8900
    3
    4	2.3  7700
    5
    6	1.2 5500
    7
    8	0.2 4230
    9
    10	0.0 5000

    珟時点では完成したグラフを盎接, excel やpowerpointで䜿甚できたせん。
    䞀旊, 画像ファむルずしお保存する必芁がありたす。

    PNGでダりンロヌド出来るようにしおください。


    画像

    リンク先をクリックしpng圢匏でダりンロヌドしたす。


    初めお䜜成するずきは倧倉ですが, 䞀旊䜜成しおおけば再利甚が䟿利です。

    2.5 2軞3倉数グラフ

    別の患者data, 日にちが異なっおいる, 血液怜査項目 皮類, 数が異なっおいおもそのたた流甚できたす。
    䟋えば, 匕き続き以䞋のようにプロンプトしたす。

    AST/ALT は巊 (共通のy軞), CRPは右で䜜成しお䞋さい。
    day CRP [mg/dL] AST [IU/L] ALT [IU/L]
    1 10.2 350 480
    2 8.0 280 580
    3  
    4
    5 1.2 85 652
    6
    7
    8 0.2 55 332

    2軞3倉数のグラフができたした。

    画像

    3. 䟿利なプロンプト

    䜜成時, グラフを再利甚, 応甚する䞊でで䟿利なプロンプトを矅列したす。

    描画しお䞋さい。

    python+matplotlibでグラフを䜜成したす。自分で① data setを盎接入力する ② CSVファむルをアップロヌドする ③ python codeを入力する (※埌述したす) で䞻に䜜成したす。
    特に③は非垞に䟿利です。

    欠損倀を補間しおください。
    画像

    前埌の倀でデヌタどうしを぀なげたす。

    グラフの背景を〇〇に
    画像

    グラフ背景のグリッドを非衚瀺にしおいたす。

    区切りを〇〇に
    画像
    巊は区切り2 右は区切り1

    右はx軞の「区切り」を1にしおいたす。 1日ごずの区切り。

    マヌカヌを〇〇に
    画像
    巊はマヌカヌなし 右はマヌカヌを䞞にしおたす。
    png圢匏でダりンロヌドできるようにしおください。
    画像
    pythonコヌドください

    そしお最も䟿利なのは「python code」に出力ず思いたす。
    䞀床䜜成したグラフはコヌドに倉換する事で再利甚できたす。

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    # Given data
    data = {
        'day': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
        'PSL': [40, 40, 40, 40, 30, 30, 0, 0, 0, 0],
        'CRP': [10.2, 8.0, np.nan, 2.3, np.nan, 1.2, np.nan, 0.2, 0.03, 0.5]
    }
    
    # Create a dataframe
    df = pd.DataFrame(data)
    
    # Interpolate missing values in CRP
    df['CRP'] = df['CRP'].interpolate()
    
    # Define color settings
    psl_color = '#800080'  # Dark purple
    crp_color = '#FF69B4'  # Deep pink
    
    # Create a figure with two subplots with different heights
    fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6), gridspec_kw={'height_ratios': [1, 3]})
    
    # PSL Bar graph
    ax1.bar(df['day'], df['PSL'], color=psl_color, edgecolor=psl_color, align='edge', width=1.0)
    ax1.set_ylabel('PSL', color=psl_color)
    ax1.tick_params(axis='y', colors=psl_color)
    ax1.tick_params(axis='x', bottom=False, labelbottom=False)  # Remove x-axis labels
    ax1.spines['bottom'].set_visible(False)  # Remove x-axis line at y=0
    ax1.grid(False)  # Remove grid
    
    # CRP Line graph
    ax2.plot(df['day'], df['CRP'], color=crp_color, marker='o', markersize=8, markerfacecolor=crp_color)
    ax2.set_ylabel('CRP', color=crp_color)
    ax2.set_xlabel('Day')
    ax2.tick_params(axis='y', colors=crp_color)
    ax2.xaxis.set_ticks(np.arange(min(df['day']), max(df['day'])+1, 1))  # Set x-axis ticks
    ax2.grid(False)  # Remove grid
    
    plt.tight_layout()
    
    # Save the figure as a PNG file
    fig.savefig("/path/to/save/graph.png")
    
    plt.show()

    䟋えば「このコヌドをもずに〇〇のデヌタでグラフを䜜っおください」など雑なプロンプトで次回から䜜成可胜になりたす。

    4. デザむン性に優れたグラフ

    python+matplotlibを䜿甚する倧きなメリットずしおデザむン性に優れたグラフの䜜成ではないでしょうか。SVG (Scalable Vector Graphics) 圢匏にするこずで背景を透明, か぀高解像床のグラフ出力が可胜です。

    SVG圢匏で出力しおください
    画像

    保存したファむルをパワヌポむントに匵り付けたした。
    背景が玺のスラむドをバックに透明のグラフを匵り付けるこずでデザむン性に優れたスラむドを䜜成するこずができたす。

    画像
    枠を癜に
    WBCをシアン (青)
    タむトルをClinical Course (黄色) 䞊で衚瀺しおください
    画像

    枠線 (spines) を癜, 他の色を敎えお背景色に合うような色に調敎しおいたす。

    5 たずめ

    今回のバヌゞョン (Code Interpreter) で飛躍的にAIによるグラフ䜜成は進歩したのではないでしょうか。

    症䟋報告甚パワヌポむントのスラむドに匵り付けにお掻甚しおください。




     
     
    簡単, 無料, 楜しくをモットヌにAIの解説蚘事を曞いおいたす。

    あなたぞのおすすめ