1. ã¯ããã«
ããã«ã¡ã¯ããã³ã¢ã»ãã¯ããã¸ã®å°æ³ã§ããããã³ã¢ã»ãã¯ããã¸ãã¯NTTãã³ã¢ã®æ©è½åæ ä¼ç¤¾ã®ä¸ã¤ã§ããã主ã«NTTãã³ã¢ã®R&Dæ¥åãåæ ãã¦ãã¾ãããã®ä¸ã§ãç§ã¯ãã³ã¢ã«ããããã¼ã¿æ´»ç¨ä¿é²ã«é¢ããå 製éçºããæ°ããªæ©æ¢°å¦ç¿(ML)æè¡ã®åç¨åã«é¢ããç ç©¶éçºãè¡ã£ã¦ãã¾ãã
æ¨å¹´ã¯ãStreamlitã§ã³ã¼ãã¨UIãã¹ãããªãããããã®ãã¦ãã¦ãã¾ã¨ãã¦ã¿ããã¨é¡ãã¦Streamlitã«é¢ãããã¦ãã¦ãæç¨¿ãã¾ããããä»å¹´ã¯ãã®ç¶ç·¨ã¨ãã¦éãå¦çãå®è¡ããéã®UXãåä¸ãããæ¹æ³ã«ãã©ã¼ã«ã¹ãã¦ãStreamlitã®æ©è½ã使ãè¾¼ãã å®è£ ããç´¹ä»ã§ããã°ã¨æãã¾ãã
æ¬è¨äºã¯ãå··ã®Webãµã¤ãã§ããç´¹ä»ããã¦ããå ¥éçãªStreamlitã¢ããªã®å®è£ ãããã䏿©è¸ã¿è¾¼ãã§ãããUI/UXã«ãã ãã£ããã¼ã¿æ´»ç¨ã¢ããªãä½ããããã«ãªããããã¨èãã¦ãããã¼ã¿ãµã¤ã¨ã³ã¹ãAI/MLçéã®Pythonã¦ã¼ã¶ã対象ã¨ãã¦ãã¾ãã
2. éãå¦çããã¤Streamlitã¢ããªã§UXãåä¸ãããã«ã¯
Streamlitãåªãã¦ããç¹ã¯ããã¼ã¿ãµã¤ã¨ã³ãã£ã¹ããã¯ããã¨ããPythonã®ã³ã¼ãã£ã³ã°ã¹ãã«ãæããã¨ã³ã¸ãã¢ãããã¼ã¿ã®åæçµæãéè¨çµæããã¸ãã¹ãµã¤ãã®ã¡ã³ãã«ç´ æ©ãwebã¢ããªã¨ãã¦è¦ãããã¨ãã§ãããã¨ããç¹ã§ããStreamlitã¯åºæ¬çã«ã¦ã¼ã¶ããã®UIæä½ããã度ã«ãã¼ã¸å ¨ä½ããªãã¼ãããã·ã³ãã«ãªä½ãã«ãªã£ã¦ãã¾ãããã ããã®ã·ã³ãã«ãããã«ããã¼ã¸å ã«éãå¦çãå ¥ã£ã¦ããã¨ãä½åº¦ãã¦ã¼ã¶ãå¾ ããã¦ãã¾ããã¨ã«ãªãã¾ãããã¼ã¿ã®åæãéè¨ã§ã¯éãå¦çããã°ãã°çºçããããããã®èª²é¡ã¯UXã«å¤§ããå½±é¿ãã¦ãã¾ãã¾ããããã§æ¬è¨äºã§ã¯ãå°éã®Pythonã³ã¼ãã§çµ±ä¸æã®ããUIã®ã¢ããªãå®è£ ã§ããã¨ããStreamlitã®å¼·ã¿ãæ´»ããã¤ã¤ãéãå¦çãå«ã¾ãã¦ãã¦ãUXãåä¸ãããå®è£ ãã¯ããã¯ã¨ãã¦ãä»å¹´æ°ãã«Streamlitã«æè¼ãããããã©ã°ã¡ã³ããæè¡ãæ¡ç¨ãã¦ã³ã¼ããæçåãããã¨ã§å¾ ã¡æéã使¸ããå®è£ ãããã³ããUIãã¯ãªã¢ããããã¨ã§å¾ ã¡æéã«ã¦ã¼ã¶ãç»é¢æä½ãã¦ãã¾ããã¨ã鲿¢ããå®è£ ãã®2ã¤ãç´¹ä»ãã¾ãã
3. ã¢ããªã®ã³ã¼ããæçåãã
Streamlitã®å¤§ããªç¹å¾´ã®1ã¤ã¯ããã¦ã¼ã¶ããã®UIæä½ããã£ããã«é½åº¦ã³ã¼ãå
¨ä½ãåå®è¡ããããã¨ããã·ã³ãã«ãªä»çµã¿ã§ãããã®ä»çµã¿ãStreamlitã®ã³ã¼ããç´æçã«çè§£ãæãã¨ãããã¨ã«å¤§ããè²¢ç®ãã¦ãã䏿¹ã§ãéã«ãããç½ããã¦ãã³ã¼ãå
ã«é«è² è·ãªãã¼ã¿å¦çãåå¨ããå ´åã«ããã¦ãUIæä½ã®åº¦ã«ã¦ã¼ã¶ã«é·ãå¾
ã¡æéãå¼·ãããã¨ã«ãªããã¢ããªã®åä½ãã¢ã¿ã¢ã¿ãããã¨ããåé¡ã«ç´é¢ãããã¨ã«ãªãã¾ãããã®å¯¾çã¨ãã¦Streamlitã«ã¯å¾æ¥ããst.session_state
ãst.cache_data
ãç¨ããæ¹æ³ãç¨æããã¦ãã¾ããã2024å¹´ãããã«æ°ãã«ããã©ã°ã¡ã³ããã追å å°å
¥ããã¾ãããããã©ã°ã¡ã³ããã¯ã2024å¹´4æã®Ver.1.33.0ã§st.experimental_fragment
ã¨ãã¦è©¦é¨çã«å°å
¥ãããå¾ã2024å¹´7æã®Ver.1.37.0ã«ã¦æ£å¼ã«st.fragment
ã¨ãã¦å°å
¥ããã¾ããããã®å¾ã®ãã¼ã¸ã§ã³ã¢ããã§ãçã
ã¨ãã°ä¿®æ£ãæ½ãããæè¿ã§ã¯å®å®ãã¦ä½¿ç¨ã§ããããã«ãªã£ã¦ããå°è±¡ã§ãã
ããã©ã°ã¡ã³ãããã©ã®ãããªæ©è½ããä¸è¨ã§è¨ãã°ãå
¥åã¦ã£ã¸ã§ããã®æä½ã«ããåå®è¡ãããç¯å²ãã³ã¼ãå
¨ä½ã§ãªãä¸é¨ã®ã¿ã«éå®ããæ©è½ã§ããæ¢åã®st.session_state
ãst.cache_data
ã¯ããå¦ççµæãã¹ãã¢ãããã¨ã«ããé«è² è·ãªãã¼ã¿å¦çãã¹ããããããã¨ããææ³ã®æ©è½ã§ããããã³ã¼ããåå®è¡ãããç¯å²ã決ããããæ©è½ãå°å
¥ããããã¨ã§ãã¦ã¼ã¶ãå¾
ã¡æéããè§£æ¾ãã鏿è¢ãå¢å ãããã¨ã«ãªãã¾ããå
·ä½çãªä½¿ç¨æ¹æ³ã§ãããæä½ãããã¨ã§ã³ã¼ãã®åå®è¡ï¼ä»¥ä¸ããªã©ã³ã¨å¼ã¶ï¼ãçºçããç¯å²ãå¶éãããå
¥åã¦ã£ã¸ã§ãããå«ãã³ã¼ãã®ä¸é¨ã颿°ã¨ãã¦åãåºãããã¤ããã®åãåºãã颿°ããã³ã¬ã¼ã¿@st.fragment
ã§ãã³ã¬ã¼ãããã ãã§ãã以ä¸ã®2ã¤ã®ãµã³ãã«ã¢ããªã使ã£ã¦å
·ä½çã«èª¬æãã¾ãã
ï¼ãã©ã°ã¡ã³ãæªé©ç¨ã®ãµã³ãã«ã¢ããªï¼
import streamlit as st from time import sleep OPTION = ("â ãã", "â¡ãã", "â¢ãããµ", "â£ãµãã") st.subheader("ãã©ã°ã¡ã³ãæªé©ç¨", divider='gray') with st.spinner("é«è² è·ã®è¨ç®ãå®è¡ä¸ã§ã..."): sleep(3) # é«è² è·ãªå¦çãæ¨¡æ¬ããã¹ãªã¼ã st.pills("1ã¤é¸æãã¦ãã ãã", OPTION) st.button("決å®")

