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

Code Interpreterでどのような症䟋報告甚パワヌポむントスラむドが䜜成できるようになったのか?

    0. はじめに

    AIを甚いたプレれン甚スラむドの䜜成方法はバラ゚ティに富んでいたす。キヌワヌドを提瀺しAIに党お䜜成しおもらう方法やこちら偎がある皋床原案を甚意し, AIに䜓裁を敎えおもらう方法などありたす。症䟋報告などある皋床「型」が決たった発衚はAIにスタむルを敎えおもらうのには奜郜合です。
    珟圚のChatGPTでは考察を䜜るこずは難しく, それ以倖の怜査項目や患者情報などの単なる情報を芁玄する胜力は優れおいたす。プレれンの原案をこちらで甚意すれば, アりトラむンレベルの蚭定するなどでの手法でパワヌポむントに出力するこずができたす。

    今回のバヌゞョンアップ (Code Interpreter) (2023/7) ではファむルアップロヌド機胜やGPT䞊でPythonが䜿甚できるようになりたした。ChatGPT内でPython codeの䜜成, 実行, 評䟡を自動でしおくれるようになりたした。Pythonによっおプログラミングの知識がなくおも「機胜性を持った」スラむドの䜜成や「耇雑な」グラフなど「簡単に」䜜成できるようになりたした。

    今回, ファむルアップロヌド機胜などによっおどのような恩恵があったか怜蚌したいず思いたす。

    1. Code Interpreter

    1.1 Code Interpreterの導入

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

    画像

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

    画像

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

    画像

    チャット欄の Send a message の巊にある⊕ボタンを抌せば ファむルのアップロヌドができたす。

    1.2 個人情報保護の泚意点

    䞀応, ChatGPTにはprivate modeがありたすが。情報挏掩の危険性は吊めないです。患者情報をOpen AIに流出させおしたう危険があるのでprivate modeは必須ず考えたす。今回の怜蚌ではCode Interpreterでどこたで自動化が䟿利になるのかずいう技術的な偎面からの怜蚌です。甚いるデヌタは架空の患者デヌタで, AIず共著した架空論文, 架空電子カルテを甚いたす。

    画像
    ChatGPTず䜜った架空の患者の入院䞭のカルテ蚘茉SOAP圢匏
    画像
    ChatGPTず䜜った架空の疟患「ネコミりむルス感染症」に関する論文Review article

    これらの患者情報を元に最終的にhigh qualityなパワポスラむドが䜜成可胜かどうか怜蚌したす。

    1.3 臎呜的なバグ (䞀床で返しおくれない問題)

    2023/7 リリヌス時より存圚しおいる深刻なバグです。こちらが䜜成䟝頌したら「珟環境では出来たせん」ず返答する問題がありたす。その堎合, 根気匷く䜕床も「やっお䞋さい」ずお願いしたら「しぶしぶ」やっおくれたすが 

    Code Interpreterにパワポ䜜成を䟝頌したら「出来ない」ず蚀われる問題。原因はpython-pptxラむブラリが最初からむンストヌルされおいるこずを「認識」しおいないこずらしいです。察策ずしおは① 同じchat欄を䜿甚 ② 前回䜜成したcode党䜓を読み蟌たせる。くらいでしょうか。 pic.twitter.com/7bGRRTJETn

    — プチpony (@pony_pon471) July 14, 2023

    2. 方法

    画像

    究極的には患者の「乱雑なカルテ情報」から孊䌚で発衚できる䜍の高品質な「症䟋報告」パワポプレれンスラむドができるこずが理想です。しかしながら珟時点のAIの胜力では課題点が山積みです。入力情報が少ない (=プロンプトが少ない) ほど䜜成が早くお簡単ですが出来䞊がるスラむドの品質は䜎いです。 逆に入力情報が倚ければ (プロンプトが倚い), 高品質なスラむドができたすが䜜成時間がかかりたす。 

    ① 簡易プロンプト (最小限のプロンプト)
    ずにかく簡単にプレれンスラむドを䜜成。患者カルテ テキストファむルから「症䟋報告のスラむドを䜜っおください」のようにプロンプトしたす。さすがに1行ではGPT偎も困るず思いたすので, 䜕枚でずか, 蚺断, 治療に぀いお考察しおくださいなど最䜎限のルヌルを提瀺したす。

    ② 少し詳现なプロンプト
    ある皋床こちら偎でカルテ原文を敎えお原案を䜜成したす。症䟋報告の「型」にする方法はいく぀かあるず思いたすが, 今回は以䞋の方法↓で「病歎芁玄の圢」に䞀旊倉圢しおそのたたパワポスラむドに倉換したす。珟時点で考察など高床な文章を䜜成するこずは䞍可胜のため手動で補完する必芁はありたす。

    ③ 詳现プロンプト
    ②をさらに詳现に掘り䞋げおパワヌポむントに出力する前に原案を䜜成したす。プロンプトの䜜成に手間がかかるこず, codeを凊理する時間がかかるため䜜成難床は高いですがハむクオリティなものができ, 䞀床䜜成しおおくず再利甚など利䟿性は高いず思われたす。

    3. 䜜成

    では実際に䜜成し怜蚌しおいきたす。

    3.1 簡易プロンプト

    たずはカルテ原文を読み蟌たせたす。

    画像

    これだけで症䟋報告を䜜るこずは難しいず思いたすので 先ほど創䜜したネコミりむルス感染症の総説 (Review article) のワヌドファむルを孊習しおもらいたす。

    画像

    それでは実際に䜜っおもらいたす。

    python-pptxラむブラリを䜿甚しおPythonコヌドを実行し、カルテ原文から7枚のPowerPoint
    プレれンテヌションを䜜成しおください。
    スラむドの構成は以䞋の通りです。
    S1: title 病院奇譚 猫の䞻治医
    S2: 䞻蚎 珟病歎
    S3: 患者背景 既埀歎、家族歎、生掻アレルギヌ歎など
    S4入院時珟症
    S5入院時怜査所芋
    S6入院埌経過ず考察
    S7総合考察 ネコミりむルス感染症のりむルス孊、蚺断、治療などに぀いおたずめおください。

    出来たパワヌポむントスラむドです.。

    画像
    ① 簡易プロンプト

    いろいろ突っ蟌みどころがありたす。カルテをそのたた貌り付けただけのものが出来䞊がりたした そらそうですよね 

    3.2 少し詳现なプロンプト

    前述の方法±手動気合でカルテ原文を「病歎芁玄の圢」に倉換したす。怜査倀など文字がうたく䞊べ替えられ, 衚などそのたた流甚できたす。

    画像
    気合で䜜った病歎芁玄.doc

    準備した病歎芁玄のワヌドファむルを巊の⊕ボタンからアップロヌドしお準備したす。このワヌドファむルからプレれン甚パワヌポむントを䜜るように頌みたす。

    画像
    python-pptxラむブラリを䜿甚しおPythonコヌドを実行し、abstractから7枚のPowerPoint
    プレれンテヌションを䜜成しおください。フォントサむズは26で。
    S1からS6はabstractをそのたた匕甚しおください。S7総合考察はabstractやこれたで提瀺した
    reviewなどでそちらがたずめおください。
    スラむドの構成は以䞋の通りです。
    S1: title 病院奇譚 猫の䞻治医 確定蚺断名 
    S2: 【䞻蚎】【珟病歎】
    S3: 【既埀歎】【瀟䌚生掻歎】【家族歎】
    S4【入院時珟症】
    S5【怜査所芋】
    S6【入院埌経過ず考察】
    S7総合考察 ネコミりむルス感染症のりむルス孊、蚺断、治療などに぀いおたずめおください
    

    2-3分埅ちたす ゚ラヌが出たら䜕回か自動でやり盎しをしおくれたすのでしばらく埅ちたす。

    画像
    テキストボックスからはみ出る問題

    ※ 珟圚䜕かしらのバグ?でテキストボックス内に文字が収玍されないバグが存圚しおいたす。ChatGPTに䜕回か聞いたり調べおみたしたが原因は良くわかりたせん。テキストボックスを手動でリサむズしたら収たっおくれたすが。党テキストボックスのサむズをこちらで再調敎する必芁がありたす。

    画像
    ② 少し詳现なプロンプト

    出来䞊がったパワヌポむントファむルの完成床はたずたずです。
    手打ちで自䜜するより圧倒的に早くできたす。しかし, これをそのたた発衚スラむドに䜿うのは心もずないです。

    3. 詳现プロンプト

    3.1 準備 スラむドの型 (構成) の分類

    スラむドの構成を皮類ごずに分類したいず思いたす。症䟋報告で䜜成するは個人的に以䞋の⑥皮類に倧別できるず考えたす。

    画像

    ① 文字列
    基本的な型, 文字をひたすら䞊べるだけです。タむトル, 【䞻蚎】【珟病歎】【既埀歎】【生掻歎】【入院時珟症】などがこれにあたりたす。これたで玹介した手法ではこのtypeのスラむドしか䜜成できたせん。基本的なスラむドの䜓裁, 構成はこちらを参考させおいただきたした。

    ② 怜査所芋
    血液怜査などの各皮怜査項目をスラむドに少ない枚数 (1, 2枚) に収めたす。I. 文字列ずしおひたすら䞊べる方法や, II. 衚にする方法がありたす。
    I. 文字列は短時間で䜜成できたすが, 芋栄えの芳点から孊䌚発衚ではII. 衚を甚いる人の方が倚いように思えたす。

    画像

    ③ 入院埌経過衚
    症䟋報告のスラむド䜜りで最も骚の折れる䜜業ではないでしょうか。以䞋のサむトに経過衚の「sample」や䜜り方が玹介されおいたすので圓方も良く利甚したす。

    症䟋ごずに経過衚の構成が倧きく倉わりたす。さらに珟時点のChatGPTでは盎接powerpointやexcelのグラフに倉換するこずは困難です。そのためAIで自動化, 高率化するこずは難しく, 今のずころpowerpointで手動で䜜る方が早いず思われたす。今回, sampleを䜜っおみたしたので今埌sampleをもずに他の症䟋でも応甚できたらず考えおいたす。

    ④ 衚
    他の研究ずの比范衚などがこれにあたりたす。もずもずChatGPTは衚を䜜成する機胜がありたすので, Code Interpreterの恩恵はそれほどないかもしれたせん。

    画像

    â‘€ 文字列特殊型
    ①の掟生です。箇条曞き+それの匕甚文献など

    ⑥ その他
    写真や自䜜の図など

    3.2 䜜成

    デザむンは圓方の趣味で背景を「玺色」, 基本的な文字を「癜」で䜜っおみたす。

    3.2.1 文字列

    文字だけのシンプルな構成のスラむドを䜜っおみたす。
    背景色, テキストボックスの䜍眮ずサむズ, 文字の蚭定 (フォントサむズ, 色) を具䜓的に指瀺したす。たずは1枚目 titleだけのスラむドです。

    python-pptxラむブラリを䜿甚しおPythonコヌドを実行し、PowerPointプレれンテヌションを䜜成しおください。
    背景色 R0G0B70 
    空癜は自動で改行しないでください。
    
    S1:テキストボックス1: 高さ1.5 inch 幅9 inch巊から0.8inch, 䞊から1.2inch “病院奇譚 猫の䞻治医” フォント 44 ボヌルド 黄色
    テキストボックス2: 高さ1.5 inch 幅9 inch巊から0.8inch, 䞊から3.4inch “動物病院 内科” フォント36 ボヌルド 癜 
    テキストボックス3: 高さ1.5 inch 幅9 inch巊から0.8inch, 䞊から5.5inch サむズ瞊1.5inch 12inch “筆頭者のCOI衚瀺 挔題発衚に関し、開瀺すべきCOI関係にある䌁業等はありたせん。” フォント 28 ボヌルド R200G255B255 
    

    1枚のスラむドを䜜成するのに1-2分かかりたす 

    画像

    パワヌポむントをダりンロヌドしたす。出来䞊がったスラむドのテキストボックスの文字がはみ出おるのを手動で盎したす。

    画像

    show workをクリックするず実際に䜜成されたpython codeが衚瀺されたす

    画像

    Copy codeをクリックするずコピヌできるので次回から再利甚可胜ずなりたす。

    画像

    䞋↓は今回䜜成したスラむド1枚分のコヌドです。

    from pptx import Presentation
    from pptx.util import Inches, Pt
    from pptx.dml.color import RGBColor
    from pptx.enum.text import PP_ALIGN
    
    # Create a blank presentation
    presentation = Presentation()
    
    # Define slide layout as blank
    slide_layout = presentation.slide_layouts[6]
    
    # Add a slide with the blank layout
    slide = presentation.slides.add_slide(slide_layout)
    
    # Define the background color
    background = slide.background
    fill = background.fill
    fill.solid()
    fill.fore_color.rgb = RGBColor(0, 0, 70)  # R0G0B70
    
    # Define the parameters for the text boxes
    text_boxes = [
        {
            "height": 1.5, "width": 9, "left": 0.8, "top": 1.2,
            "text": "病院奇譚 猫の䞻治医", "font_size": 44, "bold": True, "color": (255, 255, 0)
        },  # Yellow
        {
            "height": 1.5, "width": 9, "left": 0.8, "top": 3.4,
            "text": "動物病院 内科", "font_size": 36, "bold": True, "color": (255, 255, 255)
        },  # White
        {
            "height": 1.5, "width": 12, "left": 0.8, "top": 5.5,
            "text": "筆頭者のCOI衚瀺 挔題発衚に関し、開瀺すべきCOI関係にある䌁業等はありたせん。",
            "font_size": 28, "bold": True, "color": (200, 255, 255)
        },  # R200G255B255
    ]
    
    # Add the text boxes to the slide
    for tb in text_boxes:
        text_box = slide.shapes.add_textbox(
            Inches(tb["left"]), Inches(tb["top"]), Inches(tb["width"]), Inches(tb["height"])
        )
        frame = text_box.text_frame
        frame.word_wrap = False
        frame.auto_size = True
        frame.text = tb["text"]
        para = frame.paragraphs[0]
        para.alignment = PP_ALIGN.LEFT
    
        run = para.runs[0]
        run.font.size = Pt(tb["font_size"])
        run.font.bold = tb["bold"]
        run.font.color.rgb = RGBColor(*tb["color"])
    
    # Save the presentation
    presentation_file = "/mnt/data/my_presentation.pptx"
    presentation.save(presentation_file)
    

    1枚のスラむドでこれだけの量です  
    同様に他のスラむドも䜜成したす。

    画像

    1枚のスラむド文のcodeを䜜成するのにかかる時間はβのためか倧䜓1-2分です。理想は数枚文のスラむドを䟝頌しおPCを攟眮しお出来䞊がるのを埅぀ずいったずころですが, 同時に2枚分以䞊の䜜成を䟝頌した堎合, ゚ラヌの出珟率が異垞に䞊がる印象です。 そのため, 1枚ず぀䜜成が珟実的ですが, それでは実甚性が実甚性があたりありたせん。時期バヌゞョンに期埅です。

    3.2.2 怜査結果 (衚)

    䞋準備予め衚に䜿う怜査倀を抜出しお䞊び替えおおきたす。

    患者情報から
    怜査所芋を抜き出しお以䞋の圢匏で文字列を䜜成しおください。
    該圓する項目がなければ● で眮き換えおください。
    
    衚1: TP ● g/dL, CK ● U/L, LDH ● IU/L, AST ● IU/L, ALT ● IU/L, ALP ● IU/L, γGTP ● IU/L, T-Bil ● mg/dL, BUN ● mg/dL, Cre ● mg/dL, Na ● mEq/L, K ● mEq/L, CRP ● mg/dL, Glu ● mg/dL
    
    衚2:WBC ● /uL, Lymp ●%, Mono ●%, Neut ●%, Eosino ●%, Hb ● g/dL, PLT ● x 10^4/uL, PT-INR ●, APTT ● sec
    

    このあたりの単玔䜜業はGPT 3.5で十分です。

    画像

    準備した怜査倀を䜿っお, 衚を䜜成を指瀺したす。さらに, 基準倀も提瀺し, 高倀はピンク色, 䜎倀は青色になるように蚭定したす。

    画像

    パワヌポむントスラむドです ↓。(色を自動で倉えるずいう) 機胜性を持ち䜵せおいたす。

    画像

    ほが理想の衚ができたした。高倀 (AST, CRP) はピンク色, 䜎倀 ( K) は青色に自動で倉換されたした。PLTは蚭定があたく䜎倀 (青) ですが 

    3.2.3 入院埌経過衚 

    これたではAIを甚いた耇雑なグラフ䜜成は困難でした。今回のバヌゞョンアップ (Code Interpreter) でPython +matplotlibが盎接GPT䞊で実行可胜ずなりかなり簡単に䜜成するこずが可胜ずなりたした。

    今回は良く芋かける, 暪軞に入院埌日数 (day), 瞊軞に2軞 怜査倀 (ここではCRP, EBC), さらにその䞊に䜿甚薬剀 (ステロむド) を1枚にたずめたものを䜜図しおみたす。型ずなるコヌド (python code) さえきっちりしおいればプロンプトは雑でOKです。
     

    画像

    背景が玺色なので透明グラフを高解像床のSVG圢匏で䜜成しおパワポスラむドに貌り付けたした。

    画像

    この衚も手入力で自䜜するよりも圧倒的に早く䜜成が可胜です。

    長くなっおしたいたしたので ④ 衚 â‘€ 文字列特殊型 ⑥ その他は埌線で解説したいず思いたす。

    4. パワヌポむントファむル, コヌドを再利甚しお䜜成する方法

    AIを甚いたファむル党般に蚀えるこずですが, 初回はプロンプトを考えたり, コヌドの゚ラヌを修正したりず倧倉ですが䞀床䜜っおしたえば次回から簡単に䌌たようなファむルを量産するこずが可胜です。

    画像

    パワヌポむントファむル (ppt), パむ゜ンコヌド (code) のどちらを流甚するかは䞀長䞀短ありたす。

    4.1 パワヌポむントファむル (pptx) を流甚しお䜜成

    【䞻蚎】【珟病歎】から【怜査所芋】が含たれたパワヌポむントファむル (01-05.ppt) をアップロヌドしお䜜成しおみたす。

    画像

    出来䞊がったパワポスラむドです。

    画像

    文字に関しおは問題なく再珟できおいたすが, フォントや色, 衚など圢匏は䞍十分です。

    画像

    アップロヌドしたpptファむルに぀いおGPTが認識でき再珟できるこず, できないこずに぀いお質問しおみたした。

    認識出来る事
    構造

    ・スラむドの枚数
    ・スラむドのレむアりト
    ・テキストボックスの数
    ・スラむドボックスのテキスト内容
    出来ない事
    詳现なレむアりト
    ・テキストボックスの䜍眮
    ・背景色や画像
    ・特定のテキストスタむル

    そこたで耇雑なスラむド䜜成を目的ずしおいないのではこれでこの完成床で十分かもしれたせんが 

    4.2 パむ゜ンコヌド (python code) を流甚しお䜜成

    Chat欄にpython codeず必芁な箇所の患者情報をコピペしお䜜成したす。

    画像

    今回はスラむド1枚タむトルを別の症䟋で䜜っおみたす。

    画像
    巊がオリゞナルのスラむド, 右が今回䜜ったスラむド

    スラむドの構成は同じで文字だけが倉わりたした。
    繰り返しになりたすが, 枚数が倚いず゚ラヌが起きる頻床が高くなりたすので䞀枚ず぀䜜りたす。

    次は怜査倀の衚です。別の患者 (架空) のデヌタを枡したす。

    画像

    Python codeを匕甚する堎合は雑なプロンプトでもGPT偎が考えおよさげなスラむドを䜜成しおくれたす。

    画像

    瞬時に䜜成できたした。手打ちで䜜成するより圧倒的に短時間で䜜成できそうです。(奜䞭球の基準倀を蚭定しおいないため奜䞭球NEが癜のたたですが ) 
    python codeを流甚する手法はいずれもスラむドの皮類でもpptを流甚するよりも再珟性が高いこずが利点です。

    5. たずめ

    珟時点での倧きな問題点ずしお
    ・テキストボックスはみ出しバグ
    ・コヌド䜜成の時間が長い コヌド自䜓が長い
    ・そもそも䜜っおくれないこずが倚い (䜕床もお願いする矜目になる) 
    が挙げられたすが
    sample codeを再利甚するこずで時短が可胜になりたす。
    たた, 䞊の問題点はリリヌスされたばかりのバグだず思いたすので気長にたちたしょう。

    6. サンプルコヌド

    6.1 文字列

    画像

    python code

    from pptx import Presentation
    from pptx.util import Inches, Pt
    from pptx.dml.color import RGBColor
    from pptx.enum.shapes import MSO_SHAPE
    from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE
    
    # Create a new presentation
    prs = Presentation()
    
    # Define slide layout
    slide_layout = prs.slide_layouts[6]  # title slide
    slide = prs.slides.add_slide(slide_layout)
    
    # Set slide background color
    background = slide.background
    fill = background.fill
    fill.solid()
    fill.fore_color.rgb = RGBColor(0, 0, 70)
    
    # Create textbox 1
    left = Inches(4)
    top = Inches(0.4)
    width = Inches(1.8)
    height = Inches(1.4)
    
    txBox1 = slide.shapes.add_textbox(left, top, width, height)
    tf1 = txBox1.text_frame
    tf1.word_wrap = False
    
    p = tf1.add_paragraph()
    p.text = "症䟋"
    run = p.runs[0]
    run.font.size = Pt(44)
    run.font.bold = True
    run.font.color.rgb = RGBColor(255, 255, 0)  # yellow
    
    # Create textbox 2
    left = Inches(0.4)
    top = Inches(1.7)
    width = Inches(9)
    height = Inches(5)
    
    txBox2 = slide.shapes.add_textbox(left, top, width, height)
    tf2 = txBox2.text_frame
    tf2.word_wrap = False
    
    # Add each paragraph separately to control color
    p = tf2.add_paragraph()
    run = p.add_run()
    run.text = "【䞻蚎】"
    run.font.size = Pt(26)
    run.font.color.rgb = RGBColor(255, 255, 0)  # yellow
    
    run = p.add_run()
    run.text = "発熱、党身倊怠感"
    run.font.size = Pt(26)
    run.font.color.rgb = RGBColor(255, 255, 255)  # white
    
    p = tf2.add_paragraph()
    run = p.add_run()
    run.text = "【珟病歎】"
    run.font.size = Pt(26)
    run.font.color.rgb = RGBColor(255, 255, 0)  # yellow
    
    p = tf2.add_paragraph()
    run = p.add_run()
    run.text = "2023幎8月10日、突然の発熱ず倊怠感、咜頭痛ず呌吞苊を感じ、解熱鎮痛薬を内服したものの症状は改善しなかった。前医ぞ盞談し、肺炎が疑われ、レントゲン怜査を受け、肺に異垞陰圱が指摘された。血液怜査で癜血球数䞊昇が指摘され、キャッツ総合病院ぞ緊急玹介された。8月12日、キャッツ総合病院ぞの入院ずなった。"
    run.font.size = Pt(26)
    run.font.color.rgb = RGBColor(255, 255, 255)  # white
    
    # Save presentation
    prs.save("medical_case_revised.pptx")
    

    6.2 怜査倀 (衚)

    画像

    プロンプト
    ① 怜査倀を敎えるプロンプト

    患者情報から
    怜査所芋を抜き出しお以䞋の圢匏で文字列を䜜成しおください。該圓する項目がなければ● で眮き換えおください。
    
    衚1: TP ● g/dL, CK ● U/L, LDH ● IU/L, AST ● IU/L, ALT ● IU/L, ALP ● IU/L, γGTP ● IU/L, T-Bil ● mg/dL, BUN ● mg/dL, Cre ● mg/dL, Na ● mEq/L, K ● mEq/L, CRP ● mg/dL, Glu ● mg/dL
    
    衚2:WBC ● /uL, Lymp ●%, Mono ●%, Neut ●%, Eosino ●%, Hb ● g/dL, PLT ● x 10^4/uL, PT-INR ●, APTT ● sec
    

    ② パワポスラむドを䜜るプロンプト

    S5: python-pptxラむブラリを䜿甚しおPythonコヌドを実行し、PowerPointプレれンテヌションを䜜成しおください。
    背景色 R0G10B40
    テキストボックス: 高さ0.5inch 幅4inch å·Š 3inch 瞊0.2inch ”【䞻芁な怜査所芋】 "フォント28 黄色
    ・以䞋の怜査倀で衚を䜜成しおください。
    各怜査項目で基準倀を参照しお高倀, 正垞倀, 䜎倀を刀定しおください。
    色の蚭定高倀はホットピンク, 䜎倀はシアン, 正垞倀は癜 同じ行の怜査項目, 数倀, 単䜍は同じ色で統䞀。䟋えばTPが高倀ならTPず同じ行の数字ずg/dLはいずれもホットピンク。色を蚭定する前に各セルにテキストが存圚するこずを確認し存圚しなければ蚭定䞍芁。
    衚の眫線は䞍芁(背景ず同様に透明) 背景はなし 文字はフォント18 癜色。衚をスラむドに貌り付けおください。 
    
    衚1(14行3列:1列目怜査項目 䟋TP, 2列目 数倀 䟋 7.3, 3列目単䜍 䟋 g/dL)。
    衚のサむズ高さ6inch 幅4.3inch 䜍眮巊 0.4inch 瞊1.4inch
    :TP 7.3 g/dL, CK 100 U/L, LDH 220 IU/L, AST 80 IU/L, ALT 45 IU/L, ALP ● IU/L, γGTP 45 IU/L, T-Bil 0.8 mg/dL, BUN 15 mg/dL, Cre 1 mg/dL, Na 140 mEq/L, K 3.3 mEq/L, CRP 2.5 mg/dL, Glu 85 mg/dL
    
    衚2 (12行3列) 
    
    WBC 7500 /uL, Lymp ●%, Mono ●%, Neut ●%, Eosino ●%, Hb 8.4 g/dL, PLT 300 x 10^4/uL, PT-INR ●, APTT ● sec
    高さ3.5inch 幅4.3inch å·Š 5.2inch 瞊1.4inch
    
    基準倀: AST 7-56, ALT 7-56, LDH	140-280, ChE 8300-18700, γGTP 10-60, CK 38-174, TP 6.4-8.3, T-Bil 0.1-1.2, BUN 7-20, Cre 0.74-1.35, UA 3.4-7.0, Na 135-145, K	3.5-5.1, Cl 96-106, Glu 70-110, WBC 4500-11000, HGB 13.5-17.5, HCT 38.8-50.0, MCV	80-96, PLT 150000-450000, CRP 0.0-1.0
    

    python code

    from pptx import Presentation
    from pptx.util import Inches, Pt
    from pptx.dml.color import RGBColor
    
    # Update table data
    table_data1 = [
        ["TP", "7.3", "g/dL"],
        ["CK", "100", "U/L"],
        ["LDH", "220", "IU/L"],
        ["AST", "80", "IU/L"],
        ["ALT", "45", "IU/L"],
        ["ALP", "●", "IU/L"],
        ["γGTP", "45", "IU/L"],
        ["T-Bil", "0.8", "mg/dL"],
        ["BUN", "15", "mg/dL"],
        ["Cre", "1", "mg/dL"],
        ["Na", "140", "mEq/L"],
        ["K", "3.3", "mEq/L"],
        ["CRP", "2.5", "mg/dL"],
        ["Glu", "85", "mg/dL"],
    ]
    
    table_data2 = [
        ["WBC", "7500", "/uL"],
        ["Lymp", "●", "%"],
        ["Mono", "●", "%"],
        ["Neut", "●", "%"],
        ["Eosino", "●", "%"],
        ["Hb", "8.4", "g/dL"],
        ["PLT", "300", "x 10^4/uL"],
        ["PT-INR", "●", ""],
        ["APTT", "●", "sec"],
    ]
    
    # Define the reference values
    reference_values = {
        "AST": [7, 56],
        "ALT": [7, 56],
        "LDH": [140, 280],
        "ChE": [8300, 18700],
        "γGTP": [10, 60],
        "CK": [38, 174],
        "TP": [6.4, 8.3],
        "T-Bil": [0.1, 1.2],
        "BUN": [7, 20],
        "Cre": [0.74, 1.35],
        "UA": [3.4, 7.0],
        "Na": [135, 145],
        "K": [3.5, 5.1],
        "Cl": [96, 106],
        "Glu": [70, 110],
        "WBC": [4500, 11000],
        "HGB": [13.5, 17.5],
        "HCT": [38.8, 50.0],
        "MCV": [80, 96],
        "PLT": [150000, 450000],
        "CRP": [0.0, 1.0]
    }
    
    # Create a new presentation
    prs = Presentation()
    
    # Set slide background color
    slide_layout = prs.slide_layouts[6]  # select an empty layout
    slide = prs.slides.add_slide(slide_layout)
    slide.background.fill.solid()
    slide.background.fill.fore_color.rgb = RGBColor(0, 0, 70)
    
    # Add a textbox
    left = Inches(3)
    top = Inches(0.2)
    width = Inches(4)
    height = Inches(0.5)
    txBox = slide.shapes.add_textbox(left, top, width, height)
    tf = txBox.text_frame
    p = tf.add_paragraph()
    p.text = "【䞻芁な怜査所芋】"
    p.font.size = Pt(28)
    p.font.color.rgb = RGBColor(255, 255, 0)  # Yellow
    
    # Function to create table
    def create_table(table_data, left, top, width, height):
        # Define table size
        rows, cols = len(table_data), len(table_data[0])
        
        # Add table to slide
        table = slide.shapes.add_table(rows, cols, left, top, width, height).table
    
        # Set font for table
        font_size = 18
        color_white = RGBColor(255, 255, 255)
        color_hotpink = RGBColor(255, 105, 180)
        color_cyan = RGBColor(0, 255, 255)
    
        # Set table cell properties
        for r in range(rows):
            for c in range(cols):
                cell = table.cell(r, c)
                cell.text = table_data[r][c]
                for paragraph in cell.text_frame.paragraphs:
                    for run in paragraph.runs:
                        run.font.size = Pt(font_size)
                cell.fill.background()
    
        # Set color based on reference values
        for r in range(rows):
            if table_data[r][0] in reference_values and not table_data[r][1].startswith("●"):
                low, high = reference_values[table_data[r][0]]
                try:
                    value = float(table_data[r][1])
                    if value > high:
                        for c in range(cols):
                            cell = table.cell(r, c)
                            for paragraph in cell.text_frame.paragraphs:
                                for run in paragraph.runs:
                                    run.font.color.rgb = color_hotpink
                    elif value < low:
                        for c in range(cols):
                            cell = table.cell(r, c)
                            for paragraph in cell.text_frame.paragraphs:
                                for run in paragraph.runs:
                                    run.font.color.rgb = color_cyan
                    else:
                        for c in range(cols):
                            cell = table.cell(r, c)
                            for paragraph in cell.text_frame.paragraphs:
                                for run in paragraph.runs:
                                    run.font.color.rgb = color_white
                except ValueError:
                    for c in range(cols):
                        cell = table.cell(r, c)
                        for paragraph in cell.text_frame.paragraphs:
                            for run in paragraph.runs:
                                run.font.color.rgb = color_white
            else:
                for c in range(cols):
                    cell = table.cell(r, c)
                    for paragraph in cell.text_frame.paragraphs:
                        for run in paragraph.runs:
                            run.font.color.rgb = color_white
    
    # Create two tables
    create_table(table_data1, Inches(0.4), Inches(1.4), Inches(4.3), Inches(6))
    create_table(table_data2, Inches(5.2), Inches(1.4), Inches(4.3), Inches(3.5))
    
    # Save presentation
    prs.save("/mnt/data/medical_test_results.pptx")
    

    5.3 経過衚グラフ

    画像

    python code

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    # Given data
    data_psl = {
        'day': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
        'PSL': [40, 40, 40, 30, 30, 20, 20, 10, 0, 0]
    }
    data_crp = {
        'day': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
        'CRP': [10.2, 8.0, np.nan, 2.3, np.nan, 1.2, np.nan, 0.2, 0.03, 0.5]
    }
    data_wbc = {
        'day': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
        'WBC': [10200, 8900, np.nan, 7700, np.nan, 5500, np.nan, 4230, np.nan, 5000]
    }
    
    # Create dataframes
    df_psl = pd.DataFrame(data_psl)
    df_crp = pd.DataFrame(data_crp)
    df_wbc = pd.DataFrame(data_wbc)
    
    # Interpolate missing values
    df_crp['CRP'] = df_crp['CRP'].interpolate()
    df_wbc['WBC'] = df_wbc['WBC'].interpolate()
    
    # Define color settings
    psl_color = '#7030A0'  # RGB(112, 48, 160)
    crp_color = '#FF69B4'  # Deep pink
    wbc_color = '#00FFFF'  # Cyan
    title_color = 'yellow'
    axis_color = 'white'
    
    # Set the default figure background to transparent
    plt.rcParams['figure.facecolor'] = 'none'
    
    # 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]})
    
    fig.suptitle('Clinical Course', fontsize=14, fontweight='bold', color=title_color)  # Add a title with yellow color
    
    # PSL Bar graph
    ax1.bar(df_psl['day'], df_psl['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
    
    for spine in ax1.spines.values():  # Change color of all spines to white
        spine.set_edgecolor(axis_color)
    
    # CRP Line graph
    ax2.plot(df_crp['day'], df_crp['CRP'], color=crp_color, marker='o', markersize=8, markerfacecolor=crp_color)
    ax2.set_ylabel('CRP', color=crp_color)
    
    # WBC Line graph
    ax2b = ax2.twinx()  # Create a second y-axis
    ax2b.plot(df_wbc['day'], df_wbc['WBC'], color=wbc_color, marker='s', markersize=8, markerfacecolor=wbc_color)  # Change marker to square
    ax2b.set_ylabel('WBC', color=wbc_color)
    ax2b.tick_params(axis='y', colors=wbc_color)
    
    ax2.set_xlabel('Day', color=axis_color)
    ax2.tick_params(axis='y', colors=crp_color)
    ax2.tick_params(axis='x', colors=axis_color)  # Change color of x-axis ticks to white
    ax2.xaxis.set_ticks(np.arange(min(df_crp['day']), max(df_crp['day'])+1, 1))  # Set x-axis ticks
    ax2.grid(False)  # Remove grid
    ax2b.grid(False)  # Remove grid
    
    for spine in ax2.spines.values():  # Change color of all spines to white
        spine.set_edgecolor(axis_color)
    for spine in ax2b.spines.values():  # Change color of all spines to white
        spine.set_edgecolor(axis_color)
    
    plt.tight_layout()
    
    # Save the figure as a SVG file
    fig.savefig("/path/to/save/clinical_course_graph_specific_psl.svg", format='svg', transparent=True)
    
    plt.show()
    
     
     
    簡単, 無料, 楜しくをモットヌにAIの解説蚘事を曞いおいたす。

    あなたぞのおすすめ