From 126974d1d83987c96abe62fbf43917423c7cb002 Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Tue, 29 Apr 2025 05:32:24 +0000 Subject: [PATCH 01/12] =?UTF-8?q?AIE=20=E7=AC=AC=E4=B8=80=E5=9B=9E?= =?UTF-8?q?=E5=AE=BF=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day1/01_streamlit_UI/app.py | 197 +++++++++++++++++++----------------- day1/02_streamlit_app/ui.py | 78 ++++++++------ 2 files changed, 153 insertions(+), 122 deletions(-) diff --git a/day1/01_streamlit_UI/app.py b/day1/01_streamlit_UI/app.py index dcfbe6fec..8f5491716 100644 --- a/day1/01_streamlit_UI/app.py +++ b/day1/01_streamlit_UI/app.py @@ -36,149 +36,160 @@ st.write(f"こんにちは、{name}さん!") # ボタン -# st.subheader("ボタン") -# if st.button("クリックしてください"): -# st.success("ボタンがクリックされました!") +st.subheader("ボタン") +if st.button("おめでとう"): + st.balloons() + st.success("happy") # チェックボックス -# st.subheader("チェックボックス") -# if st.checkbox("チェックを入れると追加コンテンツが表示されます"): -# st.info("これは隠れたコンテンツです!") +st.subheader("チェックボックス") +if st.checkbox("チェックを入れると追加コンテンツが表示されます"): + st.info("これは隠れたコンテンツです!") # スライダー -# st.subheader("スライダー") -# age = st.slider("年齢", 0, 100, 25) -# st.write(f"あなたの年齢: {age}") +st.subheader("スライダー") +age = st.slider("あなたの年齢は?", 0, 100, 25) +if age < 18: + st.write("未成年") +elif age < 65: + st.write("成人") +else: + st.write("高齢者") # セレクトボックス -# st.subheader("セレクトボックス") -# option = st.selectbox( -# "好きなプログラミング言語は?", -# ["Python", "JavaScript", "Java", "C++", "Go", "Rust"] -# ) -# st.write(f"あなたは{option}を選びました") +st.subheader("セレクトボックス") +option = st.selectbox( + "好きなプログラミング言語は?", + ["Python", "JavaScript", "Java", "C++", "Go", "Rust"] +) +st.write(f"あなたは{option}を選びました") # ============================================ # レイアウト # ============================================ -# st.header("レイアウト") +st.header("レイアウト") # カラム -# st.subheader("カラムレイアウト") -# col1, col2 = st.columns(2) -# with col1: -# st.write("これは左カラムです") -# st.number_input("数値を入力", value=10) -# with col2: -# st.write("これは右カラムです") -# st.metric("メトリクス", "42", "2%") +st.subheader("カラムレイアウト") +col1, col2 = st.columns(2) +with col1: + st.write("これは左カラムです") + st.number_input("数値を入力", value=10) +with col2: + st.write("これは右カラムです") + st.metric("あなたの入力した数", number) # タブ -# st.subheader("タブ") -# tab1, tab2 = st.tabs(["第1タブ", "第2タブ"]) -# with tab1: -# st.write("これは第1タブの内容です") -# with tab2: -# st.write("これは第2タブの内容です") +st.subheader("タブ") +tab1, tab2 = st.tabs(["第1タブ", "第2タブ"]) +with tab1: + st.write("これは第1タブの内容です") +with tab2: + st.write("これは第2タブの内容です") # エクスパンダー -# st.subheader("エクスパンダー") -# with st.expander("詳細を表示"): -# st.write("これはエクスパンダー内の隠れたコンテンツです") -# st.code("print('Hello, Streamlit!')") +# エクスパンダー +st.subheader("エクスパンダー") +with st.expander("アンケートに答える"): + name = st.text_input("お名前を入力してください") + feedback = st.text_area("ご意見・ご感想") + submit = st.button("送信") + if submit: + st.success(f"{name}さん、ご回答ありがとうございました!") + # ============================================ # データ表示 # ============================================ -# st.header("データの表示") +st.header("データの表示") # サンプルデータフレームを作成 -# df = pd.DataFrame({ -# '名前': ['田中', '鈴木', '佐藤', '高橋', '伊藤'], -# '年齢': [25, 30, 22, 28, 33], -# '都市': ['東京', '大阪', '福岡', '札幌', '名古屋'] -# }) +df = pd.DataFrame({ + '名前': ['田中', '鈴木', '佐藤', '高橋', '伊藤'], + '年齢': [25, 30, 22, 28, 33], + '都市': ['東京', '大阪', '福岡', '札幌', '名古屋'] +}) # データフレーム表示 -# st.subheader("データフレーム") -# st.dataframe(df, use_container_width=True) +st.subheader("データフレーム") +st.dataframe(df, use_container_width=True) # テーブル表示 -# st.subheader("テーブル") -# st.table(df) +st.subheader("テーブル") +st.table(df) # メトリクス表示 -# st.subheader("メトリクス") -# col1, col2, col3 = st.columns(3) -# col1.metric("温度", "23°C", "1.5°C") -# col2.metric("湿度", "45%", "-5%") -# col3.metric("気圧", "1013hPa", "0.1hPa") +st.subheader("メトリクス") +col1, col2, col3 = st.columns(3) +col1.metric("温度", "23°C", "1.5°C") +col2.metric("湿度", "45%", "-5%") +col3.metric("気圧", "1013hPa", "0.1hPa") # ============================================ # グラフ表示 # ============================================ -# st.header("グラフの表示") +st.header("グラフの表示") # ラインチャート -# st.subheader("ラインチャート") -# chart_data = pd.DataFrame( -# np.random.randn(20, 3), -# columns=['A', 'B', 'C']) -# st.line_chart(chart_data) +st.subheader("ラインチャート") +chart_data = pd.DataFrame( + np.random.randn(20, 3), + columns=['A', 'B', 'C']) +st.line_chart(chart_data) # バーチャート -# st.subheader("バーチャート") -# chart_data = pd.DataFrame({ -# 'カテゴリ': ['A', 'B', 'C', 'D'], -# '値': [10, 25, 15, 30] -# }).set_index('カテゴリ') -# st.bar_chart(chart_data) +st.subheader("バーチャート") +chart_data = pd.DataFrame({ + 'カテゴリ': ['A', 'B', 'C', 'D'], + '値': [10, 25, 15, 30] +}).set_index('カテゴリ') +st.bar_chart(chart_data) # ============================================ # インタラクティブ機能 # ============================================ -# st.header("インタラクティブ機能") +st.header("インタラクティブ機能") # プログレスバー -# st.subheader("プログレスバー") -# progress = st.progress(0) -# if st.button("進捗をシミュレート"): -# for i in range(101): -# time.sleep(0.01) -# progress.progress(i / 100) -# st.balloons() +st.subheader("プログレスバー") +progress = st.progress(0) +if st.button("進捗をシミュレート"): + for i in range(101): + time.sleep(0.01) + progress.progress(i / 100) + st.balloons() # ファイルアップロード -# st.subheader("ファイルアップロード") -# uploaded_file = st.file_uploader("ファイルをアップロード", type=["csv", "txt"]) -# if uploaded_file is not None: -# # ファイルのデータを表示 -# bytes_data = uploaded_file.getvalue() -# st.write(f"ファイルサイズ: {len(bytes_data)} bytes") -# -# # CSVの場合はデータフレームとして読み込む -# if uploaded_file.name.endswith('.csv'): -# df = pd.read_csv(uploaded_file) -# st.write("CSVデータのプレビュー:") -# st.dataframe(df.head()) +st.subheader("ファイルアップロード") +uploaded_file = st.file_uploader("ファイルをアップロード", type=["csv", "txt"]) +if uploaded_file is not None: + # ファイルのデータを表示 + bytes_data = uploaded_file.getvalue() + st.write(f"ファイルサイズ: {len(bytes_data)} bytes") + + # CSVの場合はデータフレームとして読み込む + if uploaded_file.name.endswith('.csv'): + df = pd.read_csv(uploaded_file) + st.write("CSVデータのプレビュー:") + st.dataframe(df.head()) # ============================================ # カスタマイズ # ============================================ -# st.header("スタイルのカスタマイズ") +st.header("スタイルのカスタマイズ") # カスタムCSS -# st.markdown(""" -# -# """, unsafe_allow_html=True) -# -# st.markdown('

