Path: blob/main/Trabajo_grupal/WG7/Grupo_7_py.py
2714 views
# -*- coding: utf-8 -*-1"""2Created on Sat Nov 5 16:28:16 202234@author: Jose Pastor5"""67import pandas as pd8import numpy as np9import re # for regular expressions (REGEX)10import os # for directorio11import swifter # for parallel procesing12import unidecode # to drop tildes13from datetime import datetime # library for time14151617# "1.0 Set Directorio y leyendo datos"18user = os.getlogin() # Username19os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2/Lab8") # Set directorio20data = pd.read_excel("../data/crime_data/data_administrativa.xlsx") # Subir base de datos212223# 1.24# Convertir el nombre de las variables a minúscula25data.columns = map(str.lower, data.columns)262728# 2.29# Fíjese que el nombre de la persona tiene puntuaciones y número, retirar todo aquello30# que no permita identificar el nombre correcto.31data['solo_nombre'] = data['nombre'].swifter.apply(lambda x: re.sub('[0-9]|\/|\-|\.|\!','',x)) # eliminando números y signos en específico323334# 3.35# Limpiar la fecha de nacimiento de aquellos elementos que la ensucien.36data['fecha'] = data['born_date'].swifter.apply(lambda x: re.findall('[0-9]+/[0-9]+/[0-9]+', str(x)))37data['fecha'] = data['fecha'].apply(lambda x: ''.join(x) ) # extrae los valores de la lista3839# Luego crear otra variable con el formato de fecha.40data['fecha_formato'] = pd.to_datetime(data['fecha'], dayfirst = True).dt.strftime('%d/%m/%Y')414243# 4.44# Limpiar la columna de edad, el cual tiene puntuaciones que no permiten identificar la edad correcta.45data['edad'] = data['age'].swifter.apply(lambda x: re.findall('[0-9]+',str(x))) # eliminando números y signos en específico46data['edad'] = data['edad'].apply(lambda x: ''.join(x) ) # extrae los valores de la lista474849# 5.50# Crear dummies según el rango del sentenciado en la organización criminal51data["dummy1"] = data['rank'].str.contains(r"banda criminal").map({True: 1, False: 0})52data["dummy2"] = data['rank'].str.contains(r"cabecilla local").map({True: 1, False: 0})53data["dummy3"] = data['rank'].str.contains(r"cabecilla regional").map({True: 1, False: 0})54data["dummy4"] = data['rank'].str.contains(r"sicario").map({True: 1, False: 0})55data["dummy5"] = data['rank'].str.contains(r"extorsion|extorsionador").map({True: 1, False: 0})56data["dummy6"] = data['rank'].str.contains(r"miembro").map({True: 1, False: 0})57data["dummy7"] = data['rank'].str.contains(r"novato|novto|noato|principiante").map({True: 1, False: 0})585960# 7.61# Extraer el usuario del correo electrónico.62data['usuario_correo'] = data['correo_abogado'].swifter.apply(lambda x: re.findall('(\w+)\@\.*',str(x)))63data['usuario_correo'] = data['usuario_correo'].apply(lambda x: ''.join(x) ) # extrae los valores de la lista646566# 8.67# Crear una columna que contenga solo la información del número de dni (por ejemplo: 01-75222677)68data['DNI'] = data['dni'].swifter.apply(lambda x: re.findall('[0-9]+-[0-9]+', str(x)))69data['DNI'] = data['DNI'].apply(lambda x: ''.join(x) ) # extrae los valores de la lista707172# 9.73# A partir de la columna observaciones, crear las siguientes variables:74# - crimen: debe contener información del delito cometido75def sentenciado(x):7677try:78match = re.search("(?<=sentenciado por )[a-z\s]*", x)7980return match.group()8182except:8384pass8586data['crimen'] = data['observaciones'].apply(sentenciado)8788899091# - n_hijos: cantidad de hijos del criminal92def n_hijos(x):9394try:95match = re.search("(?<=tiene )[0-9]*", x)9697return match.group()9899except:100101pass102103data['n_hijos'] = data['observaciones'].apply(n_hijos)104105106107108# - edad_inicio : edad de inicio en actividades criminales109def edad_inicio(x):110111try:112match = re.search("[0-9]+(?= años)", x)113114return match.group()115116except:117118pass119120data['edad_inicio'] = data['observaciones'].apply(edad_inicio)121122123124125126127128