JUNGU commited on
Commit
2aae306
·
verified ·
1 Parent(s): 38cbba4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -59
app.py CHANGED
@@ -35,6 +35,8 @@ def manage_session_state():
35
  st.session_state.slicers = {}
36
  if 'analysis_performed' not in st.session_state:
37
  st.session_state.analysis_performed = False
 
 
38
 
39
  # 데이터 로드
40
  @st.cache_data
@@ -95,14 +97,18 @@ def preprocess_data(data):
95
 
96
  return data
97
 
 
 
 
98
  def create_slicers(data):
99
  for col in st.session_state.categorical_columns:
100
- if data[col].nunique() <= 10: # 고유값이 10개 이하인 경우에만 슬라이서 생성
101
  st.session_state.slicers[col] = st.multiselect(
102
  f"{col} 선택",
103
  options=sorted(data[col].unique()),
104
  default=sorted(data[col].unique()),
105
- key=f"slicer_{col}"
 
106
  )
107
 
108
  def apply_slicers(data):
@@ -151,61 +157,9 @@ def plot_scatter_with_regression(data, x_var, y_var):
151
  st.write(f"상관계수: {r_value:.4f}")
152
  st.write(f"p-value: {p_value:.4f}")
153
  st.write(f"표준 오차: {std_err:.4f}")
154
-
155
- def perform_analysis():
156
- if st.session_state.processed_data is not None and not st.session_state.processed_data.empty:
157
- st.header("탐색적 데이터 분석")
158
-
159
- # 슬라이서 생성 및 적용
160
- create_slicers(st.session_state.processed_data)
161
- filtered_data = apply_slicers(st.session_state.processed_data)
162
-
163
- # 요약 통계
164
- st.write("요약 통계:")
165
- st.write(filtered_data.describe())
166
-
167
- # 상관관계 히트맵
168
- st.subheader("상관관계 히트맵")
169
- plot_correlation_heatmap(filtered_data)
170
-
171
- # 사용자가 선택한 두 변수에 대한 산점도 및 회귀 분석
172
- st.subheader("두 변수 간의 관계 분석")
173
- st.session_state.x_var = st.selectbox("X축 변수 선택", options=st.session_state.numeric_columns, key='x_var')
174
- st.session_state.y_var = st.selectbox("Y축 변수 선택", options=[col for col in st.session_state.numeric_columns if col != st.session_state.x_var], key='y_var')
175
-
176
- if st.session_state.x_var and st.session_state.y_var:
177
- plot_scatter_with_regression(filtered_data, st.session_state.x_var, st.session_state.y_var)
178
-
179
- st.session_state.analysis_performed = True
180
- else:
181
- st.warning("분석할 데이터가 없습니다. 데이터를 먼저 로드하고 전처리해주세요.")
182
-
183
-
184
- # state 유지하도록 추가
185
-
186
- def update_filtered_data():
187
- st.session_state.filtered_data = apply_slicers(st.session_state.processed_data)
188
-
189
- def create_slicers(data):
190
- for col in st.session_state.categorical_columns:
191
- if data[col].nunique() <= 10:
192
- st.session_state.slicers[col] = st.multiselect(
193
- f"{col} 선택",
194
- options=sorted(data[col].unique()),
195
- default=sorted(data[col].unique()),
196
- key=f"slicer_{col}",
197
- on_change=update_filtered_data
198
- )
199
-
200
- def apply_slicers(data):
201
- filtered_data = data.copy()
202
- for col, selected_values in st.session_state.slicers.items():
203
- if selected_values:
204
- filtered_data = filtered_data[filtered_data[col].isin(selected_values)]
205
- return filtered_data
206
 
207
  def perform_analysis():
208
- if 'filtered_data' not in st.session_state or st.session_state.filtered_data is None:
209
  st.session_state.filtered_data = st.session_state.processed_data.copy()
210
 
211
  st.header("탐색적 데이터 분석")
@@ -234,16 +188,23 @@ def main():
234
 
235
  manage_session_state()
236
 
237
- if 'data' not in st.session_state or st.session_state.data is None:
238
- # ... (데이터 로드 부분)
 
 
 
 
 
 
 
239
 
240
  if st.session_state.data is not None:
241
  st.subheader("데이터 미리보기 및 수정")
242
  st.write("데이터를 확인하고 필요한 경우 수정하세요:")
243
  edited_data = st.data_editor(st.session_state.data, num_rows="dynamic", key="data_editor")
244
 
245
- if st.button("데이터 분석 시작", key="start_analysis") or ('analysis_performed' in st.session_state and st.session_state.analysis_performed):
246
- if 'analysis_performed' not in st.session_state or not st.session_state.analysis_performed:
247
  st.session_state.processed_data = preprocess_data(edited_data)
248
  st.session_state.analysis_performed = True
249
  perform_analysis()
 
35
  st.session_state.slicers = {}
36
  if 'analysis_performed' not in st.session_state:
37
  st.session_state.analysis_performed = False
38
+ if 'filtered_data' not in st.session_state:
39
+ st.session_state.filtered_data = None
40
 
41
  # 데이터 로드
42
  @st.cache_data
 
97
 
98
  return data
99
 
100
+ def update_filtered_data():
101
+ st.session_state.filtered_data = apply_slicers(st.session_state.processed_data)
102
+
103
  def create_slicers(data):
104
  for col in st.session_state.categorical_columns:
105
+ if data[col].nunique() <= 10:
106
  st.session_state.slicers[col] = st.multiselect(
107
  f"{col} 선택",
108
  options=sorted(data[col].unique()),
109
  default=sorted(data[col].unique()),
110
+ key=f"slicer_{col}",
111
+ on_change=update_filtered_data
112
  )
113
 
114
  def apply_slicers(data):
 
157
  st.write(f"상관계수: {r_value:.4f}")
158
  st.write(f"p-value: {p_value:.4f}")
159
  st.write(f"표준 오차: {std_err:.4f}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
 
161
  def perform_analysis():
162
+ if st.session_state.filtered_data is None:
163
  st.session_state.filtered_data = st.session_state.processed_data.copy()
164
 
165
  st.header("탐색적 데이터 분석")
 
188
 
189
  manage_session_state()
190
 
191
+ if st.session_state.data is None:
192
+ data_input_method = st.radio("데이터 입력 방법 선택:", ("파일 업로드", "수동 입력"), key="data_input_method")
193
+
194
+ if data_input_method == "파일 업로드":
195
+ uploaded_file = st.file_uploader("CSV, XLS, 또는 XLSX 파일을 선택하세요", type=["csv", "xls", "xlsx"], key="file_uploader")
196
+ if uploaded_file is not None:
197
+ st.session_state.data = load_data(uploaded_file)
198
+ else:
199
+ st.session_state.data = manual_data_entry()
200
 
201
  if st.session_state.data is not None:
202
  st.subheader("데이터 미리보기 및 수정")
203
  st.write("데이터를 확인하고 필요한 경우 수정하세요:")
204
  edited_data = st.data_editor(st.session_state.data, num_rows="dynamic", key="data_editor")
205
 
206
+ if st.button("데이터 분석 시작", key="start_analysis") or st.session_state.analysis_performed:
207
+ if not st.session_state.analysis_performed:
208
  st.session_state.processed_data = preprocess_data(edited_data)
209
  st.session_state.analysis_performed = True
210
  perform_analysis()