これはカスタムCSSでスタイリングされたテキストです!

', unsafe_allow_html=True) +st.markdown(""" + +""", unsafe_allow_html=True) + +st.markdown('

これはカスタムCSSでスタイリングされたテキストです!

', unsafe_allow_html=True) # ============================================ # デモの使用方法 diff --git a/day1/02_streamlit_app/ui.py b/day1/02_streamlit_app/ui.py index e010ba78f..011eb7236 100644 --- a/day1/02_streamlit_app/ui.py +++ b/day1/02_streamlit_app/ui.py @@ -9,11 +9,7 @@ # --- チャットページのUI --- def display_chat_page(pipe): - """チャットページのUIを表示する""" - st.subheader("質問を入力してください") - user_question = st.text_area("質問", key="question_input", height=100, value=st.session_state.get("current_question", "")) - submit_button = st.button("質問を送信") - + # セッション状態の初期化(安全のため) if "current_question" not in st.session_state: st.session_state.current_question = "" @@ -24,6 +20,36 @@ def display_chat_page(pipe): if "feedback_given" not in st.session_state: st.session_state.feedback_given = False + # 回答が表示されるべきか判断 (質問があり、回答が生成済みで、まだフィードバックされていない) + if st.session_state.current_question and st.session_state.current_answer: + st.markdown( + f""" +
+ {st.session_state.current_question} +
+ """, + unsafe_allow_html=True + ) + + st.markdown( + f""" +
+ {st.session_state.current_answer} +
+ """, + unsafe_allow_html=True + ) + st.info(f"応答時間: {st.session_state.response_time:.2f}秒") + + """チャットページのUIを表示する""" + st.subheader("質問を入力してください") + user_question = st.text_area("質問", key="question_input", height=100, value=st.session_state.get("current_question", "")) + submit_button = st.button("質問を送信") + # 質問が送信された場合 if submit_button and user_question: st.session_state.current_question = user_question @@ -31,30 +57,24 @@ def display_chat_page(pipe): st.session_state.feedback_given = False # フィードバック状態もリセット with st.spinner("モデルが回答を生成中..."): - answer, response_time = generate_response(pipe, user_question) - st.session_state.current_answer = answer - st.session_state.response_time = response_time - # ここでrerunすると回答とフィードバックが一度に表示される - st.rerun() - - # 回答が表示されるべきか判断 (質問があり、回答が生成済みで、まだフィードバックされていない) - if st.session_state.current_question and st.session_state.current_answer: - st.subheader("回答:") - st.markdown(st.session_state.current_answer) # Markdownで表示 - st.info(f"応答時間: {st.session_state.response_time:.2f}秒") - - # フィードバックフォームを表示 (まだフィードバックされていない場合) - if not st.session_state.feedback_given: - display_feedback_form() - else: - # フィードバック送信済みの場合、次の質問を促すか、リセットする - if st.button("次の質問へ"): - # 状態をリセット - st.session_state.current_question = "" - st.session_state.current_answer = "" - st.session_state.response_time = 0.0 - st.session_state.feedback_given = False - st.rerun() # 画面をクリア + answer, response_time = generate_response(pipe, user_question) + st.session_state.current_answer = answer + st.session_state.response_time = response_time + # ここでrerunすると回答とフィードバックが一度に表示される + st.rerun() + + # フィードバックフォームを表示 (まだフィードバックされていない場合) + if not st.session_state.feedback_given: + display_feedback_form() + else: + # フィードバック送信済みの場合、次の質問を促すか、リセットする + if st.button("次の質問へ"): + # 状態をリセット + st.session_state.current_question = "" + st.session_state.current_answer = "" + st.session_state.response_time = 0.0 + st.session_state.feedback_given = False + st.rerun() # 画面をクリア def display_feedback_form(): From 30e362aaeacac858ca463d02fe767bef12ffb9e0 Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Tue, 29 Apr 2025 06:02:54 +0000 Subject: [PATCH 02/12] =?UTF-8?q?AIE=20=E7=AC=AC=E4=B8=80=E5=9B=9E?= =?UTF-8?q?=E5=AE=BF=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lecture-ai-engineering | 1 + 1 file changed, 1 insertion(+) create mode 160000 lecture-ai-engineering diff --git a/lecture-ai-engineering b/lecture-ai-engineering new file mode 160000 index 000000000..918e6187a --- /dev/null +++ b/lecture-ai-engineering @@ -0,0 +1 @@ +Subproject commit 918e6187a3d5faca6a09bbfb5659e3584a467cc7 From 56f9dd8005b046ff9a324e01dfa6f70bd7b3277e Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Wed, 21 May 2025 14:26:36 +0900 Subject: [PATCH 03/12] =?UTF-8?q?Add=20pytest=20for=20=E6=BC=94=E7=BF=922/?= =?UTF-8?q?main.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b4aad9943..4d074fb2d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,3 +39,7 @@ jobs: - name: Run model tests run: | pytest day5/演習3/tests/test_model.py -v + + - name: Run tests in 演習2/main.py + run: | + pytest day5/演習2/main.py -v From c91df9518d3ab05fa0049d5a67a3e619417dbf24 Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Wed, 21 May 2025 14:29:25 +0900 Subject: [PATCH 04/12] Add trigger for CI on push and PR --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4d074fb2d..aa0f42bb5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,8 +1,8 @@ name: ML Pipeline CI on: - # push: - # branches: [ main, master ] + push: + branches: [ main, master ] pull_request: branches: [ main, master ] From 94392dbbd0f792015f5e1377117b81ce96375187 Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Wed, 21 May 2025 14:31:09 +0900 Subject: [PATCH 05/12] Fix: correct on block for GitHub Actions --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index aa0f42bb5..21669aaa1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,7 +2,7 @@ name: ML Pipeline CI on: push: - branches: [ main, master ] + branches: [ main, master ] pull_request: branches: [ main, master ] From c83dd4e6cfad4572ba6c4b97c4bc61a73f0d5255 Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Wed, 21 May 2025 14:36:47 +0900 Subject: [PATCH 06/12] Add develop branch trigger for CI --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 21669aaa1..b84d30e11 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,9 +2,9 @@ name: ML Pipeline CI on: push: - branches: [ main, master ] + branches: [ main, master,develop ] pull_request: - branches: [ main, master ] + branches: [ main, master,develop ] jobs: test: From 7b6d3a5cd9481c87b2e7da5b61923efeecb03304 Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Wed, 21 May 2025 15:37:24 +0900 Subject: [PATCH 07/12] Fix GitHub Actions checkout for forked repo --- .github/workflows/test.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b84d30e11..6ddce3c5d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,20 +25,12 @@ jobs: - name: Lint with flake8 run: | - flake8 day5/演習3 --count --select=E9,F63,F7,F82 --show-source --statistics - flake8 day5/演習3 --count --exit-zero --max-complexity=10 --max-line-length=88 --statistics + flake8 day5/演習2 --count --select=E9,F63,F7,F82 --show-source --statistics + flake8 day5/演習2 --count --exit-zero --max-complexity=10 --max-line-length=88 --statistics - name: Format check with black run: | - black --check day5/演習3 - - - name: Run data tests - run: | - pytest day5/演習3/tests/test_data.py -v - - - name: Run model tests - run: | - pytest day5/演習3/tests/test_model.py -v + black --check day5/演習2 - name: Run tests in 演習2/main.py run: | From 082463c6c9253d2083edbb0134aea197f497504e Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Wed, 21 May 2025 15:39:22 +0900 Subject: [PATCH 08/12] Fix GitHub Actions checkout for forked repo --- .github/workflows/test.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6ddce3c5d..4e75d9c43 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,6 +11,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + + - name: Check out repository + uses: actions/checkout@v3 + with: + persist-credentials: false + - name: Set up Python uses: actions/setup-python@v4 From 51a0515588b769725bfac437b5df806430ea6f1f Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Wed, 21 May 2025 15:41:26 +0900 Subject: [PATCH 09/12] Remove broken submodule reference --- "day5/\346\274\224\347\277\2222/main.py" | 1 + .../models/titanic_model.pkl" | Bin 2418666 -> 2420746 bytes lecture-ai-engineering | 1 - 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 160000 lecture-ai-engineering diff --git "a/day5/\346\274\224\347\277\2222/main.py" "b/day5/\346\274\224\347\277\2222/main.py" index 776b70e75..2b256b6c5 100644 --- "a/day5/\346\274\224\347\277\2222/main.py" +++ "b/day5/\346\274\224\347\277\2222/main.py" @@ -11,6 +11,7 @@ import time import great_expectations as gx + class DataLoader: """データロードを行うクラス""" diff --git "a/day5/\346\274\224\347\277\2222/models/titanic_model.pkl" "b/day5/\346\274\224\347\277\2222/models/titanic_model.pkl" index 9e1859fdf9358e3ba9c3d67ad7f052bf7d055b64..02a80d86e685f873b5660fff3019bcd90d2b9b36 100644 GIT binary patch delta 31919 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 delta 32250 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Ν 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

Ci^^qDfn+8 zvZ|&y76@Lz`}uHJH-l$RL*GYgfTKBm-WS2?^=sI|nwxIY3pvPkFxSX`Lh-tmzYMFV z0^ZHm81SJQha*wMP{>|@eOH(goZ){rakT}-&k#5^fRF?xe-Sl(hi*%P6x@FoxMW90 z2+B(!%{mEVGp^y{AgGuun`p(8m=3Xo2Ik_EvOT!ADRk{w78wewr7Rk@9wi;uIYi`+ z*|?LFzxQ=e>u%&hj(>+NM|w7DLSnvzY8pz2Sc>0|F1?RjGOxA99rr3DSRKg_NOZC= z&B1N`)jK}mUO~D``?niZ?tn0KFXp2C>B*Q|(G{(v5L%sHT-G+wfUbOZfR0Pkod6Pj zBeNLPT2<2w_YI_kz6{2`Fn?pRr0?>!&Axi@7L4zK*TF-FD=^CN6))gPgU!aLmTEy;!K5)NN2 zxqTxI6dD#Jl|M7r=!9g2si4hnWKj{FKFyNH-rR@BLO*_Blu{EoqkZ6#QpFkVc_%yK z0B=L0dgbR@@ldFgABZ})f%1j$8WD)-5Y%aoEbNBNC~U0C#qrt%3uO`cI(@-1EqO1= zYaQ(3{JNmtRu^D{62dd?9>siKi03&(|JR2`DeT{9SkY zQDZ631cV=I)q*Xn!2{NjVmC#&=Pbf+(tZAR zzlakjl>2Ezuijks3w2KkgVB}fM)Z?%nwt`>y+WFkh~^Mc_9n|eB4SF}b6FHLY|El0 z_(%0t27S>Zc6wo>a`CI?nOVb{l-d)wAvrv$P_%FNZ)?0l!OnbvM|uB+KGQs zUaR`8$xGv~yW9aTXSX{-ogDtG?1VuFyG?b?C5y&_*8yT{~ z81l5SRusLPP%;9l;b6~iwW$X+%#!0mLAQNwoSPIuynT);9_VmR-h{#yw$HsqE1pGx Y9~<#9;bq1v39n?lx^4;lxZ4~52Zxy&SO5S3 diff --git a/lecture-ai-engineering b/lecture-ai-engineering deleted file mode 160000 index 918e6187a..000000000 --- a/lecture-ai-engineering +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 918e6187a3d5faca6a09bbfb5659e3584a467cc7 From 5bb3026613ae8462650ef03942a7d05a7c0d41dd Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Wed, 21 May 2025 15:43:59 +0900 Subject: [PATCH 10/12] Fix code formatting to pass black check --- .../\346\274\224\347\277\2222/black_check.py" | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git "a/day5/\346\274\224\347\277\2222/black_check.py" "b/day5/\346\274\224\347\277\2222/black_check.py" index 3158f952d..910a40c3a 100644 --- "a/day5/\346\274\224\347\277\2222/black_check.py" +++ "b/day5/\346\274\224\347\277\2222/black_check.py" @@ -1,7 +1,18 @@ +def say_hello(name): + print("Hello," + name + "!") # greet + + +def say_hello(name): + print("Hello," + name + "!") # greet + + +def add(a, b): + return a + b + + +def add(a, b): + return a + b + -def say_hello(name):print("Hello,"+name+"!") # greet -def say_hello(name):print("Hello," + name +"!") # greet -def add( a,b):return a+b -def add( a , b ):return a+b def add(a, b): - return a+b \ No newline at end of file + return a + b From 1c6f1d37a2d6ec157db4486559a6a2ca8ef3c933 Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Wed, 21 May 2025 15:48:47 +0900 Subject: [PATCH 11/12] =?UTF-8?q?Fix:=20=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "day5/\346\274\224\347\277\2222/main.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/day5/\346\274\224\347\277\2222/main.py" "b/day5/\346\274\224\347\277\2222/main.py" index 2b256b6c5..678bb9371 100644 --- "a/day5/\346\274\224\347\277\2222/main.py" +++ "b/day5/\346\274\224\347\277\2222/main.py" @@ -22,7 +22,7 @@ def load_titanic_data(path=None): return pd.read_csv(path) else: # ローカルのファイル - local_path = "data/Titanic.csv" + local_path = "/home/kisshi/AIE 課題/lecture-ai-engineering-master/lecture-ai-engineering/day5/演習2/data/Titanic.csv" if os.path.exists(local_path): return pd.read_csv(local_path) From f88156a1a60873e997c6ecc67a820d7987bcd4a5 Mon Sep 17 00:00:00 2001 From: Kisshi0801 Date: Wed, 21 May 2025 15:52:04 +0900 Subject: [PATCH 12/12] =?UTF-8?q?Fix:=20=E3=83=87=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "day5/\346\274\224\347\277\2222/main.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/day5/\346\274\224\347\277\2222/main.py" "b/day5/\346\274\224\347\277\2222/main.py" index 678bb9371..fc23ec0fb 100644 --- "a/day5/\346\274\224\347\277\2222/main.py" +++ "b/day5/\346\274\224\347\277\2222/main.py" @@ -22,7 +22,7 @@ def load_titanic_data(path=None): return pd.read_csv(path) else: # ローカルのファイル - local_path = "/home/kisshi/AIE 課題/lecture-ai-engineering-master/lecture-ai-engineering/day5/演習2/data/Titanic.csv" + local_path = os.path.join("day5", "演習2", "data", "Titanic.csv") if os.path.exists(local_path): return pd.read_csv(local_path)