soojeongcrystal commited on
Commit
8a5357f
·
verified ·
1 Parent(s): 1e47f6f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -26
app.py CHANGED
@@ -20,12 +20,13 @@ def process_file(file):
20
  elif file.name.endswith('.xlsx'):
21
  df = pd.read_excel(file.name)
22
  else:
23
- return None, "지원되지 않는 파일 형식입니다."
24
- return df, f"{file.name} 파일이 성공적으로 업로드되었습니다."
 
25
 
26
  def analyze_data(df, query, target_variable, feature_variables):
27
  if df is None:
28
- return "먼저 데이터 파일을 업로드해주세요.", None
29
 
30
  result = nlp(query)[0]
31
  intent = result['label']
@@ -33,13 +34,13 @@ def analyze_data(df, query, target_variable, feature_variables):
33
 
34
  if '시계열' in query or '추세' in query:
35
  fig = px.line(df, x=df.columns[0], y=feature_variables, title='시계열 그래프')
36
- return f'시계열 그래프를 생성했습니다. (신뢰도: {confidence:.2f})', fig
37
  elif '분포' in query or '히스토그램' in query:
38
  fig = px.histogram(df, x=feature_variables[0], title='분포 히스토그램')
39
- return f'분포 히스토그램을 생성했습니다. (신뢰도: {confidence:.2f})', fig
40
  elif '상관관계' in query or '산점도' in query:
41
  fig = px.scatter_matrix(df[feature_variables], title='상관관계 매트릭스')
42
- return f'상관관계 매트릭스를 생성했습니다. (신뢰도: {confidence:.2f})', fig
43
  elif '예측' in query or '회귀' in query:
44
  if '랜덤' in query or '포레스트' in query:
45
  return perform_random_forest(df, target_variable, feature_variables)
@@ -48,7 +49,7 @@ def analyze_data(df, query, target_variable, feature_variables):
48
  elif '군집' in query or '클러스터링' in query:
49
  return perform_clustering(df, feature_variables)
50
  else:
51
- return '죄송합니다. 요청을 이해하지 못했습니다.', None
52
 
53
  def perform_regression(df, target, features):
54
  X = df[features]
@@ -75,7 +76,7 @@ def perform_regression(df, target, features):
75
  for feature, importance in zip(features, model.coef_):
76
  result_text += f"- {feature}: {importance:.4f}\n"
77
 
78
- return result_text, fig
79
 
80
  def perform_random_forest(df, target, features):
81
  X = df[features]
@@ -103,7 +104,7 @@ def perform_random_forest(df, target, features):
103
  for feature, importance in sorted(zip(features, importances), key=lambda x: x[1], reverse=True):
104
  result_text += f"- {feature}: {importance:.4f}\n"
105
 
106
- return result_text, fig
107
 
108
  def perform_clustering(df, features):
109
  X = df[features]
@@ -133,24 +134,50 @@ def perform_clustering(df, features):
133
 
134
  return result_text, fig, elbow_fig
135
 
136
- def update_variable_options(df):
137
- if df is not None:
138
- return gr.Dropdown.update(choices=df.columns), gr.Dropdown.update(choices=df.columns)
139
- return gr.Dropdown.update(choices=[]), gr.Dropdown.update(choices=[])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
 
141
  # Gradio 인터페이스 설정
142
  with gr.Blocks() as demo:
143
  gr.Markdown("# 고급 한국어 데이터 분석 앱")
144
 
145
  with gr.Row():
146
- file_input = gr.File(label="데이터 파일 업로드 (CSV 또는 XLSX)")
147
- upload_output = gr.Textbox(label="업로드 상태")
148
-
149
- query_input = gr.Textbox(label="분석 요청 입력", placeholder="예: '매출과 비용의 시계열 그래프를 보여줘' 또는 '랜덤 포레스트로 매출을 예측해줘' 또는 '데이터를 군집화해줘'")
150
-
151
- with gr.Row():
152
- target_variable = gr.Dropdown(label="목표 변수 선택")
153
- feature_variables = gr.Dropdown(label="특성 변수 선택", multiselect=True)
 
 
 
 
154
 
155
  with gr.Row():
156
  result_text = gr.Textbox(label="분석 결과")
@@ -158,13 +185,12 @@ with gr.Blocks() as demo:
158
 
159
  elbow_plot = gr.Plot(label="엘보우 곡선 (군집 분석용)")
160
 
161
- upload_button = gr.Button("파일 업로드")
162
- analyze_button = gr.Button("분석 실행")
163
-
164
  df = gr.State()
165
 
166
- upload_button.click(process_file, inputs=file_input, outputs=[df, upload_output]).then(
167
- update_variable_options, inputs=[df], outputs=[target_variable, feature_variables]
 
 
168
  )
169
 
