aliceblue11 commited on
Commit
36bff74
·
verified ·
1 Parent(s): f25db82

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +124 -26
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": "예시 유형1",
10
- "description": " 유형은 ...",
11
- "career": ["직업1", "직업2", "직업3"],
12
  "compatibility": {
13
- "good": {"Type2": "이유..."},
14
- "bad": {"Type3": "이유..."}
15
  }
16
  },
17
- # 다른 6가지 유형도 동일한 형식으로 추가
18
- # ...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  }
20
 
21
  # 질문 리스트
22
  QUESTIONS = [
23
- "질문 1 내용...",
24
- "질문 2 내용...",
25
- "질문 3 내용...",
26
- # 최소 20개 이상의 질문 추가
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 i, response in enumerate(responses):
38
- # 질문을 특정 유형에 매핑하는 로직 필요
39
- # 예를 들어, 질문 i가 Type1에 해당하면 scores["Type1"] += response 점수
40
- pass
 
 
41
  # 퍼센트 계산
42
  total = sum(scores.values())
43
- percentages = {k: (v / total * 100) if total > 0 else 0 for k, v in scores.items()}
 
 
 
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
- with gr.Form():
67
- responses = []
 
68
  for question in QUESTIONS:
69
  response = gr.Radio(label=question, choices=OPTIONS, type="index")
70
- responses.append(response)
71
  submit = gr.Button("결과 보기")
72
  output = gr.JSON()
73
 
74
- submit.click(fn=get_results, inputs=responses, outputs=output)
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