taeyeol commited on
Commit
be3c324
·
verified ·
1 Parent(s): 5a5e606

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -56
app.py CHANGED
@@ -1,17 +1,20 @@
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
  mbti_descriptions = {
16
  "INTJ": {
17
  "성격": "독립적이고 전략적인 사고를 가진 성향.",
@@ -21,68 +24,54 @@ mbti_descriptions = {
21
  "나쁜": ("ISFP", "감정과 논리의 차이가 충돌할 가능성.")
22
  }
23
  },
24
- # 다른 유형 데이터 추가
 
 
 
 
 
 
 
 
25
  }
26
 
27
- # 선택지를 5단계로 설정
28
  options = ["매우 아니다", "아니다", "보통이다", "그렇다", "매우 그렇다"]
29
 
 
 
 
 
 
 
 
 
 
 
30
  def calculate_mbti(answers):
 
 
 
 
 
31
  scores = {"E/I": 0, "S/N": 0, "T/F": 0, "J/P": 0}
 
32
  for i, answer in enumerate(answers):
 
 
 
 
 
 
 
33
  if i % 4 == 0:
34
- scores["E/I"] += (answer - 3)
35
  elif i % 4 == 1:
36
- scores["S/N"] += (answer - 3)
37
  elif i % 4 == 2:
38
- scores["T/F"] += (answer - 3)
39
- elif i % 4 == 3:
40
- scores["J/P"] += (answer - 3)
41
- result = (
42
- ("I" if scores["E/I"] < 0 else "E") +
43
- ("N" if scores["S/N"] < 0 else "S") +
44
- ("F" if scores["T/F"] < 0 else "T") +
45
- ("P" if scores["J/P"] < 0 else "J")
46
- )
47
- percentages = {
48
- "E/I": abs(scores["E/I"] / 20 * 100),
49
- "S/N": abs(scores["S/N"] / 20 * 100),
50
- "T/F": abs(scores["T/F"] / 20 * 100),
51
- "J/P": abs(scores["J/P"] / 20 * 100)
52
- }
53
- return result, percentages
54
-
55
- def analyze_mbti(answers):
56
- result, percentages = calculate_mbti(answers)
57
- description = mbti_descriptions.get(result, {})
58
- 성격 = description.get("성격", "데이터가 없습니다.")
59
- 추천직업 = description.get("추천 직업", [])
60
- 궁합 = description.get("궁합", {})
61
- return {
62
- "MBTI 유형": result,
63
- "성격": 성격,
64
- "추천 직업": 추천직업,
65
- "궁합": 궁합,
66
- "세부 비율": percentages
67
- }
68
-
69
- # Gradio 인터페이스
70
- def mbti_interface(*answers):
71
- answers = list(answers)
72
- result = analyze_mbti(answers)
73
- return result
74
-
75
- # 질문과 선택지를 기반으로 Gradio UI 생성
76
- inputs = [gr.Radio(options, label=q) for q in questions]
77
- outputs = gr.JSON()
78
 
79
- iface = gr.Interface(
80
- fn=mbti_interface,
81
- inputs=inputs,
82
- outputs=outputs,
83
- title="MBTI 분석기",
84
- description="질문에 답변하고 자신의 MBTI 유형을 분석해 보세요!"
85
- )
86
 
87
- if __name__ == "__main__":
88
- iface.launch()
 
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
  "성격": "독립적이고 전략적인 사고를 가진 성향.",
 
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