-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBASE.py
More file actions
66 lines (47 loc) · 2.92 KB
/
BASE.py
File metadata and controls
66 lines (47 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import pandas as pd
import os
path = '/Users/fabian/Desktop/Cosas cientificas/DSC/ATENCIONURGENCIAS'
archivos = sorted([f for f in os.listdir(path) if f.endswith('.csv')], reverse=True)
lista_dfs = []
mapeo_est_region = {}
print("Iniciando Extracción y Limpieza (Versión Corregida)...")
# FASE A: Construcción del Diccionario (Aprendiendo IDs de 2023-2025)
for archivo in archivos:
if any(yr in archivo for yr in ['2023', '2024', '2025']):
ruta = os.path.join(path, archivo)
df_map = pd.read_csv(ruta, sep=';', encoding='latin-1', usecols=['IdEstablecimiento', 'CodigoRegion'], dtype={'IdEstablecimiento': str})
# Limpiamos el ID: quitamos guiones y espacios para estandarizar
df_map['IdEstablecimiento'] = df_map['IdEstablecimiento'].str.replace('-', '').str.strip()
for _, row in df_map.iterrows():
if row['CodigoRegion'] == 14: # Región de los Ríos
mapeo_est_region[row['IdEstablecimiento']] = 14
print(f"Diccionario listo. {len(mapeo_est_region)} centros mapeados.")
# FASE B: Procesamiento y Rescate
for archivo in archivos:
ruta_completa = os.path.join(path, archivo)
print(f"📦 Procesando: {archivo}...", end=" ")
df = pd.read_csv(ruta_completa, sep=';', encoding='latin-1', low_memory=False, dtype={'IdEstablecimiento': str})
# 1. Limpiamos los IDs de este archivo para que coincidan con nuestro diccionario
df['IdEstablecimiento'] = df['IdEstablecimiento'].str.replace('-', '').str.strip()
# 2. Inyectamos la región si falta
if 'CodigoRegion' not in df.columns:
df['CodigoRegion'] = df['IdEstablecimiento'].map(mapeo_est_region)
# 3. Filtramos por Los Ríos (14)
df_rios = df[df['CodigoRegion'] == 14].copy()
# 4. EL NUEVO FILTRO BIOQUÍMICO (A prueba de balas)
# Incluye U07 (código CIE-10 para COVID) y variaciones de escritura.
patron = 'COVID|U07|SARS|INFLUENZA|NEUMON|BRONQUITIS|RESPIRATORIA'
# En 2021 se llamaba GlosaCausa, en otros años pudo variar, aseguramos el nombre:
col_glosa = 'GlosaCausa' if 'GlosaCausa' in df_rios.columns else 'GLOSACAUSA'
df_rios = df_rios[df_rios[col_glosa].str.contains(patron, case=False, na=False)]
df_rios = df_rios.rename(columns={col_glosa: 'GlosaCausa'}) # Estandarizar
columnas_finales = ['fecha', 'IdEstablecimiento', 'NEstablecimiento', 'GlosaCausa',
'Total', 'Menores_1', 'De_1_a_4', 'De_5_a_14', 'De_15_a_64', 'De_65_y_mas']
lista_dfs.append(df_rios[columnas_finales])
print(f"({len(df_rios)} registros respiratorios)")
# Unión Final
df_maestro = pd.concat(lista_dfs, ignore_index=True)
df_maestro['fecha'] = pd.to_datetime(df_maestro['fecha'], errors='coerce')
df_maestro = df_maestro.sort_values(by='fecha')
df_maestro.to_csv('datos_finales_los_rios.csv', index=False)
print(f"\n✨ ¡Misión cumplida! Dataset FINAL consolidado: {len(df_maestro)} filas totales.")