aliceblue11 commited on
Commit
ada5a3b
·
verified ·
1 Parent(s): 0834a93

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -29
app.py CHANGED
@@ -9,12 +9,7 @@ QUESTIONS = [
9
  "음악을 듣거나 산책을 할 때 그 속에 빠져들어 나 자신을 잊는다.",
10
  "종종 실제보다 일이 더 어렵거나 위험할 것이라고 예상한다.",
11
  "내가 할 수 있는 한 더 잘 하고 싶기 때문에, 열심을 다해 나 자신을 몰아붙인다.",
12
- "주머니가 바닥날 때까지 돈을 쓰거나, 신용카드를 너무 많이 사용해서 빚을 지는 때가 있다.",
13
- "내가 가지고 있는 많은 습관들은 내가 가치 있는 목표를 달성하는 데 방해가 된다.",
14
- "문제가 생기면 혼자서 해결하려 한다.",
15
- "미래에 어떤 일이 잘못될까봐 자주 걱정한다.",
16
- "별로 힘들이지 않고 하루 종일 활동할 수 있다.",
17
- # 40개 이상의 질문을 여기에 추가
18
  ]
19
 
20
  # 규준 점수 데이터
@@ -30,18 +25,25 @@ STANDARD_SCORES = {
30
 
31
  # 점수 계산 함수
32
  def calculate_scores(responses):
33
- scores = {}
34
- for scale in STANDARD_SCORES.keys():
35
- raw_score = sum(responses.get(scale, [])) # 원점수 합계
36
- mean = STANDARD_SCORES[scale]["M"]
37
- sd = STANDARD_SCORES[scale]["SD"]
 
 
 
 
 
 
38
  t_score = 50 + 10 * (raw_score - mean) / sd
39
- scores[scale] = {
 
40
  "원점수": raw_score,
41
  "T점수": round(t_score, 2),
42
- "백분위": round((raw_score - mean + 2 * sd) / (4 * sd) * 100, 2),
43
  }
44
- return scores
45
 
46
  # 결과 시각화
47
  def visualize_results(scores):
@@ -55,21 +57,22 @@ def visualize_results(scores):
55
  plt.xlabel("척도")
56
  plt.ylabel("T 점수")
57
  plt.legend()
 
58
  plt.savefig("results.png")
59
  return "results.png"
60
 
61
- # Gradio 앱 인터페이스 정의
62
  def tci_app(name, gender, age, responses):
 
 
 
63
  scores = calculate_scores(responses)
64
  graph_path = visualize_results(scores)
65
 
66
  report = f"이름: {name}\n성별: {gender}\n나이: {age}\n\n"
67
  report += "TCI 결과:\n"
68
- for scale, score_data in scores.items():
69
- report += (
70
- f"{scale}: 원점수={score_data['원점수']}, "
71
- f"T점수={score_data['T점수']}, 백분위={score_data['백분위']}\n"
72
- )
73
 
74
  return report, graph_path
75
 
@@ -80,15 +83,15 @@ inputs = [
80
  gr.Number(label="나이"),
81
  ]
82
 
83
- # 설문 항목을 라디오 버튼으로 추가
84
- response_inputs = []
85
- for i, question in enumerate(QUESTIONS):
86
- response_inputs.append(
87
- gr.Radio(
88
- label=f"질문 {i+1}: {question}",
89
- choices=["매우 아니다", "아니다", "보통이다", "그렇다", "매우 그렇다"],
90
- )
91
  )
 
 
92
 
93
  inputs.extend(response_inputs)
94
 
@@ -99,7 +102,7 @@ outputs = [
99
 
100
  # Gradio 앱 실행
101
  app = gr.Interface(
102
- fn=tci_app,
103
  inputs=inputs,
104
  outputs=outputs,
105
  title="TCI 기질 분석기",
 
9
  "음악을 듣거나 산책을 할 때 그 속에 빠져들어 나 자신을 잊는다.",
10
  "종종 실제보다 일이 더 어렵거나 위험할 것이라고 예상한다.",
11
  "내가 할 수 있는 한 더 잘 하고 싶기 때문에, 열심을 다해 나 자신을 몰아붙인다.",
12
+ # 추가 질문 45개
 
 
 
 
 
13
  ]
14
 
15
  # 규준 점수 데이터
 
25
 
26
  # 점수 계산 함수
27
  def calculate_scores(responses):
28
+ # 질문 응답은 5점 척도(0~4)
29
+ # 척도에 대한 점수를 계산
30
+ scores = {"NS": 0, "HA": 0, "RD": 0, "PS": 0, "SD": 0, "CO": 0, "ST": 0}
31
+ for i, response in enumerate(responses):
32
+ scale = list(STANDARD_SCORES.keys())[i % len(STANDARD_SCORES)] # 척도 순환
33
+ scores[scale] += response # 원점수 합계
34
+
35
+ # 각 척도별 T 점수 및 백분위 계산
36
+ results = {}
37
+ for scale, raw_score in scores.items():
38
+ mean, sd = STANDARD_SCORES[scale]["M"], STANDARD_SCORES[scale]["SD"]
39
  t_score = 50 + 10 * (raw_score - mean) / sd
40
+ percentile = round((raw_score - mean + 2 * sd) / (4 * sd) * 100, 2)
41
+ results[scale] = {
42
  "원점수": raw_score,
43
  "T점수": round(t_score, 2),
44
+ "백분위": percentile,
45
  }
46
+ return results
47
 
48
  # 결과 시각화
49
  def visualize_results(scores):
 
57
  plt.xlabel("척도")
58
  plt.ylabel("T 점수")
59
  plt.legend()
60
+ plt.tight_layout()
61
  plt.savefig("results.png")
62
  return "results.png"
63
 
64
+ # Gradio 앱 함수
65
  def tci_app(name, gender, age, responses):
66
+ """
67
+ 설문 데이터를 처리하고 결과를 반환
68
+ """
69
  scores = calculate_scores(responses)
70
  graph_path = visualize_results(scores)
71
 
72
  report = f"이름: {name}\n성별: {gender}\n나이: {age}\n\n"
73
  report += "TCI 결과:\n"
74
+ for scale, data in scores.items():
75
+ report += f"{scale}: 원점수={data['원점수']}, T점수={data['T점수']}, 백분위={data['백분위']}\n"
 
 
 
76
 
77
  return report, graph_path
78
 
 
83
  gr.Number(label="나이"),
84
  ]
85
 
86
+ # 질문 항목에 대한 라디오 버튼 입력 생성
87
+ response_inputs = [
88
+ gr.Radio(
89
+ label=f"질문 {i+1}: {question}",
90
+ choices=["매우 아니다", "아니다", "보통이다", "그렇다", "매우 그렇다"],
91
+ type="index",
 
 
92
  )
93
+ for i, question in enumerate(QUESTIONS)
94
+ ]
95
 
96
  inputs.extend(response_inputs)
97
 
 
102
 
103
  # Gradio 앱 실행
104
  app = gr.Interface(
105
+ fn=lambda name, gender, age, *responses: tci_app(name, gender, age, responses),
106
  inputs=inputs,
107
  outputs=outputs,
108
  title="TCI 기질 분석기",