170
  analyze_button.click(
 
20
  elif file.name.endswith('.xlsx'):
21
  df = pd.read_excel(file.name)
22
  else:
23
+ return None, "지원되지 않는 파일 형식입니다.", [], []
24
+ columns = df.columns.tolist()
25
+ return df, f"{file.name} 파일이 성공적으로 업로드되었습니다.", columns, columns
26
 
27
  def analyze_data(df, query, target_variable, feature_variables):
28
  if df is None:
29
+ return "먼저 데이터 파일을 업로드해주세요.", None, None
30
 
31
  result = nlp(query)[0]
32
  intent = result['label']
 
34
 
35
  if '시계열' in query or '추세' in query:
36
  fig = px.line(df, x=df.columns[0], y=feature_variables, title='시계열 그래프')
37
+ return f'시계열 그래프를 생성했습니다. (신뢰도: {confidence:.2f})', fig, None
38
  elif '분포' in query or '히스토그램' in query:
39
  fig = px.histogram(df, x=feature_variables[0], title='분포 히스토그램')
40
+ return f'분포 히스토그램을 생성했습니다. (신뢰도: {confidence:.2f})', fig, None
41
  elif '상관관계' in query or '산점도' in query:
42
  fig = px.scatter_matrix(df[feature_variables], title='상관관계 매트릭스')
43
+ return f'상관관계 매트릭스를 생성했습니다. (신뢰도: {confidence:.2f})', fig, None
44
  elif '예측' in query or '회귀' in query:
45
  if '랜덤' in query or '포레스트' in query:
46
  return perform_random_forest(df, target_variable, feature_variables)
 
49
  elif '군집' in query or '클러스터링' in query:
50
  return perform_clustering(df, feature_variables)
51
  else:
52
+ return '죄송합니다. 요청을 이해하지 못했습니다.', None, None
53
 
54
  def perform_regression(df, target, features):
55
  X = df[features]
 
76
  for feature, importance in zip(features, model.coef_):
77
  result_text += f"- {feature}: {importance:.4f}\n"
78
 
79
+ return result_text, fig, None
80
 
81
  def perform_random_forest(df, target, features):
82
  X = df[features]
 
104
  for feature, importance in sorted(zip(features, importances), key=lambda x: x[1], reverse=True):
105
  result_text += f"- {feature}: {importance:.4f}\n"
106
 
107
+ return result_text, fig, None
108
 
109
  def perform_clustering(df, features):
110
  X = df[features]
 
134
 
135
  return result_text, fig, elbow_fig
136
 
137
+ # 가이드 텍스트
138
+ guide_text = """
139
+ # 분석 방법 가이드
140
+
141
+ 이 앱에서 사용할 수 있는 분석 방법과 명령어 예시입니다:
142
+
143
+ 1. 시계열 분석
144
+ 예시: "매출의 시계열 그래프를 보여줘"
145
+
146
+ 2. 분포 분석
147
+ 예시: "고객 나이 분포를 히스토그램으로 보여줘"
148
+
149
+ 3. 상관관계 분석
150
+ 예시: "매출과 광고비의 상관관계를 보여줘"
151
+
152
+ 4. 선형 회귀 분석
153
+ 예시: "광고비로 매출을 예측해줘"
154
+
155
+ 5. 랜덤 포레스트 회귀
156
+ 예시: "랜덤 포레스트로 매출을 예측해줘"
157
+
158
+ 6. 군집 분석
159
+ 예시: "고객 데이터를 군집화해줘"
160
+
161
+ 분석하고자 하는 변수를 선택한 후, 위의 예시를 참고하여 분석 요청을 입력해주세요.
162
+ """
163
 
164
  # Gradio 인터페이스 설정
165
  with gr.Blocks() as demo:
166
  gr.Markdown("# 고급 한국어 데이터 분석 앱")
167
 
168
  with gr.Row():
169
+ with gr.Column(scale=2):
170
+ file_input = gr.File(label="데이터 파일 업로드 (CSV 또는 XLSX)")
171
+ upload_output = gr.Textbox(label="업로드 상태")
172
+ query_input = gr.Textbox(label="분석 요청 입력", placeholder="예: '매출과 비용의 시계열 그래프를 보여줘'")
173
+ with gr.Row():
174
+ target_variable = gr.Dropdown(label="목표 변수 선택")
175
+ feature_variables = gr.Dropdown(label="특성 변수 선택", multiselect=True)
176
+ upload_button = gr.Button("파일 업로드")
177
+ analyze_button = gr.Button("분석 실행")
178
+
179
+ with gr.Column(scale=1):
180
+ gr.Markdown(guide_text)
181
 
182
  with gr.Row():
183
  result_text = gr.Textbox(label="분석 결과")
 
185
 
186
  elbow_plot = gr.Plot(label="엘보우 곡선 (군집 분석용)")
187
 
 
 
 
188
  df = gr.State()
189
 
190
+ upload_button.click(
191
+ process_file,
192
+ inputs=[file_input],
193
+ outputs=[df, upload_output, target_variable, feature_variables]
194
  )
195
 
196
  analyze_button.click(