ãã¡ãã®1ã¤ç®ã®ã¢ããªã§ã¯ãé«è² è·ãªå¦çãæã¤ãã¼ã¸ã«ããã¦ãã¦ã¼ã¶ããã®å
¥åãåãä»ããç¶æ³ã模æ¬ãã¦ãã¾ãããã®ã³ã¼ãã®å ´åã024å¹´11æã®Ver.1.40.0ã§è¿½å å°å
¥ããã鏿UIã®st.pills
ï¼ãã«UIï¼ãã¦ã¼ã¶ãæä½ãã度ã«ãªã©ã³ãçºçããé½åº¦é·ãæéï¼3ç§ï¼å¾
ããããã¨ã«ãªã£ã¦ãã¾ãã¾ããããã«ãã©ã°ã¡ã³ããé©ç¨ãããã¨ã§ãå¾
ã¡æéãè§£æ¶ãããã¨ãã§ãã¾ãã以ä¸ã®ã³ã¼ããä¸ã®ã³ã¼ãã¨æ¯è¼ããªããã覧ãã ããã
ï¼ãã©ã°ã¡ã³ãé©ç¨æ¸ã¿ã®ãµã³ãã«ã¢ããªï¼
import streamlit as st from time import sleep OPTION = ("â ãã", "â¡ãã", "â¢ãããµ", "â£ãµãã") @st.fragment def step_n(): st.pills("1ã¤é¸æãã¦ãã ãã", OPTION) st.subheader("ãã©ã°ã¡ã³ãé©ç¨æ¸ã¿", divider='gray') with st.spinner("é«è² è·ã®è¨ç®ãå®è¡ä¸ã§ã..."): sleep(3) # é«è² è·ãªå¦çãæ¨¡æ¬ããã¹ãªã¼ã step_n() st.button("決å®")

