JUNGU commited on
Commit
5d89abf
·
verified ·
1 Parent(s): cc156a3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -17
app.py CHANGED
@@ -70,7 +70,20 @@ def manual_data_entry():
70
  return None
71
 
72
  def preprocess_data(data):
73
- # 결측치 처리
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  if data.isnull().sum().sum() > 0:
75
  st.write("결측치 처리:")
76
  for column in data.columns:
@@ -81,24 +94,21 @@ def preprocess_data(data):
81
  if method == "제거":
82
  data = data.dropna(subset=[column])
83
  elif method == "평균으로 대체":
84
- data[column].fillna(data[column].mean(), inplace=True)
 
 
 
85
  elif method == "중앙값으로 대체":
86
- data[column].fillna(data[column].median(), inplace=True)
 
 
 
87
  elif method == "최빈값으로 대체":
88
  data[column].fillna(data[column].mode()[0], inplace=True)
89
 
90
- # 데이터 타입 변환
91
- for column in data.columns:
92
- if data[column].dtype == 'object':
93
- try:
94
- data[column] = pd.to_numeric(data[column])
95
- st.write(f"{column} 열을 숫자형으로 변환했습니다.")
96
- except ValueError:
97
- st.write(f"{column} 열은 범주형으로 유지됩니다.")
98
-
99
  # 숫자형 열과 범주형 열 분리
100
  st.session_state.numeric_columns = data.select_dtypes(include=['float64', 'int64']).columns.tolist()
101
- st.session_state.categorical_columns = data.select_dtypes(include=['object']).columns.tolist()
102
 
103
  return data
104
 
@@ -124,10 +134,14 @@ def apply_slicers(data):
124
  return filtered_data
125
 
126
  def plot_correlation_heatmap(data):
127
- corr = data[st.session_state.numeric_columns].corr()
128
- fig = px.imshow(corr, color_continuous_scale='RdBu_r', zmin=-1, zmax=1)
129
- fig.update_layout(title='상관관계 히트맵')
130
- st.plotly_chart(fig)
 
 
 
 
131
 
132
  def plot_scatter_with_regression(data, x_var, y_var):
133
  fig = px.scatter(data, x=x_var, y=y_var, color='반' if '반' in data.columns else None)
 
70
  return None
71
 
72
  def preprocess_data(data):
73
+ # 데이터 타입 추론 및 변환
74
+ for column in data.columns:
75
+ if data[column].dtype == 'object':
76
+ try:
77
+ # NaN 값을 무시하고 숫자로 변환 시도
78
+ numeric_converted = pd.to_numeric(data[column], errors='coerce')
79
+ # 모든 값이 NaN이 아니라면 변환된 열을 사용
80
+ if not numeric_converted.isna().all():
81
+ data[column] = numeric_converted
82
+ st.write(f"'{column}' 열을 숫자형으로 변환했습니다.")
83
+ except:
84
+ st.write(f"'{column}' 열은 범주형으로 유지됩니다.")
85
+
86
+ # 결측치 처리 (기존 코드 유지)
87
  if data.isnull().sum().sum() > 0:
88
  st.write("결측치 처리:")
89
  for column in data.columns:
 
94
  if method == "제거":
95
  data = data.dropna(subset=[column])
96
  elif method == "평균으로 대체":
97
+ if pd.api.types.is_numeric_dtype(data[column]):
98
+ data[column].fillna(data[column].mean(), inplace=True)
99
+ else:
100
+ st.warning(f"{column} 열은 숫자형이 아니어서 평균값으로 대체할 수 없습니다.")
101
  elif method == "중앙값으로 대체":
102
+ if pd.api.types.is_numeric_dtype(data[column]):
103
+ data[column].fillna(data[column].median(), inplace=True)
104
+ else:
105
+ st.warning(f"{column} 열은 숫자형이 아니어서 중앙값으로 대체할 수 없습니다.")
106
  elif method == "최빈값으로 대체":
107
  data[column].fillna(data[column].mode()[0], inplace=True)
108
 
 
 
 
 
 
 
 
 
 
109
  # 숫자형 열과 범주형 열 분리
110
  st.session_state.numeric_columns = data.select_dtypes(include=['float64', 'int64']).columns.tolist()
111
+ st.session_state.categorical_columns = data.select_dtypes(exclude=['float64', 'int64']).columns.tolist()
112
 
113
  return data
114
 
 
134
  return filtered_data
135
 
136
  def plot_correlation_heatmap(data):
137
+ numeric_data = data[st.session_state.numeric_columns]
138
+ if not numeric_data.empty:
139
+ corr = numeric_data.corr()
140
+ fig = px.imshow(corr, color_continuous_scale='RdBu_r', zmin=-1, zmax=1)
141
+ fig.update_layout(title='상관관계 히트맵')
142
+ st.plotly_chart(fig)
143
+ else:
144
+ st.warning("상관관계 히트맵을 그릴 수 있는 숫자형 열이 없습니다.")
145
 
146
  def plot_scatter_with_regression(data, x_var, y_var):
147
  fig = px.scatter(data, x=x_var, y=y_var, color='반' if '반' in data.columns else None)