Eric2mangel commited on
Commit
25f5b6f
·
verified ·
1 Parent(s): 1cc6897

Update app.py

Browse files

Problème d'import des csv mal remplis

Files changed (1) hide show
  1. app.py +41 -1
app.py CHANGED
@@ -50,8 +50,32 @@ with st.sidebar:
50
  if uploaded_file is not None:
51
  try:
52
  df = pd.read_csv(uploaded_file, sep=None, engine='python')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  df = df.dropna()
54
- st.success("✅ Fichier CSV chargé !")
 
 
 
 
 
55
  except Exception as e:
56
  st.error(f"Erreur : {e}")
57
  df = None
@@ -74,6 +98,11 @@ with st.sidebar:
74
  y = df[target]
75
  X = df.drop(columns=[target])
76
 
 
 
 
 
 
77
  task = "Regression" if (y.dtype.kind in "ifu" and y.nunique() > 10) else "Classification"
78
  excluded_features = st.multiselect("Variables à exclure :", X.columns.tolist(), default=[])
79
  X = X.drop(columns=excluded_features)
@@ -118,6 +147,11 @@ if df is not None and X is not None:
118
  num_cols = X.select_dtypes(include=[np.number]).columns.tolist()
119
  cat_cols = X.select_dtypes(exclude=[np.number]).columns.tolist()
120
 
 
 
 
 
 
121
  preprocess = ColumnTransformer(transformers=[
122
  ("num", StandardScaler(), num_cols),
123
  ("cat", OneHotEncoder(drop="first", handle_unknown="ignore", sparse_output=False), cat_cols)
@@ -125,6 +159,12 @@ if df is not None and X is not None:
125
 
126
  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=TEST_SIZE, random_state=RANDOM_STATE)
127
  X_train_proc = preprocess.fit_transform(X_train)
 
 
 
 
 
 
128
  feature_names = preprocess.get_feature_names_out()
129
 
130
  model = LinearRegression() if task == "Regression" else LogisticRegression(max_iter=1000)
 
50
  if uploaded_file is not None:
51
  try:
52
  df = pd.read_csv(uploaded_file, sep=None, engine='python')
53
+
54
+ # Seuil de valeurs manquantes (configurable)
55
+ missing_threshold = st.slider(
56
+ "Seuil max de valeurs manquantes (%)",
57
+ min_value=0,
58
+ max_value=100,
59
+ value=50,
60
+ help="Les colonnes avec plus de X% de valeurs manquantes seront supprimées"
61
+ )
62
+
63
+ # Calcul du pourcentage de valeurs manquantes par colonne
64
+ missing_pct = (df.isnull().sum() / len(df)) * 100
65
+ cols_to_drop = missing_pct[missing_pct > missing_threshold].index.tolist()
66
+
67
+ if cols_to_drop:
68
+ st.info(f"ℹ️ {len(cols_to_drop)} colonne(s) supprimée(s) (>{missing_threshold}% manquantes) : {', '.join(cols_to_drop)}")
69
+ df = df.drop(columns=cols_to_drop)
70
+
71
+ # Suppression des lignes avec valeurs manquantes restantes
72
  df = df.dropna()
73
+
74
+ if len(df) == 0:
75
+ st.error("❌ Aucune donnée après nettoyage. Essayez d'augmenter le seuil de valeurs manquantes.")
76
+ df = None
77
+ else:
78
+ st.success(f"✅ Fichier CSV chargé ! ({len(df)} lignes, {len(df.columns)} colonnes)")
79
  except Exception as e:
80
  st.error(f"Erreur : {e}")
81
  df = None
 
98
  y = df[target]
99
  X = df.drop(columns=[target])
100
 
101
+ # Vérification que X n'est pas vide après suppression de la cible
102
+ if len(X.columns) == 0:
103
+ st.warning("⚠️ Aucune variable disponible après sélection de la cible.")
104
+ st.stop()
105
+
106
  task = "Regression" if (y.dtype.kind in "ifu" and y.nunique() > 10) else "Classification"
107
  excluded_features = st.multiselect("Variables à exclure :", X.columns.tolist(), default=[])
108
  X = X.drop(columns=excluded_features)
 
147
  num_cols = X.select_dtypes(include=[np.number]).columns.tolist()
148
  cat_cols = X.select_dtypes(exclude=[np.number]).columns.tolist()
149
 
150
+ # Vérification qu'il y a au moins une variable
151
+ if len(num_cols) == 0 and len(cat_cols) == 0:
152
+ st.warning("⚠️ Aucune variable disponible pour l'analyse. Veuillez ne pas tout exclure.")
153
+ st.stop()
154
+
155
  preprocess = ColumnTransformer(transformers=[
156
  ("num", StandardScaler(), num_cols),
157
  ("cat", OneHotEncoder(drop="first", handle_unknown="ignore", sparse_output=False), cat_cols)
 
159
 
160
  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=TEST_SIZE, random_state=RANDOM_STATE)
161
  X_train_proc = preprocess.fit_transform(X_train)
162
+
163
+ # Vérification que les données transformées ne sont pas vides
164
+ if X_train_proc.shape[0] == 0 or X_train_proc.shape[1] == 0:
165
+ st.error("❌ Erreur : Les données transformées sont vides. Vérifiez votre fichier CSV.")
166
+ st.stop()
167
+
168
  feature_names = preprocess.get_feature_names_out()
169
 
170
  model = LinearRegression() if task == "Regression" else LogisticRegression(max_iter=1000)