ãã¡ãã®2ã¤ç®ã®ã¢ããªã§ã¯ãUIãè¨è¿°ããã³ã¼ããåãåºãã¦é¢æ°åããä¸ã§ãã©ã°ã¡ã³ããé©ç¨ãããã¨ã§ãã¦ã¼ã¶ã«ããUIã®æä½ãããã«ã±ã¨ããã³ã¼ãã®åå®è¡ç¯å²ãåUIãè¨è¿°ããã颿°ã®ç¯å²å ã«å¶éãããã¨ãã§ããããã«ãªãã¾ããå®éã«è©¦ãã¦ããã ãã¨ããã«UIãæä½ãã¦ããªã©ã³ã«ä¼´ãå¾ ã¡æéãçºçããªããã¨ããããã¾ãã以ä¸ãç°¡åãªä¾ã§ç´¹ä»ãã¾ãããããããå®è£ ä¾ã§ãã
ä¸ç¹æ³¨æäºé
ãããã¾ãããã©ã°ã¡ã³ããã颿°ã®å
é¨ã§è¡ã£ãst.session_state
ï¼ä»¥ä¸ãç¶æ
夿°ã¨å¼ã¶ï¼ã®å¤æ´ããã©ã°ã¡ã³ãã®å¤é¨ãã¤ã¾ãã°ãã¼ãã«ã«åæ ããããã«ã¯ããã©ã°ã¡ã³ããã颿°å
ã§ã®st.rerun()
ã®å®è¡ããããã¯ããã©ã°ã¡ã³ãå¤ã§ã¦ã¼ã¶ããã®UIã®æä½ã«ãããªã©ã³ãå¿
è¦ã§ãããã©ã°ã¡ã³ããããUIãæä½ããå¾ã«ãå¥éç¨æãããã¿ã³ãªã©ã§èªãã¨å
¨ä½ããªã©ã³ããããããªã¤ããã¨ãªã£ã¦ããã°ç¹ã«åé¡ã¯çããªãã¨æãã¾ãã
å°ãé£ãããã¨ãæ¸ãå ãã¦ããã¾ãã¨ããã©ã°ã¡ã³ãããUI颿°ããã¹ãããï¼ã¤ã¾ãããã©ã°ã¡ã³ããã颿°ã®ä¸ã§ãå¥ã®ãã©ã°ã¡ã³ããã颿°ãå¼ã³åºãï¼ãã¨ã許容ããã¦ããããã§ãããã®éãst.rerun(scope="fragment")
ãç¨ãããã¨ã§ãªã©ã³ããç¯å²ãã³ã³ããã¼ã«ãããã¨ãã§ããããã§ãã³ã¼ãã®å·¥å¤«æ¬¡ç¬¬ã§ã¯å¾æ¥ã®Streamlitãããéå±¤ã®æ·±ã髿©è½ãªUIãæ§ç¯ã§ããå¯è½æ§ãç§ãã¦ãããã§ãã
ã¾ããst.fragment
ã¨åæã«ãªãªã¼ã¹ããããã®ã¨ãã¦st.dialog
ã¨ãããã®ãããã¾ãããã¡ããä½¿ãæ¹ãæ©è½çã«ã¯st.fragment
ã¨åããªã®ã§ãããUIã¨ãã¦ã¯ã¢ã¼ãã«ãã¤ã¢ãã°ï¼ããããã¢ãããããå°ããã®ã¦ã£ã³ãã¦ï¼ã¨ãã¦è¡¨ç¤ºããã¾ããããã¦ã¼ã¶ã®æ³¨æãå¼ãã¦å
¥åãã¦ãããããå
容ã«ã¤ãã¦ã¯ãã¡ãã使ãæãããã¾ãã
4. å¾ ã¡æéã«ãããæ®åUIãã¯ãªã¢ãã
åè¿°ã®å·¥å¤«ãæ½ãã¦ããå°ãªãã¨ãæåã®ä¸åº¦ã¯ã¦ã¼ã¶ã«å¾ ã£ã¦ãããå¿ è¦ãããã¾ããããã§å¾ ã¡æéä¸ã«è¡¨ç¤ºãããå 容ã«ãç¦ç¹ãå½ã¦ããã¨æãã¾ããStreamlitã§ã¯ããªã©ã³ãçºçããå ´åãUIåæç»ãå®äºããã¾ã§ã¯ç´åã«è¡¨ç¤ºããã¦ããUIãèã表示ãç¶ããï¼ä»¥ä¸ãæ®åUIã¨å¼ã¶ï¼ä»æ§ã¨ãªã£ã¦ãããã¨ã¯ãåç¥ã®æ¹ãå¤ããã¨æãã¾ããããã¯ããã¿ã³ã®ããã«ã¦ã¼ã¶ãæä½å¯è½ãªã¦ã£ã¸ã§ããã«ã¤ãã¦ãå½ã¦ã¯ã¾ãã¾ãããã®ãããã¦ã¼ã¶ããªã©ã³å¾ã®åæç»å®äºãå¾ ã£ã¦ããéã«ãèã表示ããã¦ããæ®åUIãæä½ãããã¨ãã¦ãã¾ãå¯è½æ§ãããã¾ãããã®å ´åãã¦ã¼ã¶ã¯èªåã®æä½ãã¢ããªã«ä¼ãããã¦ããªãã¨æãã¦ãã¾ããå¾ ã¡æéã«å ãã¦UXãããã«ä½ä¸ããã¦ãã¾ãã¾ãããã®äºè±¡ãåé¿ããããã«ããªã©ã³ãçºçããã¿ã¤ãã³ã°ã§å³åº§ã«æ®åUIãæ¶å»ãã¦ãã¾ãããã¨ããã®ããã®ã»ã¯ã·ã§ã³ã§ãä¼ãããããã¦ãã¦ã§ãããã®å¯¾å¦çã®å¹æã確èªãããã¨ãã§ãããµã³ãã«ã¢ããªãç´¹ä»ãã¾ãã
ï¼å¾ ã¡æéã«ãããæ®åUIã®ã¯ãªã¢ã確èªãããµã³ãã«ã¢ããªï¼
import streamlit as st from time import sleep def ui_clear(ph): ph.empty() sleep(.1) # ä¸ã®emptyãæå¹ã«ããããã®ãã¸ã㯠st.suheader("å¾ ã¡æéã«ãããæ®åUI", divider='blue') with (ph := st.empty()).container(): with st.spinner("åå¦çãå®è¡ä¸..."): sleep(3) st.info("åå¦çå®äºå¾ã«è¡¨ç¤ºãããUIç¸å½") st.button("ãªã©ã³ï¼ æ®åæ¾ç½®") st.button("ãªã©ã³ï¼ æ®åæ¶å»", on_click=ui_clear, args=(ph,))

