hcjang1987 commited on
Commit
522568b
·
verified ·
1 Parent(s): 9592549

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -38
app.py CHANGED
@@ -1,13 +1,15 @@
1
  import streamlit as st
2
  from pyvis.network import Network
3
  import random
4
- import streamlit.components.v1 as components
5
 
6
  # 애플리케이션 상태 관리
7
  if "page" not in st.session_state:
8
  st.session_state.page = "login" # 초기 페이지는 로그인
9
- if "names" not in st.session_state:
10
- st.session_state.names = []
 
 
11
 
12
 
13
  # 페이지 전환 함수
@@ -26,24 +28,32 @@ def login_page():
26
  if st.button("로그인"):
27
  if username == "admin" and password == "password123": # 간단한 로그인 검증
28
  st.success("로그인 성공!")
29
- switch_page("name_input") # 이름 입력 페이지로 이동
30
  else:
31
  st.error("로그인 실패! 사용자 이름 또는 비밀번호가 잘못되었습니다.")
32
 
33
 
34
- # 이름 입력 페이지
35
- def name_input_page():
36
- st.title("이름 입력 페이지")
37
- st.write("이름을 한 줄에 하나씩 입력하세요.")
38
 
39
- names_input = st.text_area("이름 목록", height=200)
 
 
 
 
 
 
40
 
41
  if st.button("매칭 시작하기"):
42
- names = [name.strip() for name in names_input.strip().split('\n') if name.strip()]
43
- if len(names) < 2:
44
- st.error("매칭할 이름이 2개 이상 필요합니다.")
 
 
45
  else:
46
- st.session_state.names = names
 
47
  switch_page("match_result") # 매칭 결과 페이지로 이동
48
 
49
 
@@ -51,48 +61,46 @@ def name_input_page():
51
  def match_result_page():
52
  st.title("매칭 결과 페이지")
53
 
54
- if not st.session_state.names:
55
- st.warning("이름 입력 페이지에서 이름을 먼저 입력하세요!")
56
  return
57
 
58
- names = st.session_state.names
59
- random.shuffle(names)
60
- mid = len(names) // 2
61
- group_A = names[:mid]
62
- group_B = names[mid:]
63
-
64
- # 매칭 로직
65
- matching_pairs = [(a, b) for a, b in zip(group_A, group_B)]
66
- unmatched = set(names) - set(a for a, _ in matching_pairs) - set(b for _, b in matching_pairs)
67
 
68
  # pyvis 네트워크 생성
69
  net = Network(height='600px', width='100%', bgcolor='#222222', font_color='white')
70
 
71
- for name in names:
72
- net.add_node(name, label=name)
 
 
 
73
 
74
- for a, b in matching_pairs:
75
- net.add_edge(a, b, color="red", width=3)
 
76
 
77
  # HTML 렌더링
78
  net_html = net.generate_html()
79
- components.html(net_html, height=600) # 수정된 부분
80
 
81
  # 매칭 결과 출력
82
  st.subheader("매칭 결과:")
83
- for pair in matching_pairs:
84
- st.write(f"{pair[0]} - {pair[1]}")
85
-
86
- if unmatched:
87
- st.subheader("매칭되지 않은 사람:")
88
- for name in unmatched:
89
- st.write(name)
90
 
91
 
92
  # 페이지 라우팅
93
  if st.session_state.page == "login":
94
  login_page()
95
- elif st.session_state.page == "name_input":
96
- name_input_page()
97
  elif st.session_state.page == "match_result":
98
  match_result_page()
 
1
  import streamlit as st
2
  from pyvis.network import Network
3
  import random
4
+ from streamlit.components.v1 import components
5
 
6
  # 애플리케이션 상태 관리
7
  if "page" not in st.session_state:
8
  st.session_state.page = "login" # 초기 페이지는 로그인
9
+ if "influencers" not in st.session_state:
10
+ st.session_state.influencers = []
11
+ if "products" not in st.session_state:
12
+ st.session_state.products = []
13
 
14
 
15
  # 페이지 전환 함수
 
28
  if st.button("로그인"):
29
  if username == "admin" and password == "password123": # 간단한 로그인 검증
30
  st.success("로그인 성공!")
31
+ switch_page("input_data") # 입력 페이지로 이동
32
  else:
33
  st.error("로그인 실패! 사용자 이름 또는 비밀번호가 잘못되었습니다.")
34
 
35
 
36
+ # 데이터 입력 페이지
37
+ def input_data_page():
38
+ st.title("데이터 입력 페이지")
 
39
 
40
+ # 인플루언서 입력
41
+ st.subheader("인플루언서 입력")
42
+ influencers_input = st.text_area("인플루언서 목록 (한 줄에 하나씩 입력하세요)", height=150)
43
+
44
+ # 상품 입력
45
+ st.subheader("상품 입력")
46
+ products_input = st.text_area("상품 목록 (한 줄에 하나씩 입력하세요)", height=150)
47
 
48
  if st.button("매칭 시작하기"):
49
+ influencers = [name.strip() for name in influencers_input.strip().split('\n') if name.strip()]
50
+ products = [name.strip() for name in products_input.strip().split('\n') if name.strip()]
51
+
52
+ if not influencers or not products:
53
+ st.error("인플루언서와 상품을 모두 입력해야 합니다.")
54
  else:
55
+ st.session_state.influencers = influencers
56
+ st.session_state.products = products
57
  switch_page("match_result") # 매칭 결과 페이지로 이동
58
 
59
 
 
61
  def match_result_page():
62
  st.title("매칭 결과 페이지")
63
 
64
+ if not st.session_state.influencers or not st.session_state.products:
65
+ st.warning("데이터 입력 페이지에서 인플루언서와 상품을 먼저 입력하세요!")
66
  return
67
 
68
+ influencers = st.session_state.influencers
69
+ products = st.session_state.products
70
+
71
+ # 매칭 로직: 랜덤으로 여러 인플루언서를 하나의 상품에 연결
72
+ matches = []
73
+ for influencer in influencers:
74
+ product = random.choice(products) # 상품 중 랜덤으로 선택
75
+ matches.append((influencer, product))
 
76
 
77
  # pyvis 네트워크 생성
78
  net = Network(height='600px', width='100%', bgcolor='#222222', font_color='white')
79
 
80
+ # 노드 추가
81
+ for influencer in influencers:
82
+ net.add_node(influencer, label=influencer, color="blue")
83
+ for product in products:
84
+ net.add_node(product, label=product, color="green")
85
 
86
+ # 매칭 간선 추가
87
+ for influencer, product in matches:
88
+ net.add_edge(influencer, product, color="red", width=2)
89
 
90
  # HTML 렌더링
91
  net_html = net.generate_html()
92
+ components.html(net_html, height=600)
93
 
94
  # 매칭 결과 출력
95
  st.subheader("매칭 결과:")
96
+ for influencer, product in matches:
97
+ st.write(f"{influencer} ➡️ {product}")
 
 
 
 
 
98
 
99
 
100
  # 페이지 라우팅
101
  if st.session_state.page == "login":
102
  login_page()
103
+ elif st.session_state.page == "input_data":
104
+ input_data_page()
105
  elif st.session_state.page == "match_result":
106
  match_result_page()