2024. 4. 23. 23:41ㆍ프로젝트/빵맛집 추천서비스 웹배포
01 버튼별 랜덤 스토어명 구현
- 군집별로 sample 함수를 이용해서 버튼에 가게명을 띄울 수 있었다.
- sample과 시리즈를 추출하는 iloc를 통해 가게명만 추출하는 코드가 아주 유용하다.
random_store = mode_file[mode_file['cluster'] == 0]['Store'].sample(n=3).iloc[0]
02 궁금한 점
1. 버튼 별로 key값을 주면 이 값을 어떻게 활용해서 해당하는 가게 설명을 뽑을 수 있을지?
2. 코드마다 주어진 key값이 없어도 잘 작동하는데 필수로 필요한 상황은 무엇인지?
3. 나도 on_click을 통해 첫 페이지에 버튼을 두 번 누르는 에러를 고쳐볼 수 있을지?\
4. 나는 CSS를 이용한 버튼 크기 늘리는 게 왜 안되는지? 상하 여백도 적용되지 않는다!
import streamlit as st
1. 버튼 클릭 시 실행될 함수 정의
def update_page_state(option_key):
st.session_state['selected_option'] = option_key
2. 버튼 배치
b1, b2, b3 = st.columns(3)
with b1:
st.button('빵맛', on_click=update_page_state, args=('bread_taste',), key="0")
with b2:
st.button('분위기', on_click=update_page_state, args=('atmosphere',), key="1")
with b3:
st.button('사진', on_click=update_page_state, args=('photo',), key="2")
3. 선택된 옵션에 따른 결과 출력
if 'selected_option' in st.session_state:
st.write(f"선택된 옵션: {st.session_state['selected_option']}")
-클릭 옵션 별로 작동을 돕는 코드를 참고해서 내 페이지를 만들어본다.
03 튜터님 피드백
# 클릭 문제
- 버튼을 클릭해서 세션 스테이트 페이지를 실행하는데 중복이 되는 것 같다.
- 함수를 하나 설정을 한다.
- 함수의 매개변수를 page변수를 받아오면 session_state에 저장하는 함수를 만든다.
- 버튼을 클릭했을 때, if문으로 구현하지 말고 on_click 안에 함수를 넣으면 된다.
- 버튼을 누르면 함수가 실행된다. 매개변수로 args안에 전달하면 된다.
- 이 형태로 바꾸면 첫 버튼이 씹히는 것도 사라지고 요고만 그냥 쭉 바꾸시면 된다.
- 지연의 문제는 아닌 것 같고, 스트림릿 자체가 어떤 컨셉이냐면
- 사용자가 어떤 값을 줄 때마다 페이지를 다시 실행한다.
- 버튼에 대한 액션만 하는게 아니라 클릭하는 순간 맨 위 코드부터 다시 실행된다.
- 이 과정에서 뭔가 꼬이는 것 같다.
- session_state가 왜 있냐면 변수에 저장하면 다시 시작할 때마다 변수가 초기화 되어서
- session_state는 변수가 영구적으로 저장되는 개념이다.
- 페이지를 저장해서 했는데 앞서 쓴 코드 방법이 이 과정에서 씹히는 것 같다. 정확X
- 버튼 클릭이라는 함수에 원하는 페이지를 전달하는 코드로 쭉 수정하면 될 것 같다.
# 효율 문제
- 웹개발 보통 할 때는 페이지마다 담당자가 다르면 페이지별로 파이썬 파일을 새로 만든다.
- 보통 페이지를 모듈화 시켜서 개발을 한다.
- 우리는 계속해서 유지 보수 할 건 아니니까 이렇게 하시면 된다.
# 개별 질문
- 저라면 session_state를 하나 더 만든다.
- 버튼을 클릭한 가게 이름을 예를 들어서 저라면 일단 여기에 session_state를 하나 더 만들고,
- store_name 이라고 하고 처음에 = '' 이렇게 아무것도 안넣은거 하고
- 클릭했을 때 (사진1) 과 같이 바꿀건데
- 지금 같은 경우는 특정 버튼에 해당하는 특정 함수를 하나 더 만들어야겠다.
- 지금 같은 경우에는 store_name을 같이 받아오는 것이다. (사진2)
- 버튼 안에 써있는 store_name 까지 같이 가져오는 것이다.
- 가져오면 자동으로 저장되는 것이다.
- 이제 pandas에서 자동으로 가져오는, 조회하는 코드를 가져온다.
- 뭘 추가하면 되냐면 예를 들어 두 번째 페이지라면 콤마 뒤에~
# 지금 우린 추천인가 검색인가?
- 유의미하려면 군집화 내용이 들어가야 할 것 같긴 하다.
- 데이터 전처리하고 웹에 서빙하는 걸 하는 느낌이 크긴 하다.
# 스트림릿이 이게 다다.
- 이정도만 쓸 줄 알면 이제 못할 건 없다.
- 더 딥한게 있긴 한데.
- 추론이 완료된 머신러닝 모델을 넣고 결과를 뱉는 걸 웹에 서빙하는 거만 배우면 되겠다.
# 개인적인 생각
- 대부분의 팀들 중에 스트림릿을 활용하는 사람들은 기계학습 결과물을 스트림릿으로 구현하는 걸로 알고 있다.
- 그렇게 했을 때 포트폴리오로 군집화 결과도 보여주면 좋지 않을까? 너무 좋음.
# 추론 모델
- 머신러닝 모델을 스트림릿으로 시각화 할 때 단순히 대시보드화해서 올려놓는 것보다
- 그거 이상의 포트폴리오로 유의미할 수 있으려면
- 한가지 페이지에는 인풋으로 넣고, 결과를 인풋으로 나오게 해야 한다.
- 그래서 그 모델을 사용자가 어떻게 사용하는데? 사용자가 사용할 수 있게 하는 것을!! 추론모델이라고 한다. 그냥 그래프만 보여주는 게 아니라.
- 이게 바로 경쟁력 있는 대시보드가 되고 포트폴리오에서도 많이 진보된 모델이다.
# 개별 질문
- 군집화도 사실은 머신러닝이다. 이것도 머신러닝을 서빙하는거다.
- 군집화 결과는 결과는 결국 내가 100개에서 5개를 보여주는 머신러닝은 맞음.
- 굉장히 라이트한 추천모델이긴 하다.
- 유의미하겠지만 지금 로우 데이터로는 그게 한계일 것 같다.
- 추천 알고리즘은 고객의 로그데이터가 있어야 하니까.
- 지도 서비스를 추가해서 고객데이터 수집 부분을 강화한다.
# 검색과 추천 시스템의 경계
- 추천도가 얕은(?) 코사인 시그널리티를 사용할 수 있다.
# 우리 팀은 최초로 잡은 주제에서 최대한으로 뽑을 수 있는 걸 했다.
# 온디바이스라고 모델을 핸드폰에 넣고 싶어. 튜터님은 이런거에 관심이 많은 편이다.
- 코딩에 진심인 튜터님이 채용 많이 안다. 최신 트렌드 안다.
# 태블로의 단점: 추론 모델은 못넣는다.
04 수정할 부분 발견
- bread 선그래프가 낮아서 맛이 없을거라 추측했는데 대부분의 데이터가 0점에 속했다.
- 즉, 빵에 대한 언급이 없었다. -> 무난한 빵집
'프로젝트 > 빵맛집 추천서비스 웹배포' 카테고리의 다른 글
04.26 PPT 수정, Streamlit 지역변수, 전역변수 주의 (0) | 2024.04.26 |
---|---|
04.25 Stramlit 버튼 함수, Openai api 274,643원의 토큰사용 (0) | 2024.04.25 |
04.22 클러스터링 재회의, 스트림릿 버튼구현 (0) | 2024.04.22 |
04.21 Streamlit 시각화 (0) | 2024.04.21 |
04.20 군집화 마무리 -> ux/ui관점 회의 -> streamlit 공부 (0) | 2024.04.20 |