VicGerardoPR commited on
Commit
6fb53ca
1 Parent(s): a4f27d8
Files changed (2) hide show
  1. .DS_Store +0 -0
  2. app.py +64 -2
.DS_Store CHANGED
Binary files a/.DS_Store and b/.DS_Store differ
 
app.py CHANGED
@@ -5,6 +5,7 @@ import matplotlib.pyplot as plt
5
  import seaborn as sns
6
  import io
7
  import base64
 
8
  from pandas.api.types import is_numeric_dtype
9
 
10
  st.set_page_config(page_title="EDA y Limpieza de Datos", layout="wide")
@@ -292,13 +293,74 @@ def main():
292
  st.header("馃搧 Carga tu archivo")
293
  uploaded_file = st.file_uploader("Selecciona un archivo CSV o Excel", type=['csv', 'xlsx', 'xls'])
294
 
 
 
 
 
 
 
 
 
295
  if uploaded_file is not None:
296
  try:
297
  # Determinar tipo de archivo y leerlo
298
  if uploaded_file.name.endswith('.csv'):
299
- df = pd.read_csv(uploaded_file)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
  else:
301
- df = pd.read_excel(uploaded_file)
 
 
302
 
303
  # Crear pesta帽as para organizar el an谩lisis
304
  tab1, tab2, tab3, tab4 = st.tabs(["馃搳 Resumen de datos", "馃搱 Visualizaciones", "馃攧 Correlaciones", "馃Ч Limpieza"])
 
5
  import seaborn as sns
6
  import io
7
  import base64
8
+ import chardet
9
  from pandas.api.types import is_numeric_dtype
10
 
11
  st.set_page_config(page_title="EDA y Limpieza de Datos", layout="wide")
 
293
  st.header("馃搧 Carga tu archivo")
294
  uploaded_file = st.file_uploader("Selecciona un archivo CSV o Excel", type=['csv', 'xlsx', 'xls'])
295
 
296
+ # Opciones avanzadas de importaci贸n
297
+ with st.expander("Opciones avanzadas de importaci贸n"):
298
+ custom_encoding = st.text_input("Especificar codificaci贸n personalizada (opcional)", placeholder="Ejemplo: latin1, utf-8-sig, cp1252")
299
+ csv_separator = st.text_input("Separador CSV personalizado (opcional)", placeholder="Por defecto: ," )
300
+ skip_rows = st.number_input("Saltar filas iniciales", min_value=0, value=0)
301
+ detect_encoding = st.checkbox("Detectar autom谩ticamente la codificaci贸n (puede ser lento para archivos grandes)")
302
+ decimal_separator = st.radio("Separador decimal", options=[".", ","], index=0)
303
+
304
  if uploaded_file is not None:
305
  try:
306
  # Determinar tipo de archivo y leerlo
307
  if uploaded_file.name.endswith('.csv'):
308
+ try:
309
+ # Preparar opciones para read_csv
310
+ csv_options = {
311
+ 'skiprows': skip_rows,
312
+ 'decimal': decimal_separator
313
+ }
314
+
315
+ # Agregar separador personalizado si se proporciona
316
+ if csv_separator:
317
+ csv_options['sep'] = csv_separator
318
+
319
+ # Detectar codificaci贸n si est谩 marcada la opci贸n
320
+ if detect_encoding:
321
+ uploaded_file.seek(0)
322
+ result = chardet.detect(uploaded_file.read())
323
+ detected_encoding = result['encoding']
324
+ confidence = result['confidence']
325
+ uploaded_file.seek(0)
326
+
327
+ st.info(f"Codificaci贸n detectada: {detected_encoding} (confianza: {confidence:.2f})")
328
+ csv_options['encoding'] = detected_encoding
329
+
330
+ # Usar codificaci贸n personalizada si se proporciona
331
+ elif custom_encoding:
332
+ csv_options['encoding'] = custom_encoding
333
+ else:
334
+ # Intentar con diferentes codificaciones
335
+ encodings = ['utf-8', 'latin1', 'ISO-8859-1', 'cp1252']
336
+
337
+ for encoding in encodings:
338
+ try:
339
+ # Reiniciar la posici贸n del archivo para cada intento
340
+ uploaded_file.seek(0)
341
+ df = pd.read_csv(uploaded_file, encoding=encoding, **csv_options)
342
+ st.success(f"Archivo le铆do correctamente usando codificaci贸n: {encoding}")
343
+ break
344
+ except UnicodeDecodeError:
345
+ continue
346
+ else: # Este bloque se ejecuta si el bucle termina sin un break
347
+ raise Exception("No se pudo decodificar el archivo con ninguna de las codificaciones intentadas.")
348
+
349
+ # Si llegamos aqu铆 con una codificaci贸n personalizada o detectada
350
+ if custom_encoding or detect_encoding:
351
+ uploaded_file.seek(0)
352
+ df = pd.read_csv(uploaded_file, **csv_options)
353
+
354
+ except Exception as e:
355
+ # Si todas las opciones fallan, intentar con reemplazo de caracteres
356
+ uploaded_file.seek(0)
357
+ # Agregamos low_memory=False para evitar problemas con archivos grandes
358
+ df = pd.read_csv(uploaded_file, encoding_errors='replace', low_memory=False, **csv_options)
359
+ st.warning(f"Se us贸 reemplazo de caracteres desconocidos. Algunos caracteres pueden no verse correctamente.")
360
  else:
361
+ # Opciones para archivos Excel
362
+ excel_options = {'skiprows': skip_rows}
363
+ df = pd.read_excel(uploaded_file, **excel_options)
364
 
365
  # Crear pesta帽as para organizar el an谩lisis
366
  tab1, tab2, tab3, tab4 = st.tabs(["馃搳 Resumen de datos", "馃搱 Visualizaciones", "馃攧 Correlaciones", "馃Ч Limpieza"])