taeyeol commited on
Commit
5728adb
·
verified ·
1 Parent(s): be3c324

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -69
app.py CHANGED
@@ -1,77 +1,58 @@
1
  import gradio as gr
2
  import numpy as np
3
 
4
- # MBTI 질문 데이터 (예시)
5
  questions = [
6
- "나는 사람들과 시간을 보내는 것을 즐긴다.",
7
- "나는 구체적이고 실용적인 정보를 선호한다.",
8
- "나는 논리적인 결정을 내리는 것을 중요하게 생각한다.",
9
- "나는 체계적이고 계획적인 삶을 좋아한다.",
10
- "나는 새로운 아이디어를 탐구하는 것을 즐긴다.",
11
- # 아래와 같이 20개 이상 질문을 추가해 주세요.
12
- # "나는 어떤 일을 할 때 전체적인 큰 그림을 우선적으로 본다.",
13
- # "감정보다는 사실과 데이터를 우선적으로 생각한다.",
14
- # ...
15
  ]
16
 
17
- # MBTI 유형별 설명 데이터 (예시)
18
- mbti_descriptions = {
19
- "INTJ": {
20
- "성격": "독립적이고 전략적인 사고를 가진 성향.",
21
- "추천 직업": ["데이터 분석가", "소프트웨어 개발자", "연구원"],
22
- "궁합": {
23
- "좋은": ("ENTP", "혁신적이고 유연한 사고가 잘 맞음."),
24
- "나쁜": ("ISFP", "감정과 논리의 차이가 충돌할 가능성.")
25
- }
26
- },
27
- "ENTP": {
28
- "성격": "토론을 즐기고, 새 아이디어에 호기심이 많은 성향.",
29
- "추천 직업": ["기업가", "마케팅 전략가", "콘셉트 디자이너"],
30
- "궁합": {
31
- "좋은": ("INTJ", "논리와 창의성이 균형을 이룸."),
32
- "나쁜": ("ISFJ", "세부 사항과 감정적 배려에서 갈등 가능.")
33
- }
34
- },
35
- # 필요한 다른 유형 데이터도 추가해 주세요.
36
  }
37
 
38
- # 선택지(문자열) 정의
39
- options = ["매우 아니다", "아니다", "보통이다", "그렇다", "매우 그렇다"]
40
-
41
- # 문자열 -> 점수(정수)로 매핑하기 위한 딕셔너리
42
- # '매우 아니다' = 1, '아니다' = 2, '보통이다' = 3, '그렇다' = 4, '매우 그렇다' = 5
43
- answer_mapping = {
44
- "매우 아니다": 1,
45
- "아니다": 2,
46
- "보통이다": 3,
47
- "그렇다": 4,
48
- "매우 그렇다": 5
49
- }
50
-
51
- def calculate_mbti(answers):
52
- """
53
- 사용자가 선택한 답변들을 정수값으로 변환한 뒤, E/I, S/N, T/F, J/P 지표별로 점수를 합산한다.
54
- 질문(i)의 인덱스에 따라 %4 연산을 달리하여 각 지표에 할당.
55
- """
56
- # 점수를 누적할 딕셔너리 (E/I, S/N, T/F, J/P)
57
- scores = {"E/I": 0, "S/N": 0, "T/F": 0, "J/P": 0}
58
-
59
- for i, answer in enumerate(answers):
60
- # 문자열로 answer를 정수 값으로 매핑
61
- answer_val = answer_mapping[answer]
62
-
63
- # i % 4 == 0 -> E/I
64
- # i % 4 == 1 -> S/N
65
- # i % 4 == 2 -> T/F
66
- # i % 4 == 3 -> J/P
67
- if i % 4 == 0:
68
- scores["E/I"] += (answer_val - 3)
69
- elif i % 4 == 1:
70
- scores["S/N"] += (answer_val - 3)
71
- elif i % 4 == 2:
72
- scores["T/F"] += (answer_val - 3)
73
- else: # i % 4 == 3
74
- scores["J/P"] += (answer_val - 3)
75
-
76
-
77
-
 
1
  import gradio as gr
2
  import numpy as np
3
 
4
+ # 질문 리스트 (예시)
5
  questions = [
6
+ "당신은 혼자 있을 에너지를 얻나요?",
7
+ "당신은 계획을 세우는 것을 좋아하나요?",
8
+ "당신은 새로운 상황에 쉽게 적응하나요?",
9
+ # 많은 질문을 추가하세요.
 
 
 
 
 
10
  ]
11
 
12
+ # MBTI 유형 예시 데이터
13
+ mbti_types = {
14
+ "INTJ": {"성격": "독창적이고 전략적인 사고를 가진 조용한 리더", "직업": "과학자, 엔지니어", "궁합": ["ENFP", "ENTP"], "나쁜 궁합": ["ESFP"]},
15
+ "ENFP": {"성격": "열정적이고 창의적인 사고를 가진 사람", "직업": "예술가, 작가", "궁합": ["INTJ", "INFJ"], "나쁜 궁합": ["ISTJ"]},
16
+ # 다른 유형도 추가
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  }
18
 
19
+ # 질문에 따른 점수 계산 함수
20
+ def calculate_mbti_responses(responses):
21
+ scores = np.zeros(16) # 16가지 MBTI 유형에 대한 점수
22
+ for i, response in enumerate(responses):
23
+ # 점수 계산 로직 (예: 특정 질문이 특정 유형에 어떤 영향을 미치는지)
24
+ # 유형별 점수 계산 (간단히 가정)
25
+ if response == "매우 그렇다":
26
+ scores += np.random.randint(5, 10, size=16)
27
+ elif response == "그렇다":
28
+ scores += np.random.randint(2, 5, size=16)
29
+ elif response == "보통이다":
30
+ scores += np.random.randint(0, 2, size=16)
31
+ elif response == "아니다":
32
+ scores -= np.random.randint(2, 5, size=16)
33
+ elif response == "매우 아니다":
34
+ scores -= np.random.randint(5, 10, size=16)
35
+
36
+ best_match_index = np.argmax(scores)
37
+ best_match_type = list(mbti_types.keys())[best_match_index]
38
+ percentage = (scores[best_match_index] / sum(scores)) * 100
39
+ return best_match_type, percentage
40
+
41
+ # Gradio UI 구성
42
+ def mbti_quiz(*responses):
43
+ mbti_type, percentage = calculate_mbti_responses(responses)
44
+ result = f"당신의 MBTI 유형은 {mbti_type}입니다. 신뢰도: {percentage:.2f}%"
45
+ details = mbti_types[mbti_type]
46
+ result += f"\n\n성격 설명: {details['성격']}"
47
+ result += f"\n추��� 직업: {details['직업']}"
48
+ result += f"\n\n좋은 궁합: {', '.join(details['궁합'])}"
49
+ result += f"\n나쁜 궁합: {', '.join(details['나쁜 궁합'])}"
50
+ return result
51
+
52
+ # Gradio 입력 필드 구성
53
+ inputs = [gr.inputs.Radio(["매우 그렇다", "그렇다", "보통이다", "아니다", "매우 아니다"], label=question) for question in questions]
54
+ output = gr.outputs.Textbox(label="MBTI 결과")
55
+
56
+ # Gradio 인터페이스 생성
57
+ iface = gr.Interface(fn=mbti_quiz, inputs=inputs, outputs=output, title="MBTI 성격 유형 테스트", description="20개 이상의 질문을 통해 MBTI 성격 유형을 분석하세요.")
58
+ iface.launch()