Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -1,55 +1,152 @@
|
|
1 |
# app.py
|
2 |
|
3 |
import gradio as gr
|
4 |
-
import json
|
5 |
|
6 |
# TCI 유형 데이터
|
7 |
TCI_TYPES = {
|
8 |
"Type1": {
|
9 |
-
"name": "
|
10 |
-
"description": "
|
11 |
-
"career": ["
|
12 |
"compatibility": {
|
13 |
-
"good": {"Type2": "
|
14 |
-
"bad": {"Type3": "
|
15 |
}
|
16 |
},
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
}
|
20 |
|
21 |
# 질문 리스트
|
22 |
QUESTIONS = [
|
23 |
-
"
|
24 |
-
"
|
25 |
-
"
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
]
|
29 |
|
30 |
# 선택지
|
31 |
OPTIONS = ["매우 그렇다", "그렇다", "보통이다", "아니다", "매우 아니다"]
|
32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
def calculate_tci(responses):
|
34 |
-
# 예시 점수 계산 로직
|
35 |
-
# 실제 TCI 점수 계산 방식에 맞게 수정 필요
|
36 |
scores = {type_name: 0 for type_name in TCI_TYPES.keys()}
|
37 |
-
for
|
38 |
-
|
39 |
-
|
40 |
-
|
|
|
|
|
41 |
# 퍼센트 계산
|
42 |
total = sum(scores.values())
|
43 |
-
|
|
|
|
|
|
|
44 |
# 최고 점수 유형 선택
|
45 |
selected_type = max(percentages, key=percentages.get)
|
46 |
return selected_type, percentages[selected_type]
|
47 |
|
48 |
-
def get_results(responses):
|
49 |
selected_type, percentage = calculate_tci(responses)
|
50 |
type_info = TCI_TYPES[selected_type]
|
51 |
|
52 |
-
#
|
53 |
result = {
|
54 |
"유형": type_info["name"],
|
55 |
"퍼센트": f"{percentage:.2f}%",
|
@@ -63,15 +160,16 @@ def get_results(responses):
|
|
63 |
def main():
|
64 |
with gr.Blocks() as demo:
|
65 |
gr.Markdown("# TCI 기질 분석기")
|
66 |
-
|
67 |
-
|
|
|
68 |
for question in QUESTIONS:
|
69 |
response = gr.Radio(label=question, choices=OPTIONS, type="index")
|
70 |
-
|
71 |
submit = gr.Button("결과 보기")
|
72 |
output = gr.JSON()
|
73 |
|
74 |
-
submit.click(fn=get_results, inputs=
|
75 |
|
76 |
demo.launch()
|
77 |
|
|
|
1 |
# app.py
|
2 |
|
3 |
import gradio as gr
|
|
|
4 |
|
5 |
# TCI 유형 데이터
|
6 |
TCI_TYPES = {
|
7 |
"Type1": {
|
8 |
+
"name": "활동적인 도전자",
|
9 |
+
"description": "활동적인 도전자는 새로운 경험을 추구하며, 도전적인 상황에서 에너지를 얻습니다. 이들은 창의적이고 모험을 즐기지만 때로는 충동적일 수 있습니다.",
|
10 |
+
"career": ["기업가", "마케팅 전문가", "프로젝트 매니저"],
|
11 |
"compatibility": {
|
12 |
+
"good": {"Type2": "보수적인 면을 보완해주어 균형을 이룸."},
|
13 |
+
"bad": {"Type3": "과도한 활동성으로 인해 감정적으로 충돌할 수 있음."}
|
14 |
}
|
15 |
},
|
16 |
+
"Type2": {
|
17 |
+
"name": "신중한 분석가",
|
18 |
+
"description": "신중한 분석가는 세부 사항에 주의를 기울이며, 계획적이고 체계적인 접근을 선호합니다. 이들은 신뢰할 수 있고 책임감이 강하지만 때로는 융통성이 부족할 수 있습니다.",
|
19 |
+
"career": ["데이터 분석가", "회계사", "연구원"],
|
20 |
+
"compatibility": {
|
21 |
+
"good": {"Type1": "활동적인 도전자의 창의성을 보완함."},
|
22 |
+
"bad": {"Type4": "보수적인 성향으로 인해 갈등이 발생할 수 있음."}
|
23 |
+
}
|
24 |
+
},
|
25 |
+
"Type3": {
|
26 |
+
"name": "감성적인 예술가",
|
27 |
+
"description": "감성적인 예술가는 감정이 풍부하고 창의성이 뛰어나며, 예술적인 표현을 즐깁니다. 이들은 타인의 감정을 잘 이해하지만 감정 기복이 심할 수 있습니다.",
|
28 |
+
"career": ["작가", "음악가", "디자이너"],
|
29 |
+
"compatibility": {
|
30 |
+
"good": {"Type5": "논리적인 사고를 보완해줌."},
|
31 |
+
"bad": {"Type1": "과도한 활동성으로 인해 감정적으로 충돌할 수 있음."}
|
32 |
+
}
|
33 |
+
},
|
34 |
+
"Type4": {
|
35 |
+
"name": "실용적인 관리자",
|
36 |
+
"description": "실용적인 관리자는 조직적이고 효율성을 중시하며, 문제 해결에 뛰어납니다. 이들은 책임감이 강하고 신뢰할 수 있지만 때로는 융통성이 부족할 수 있습니다.",
|
37 |
+
"career": ["운영 관리자", "프로덕트 매니저", "인사 관리자"],
|
38 |
+
"compatibility": {
|
39 |
+
"good": {"Type2": "신중한 분석가와의 조화로 효율성 증대."},
|
40 |
+
"bad": {"Type6": "과도한 실용주의로 인해 인간관계에서 갈등 발생 가능."}
|
41 |
+
}
|
42 |
+
},
|
43 |
+
"Type5": {
|
44 |
+
"name": "논리적인 사색가",
|
45 |
+
"description": "논리적인 사색가는 깊이 있는 사고와 분석을 즐기며, 문제 해결에 뛰어납니다. 이들은 독립적이고 창의적이지만 때로는 사회적 상호작용을 어려워할 수 있습니다.",
|
46 |
+
"career": ["소프트웨어 엔지니어", "연구 과학자", "전략 컨설턴트"],
|
47 |
+
"compatibility": {
|
48 |
+
"good": {"Type3": "감성적인 예술가와의 조화로 창의성 증대."},
|
49 |
+
"bad": {"Type4": "실용적인 관리자와의 목표 충돌 가능."}
|
50 |
+
}
|
51 |
+
},
|
52 |
+
"Type6": {
|
53 |
+
"name": "친화적인 협력자",
|
54 |
+
"description": "친화적인 협력자는 타인과의 조화를 중시하며, 협동과 배려를 통해 관계를 유지합니다. 이들은 팀워크에 강하지만 때로는 자기주장을 부족하게 할 수 있습니다.",
|
55 |
+
"career": ["인사 담당자", "사회 복지사", "고객 서비스 전문가"],
|
56 |
+
"compatibility": {
|
57 |
+
"good": {"Type7": "개방적인 유형과의 협력을 통해 다양한 시각 수용."},
|
58 |
+
"bad": {"Type4": "과도한 실용주의로 인해 감정적인 측면에서 갈등 발생 가능."}
|
59 |
+
}
|
60 |
+
},
|
61 |
+
"Type7": {
|
62 |
+
"name": "개방적인 혁신가",
|
63 |
+
"description": "개방적인 혁신가는 새로운 아이디어와 변화를 추구하며, 유연한 사고를 지니고 있습니다. 이들은 창의적이고 적응력이 뛰어나지만 때로는 집중력이 부족할 수 있습니다.",
|
64 |
+
"career": ["스타트업 창업자", "디지털 마케터", "혁신 컨설턴트"],
|
65 |
+
"compatibility": {
|
66 |
+
"good": {"Type6": "친화적인 협력자와의 조화를 통해 팀워크 강화."},
|
67 |
+
"bad": {"Type2": "신중한 분석가와의 계획 차이로 인해 갈등 발생 가능."}
|
68 |
+
}
|
69 |
+
}
|
70 |
}
|
71 |
|
72 |
# 질문 리스트
|
73 |
QUESTIONS = [
|
74 |
+
"1. 쉬운 일보다는 도전적인 일이 더 좋다.",
|
75 |
+
"2. 나를 좋지 않게 대했던 사람들과도 친하게 지낸다.",
|
76 |
+
"3. 음악을 듣거나 산책을 할 �� 그 속에 빠져들어 나 자신을 잊는다.",
|
77 |
+
"4. 종종 실제보다 일이 더 어렵거나 위험할 것이라고 예상한다.",
|
78 |
+
"5. 내가 할 수 있는 한 더 잘 하고 싶기 때문에, 열심을 다해 나 자신을 몰아붙인다.",
|
79 |
+
"6. 주머니가 바닥날 때까지 돈을 쓰거나, 신용카드를 너무 많이 사용해서 빚을 지는 때가 있다.",
|
80 |
+
"7. 내가 가지고 있는 많은 습관들은 내가 가치 있는 목표를 달성하는 데 방해가 된다.",
|
81 |
+
"8. 문제가 생기면 혼자서 해결하려 한다.",
|
82 |
+
"9. 미래에 어떤 일이 잘못될까봐 자주 걱정한다.",
|
83 |
+
"10. 별로 힘들이지 않고 하루 종일 활동할 수 있다.",
|
84 |
+
"11. 어려움에 처했거나 뭔가를 필요로 하는 사람이 있을 때 도움을 준다.",
|
85 |
+
"12. 처음 만난 사람과도 편안하게 대화하고 내 의견을 이야기할 수 있다.",
|
86 |
+
"13. 새로운 일에 마음이 쉽게 동해서 당장 시도해 보고 싶어진다.",
|
87 |
+
"14. 다른 아무 것도 눈에 들어오지 않을 정도로 어떤 일에 몰입하요, 때로 딴 세계에 있는 듯 보일 때가 있다.",
|
88 |
+
"15. 종종 나 자신에게 불만을 느낀다.",
|
89 |
+
"16. 내 생각을 받아들이지 않는 사람들을 참아내기가 힘들다.",
|
90 |
+
"17. 낯선 사람을 만날 때, 매우 수줍어하며 위축된다.",
|
91 |
+
"18. 나의 야망과 열심 때문에 성공하는 때가 종종 있다.",
|
92 |
+
"19. 나에게 잘못을 저지른 사람들을 쉽게 용서하는 편이다.",
|
93 |
+
"20. 다른 사람들과 거리를 두고 떨어져 지내는 것이 좋다.",
|
94 |
+
"21. 어떤 일을 할 때 과거에 어떻게 했는지 생각하지 않고 현재의 느낌에 따라 행동한다."
|
95 |
]
|
96 |
|
97 |
# 선택지
|
98 |
OPTIONS = ["매우 그렇다", "그렇다", "보통이다", "아니다", "매우 아니다"]
|
99 |
|
100 |
+
# 질문과 TCI 유형 매핑 (예시)
|
101 |
+
# 실제 TCI 이론에 따라 질문과 유형을 정확히 매핑해야 합니다.
|
102 |
+
# 여기서는 예시로 임의로 매핑하였습니다.
|
103 |
+
QUESTION_TYPE_MAPPING = {
|
104 |
+
0: "Type1",
|
105 |
+
1: "Type6",
|
106 |
+
2: "Type3",
|
107 |
+
3: "Type2",
|
108 |
+
4: "Type1",
|
109 |
+
5: "Type4",
|
110 |
+
6: "Type2",
|
111 |
+
7: "Type5",
|
112 |
+
8: "Type2",
|
113 |
+
9: "Type1",
|
114 |
+
10: "Type6",
|
115 |
+
11: "Type7",
|
116 |
+
12: "Type7",
|
117 |
+
13: "Type3",
|
118 |
+
14: "Type3",
|
119 |
+
15: "Type2",
|
120 |
+
16: "Type5",
|
121 |
+
17: "Type1",
|
122 |
+
18: "Type1",
|
123 |
+
19: "Type6",
|
124 |
+
20: "Type7"
|
125 |
+
}
|
126 |
+
|
127 |
def calculate_tci(responses):
|
|
|
|
|
128 |
scores = {type_name: 0 for type_name in TCI_TYPES.keys()}
|
129 |
+
for idx, response in enumerate(responses):
|
130 |
+
type_key = QUESTION_TYPE_MAPPING.get(idx)
|
131 |
+
if type_key:
|
132 |
+
# 선택지 인덱스에 따라 점수 부여 (매우 아니다=1, 매우 그렇다=5)
|
133 |
+
score = response + 1
|
134 |
+
scores[type_key] += score
|
135 |
# 퍼센트 계산
|
136 |
total = sum(scores.values())
|
137 |
+
if total == 0:
|
138 |
+
percentages = {k: 0 for k in scores.keys()}
|
139 |
+
else:
|
140 |
+
percentages = {k: (v / total * 100) for k, v in scores.items()}
|
141 |
# 최고 점수 유형 선택
|
142 |
selected_type = max(percentages, key=percentages.get)
|
143 |
return selected_type, percentages[selected_type]
|
144 |
|
145 |
+
def get_results(*responses):
|
146 |
selected_type, percentage = calculate_tci(responses)
|
147 |
type_info = TCI_TYPES[selected_type]
|
148 |
|
149 |
+
# 결과 형식화
|
150 |
result = {
|
151 |
"유형": type_info["name"],
|
152 |
"퍼센트": f"{percentage:.2f}%",
|
|
|
160 |
def main():
|
161 |
with gr.Blocks() as demo:
|
162 |
gr.Markdown("# TCI 기질 분석기")
|
163 |
+
gr.Markdown("아래 질문에 답변해 주세요.")
|
164 |
+
with gr.Column():
|
165 |
+
inputs = []
|
166 |
for question in QUESTIONS:
|
167 |
response = gr.Radio(label=question, choices=OPTIONS, type="index")
|
168 |
+
inputs.append(response)
|
169 |
submit = gr.Button("결과 보기")
|
170 |
output = gr.JSON()
|
171 |
|
172 |
+
submit.click(fn=get_results, inputs=inputs, outputs=output)
|
173 |
|
174 |
demo.launch()
|
175 |
|