Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
|
|
|
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 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
|
141 |
# Gradio 인터페이스 설정
|
142 |
with gr.Blocks() as demo:
|
143 |
gr.Markdown("# 고급 한국어 데이터 분석 앱")
|
144 |
|
145 |
with gr.Row():
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
|
|
|
|
|
|
|
|
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(
|
167 |
-
|
|
|
|
|
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(
|