Browse Source

upd: Actualización de notebooks y funciones src por generación nuevos consolidados.

Jose Armando 4 months ago
parent
commit
14a6793369
39 changed files with 42756 additions and 5931 deletions
  1. BIN
      .DS_Store
  2. 14
    1
      README.md
  3. 16
    4
      src/pjud/cli.py
  4. 1
    1
      src/pjud/data/__init__.py
  5. 26
    10
      src/pjud/data/cleandata.py
  6. 246
    74
      src/pjud/data/dataconsolidated.py
  7. 60
    56
      src/pjud/data/dataprocessing.py

+ 1
- 1
notebooks/1.1-jalvaradoruiz-extraccion-data-pjud.ipynb

+ 13
- 14
notebooks/3.1-jalvaradoruiz-carga-limpieza-data-ingresos-materia.ipynb

+ 81
- 77
notebooks/3.2-jalvaradoruiz-carga-limpieza-data-terminos-materia.ipynb

+ 53
- 74
notebooks/3.3-jalvaradoruiz-carga-limpieza-data-ingresos-rol.ipynb

+ 96
- 92
notebooks/3.4-jalvaradoruiz-carga-limpieza-data-terminos-rol.ipynb

+ 66
- 79
notebooks/3.5-jalvaradoruiz-carga-limpieza-data-inventario.ipynb

+ 25
- 25
notebooks/3.6-jalvaradoruiz-carga-limpieza-data-audiencias.ipynb

+ 71
- 84
notebooks/3.7-jalvaradoruiz-carga-limpieza-data-duraciones.ipynb

+ 25
- 34
notebooks/3.8-jalvaradoruiz-carga-limpieza-data-delitos.ipynb

+ 2
- 2
notebooks/4.1-jalvaradoruiz-construccion-dataset-juzgados-garantia.ipynb

+ 1
- 1
notebooks/4.2-jalvaradoruiz-construccion-dataset-tribunales-orales.ipynb

+ 1
- 1
notebooks/4.3-jalvaradoruiz-construccion-dataset-juzgados-letras-garantia.ipynb

+ 1
- 1
notebooks/4.4-jalvaradoruiz-construccion-dataset-comunas-chile.ipynb

+ 1
- 1
notebooks/4.5-jalvaradoruiz-construccion-dataset-censo-2017.ipynb

+ 3
- 3
notebooks/5.1-jalvaradoruiz-procesamiento-dataset-juzgados-penales.ipynb

+ 338
- 278
notebooks/5.2-jalvaradoruiz-procesamiento-dataset-materia.ipynb

+ 918
- 324
notebooks/5.3-jalvaradoruiz-procesamiento-dataset-rol.ipynb

+ 45
- 346
notebooks/5.4-jalvaradoruiz-procesamiento-dataset-audiencias.ipynb

+ 150
- 172
notebooks/5.5-jalvaradoruiz-procesamiento-dataset-inventarios.ipynb

+ 129
- 153
notebooks/5.6-jalvaradoruiz-procesamiento-dataset-duraciones.ipynb

+ 1504
- 356
notebooks/5.7-jalvaradoruiz-procesamiento-dataset-cortes.ipynb

+ 1103
- 1249
notebooks/6.1-jalvaradoruiz-consolidacion-dataset-materia.ipynb

+ 1179
- 947
notebooks/6.2-jalvaradoruiz-consolidacion-dataset-rol.ipynb

+ 1199
- 1471
notebooks/6.3-jalvaradoruiz-consolidacion-dataset-materia-rol.ipynb

+ 2672
- 0
notebooks/6.4-jalvaradoruiz-consolidado-causas.ipynb

+ 2234
- 0
notebooks/6.5-jalvaradoruiz-consolidado-audiencias.ipynb

+ 2571
- 0
notebooks/6.6-jalvaradoruiz-consolidado-inventario.ipynb

+ 2004
- 0
notebooks/6.7-jalvaradoruiz-consolidado-duraciones.ipynb

+ 9486
- 0
notebooks/7.1-jalvaradoruiz-visualizacion-data-cortes.ipynb

+ 4299
- 0
notebooks/7.2-jalvaradoruiz-visualizacion-data-garantia.ipynb

+ 5852
- 0
notebooks/7.3-jalvaradoruiz-visualizacion-data-top.ipynb

+ 6270
- 0
notebooks/7.4-jalvaradoruiz-visualizacion-data-cortes.ipynb

BIN
.DS_Store

+ 14
- 1
README.md

@@ -1,7 +1,20 @@
 Analisis OpenData Pjud
 ==============================
 
