
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
â ããpony (@pony_pon471) April 10, 2023
ç¡çããããã³ããã®ã¿ã§å ¥é¢çµé衚#chatGPT#ã°ã©ã#çäŸå ±å#çµé衚#å®çšã¬ãã«ã§ã¯ãªã pic.twitter.com/7cxJch0tr2
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 3322軞3倿°ã®ã°ã©ããã§ããŸããã

3. 䟿å©ãªããã³ãã
äœææ, ã°ã©ããåå©çš, å¿çšããäžã§ã§äŸ¿å©ãªããã³ãããçŸ åããŸãã
æç»ããŠäžãããpython+matplotlibã§ã°ã©ããäœæããŸããèªåã§â data setãçŽæ¥å
¥åãã â¡ CSVãã¡ã€ã«ãã¢ããããŒããã ⢠python codeãå
¥åãã (â»åŸè¿°ããŸã) ã§äž»ã«äœæããŸãã
ç¹ã«â¢ã¯éåžžã«äŸ¿å©ã§ãã
æ¬ æå€ãè£éããŠãã ããã
ååŸã®å€ã§ããŒã¿ã©ãããã€ãªããŸãã
ã°ã©ãã®èæ¯ãããã«
ã°ã©ãèæ¯ã®ã°ãªãããé衚瀺ã«ããŠããŸãã
åºåããããã«
å³ã¯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ã«ããã°ã©ãäœæã¯é²æ©ããã®ã§ã¯ãªãã§ããããã
çäŸå ±åçšãã¯ãŒãã€ã³ãã®ã¹ã©ã€ãã«åŒµãä»ãã«ãп޻çšããŠãã ããã