ä¸è¨ã¢ããªã®åä½ã説æãã¾ããããªã©ã³ï¼ æ®åæ¾ç½®ããã¿ã³ãæ¼ããå ´åã¯ãåå¦çãå®äºããã¾ã§ç´åã®ãåå¦çå®äºå¾ã«è¡¨ç¤ºãããUIç¸å½ãã®æ®åUIãèãã¦ã£ã³ãã¦å ã«è¡¨ç¤ºããåæç»å®äºã¾ã§ç¶ç¶ãã䏿¹ãããªã©ã³ï¼ æ®åæ¶å»ããã¿ã³ãæ¼ããå ´åã¯ããã¿ã³æ¼ä¸ç´å¾ã«ã¦ã£ã³ãã¦å ã®æ®åUIããããã«ã¯ãªã¢ããããã¨ãããããã«ãªããã¨æãã¾ãã
ã³ã¼ãã®ä¸èº«ã«ã¤ãã¦ç°¡åã«è§£èª¬ãã¾ããããªã©ã³ï¼ æ®åæ¶å»ããã¿ã³ã«ã¯ãã³ã¼ã«ããã¯é¢æ°ãè¨å®ãã¦ããããã®ã³ã¼ã«ããã¯é¢æ°ã§ãã¿ã³æ¼ä¸æã«æ®åUIãã¯ãªã¢ããã¨ããã®ãåºæ¬çãªå®è£
æ¹éã§ããã¾ãã颿°ui_clear
ããæ®åUIãã¯ãªã¢ããããã®ã³ã¼ã«ããã¯é¢æ°ã§ãããã®é¢æ°ã¯å¼æ°ph
ã§ã¯ãªã¢å¯¾è±¡ã®UIã³ã³ãããåãåããph.empty()
ã§ã¯ãªã¢ãå®è¡ãã¾ãããã®ãããæ¶å»ããã対象ã®ã®UIãUIã³ã³ããã¨ãã¦ã³ã¼ã«ããã¯é¢æ°ã«æ¸¡ãã¦ããããã¨ããã¤ã³ãã§ããããããããã ãã ã¨ããã¯ã¨ã³ãã§åä½ããJavaScriptã®å®è¡ã¿ã¤ãã³ã°ã¨ã®é¢ä¿æ§ãªã®ãæå¾
éãã«UIãã¯ãªã¢ãããã¨ãã§ãã¾ãããããã§æ®åUIã¯ãªã¢ããã¾ãåä½ããããã«sleep(.1)
ã¨ãããã¸ãã¯ãå ãã¦ãã¾ãã䏿¹ãã¢ããªæ¬ä½ã®ã³ã¼ãã§ã¯ããªã©ã³ï¼ æ®åæ¶å»ããã¿ã³ã®å¼æ°on_click
ã§ã³ã¼ã«ããã¯é¢æ°ã¨ãã¦å
ã®é¢æ°ãå¼ã³åºãããã«æå®ãã¦ãã¾ãããªããon_click
ã§æå®ããã³ã¼ã«ããã¯é¢æ°ã«å¯¾ãã¦å¼æ°ã渡ãã¦ãããããã«ã¯å¼æ°args
ãç¨ãã¾ãããargs
ã«ã¯å¿
ãã¿ãã«(tuple)ã§å¼æ°ãæå®ããå¿
è¦ãããã¾ãããã®ãããph
ã¨ããåä¸ã®å¼æ°ã渡ãããå ´åã§ãã(
ãã¨ã,)
ãã§æ¬ã£ã¦ãã¾ããã¯ãªã¢å¯¾è±¡ã®UIã³ã³ããph
ã¯ãã¢ããªæ¬ä½ã®ã³ã¼ãåé ã®with
å¥ã§å®ç¾©ãã¦ãã¾ãã
5. ã¹ãããbyã¹ãããã®éåã«ãé©ç¨ãã¦ã¿ã
ãã®ã»ã¯ã·ã§ã³ã¯ä»é²çãªä½ç½®ä»ãã§ãã®ã§ãæ¨å¹´ç´¹ä»ããã¹ãããbyã¹ãããUIã«å¯¾ããä»åç´¹ä»ããå®è£ ã追å ããéåãç´¹ä»ãã¾ãã
ï¼ãã©ã°ã¡ã³ãã¨UIã³ã³ããã®ã¯ãªã¢ãæ¡ç¨ããã¹ãããbyã¹ãããUIã®éåï¼
import streamlit as st from streamlit import session_state as ss from time import sleep VIEW = "View" STEP = ["ã¹ããã1", "ã¹ããã2", "ã¹ããã3"] if VIEW not in ss: ss.update({VIEW: STEP[0]}) def update(ph, **kwargs): ph.empty() sleep(.1) ss.update(**kwargs) @st.fragment def step0(): # ã¹ããã1ã®UI ... @st.fragment def step1(): # ã¹ããã2ã®UI ... @st.fragment def step2(): # ã¹ããã3ã®UI ... lt, rt = st.columns([5,1]) lt.title("ã¢ããªã®ã¿ã¤ãã«") rt.button("ãªã»ãã", on_click=ss.clear) with (ph := st.empty()).container(): if ss[VIEW] == STEP[0]: with st.spinner(f"ã{STEP[0]}ãã®åå¦çä¸..."): ... # ã¹ããã1ã®åå¦ç step0() st.button("次ã¸", on_click=update, args=(ph,), kwargs={VIEW: STEP[1]}) if ss[VIEW] == STEP[1]: with st.spinner(f"ã{STEP[1]}ãã®åå¦çä¸..."): ... # ã¹ããã2ã®åå¦ç step1() st.button("次ã¸", on_click=update, args=(ph,), kwargs={VIEW: STEP[2]}) if ss[VIEW] == STEP[2]: with st.spinner(f"ã{STEP[2]}ãã®åå¦çä¸..."): ... # ã¹ããã3ã®åå¦ç step2() st.button("çµäº", on_click=update, args=(ph,), kwargs={VIEW: STEP[0]})
ä¸è¨ã®ã¾ã¾ã§ã¯åä½ããããã¨ã¯ã§ãã¾ããããç°¡åã«ä¸è¨ã®éåã³ã¼ãã®å
容ã解説ãã¾ããå®éã«åä½ãããå ´åã¯ã...
ãã®é¨åãé©åã«åãã¦å®è¡ãã¦ã¿ã¦ãã ããã
- 颿°
update
ã¯ã次ã®ã¹ãããã¸UIãé·ç§»ããããã¿ã³ã«ç¨ããã³ã¼ã«ããã¯é¢æ°ã§ãã弿°ã§åãåã£ãUIã³ã³ãããã¯ãªã¢ããã¨ã¨ãã«ãã¥ã¼ãå¶å¾¡ããç¶æ 夿°ã®å¤ãæ´æ°ãã¦ç´å¾ã«éå§ããããªã©ã³ã«åãã¾ãã - åã¹ãããã®UIããã©ã°ã¡ã³ãããããã«ããããã颿°ã¨ãã¦å®ç¾©ãã¦ãã¾ããå¾ ã¡æéçºçã®åå ã¨ãªããããªå¦çã¯ãã®é¢æ°å ã«ã¯è¨è¿°ããªãããã«ãã¾ããUIãæ§æããã«ããã£ã¦å¦çã®çµæãç¨ããå ´åã¯ãé©å®å¼æ°ãä»ãã¦åãåããã¨ãå¯è½ã§ãã
- ã¢ããªæ¬ä½ã®ã³ã¼ãã§ã¯ç¶æ
夿°
ss[VIEW]
ã®å¤ã«åºã¥ãif
æã«ã¦ã¹ããããã¨ã«åå¦çã¨UIãè¨è¿°ãã¦è¡ãã¾ããåå¦çã«é¢ãã¦ã¯st.spinner
ã®with
å¥å ã«è¨è¿°ãããã¨ã§ã¡ãã»ã¼ã¸ä»ãã®ã¹ããã¼ãã¦ã¼ã¶ã«æç¤ºãã¦å¾ ã¡ç¶æ ã§ãããã¨ãã¦ã¼ã¶ã«ç¥ããã¾ããã¾ããã¹ãããéã§UIï¼ãã¥ã¼ï¼ãé·ç§»ããéã®å¾ ã¡æéã«ããã¦æ®åUIã表示ããç¶ããªãããã«ãåé ã§å¤æ°ph
ãå®ç¾©ãã¦UIã³ã³ããåãã以éã®UIæç»ã®ã³ã¼ããå ¨ã¦ãã®with
å¥å ã«åãã¦ãã¾ãã
6. ã¾ã¨ã
ä»åã®è¨äºã§ã¯ãé«è² è·ãªå¦çãä¼´ãStreamlitã¢ããªã®UXãåä¸ããããã¯ããã¯ã¨ãã¦ããã³ã¼ãã®æçåãããã³ãUIã³ã³ããã®ã¯ãªã¢ãã«é¢ããå®è£ æ¹æ³ãå ·ä½çã«ç´¹ä»ãã¦ãã¾ããããããã®ãã¯ããã¯ãé§ä½¿ãã¦ããèªèº«ã§çã¿åºãããã¼ã¿åæï¼ãã¼ã¿å¯è¦åï¼AI/MLéçºã®ææãå¿«é©ãªä½¿ç¨æãåããWebã¢ããªã«ãã¦ã¦ã¼ã¶ã«ã¹ãã¼ãã£ã¼ã«å±ãã¦ããã ããã¨ã§ãã¿ãªããã®ã¾ããã§ã®ãã¼ã¿ããªãã³ãªæææ±ºå®ã»ãã¸ãã¹ã®å¹çåãçºå±ã«ç¹ãã£ã¦ããã¨å¬ããã§ãã