-Este proyecto busca analizar los datos abiertos del Poder Judicial de Chile.
+El Poder Judicial de la República de Chile está constituido por los tribunales nacionales, autónomos e independientes, establecidos por la ley, a los cuales les corresponde la función jurisdiccional, es decir, el conocimiento y resolución de conflictos de relevancia jurídica, cualquiera que sea su naturaleza o calidad de las personas que en ellos intervengan, sin perjuicio de las excepciones constitucionales o legales.
+
+Nuestro proyecto busca analizar los datos de esta institución referente al ámbito Penal, la cual se refiere al conjunto de comportamientos que dan lugar a un hecho ilícito. 
+
+Un delito consiste en un comportamiento culpable y contrario a la ley que conlleva una pena o sanción, la cual se juzga en tribunales penales como son los Juzgados de Garantía, Juzgados de letras y Garantía y los Tribunales Orales, que además se encuentran organizados por territorio y asociados a Cortes de Apelaciones.
+
+Los registros que se analizan se basan en el proyecto de Open Data del Poder Judicial (http://numeros.pjud.cl) donde se encuentran los datos de todos los tribunales del país en el período 2015 al 2019.
+
+Entre las tareas realizadas en este proyecto estan:
+
+-	Extracción de la Data
+-	Analisis preliminar de los datos extraidos
+-	Limpieza y transformación de la Data
+-	Visualización global de los datos mediante diversos criterios.
 
 Project Organization
 ------------

+ 16
- 4
src/pjud/cli.py

@@ -43,7 +43,7 @@ def wrapper_garantia():
     jurisdicciones.garantia()
 
 @main.command('organic-top')
-def wrapper_garantia():
+def wrapper_top():
     jurisdicciones.top()
 
 @main.command('organic-jletras')
@@ -98,6 +98,18 @@ def wrapper_consolidated_rol():
 def wrapper_consolidated_materia_rol():
     dataconsolidated.consolidated_materia_rol()
 
-@main.command('consolidate-fulldata')
-def wrapper_consolidated_full():
-    dataconsolidated.consolidated_full()
+@main.command('consolidate-fulldata_causa')
+def wrapper_consolidated_fulldata_causa():
+    dataconsolidated.consolidated_fulldata_causa()
+
+@main.command('consolidate-fulldata_audiencias')
+def wrapper_consolidated_fulldata_audiencias():
+    dataconsolidated.consolidated_fulldata_audiencias()
+
+@main.command('consolidate-fulldata_inventario')
+def wrapper_consolidated_fulldata_inventario():
+    dataconsolidated.consolidated_fulldata_inventario()
+
+@main.command('consolidate-fulldata_duracion')
+def wrapper_consolidated_fulldata_duracion():
+    dataconsolidated.consolidated_fulldata_duracion()

+ 1
- 1
src/pjud/data/__init__.py

@@ -2,7 +2,7 @@ import os
 
 
 
-def save_feather(df, filename, path = "data/interim/pjud"):
+def save_feather(df, filename, path):
     df.reset_index(inplace=True)
 
     # Guardamos dataset como archivo feather

+ 26
- 10
src/pjud/data/cleandata.py

@@ -15,6 +15,15 @@ def convierte_fecha(fecha):
     
     return datetime(year,month,day) 
 
+def obtiene_año(rit): 
+    try:
+        rol,year = map(int,rit.split(sep = "-"))
+    except:
+        #print(f"no pude ejecutar {fecha}")
+        return pd.NaT
+    
+    return (year) 
+
 def elimina_tilde(str_variable):
     replacements = {'Á': 'A',
                     'É': 'E',
@@ -211,7 +220,7 @@ def carga_limpieza_ingresos_materia():
 
     data.save_feather(df_ingresos_materia, 'clean_IngresosMateria')
 
-    click.echo('Generado archivo Feather. Proceso Terminado')
+    click.echo("Generado archivo Feather 'clean_IngresosMateria.feather'. Proceso Terminado")
 
 def carga_limpieza_terminos_materia():
     df_termino_materia = load_concatenate_by_filename('Términos por Materia Penal')
@@ -260,6 +269,10 @@ def carga_limpieza_terminos_materia():
     cols = df_termino_materia.select_dtypes(include = ["object"]).columns
     df_termino_materia[cols] = df_termino_materia[cols].progress_apply(elimina_tilde)
 
+    # Limpieza de RIT 
+    click.echo('Limpieza de RIT')
+    df_termino_materia['RIT'] = df_termino_materia['RIT'].progress_apply(limpia_rit)
+
     # Categorizar variables
 
     df_termino_materia['CORTE'] = df_termino_materia['CORTE'].astype('category')
@@ -274,7 +287,7 @@ def carga_limpieza_terminos_materia():
 
     data.save_feather(df_termino_materia, 'clean_TerminosMateria')
 
-    click.echo('Generado archivo Feather. Proceso Terminado')
+    click.echo("Generado archivo Feather 'clean_TerminosMateria.feather'. Proceso Terminado")
 
 def carga_limpieza_ingresos_rol():
     df_ingresos_rol = load_concatenate_by_filename('Ingresos por Rol Penal')
@@ -306,7 +319,7 @@ def carga_limpieza_ingresos_rol():
 
     data.save_feather(df_ingresos_rol,'clean_IngresosRol')
 
-    click.echo('Generado archivo Feather. Proceso Terminado')
+    click.echo("Generado archivo Feather 'clena_IngresosRol.feather'. Proceso Terminado")
 
 def carga_limpieza_terminos_rol():
     df_termino_rol = load_concatenate_by_filename('Términos por Rol Penal')
@@ -349,6 +362,9 @@ def carga_limpieza_terminos_rol():
     click.echo('Elimino espacios en las columnas tipo objeto')
     df_termino_rol = df_termino_rol.progress_apply(elimina_espacios, axis=0)
 
+    click.echo('Limpieza de RIT')
+    df_termino_rol['RIT'] = df_termino_rol['RIT'].progress_apply(limpia_rit)
+
     # Transformamos en variables categoricas
 
     df_termino_rol['CORTE'] = df_termino_rol['CORTE'].astype('category')
@@ -360,7 +376,7 @@ def carga_limpieza_terminos_rol():
 
     data.save_feather(df_termino_rol,'clean_TerminosRol')
 
-    click.echo('Generado archivo Feather. Proceso Terminado')
+    click.echo("Generado archivo Feather clean_TerminosRol.feather'. Proceso Terminado")
 
 def carga_limpieza_inventario():
     df_inventario = load_concatenate_by_filename('Inventario Causas en Tramitación Penal')
@@ -410,7 +426,7 @@ def carga_limpieza_inventario():
 
     data.save_feather(df_inventario,'clean_Inventario')
 
-    click.echo('Generado archivo Feather. Proceso Terminado')
+    click.echo("Generado archivo Feather 'clean_Inventario.feather'. Proceso Terminado")
 
 def carga_limpieza_audiencias():
     df_audiencias = load_concatenate_by_filename('Audiencias Realizadas Penal')
@@ -466,7 +482,7 @@ def carga_limpieza_audiencias():
 
     data.save_feather(df_audiencias,'clean_Audiencias')
 
-    click.echo('Generado archivo Feather. Proceso Terminado')
+    click.echo("Generado archivo Feather 'clean_Audiencias.feather'. Proceso Terminado")
 
 def carga_limpieza_duraciones():
     df_duraciones = load_concatenate_by_filename('Duraciones por Rol Penal')
@@ -521,12 +537,12 @@ def carga_limpieza_duraciones():
     df_duraciones.drop(tipo_causa.index, axis=0, inplace=True)
 
     data.save_feather(df_duraciones, 'clean_Duraciones')
-    click.echo('Generado archivo Feather. Proceso Terminado')
+    click.echo("Generado archivo Feather 'clean_Duraciones.feather'. Proceso Terminado")
 
 def carga_limpieza_delitos():
     tqdm.pandas()
     path_raw = "data/raw/delitos"
-    codigos_delitos = pd.read_excel(f"{path_raw}/codigos_penal_2020.xlsx", sheet_name = "codigos vigentes")
+    codigos_delitos = pd.read_excel(f"{path_raw}/codigos_penal_2020.xlsx", sheet_name = "codigos vigentes", engine='openpyxl')
     
     # elimino filas con NaN
     codigos_delitos = codigos_delitos.drop_duplicates() 
@@ -567,7 +583,7 @@ def carga_limpieza_delitos():
     df_delitos_vigentes['COD. MATERIA'] = df_delitos_vigentes['COD. MATERIA'].fillna(0).astype('int16')
 
     # CARGA Y LIMPIEZA DE DATOS RELACIONADOS A DELITOS NO VIGENTES
-    codigos_delitos_novigentes = pd.read_excel(f"{path_raw}/codigos_penal_2020.xlsx", sheet_name = "Codigos no vigentes")
+    codigos_delitos_novigentes = pd.read_excel(f"{path_raw}/codigos_penal_2020.xlsx", sheet_name = "Codigos no vigentes", engine='openpyxl')
 
     # cambio nombres columnas
 
@@ -605,4 +621,4 @@ def carga_limpieza_delitos():
     df_delitos = pd.concat([df_delitos_vigentes,df_delitos_no_vigentes])
 
     data.save_feather(df_delitos,'clean_Delitos',path='data/processed/delitos')
-    click.echo('Generado archivo Feather. Proceso Terminado')
+    click.echo("Generado archivo Feather 'clean_Delitos.feather'. Proceso Terminado")

+ 246
- 74
src/pjud/data/dataconsolidated.py

@@ -16,7 +16,7 @@ def consolidated_materia(path_processed = "data/processed/pjud"):
 
     df_fulldata_materia = pd.merge(df_ingresos_materia, df_termino_materia, how='outer', on=['COD. TRIBUNAL','RIT','COD. MATERIA'])
 
-    columnas_drop = ['level_0_x', 'index_x', 'level_0_y', 'index_y', 'MES INGRESO', 'MES TERMINO']
+    columnas_drop = ['index_x', 'index_y', 'MES INGRESO', 'MES TERMINO']
     df_fulldata_materia.drop(columnas_drop, axis = 'columns', inplace = True)
 
     click.echo('Transformando data faltante ...')
@@ -25,13 +25,13 @@ def consolidated_materia(path_processed = "data/processed/pjud"):
     columnas_drop = ['TIPO CAUSA_y', 'MATERIA_y', 'TRIBUNAL_y', 'COD. CORTE_y', 'CORTE_y', 'FECHA INGRESO_y']
     df_fulldata_materia.drop(columnas_drop, axis = 'columns', inplace = True)
 
-    df_fulldata_materia.rename(columns = {'COD. CORTE_x':'COD. CORTE',
-                                          'CORTE_x':'CORTE',
-                                          'TRIBUNAL_x':'TRIBUNAL',
-                                          'TIPO CAUSA_x':'TIPO CAUSA',
-                                          'MATERIA_x':'MATERIA',
-                                          'FECHA INGRESO_x':'FECHA INGRESO'
-                                         }, inplace = True)
+    df_fulldata_materia.rename(columns =   {'COD. CORTE_x':'COD. CORTE',
+                                            'CORTE_x':'CORTE',
+                                            'TRIBUNAL_x':'TRIBUNAL',
+                                            'TIPO CAUSA_x':'TIPO CAUSA',
+                                            'MATERIA_x':'MATERIA',
+                                            'FECHA INGRESO_x':'FECHA INGRESO'
+                                            }, inplace = True)
 
     filtro_oral = df_fulldata_materia[df_fulldata_materia['TRIBUNAL'].str.contains('ORAL')]
     filtro_garantia = df_fulldata_materia[df_fulldata_materia['TRIBUNAL'].str.contains('GARANTIA')]
@@ -49,7 +49,7 @@ def consolidated_rol(path_processed = "data/processed/pjud"):
 
     df_fulldata_rol = pd.merge(df_ingresos_rol, df_termino_rol, how='outer', on=['COD. TRIBUNAL','RIT'])
 
-    columnas_drop = ['level_0_x', 'index_x', 'level_0_y', 'index_y', 'MES INGRESO', 'MES TERMINO']
+    columnas_drop = ['index_x', 'index_y', 'MES INGRESO', 'MES TERMINO']
     df_fulldata_rol.drop(columnas_drop, axis = 'columns', inplace = True)
 
     click.echo('Transformando data faltante ...')
@@ -58,13 +58,13 @@ def consolidated_rol(path_processed = "data/processed/pjud"):
     columnas_drop = ['TIPO CAUSA_y', 'TRIBUNAL_y', 'COD. CORTE_y', 'CORTE_y', 'FECHA INGRESO_y']
     df_fulldata_rol.drop(columnas_drop, axis = 'columns', inplace = True)
 
-    df_fulldata_rol.rename(columns = {'COD. CORTE_x':'COD. CORTE',
-                                  'CORTE_x':'CORTE',
-                                  'TRIBUNAL_x':'TRIBUNAL',
-                                  'TIPO CAUSA_x':'TIPO CAUSA',
-                                  'MATERIA_x':'MATERIA',
-                                  'FECHA INGRESO_x':'FECHA INGRESO'
-                                  }, inplace = True)
+    df_fulldata_rol.rename(columns =   {'COD. CORTE_x':'COD. CORTE',
+                                        'CORTE_x':'CORTE',
+                                        'TRIBUNAL_x':'TRIBUNAL',
+                                        'TIPO CAUSA_x':'TIPO CAUSA',
+                                        'MATERIA_x':'MATERIA',
+                                        'FECHA INGRESO_x':'FECHA INGRESO'
+                                       }, inplace = True)
     
     causas_top = df_fulldata_rol[df_fulldata_rol['TRIBUNAL'].str.contains('ORAL')]
     causas_garantia = df_fulldata_rol[df_fulldata_rol['TRIBUNAL'].str.contains('GARANTIA')]
@@ -83,82 +83,254 @@ def consolidated_materia_rol(path_processed = "data/processed/pjud"):
     df_materia = pd.read_feather(f"{path_processed}/consolidated_Materia.feather")
     df_rol = pd.read_feather(f"{path_processed}/consolidated_Rol.feather")
 
-    df_union = pd.merge(df_materia, df_rol, how='outer', on=['COD. CORTE','COD. TRIBUNAL','RIT'])
+    df_union = pd.merge(df_rol, df_materia, how='left', on=['COD. CORTE','COD. TRIBUNAL','RIT'], indicator=True)
+
+    columnas_duplicadas = ['index_x', 'index_y','CORTE_y', 'TRIBUNAL_y',
+                            'TIPO CAUSA_y', 'FECHA INGRESO_y',
+                            'AÑO INGRESO_y', 'FECHA TERMINO_y',
+                            'AÑO TERMINO_y', 'MOTIVO TERMINO_y','DURACION CAUSA_y',
+                            'TOTAL TERMINOS_y', '_merge']
+
+    df_union.drop(columnas_duplicadas, axis='columns', inplace=True)
+
+    df_union.rename(columns = {'CORTE_x':'CORTE',
+                                'TRIBUNAL_x':'TRIBUNAL',
+                                'TIPO CAUSA_x':'TIPO CAUSA',
+                                'FECHA INGRESO_x':'FECHA INGRESO',
+                                'AÑO INGRESO_x':'AÑO INGRESO',
+                                'FECHA TERMINO_x':'FECHA TERMINO',
+                                'AÑO TERMINO_x':'AÑO TERMINO',
+                                'MOTIVO TERMINO_x':'MOTIVO TERMINO',
+                                'DURACION CAUSA_x':'DURACION CAUSA',
+                                'TOTAL TERMINOS_x':'TOTAL TERMINOS'
+                                },inplace = True)
     
     data.save_feather(df_union, 'consolidated_Materia_Rol', path_processed)
     click.echo('Generado archivo Feather. Proceso Terminado')
 
-def consolidated_full(path_processed = "data/processed/pjud"):
+def consolidated_fulldata_causa(path_processed = "data/processed/pjud"):
     tqdm.pandas()
+    path_delitos = 'data/processed/delitos'
 
     df_causas = pd.read_feather(f"{path_processed}/consolidated_Materia_Rol.feather")
-    df_audiencias = pd.read_feather(f"{path_processed}/processes_Audiencias.feather")
-
-    df_consolidado = pd.merge(df_causas,df_audiencias, how='outer', on=['COD. TRIBUNAL','RIT'])
-
+    df_tipologia = pd.read_feather(f"{path_delitos}/clean_Delitos.feather")
+    df_poblacion = pd.read_feather(f"{path_processed}/processes_DataConsolidada_Poblacion_Jurisdiccion.feather")
     # Unificar RIT y Tribunal en una sola columna para evitar mala interpretacion de causas
-    df_consolidado['TRIBUNAL-RIT'] = df_consolidado['COD. TRIBUNAL'].map(str) + "-" + df_consolidado['RIT'].map(str)
+    df_causas['TRIBUNAL-RIT'] = df_causas['COD. TRIBUNAL'].map(str) + "-" + df_causas['RIT'].map(str)
 
     # Carga Data relacionada a Tipologia de delitos
-    path_delitos = 'data/processed/delitos'
-    df_tipologia = pd.read_feather(f"{path_delitos}/clean_Delitos.feather")
-    df_consolidado = pd.merge(df_consolidado,df_tipologia, how='outer', on=['COD. MATERIA'])
+    df_causa_tipologia = pd.merge(df_causas,df_tipologia, how='left', on=['COD. MATERIA'])
 
-    # Carga Data relacionada a Poblacion
-    df_poblacion = pd.read_feather(f"{path_processed}/processes_DataConsolidada_Poblacion_Jurisdiccion.feather")
-    df_consolidado = pd.merge(df_consolidado,df_poblacion, how='outer', on=['CORTE','TRIBUNAL'])
+    columnas_duplicadas = ['index_x', 'MATERIA_x','index_y']
+    df_causa_tipologia.drop(columnas_duplicadas, axis='columns', inplace=True)
 
-    columnas_duplicadas = ['index_x', 'index_x','CORTE_x','TRIBUNAL_x','TIPO CAUSA_x','MATERIA_x','FECHA INGRESO_x','AÑO INGRESO_x','FECHA TERMINO_x','AÑO TERMINO_x','MOTIVO TERMINO_x','DURACION CAUSA_x',
-                       'TOTAL TERMINOS_x','index_y','CORTE_y','TRIBUNAL_y','TIPO CAUSA_y','level_0','index_y','COD. CORTE_y','index_x','index_y']
+    df_causa_tipologia.rename(columns = {'MATERIA_y':'MATERIA'}, inplace=True)
 
-    df_consolidado.drop(columnas_duplicadas, axis='columns', inplace=True)
+    # Carga Data relacionada a Poblacion
+    
+    df_fulldatacausa = pd.merge(df_causa_tipologia, df_poblacion, how='left', on=['CORTE','TRIBUNAL'])
+
+    columnas_duplicadas = ['index']
+    df_fulldatacausa.drop(columnas_duplicadas, axis='columns', inplace=True)
 
     # Reordenando Nombres de las columnas ...
+    df_fulldatacausa.rename(columns = { 'COD. CORTE':'cod_corte',
+                                        'COD. TRIBUNAL':'cod_tribunal',
+                                        'RIT':'rit',
+                                        'COD. MATERIA':'cod_materia',
+                                        'TOTAL INGRESOS POR MATERIAS':'total_ingresos_materia',
+                                        'FECHA INGRESO':'fecha_ingreso',
+                                        'AÑO INGRESO':'año_ingreso',
+                                        'FECHA TERMINO':'fecha_termino',
+                                        'DURACION CAUSA':'duracion_causa',
+                                        'MOTIVO TERMINO':'motivo_termino',
+                                        'AÑO TERMINO':'año_termino',
+                                        'TOTAL TERMINOS':'total_terminos',
+                                        'CORTE':'corte',
+                                        'TRIBUNAL':'tribunal',
+                                        'TIPO CAUSA':'tipo_causa',
+                                        'TRIBUNAL-RIT':'tribunal_rit',
+                                        'MATERIA':'materia',
+                                        'TIPOLOGIA MATERIA':'tipologia_materia',
+                                        'VIGENCIA MATERIA':'vigencia_materia',
+                                        'REGION':'region',
+                                        'POBLACION':'poblacion',
+                                        'HOMBRES':'hombres',
+                                        'MUJERES':'mujeres',
+                                        'URBANO':'urbano',
+                                        'RURAL':'rural',
+                                        'COMUNAS':'comunas',
+                                        'JUECES':'dotacion_jueces',
+                                        'ASIENTO':'asiento',
+                                        'TIPO JUZGADO':'tipo_juzgado'
+                                        },inplace = True)
+    
+    df_fulldatacausa = df_fulldatacausa[['region','cod_corte','corte','tribunal_rit','cod_tribunal','rit','tribunal','tipo_juzgado','dotacion_jueces','tipo_causa','fecha_ingreso','año_ingreso','cod_materia','materia',
+                                        'tipologia_materia','vigencia_materia','total_ingresos_materia','total_terminos','fecha_termino','año_termino','duracion_causa','motivo_termino','asiento','comunas','poblacion',
+                                        'hombres','mujeres','urbano','rural']]
+
+    data.save_feather(df_fulldatacausa, 'consolidated_FullData_Causa', path_processed)
+    click.echo('Generado archivo Feather. Proceso Terminado')
+
+def consolidated_fulldata_audiencias(path_processed = "data/processed/pjud"):
+    tqdm.pandas()
+
+    df_audiencias = pd.read_feather(f"{path_processed}/processes_Audiencias.feather")
+    df_poblacion = pd.read_feather(f"{path_processed}/processes_DataConsolidada_Poblacion_Jurisdiccion.feather")
+
+
+    df_audiencias['TRIBUNAL-RIT'] = df_audiencias['COD. TRIBUNAL'].map(str) + "-" + df_audiencias['RIT'].map(str)
 
-    df_consolidado.rename(columns = {'COD. CORTE_x':'cod_corte',
-                                 'COD. TRIBUNAL':'cod_tribunal',
-                                 'RIT':'rit',
-                                 'COD. MATERIA':'cod_materia',
-                                 'TOTAL INGRESOS POR MATERIAS':'total_ingresos_materia',
-                                 'FECHA INGRESO_y':'fecha_ingreso',
-                                 'AÑO INGRESO_y':'año_ingreso',
-                                 'FECHA TERMINO_y':'fecha_termino',
-                                 'DURACION CAUSA_y':'duracion_causa',
-                                 'MOTIVO TERMINO_y':'motivo_termino',
-                                 'AÑO TERMINO_y':'año_termino',
-                                 'TOTAL TERMINOS_y':'total_terminos',
-                                 'CORTE':'corte',
-                                 'TRIBUNAL':'tribunal',
-                                 'TIPO CAUSA':'tipo_causa',
-                                 'TIPO DE AUDIENCIA':'tipo_audiencia',
-                                 'FECHA PROGRAMACION AUDIENCIA':'fecha_programacion_audiencia',
-                                 'FECHA AUDIENCIA':'fecha_audiencia',
-                                 'DIAS AGENDAMIENTO':'dias_agendamiento',
-                                 'DURACION AUDIENCIA (MIN)':'duracion_audiencia_minutos',
-                                 'TOTAL AUDIENCIAS':'total_audiencias',
-                                 'TRIBUNAL-RIT':'tribunal_rit',
-                                 'MATERIA_y':'materia',
-                                 'TIPOLOGIA MATERIA':'tipologia_materia',
-                                 'VIGENCIA MATERIA':'vigencia_materia',
-                                 'REGION':'region',
-                                 'POBLACION':'poblacion',
-                                 'HOMBRES':'hombres',
-                                 'MUJERES':'mujeres',
-                                 'URBANO':'urbano',
-                                 'RURAL':'rural',
-                                 'COMUNAS':'comunas',
-                                 'JUECES':'dotacion_jueces',
-                                 'ASIENTO':'asiento',
-                                 'TIPO JUZGADO':'tipo_juzgado'
-                                 },inplace = True)
+    df_audiencias['AÑO INGRESO'] = df_audiencias['RIT'].progress_apply(data.cleandata.obtiene_año)
+    
+    columnas_duplicadas = ['level_0', 'index']
+    df_audiencias.drop(columnas_duplicadas, axis='columns', inplace=True)
+
+    df_fulldataaudiencias = pd.merge(df_audiencias, df_poblacion, how='left', on=['CORTE','TRIBUNAL'])
+
+    columnas_duplicadas = ['index']
+    df_fulldataaudiencias.drop(columnas_duplicadas, axis='columns', inplace=True)
+
+    df_fulldataaudiencias.rename(columns = {'COD. CORTE':'cod_corte',
+                                            'COD. TRIBUNAL':'cod_tribunal',
+                                            'RIT':'rit',
+                                            'CORTE':'corte',
+                                            'TRIBUNAL':'tribunal',
+                                            'TIPO CAUSA':'tipo_causa',
+                                            'TIPO DE AUDIENCIA':'tipo_audiencia',
+                                            'FECHA PROGRAMACION AUDIENCIA':'fecha_programacion_audiencia',
+                                            'FECHA AUDIENCIA':'fecha_audiencia',
+                                            'DIAS AGENDAMIENTO':'dias_agendamiento',
+                                            'DURACION AUDIENCIA (MIN)':'duracion_audiencia_minutos',
+                                            'TOTAL AUDIENCIAS':'total_audiencias',
+                                            'TRIBUNAL-RIT':'tribunal_rit',
+                                            'AÑO INGRESO':'año_ingreso',
+                                            'REGION':'region',
+                                            'POBLACION':'poblacion',
+                                            'HOMBRES':'hombres',
+                                            'MUJERES':'mujeres',
+                                            'URBANO':'urbano',
+                                            'RURAL':'rural',
+                                            'COMUNAS':'comunas',
+                                            'JUECES':'dotacion_jueces',
+                                            'ASIENTO':'asiento',
+                                            'TIPO JUZGADO':'tipo_juzgado'
+                                            },inplace = True)
+    
+    df_fulldataaudiencias = df_fulldataaudiencias[['region','cod_corte','corte','tribunal_rit','cod_tribunal','rit','tribunal','tipo_juzgado','dotacion_jueces','tipo_causa','año_ingreso',
+                                                    'tipo_audiencia','fecha_programacion_audiencia','fecha_audiencia','dias_agendamiento','duracion_audiencia_minutos','total_audiencias',
+                                                    'asiento','comunas','poblacion','hombres','mujeres','urbano','rural']]
     
-    df_consolidado = df_consolidado[['region','cod_corte','corte','tribunal_rit','cod_tribunal','rit','tribunal','tipo_juzgado','dotacion_jueces','tipo_causa','fecha_ingreso','año_ingreso','cod_materia','materia',
-                                 'tipologia_materia','vigencia_materia','tipo_audiencia','fecha_programacion_audiencia','fecha_audiencia','dias_agendamiento','duracion_audiencia_minutos','total_audiencias',
-                                 'total_ingresos_materia','total_terminos','fecha_termino','año_termino','duracion_causa','motivo_termino','asiento','comunas','poblacion','hombres','mujeres','urbano','rural']]
+    data.save_feather(df_fulldataaudiencias, 'consolidated_FullData_Audiencias', path_processed)
+    click.echo('Generado archivo Feather. Proceso Terminado')
+
+def consolidated_fulldata_inventario(path_processed = "data/processed/pjud"):
+    tqdm.pandas()
+    path = "data/processed/delitos"
+
+    df_inventario = pd.read_feather(f"{path_processed}/processes_Inventario.feather")
+    df_tipologia = pd.read_feather(f"{path}/clean_Delitos.feather")
+    df_poblacion = pd.read_feather(f"{path_processed}/processes_DataConsolidada_Poblacion_Jurisdiccion.feather")
 
-    # Eliminamos registros sin cod_corte ya que son registros incompletos.
+    df_inventario['TRIBUNAL-RIT'] = df_inventario['COD. TRIBUNAL'].map(str) + "-" + df_inventario['RIT'].map(str)
+    df_inventario['AÑO INGRESO'] = df_inventario['RIT'].progress_apply(data.cleandata.obtiene_año)
 
-    df_consolidado.drop(df_consolidado[df_consolidado['cod_corte'].isnull()].index, inplace=True)
+    columnas_duplicadas = ['index']
+    df_inventario.drop(columnas_duplicadas, axis='columns', inplace=True)
 
-    data.save_feather(df_consolidado, 'consolidated_FullData', path_processed)
+    df_inventario_tipologia = pd.merge(df_inventario,df_tipologia, how='left', on=['COD. MATERIA'])
+    columnas_duplicadas = ['index', 'MATERIA_x']
+    df_inventario_tipologia.drop(columnas_duplicadas, axis='columns', inplace=True)
+
+    df_inventario_tipologia.rename(columns = {'MATERIA_y':'MATERIA'}, inplace=True)
+
+    df_fulldatainventario = pd.merge(df_inventario_tipologia, df_poblacion, how='left', on=['CORTE','TRIBUNAL'])
+    
+    columnas_duplicadas = ['index']
+    df_fulldatainventario.drop(columnas_duplicadas, axis='columns', inplace=True)
+
+    df_fulldatainventario.rename(columns = {'COD. CORTE':'cod_corte',
+                                            'COD. TRIBUNAL':'cod_tribunal',
+                                            'RIT':'rit',
+                                            'CORTE':'corte',
+                                            'TRIBUNAL':'tribunal',
+                                            'COMPETENCIA':'competencia',
+                                            'TIPO CAUSA':'tipo_causa',
+                                            'COD. MATERIA':'cod_materia',
+                                            'TIPO ULT. DILIGENCIA':'tipo_ultima_diligencia',
+                                            'FECHA ULT. DILIGENCIA':'fecha_ultima_diligencia',
+                                            'FECHA INGRESO':'fecha_ingreso',
+                                            'AÑO INGRESO':'año_ingreso',
+                                            'TOTAL INVENTARIO':'total_inventario',
+                                            'TRIBUNAL-RIT':'tribunal_rit',
+                                            'MATERIA':'materia',
+                                            'TIPOLOGIA MATERIA':'tipologia_materia',
+                                            'VIGENCIA MATERIA':'vigencia_materia',
+                                            'REGION':'region',
+                                            'POBLACION':'poblacion',
+                                            'HOMBRES':'hombres',
+                                            'MUJERES':'mujeres',
+                                            'URBANO':'urbano',
+                                            'RURAL':'rural',
+                                            'COMUNAS':'comunas',
+                                            'JUECES':'dotacion_jueces',
+                                            'ASIENTO':'asiento',
+                                            'TIPO JUZGADO':'tipo_juzgado'
+                                        },inplace = True)
+    
+    df_fulldatainventario = df_fulldatainventario[['region','cod_corte','corte','tribunal_rit','cod_tribunal','rit','tribunal','competencia','tipo_juzgado','dotacion_jueces','tipo_causa',
+                                                    'año_ingreso','fecha_ingreso','cod_materia','materia','tipologia_materia','vigencia_materia','tipo_ultima_diligencia','fecha_ultima_diligencia',
+                                                    'total_inventario','asiento','comunas','poblacion','hombres','mujeres','urbano','rural']]
+
+    data.save_feather(df_fulldatainventario, 'consolidated_FullData_Inventario', path_processed)
     click.echo('Generado archivo Feather. Proceso Terminado')
+
+def consolidated_fulldata_duracion(path_processed = "data/processed/pjud"):
+    tqdm.pandas()
+
+    df_duracion = pd.read_feather(f"{path_processed}/processes_Duraciones.feather")
+    df_poblacion = pd.read_feather(f"{path_processed}/processes_DataConsolidada_Poblacion_Jurisdiccion.feather")
+
+    df_duracion['TRIBUNAL-RIT'] = df_duracion['COD. TRIBUNAL'].map(str) + "-" + df_duracion['RIT'].map(str)
+
+    df_duracion['AÑO INGRESO'] = df_duracion['RIT'].progress_apply(data.cleandata.obtiene_año)
+    columnas_duplicadas = ['index']
+    df_duracion.drop(columnas_duplicadas, axis='columns', inplace=True)
+
+    df_fulldataduracion = pd.merge(df_duracion, df_poblacion, how='left', on=['CORTE','TRIBUNAL'])
+
+    columnas_duplicadas = ['index']
+    df_fulldataduracion.drop(columnas_duplicadas, axis='columns', inplace=True)
+
+    df_fulldataduracion.rename(columns = {  'COD. CORTE':'cod_corte',
+                                            'COD. TRIBUNAL':'cod_tribunal',
+                                            'RIT':'rit',
+                                            'CORTE':'corte',
+                                            'TRIBUNAL':'tribunal',
+                                            'TIPO CAUSA':'tipo_causa',
+                                            'FECHA INGRESO':'fecha_ingreso',
+                                            'AÑO INGRESO':'año_ingreso',
+                                            'FECHA TERMINO':'fecha_termino',
+                                            'MES TERMINO':'mes_termino',
+                                            'AÑO TERMINO':'año_termino',
+                                            'TOTAL TERMINOS':'total_terminos',
+                                            'DURACIÓN CAUSA':'duracion_causa',
+                                            'TRIBUNAL-RIT':'tribunal_rit',
+                                            'MOTIVO TERMINO':'motivo_termino',
+                                            'REGION':'region',
+                                            'POBLACION':'poblacion',
+                                            'HOMBRES':'hombres',
+                                            'MUJERES':'mujeres',
+                                            'URBANO':'urbano',
+                                            'RURAL':'rural',
+                                            'COMUNAS':'comunas',
+                                            'JUECES':'dotacion_jueces',
+                                            'ASIENTO':'asiento',
+                                            'TIPO JUZGADO':'tipo_juzgado'
+                                        },inplace = True)
+    df_fulldataduracion = df_fulldataduracion[['region','cod_corte','corte','tribunal_rit','cod_tribunal','rit','tribunal','tipo_juzgado','dotacion_jueces','tipo_causa',
+                                                'año_ingreso','fecha_ingreso','año_termino','mes_termino','fecha_termino','motivo_termino','total_terminos','duracion_causa',
+                                                'asiento','comunas','poblacion','hombres','mujeres','urbano','rural']]
+
+    data.save_feather(df_fulldataduracion, 'consolidated_FullData_Duracion', path_processed)
+    click.echo('Generado archivo Feather. Proceso Terminado')

+ 60
- 56
src/pjud/data/dataprocessing.py

@@ -98,6 +98,9 @@ def processing_rol(path_interim = "data/interim/pjud"):
     filtro_null = df_termino_rol[df_termino_rol['FECHA INGRESO'].isnull()]
     df_termino_rol.drop(filtro_null.index, axis=0, inplace=True)
 
+    filtro_fecha = df_termino_rol[df_termino_rol['FECHA INGRESO'] <='2014-12-31']
+    df_termino_rol.drop(filtro_fecha.index, axis = 0, inplace = True)
+
     click.echo('Procesando Error en fechas ...')
     df_termino_rol = df_termino_rol.progress_apply(data.transformdata.fechas_cambiadas, axis=1)
 
@@ -114,22 +117,22 @@ def processing_audiencias(path_interim = "data/interim/pjud"):
     click.echo('Procesando Fecha de programación ...')
     df_audiencias = df_audiencias.progress_apply(data.transformdata.fecha_programada, axis=1)
 
-    filtro_fecha = df_audiencias[df_audiencias['FECHA PROGRAMACION AUDIENCIA']<='2014-12-31']
-    df_audiencias.drop(filtro_fecha.index, axis=0, inplace=True)
+    #filtro_fecha = df_audiencias[df_audiencias['FECHA PROGRAMACION AUDIENCIA']<='2014-12-31']
+    #df_audiencias.drop(filtro_fecha.index, axis=0, inplace=True)
 
     click.echo('Normalizando nombres ...')
     df_audiencias['TRIBUNAL'] = df_audiencias['TRIBUNAL'].progress_apply(data.cleandata.cambio_nombre_juzgados)
 
     # Verifico si existen audiencias de causas del período anterior a 2015
-    años = range(2000,2015)
-    fuera_rango = []
+    #años = range(2000,2015)
+    #fuera_rango = []
 
-    for año in range(len(años)):
-        var = "-" + str(años[año])
-        fuera_rango.append(df_audiencias[df_audiencias['RIT'].str.contains(var)])
+    #for año in range(len(años)):
+    #    var = "-" + str(años[año])
+    #    fuera_rango.append(df_audiencias[df_audiencias['RIT'].str.contains(var)])
     
-    df_eliminar = pd.concat(fuera_rango, axis=0)
-    df_audiencias.drop(df_eliminar.index, axis=0, inplace=True)
+    #df_eliminar = pd.concat(fuera_rango, axis=0)
+    #df_audiencias.drop(df_eliminar.index, axis=0, inplace=True)
 
     path_processed = "data/processed/pjud"
     data.save_feather(df_audiencias, 'processes_Audiencias', path_processed)
@@ -139,8 +142,8 @@ def processing_inventario(path_interim = "data/interim/pjud"):
     tqdm.pandas()
 
     df_inventario = pd.read_feather(f"{path_interim}/clean_Inventario.feather")
-    filtro_fecha = df_inventario[df_inventario['FECHA INGRESO']<='2014-12-31']
-    df_inventario.drop(filtro_fecha.index, axis=0, inplace=True)
+    #filtro_fecha = df_inventario[df_inventario['FECHA INGRESO']<='2014-12-31']
+    #df_inventario.drop(filtro_fecha.index, axis=0, inplace=True)
 
     filtro_null = df_inventario[df_inventario['FECHA INGRESO'].isnull()]
     df_inventario.drop(filtro_null.index, axis=0, inplace=True)
@@ -174,8 +177,8 @@ def processing_duracion(path_interim = "data/interim/pjud"):
 
     df_duracion = pd.read_feather(f"{path_interim}/clean_Duraciones.feather")
 
-    filtro_fecha = df_duracion[df_duracion['FECHA INGRESO']<='2014-12-31']
-    df_duracion.drop(filtro_fecha.index, axis=0, inplace=True)
+    #filtro_fecha = df_duracion[df_duracion['FECHA INGRESO']<='2014-12-31']
+    #df_duracion.drop(filtro_fecha.index, axis=0, inplace=True)
 
     filtro_null = df_duracion[df_duracion['FECHA INGRESO'].isnull()]
     df_duracion.drop(filtro_null.index, axis=0, inplace=True)
@@ -187,15 +190,15 @@ def processing_duracion(path_interim = "data/interim/pjud"):
     data.save_feather(df_duracion, 'processes_Duraciones', path_processed)
     click.echo('Generado archivo Feather. Proceso Terminado')
 
-def processing_data_cortes(path_pjud = 'data/processed/pjud', path_censo = 'data/processed/censo'):
+def processing_data_cortes(path_pjud = "data/processed/pjud", path_censo = "data/processed/censo"):
     tqdm.pandas()
 
     df_regiones = pd.read_feather(f"{path_pjud}/processes_TerminosRol.feather")
     df_tribunales = pd.read_feather(f"{path_pjud}/generates_ListadoTribunales.feather")
     df_censo = pd.read_feather(f"{path_censo}/generates_Censo2017.feather")
-    #df_dotacion = pd.read_feather(f"{path_pjud}/ListadoTribunales.feather")
 
     # Extraigo Cortes de Apelaciones asociadas a Juzgados desde este DataSet
+
     data_cortes_apelaciones = pd.unique(df_regiones[['CORTE','TRIBUNAL']].values.ravel())
     cortes_tribunales = []
 
@@ -203,64 +206,62 @@ def processing_data_cortes(path_pjud = 'data/processed/pjud', path_censo = 'data
         if not data_cortes_apelaciones[datacorte].find('C.A.') == -1:
             corte_apelacion = data_cortes_apelaciones[datacorte]
         else:
-            tribunal = data_cortes_apelaciones[datacorte]
-            if tribunal.find("TRIBUNAL") != -1:
-                separa_ciudad = tribunal.split("PENAL ")
+            datatribunal = data_cortes_apelaciones[datacorte]
+            if datatribunal.find("TRIBUNAL") != -1:
+                separa_ciudad = datatribunal.split("PENAL ")
             else:
-                separa_ciudad = tribunal.split("GARANTIA ")
+                separa_ciudad = datatribunal.split("GARANTIA ")
             ciudad = separa_ciudad[1]
-            cortes_tribunales.append([corte_apelacion,ciudad])
+            cortes_tribunales.append([corte_apelacion,ciudad,datatribunal])
+
     
     lista_cortes = []
+    poblacion = []
 
     for trib in df_tribunales.index:
         for indice in range(len(cortes_tribunales)):
-            if df_tribunales['ASIENTO'][trib] == cortes_tribunales[indice][1]:
+            if df_tribunales['TRIBUNAL'][trib] == cortes_tribunales[indice][2]:
                 corte = cortes_tribunales[indice][0]
                 lista_cortes.append(corte)
                 break
 
-    df_tribunales['CORTE'] = lista_cortes
-
-    poblacion = []
-
-    for trib in df_tribunales.index:
-        for indice in df_censo.index:
-            if df_tribunales['COMUNA'][trib] == df_censo['NOMBRE COMUNA'][indice]:
-                censado = df_censo['TOTAL POBLACIÓN EFECTIVAMENTE CENSADA'][indice]
-                hombres = df_censo['HOMBRES '][indice]
-                mujeres = df_censo['MUJERES'][indice]
-                urbana = df_censo['TOTAL ÁREA URBANA'][indice]
-                rural = df_censo['TOTAL ÁREA RURAL'][indice]
+        for censo in df_censo.index:
+            if df_tribunales['COMUNA'][trib] == df_censo['NOMBRE COMUNA'][censo]:
+                censado = df_censo['TOTAL POBLACIÓN EFECTIVAMENTE CENSADA'][censo]
+                hombres = df_censo['HOMBRES '][censo]
+                mujeres = df_censo['MUJERES'][censo]
+                urbana = df_censo['TOTAL ÁREA URBANA'][censo]
+                rural = df_censo['TOTAL ÁREA RURAL'][censo]
                 poblacion.append([censado, hombres, mujeres, urbana, rural])
                 break
-
+    
+    df_tribunales['CORTE'] = lista_cortes
+ 
     df_poblacion = pd.DataFrame(poblacion, columns = ['POBLACION', 'HOMBRES', 'MUJERES', 'URBANO', 'RURAL'])
-
     df_tribunales_poblacion = pd.concat([df_tribunales, df_poblacion.reindex(df_tribunales.index)], axis=1)
 
     # Creo un dataset con informacion de poblacion que abarca cada tribunal !!!
     tribunales = df_tribunales['TRIBUNAL'].unique()
     poblacion_tribunal = []
 
-    for trib in range(len(tribunales)):  
+    for tri in range(len(tribunales)):  
         poblacion = 0
         hombres = 0
         mujeres = 0
         urbana = 0
         rural = 0
         comunas = []
-        for indice in df_tribunales_poblacion.index:
-            if tribunales[trib] == df_tribunales_poblacion['TRIBUNAL'][indice]:
-                region = df_tribunales_poblacion['REGION'][indice]
-                corte = df_tribunales_poblacion['CORTE'][indice]
-                tribunal = df_tribunales_poblacion['TRIBUNAL'][indice]
-                poblacion = int(df_tribunales_poblacion['POBLACION'][indice]) + poblacion
-                hombres = int(df_tribunales_poblacion['HOMBRES'][indice]) + hombres
-                mujeres = int(df_tribunales_poblacion['MUJERES'][indice]) + mujeres
-                urbana = int(df_tribunales_poblacion['URBANO'][indice]) + urbana
-                rural = int(df_tribunales_poblacion['RURAL'][indice]) + rural
-                comunas.append(df_tribunales_poblacion['COMUNA'][indice])
+        for ind in df_tribunales_poblacion.index:
+            if tribunales[tri] == df_tribunales_poblacion['TRIBUNAL'][ind]:
+                region = df_tribunales_poblacion['REGION'][ind]
+                corte = df_tribunales_poblacion['CORTE'][ind]
+                tribunal = df_tribunales_poblacion['TRIBUNAL'][ind]
+                poblacion = int(df_tribunales_poblacion['POBLACION'][ind]) + poblacion
+                hombres = int(df_tribunales_poblacion['HOMBRES'][ind]) + hombres
+                mujeres = int(df_tribunales_poblacion['MUJERES'][ind]) + mujeres
+                urbana = int(df_tribunales_poblacion['URBANO'][ind]) + urbana
+                rural = int(df_tribunales_poblacion['RURAL'][ind]) + rural
+                comunas.append(df_tribunales_poblacion['COMUNA'][ind])
                 
         poblacion_tribunal.append([region, corte, tribunal, poblacion, hombres, mujeres, urbana, rural, comunas])
         
@@ -271,23 +272,26 @@ def processing_data_cortes(path_pjud = 'data/processed/pjud', path_censo = 'data
     # Agregare data de cantidad de jueces a esta Data y Asientio de cada Tribunal.
 
     dotacion = []
-    for indice in df_poblacion_jurisdiccion.index:
-        for trib in df_tribunales.index:
-            if df_poblacion_jurisdiccion['TRIBUNAL'][indice] == df_tribunales['TRIBUNAL'][trib]:
-                jueces = df_tribunales['JUECES'][trib]
-                asiento = df_tribunales['ASIENTO'][trib]
-                tipo = df_tribunales['TIPO JUZGADO'][trib]
+    for i in df_poblacion_jurisdiccion.index:
+        for t in df_tribunales.index:
+            if df_poblacion_jurisdiccion['TRIBUNAL'][i] == df_tribunales['TRIBUNAL'][t]:
+                jueces = df_tribunales['JUECES'][t]
+                asiento = df_tribunales['ASIENTO'][t]
+                tipo = df_tribunales['TIPO JUZGADO'][t]
                 row = [jueces, asiento, tipo]
                 dotacion.append(row)
                 break
+            
     columnas = ['JUECES','ASIENTO','TIPO JUZGADO']
     df_anexo = pd.DataFrame(dotacion, columns=columnas)
 
     df_poblacion_jurisdiccion = pd.concat([df_poblacion_jurisdiccion,df_anexo], axis=1)
 
-    data.save_feather(df_tribunales, 'processes_ListadoTribunalesyCortes', path_pjud)
-    data.save_feather(df_tribunales_poblacion, 'processes_DataConsolidada_Poblacion_Tribunales', path_pjud)
-    data.save_feather(df_poblacion_jurisdiccion, 'processes_DataConsolidada_Poblacion_Jurisdiccion', path_pjud)
+    
+    path_processed = "data/processed/pjud"
+    data.save_feather(df_tribunales, "processes_ListadoTribunalesyCortes", path_processed)
+    data.save_feather(df_tribunales_poblacion, "processes_DataConsolidada_Poblacion_Tribunales", path_processed)
+    data.save_feather(df_poblacion_jurisdiccion, "processes_DataConsolidada_Poblacion_Jurisdiccion", path_processed)
     click.echo('Generado archivo Feather. Proceso Terminado')