Path: blob/main/Trabajo_grupal/WG7/Solucion/script_py.py
4587 views
# -*- coding: utf-8 -*-1"""2Tarea de Regex34@author: Roberto56"""78# import libraries910import pandas as pd11import numpy as np12import re # for regular expressions (REGEX)13import os # for directorio14import unidecode # to drop tildes15from datetime import datetime # library for time1617user = os.getlogin() # Username1819print(user)2021# Set directorio2223os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2/Trabajo_grupal/WG7/Solucion") # Set directorio242526crimen_data = pd.read_excel("../../../data/crime_data/data_administrativa.xlsx") # Subir base de datos272829# 1.3031crimen_data.columns = map(str.lower, crimen_data.columns)3233#2.0 nombres limpios3435# Primero retiramos las tildes363738crimen_data['nombre'] = crimen_data['nombre'].apply(unidecode.unidecode)394041crimen_data['nombre_clean'] = crimen_data['nombre'].apply(lambda x: re.sub('[^a-zA-Z\s]','',x))4243# 3.0 fecha de nacimiento limpio4445crimen_data['born_date'] = crimen_data['born_date'].apply(lambda x: re.sub('\"#%|!|00:00|','',x))464748crimen_data['new_date'] = pd.to_datetime(crimen_data['born_date']49, dayfirst = True).dt.strftime('%d/%m/%Y')5051# 4.0 edad5253crimen_data['age'] = crimen_data['age'].apply(lambda x: re.sub('\D','', str(x)))5455# 5.0 Dummies por rango criminal5657# Si bien toda está en minuscula, en la trabajo usted puede enfrentarse con mayuscula o minuscula58# En ese caso es mejo pasar todo a minuscula59# Tambien es recomendable retirar los espacios vacíos al inicio o final60# !!! Esto de los espacios vacios al incio y al final no siempre es visible. Igual hagalo6162# Un ejemplo6364words = [' ffk ','ksksksk ']6566list(map(str.strip, words)) # se ha retirado los espacios vacios6768# Conversión a minuscula6970crimen_data['rank'] = crimen_data['rank'].str.lower().str.strip()7172#retirar tildes7374crimen_data['rank'] = crimen_data['rank'].apply(unidecode.unidecode)7576# retirar espacios vacios al inicio y fin77787980crimen_data['dum1'] = np.where(81crimen_data['rank'].str.contains('criminal$',82),1,0)838485crimen_data['dum2'] = np.where(86crimen_data['rank'].str.contains('local$',87),1,0)8889crimen_data['dum3'] = np.where(90crimen_data['rank'].str.contains('regional$',91),1,0)9293crimen_data['dum4'] = np.where(94crimen_data['rank'].str.contains('sicario',95),1,0)969798crimen_data['dum5'] = np.where(99crimen_data['rank'].str.contains('^extor',100),1,0)101102crimen_data['dum6'] = np.where(103crimen_data['rank'].str.contains('miembro',104),1,0)105106107crimen_data['dum7'] = np.where(108crimen_data['rank'].str.contains('^princ|^nov|^noa',109),1,0)110111# 7.0112113crimen_data['user'] = crimen_data['correo_abogado'].apply(lambda x: re.search("(\w+)\@\.*", x).group(1))114115# 8.0116117118crimen_data['dni'] = crimen_data['dni'].apply(lambda x: re.search("(?<=dni es )[\d+\-]+",x).group() )119120121# 9.0122123# tipo de sentencia124125def sentencia(x):126127try:128group = re.search("(?<=sentenciado por )[\w+\s]+",x).group()129return group130131except:132133pass134135crimen_data['crimen'] = crimen_data['observaciones'].apply(sentencia)136137# cantidad de hijos138139def cant_hijos(x):140141142try:143144group = re.search("(?<=tiene |tener )\d+",x).group()145146return group147148except:149150pass151152crimen_data['cant_hijos'] = crimen_data['observaciones'].apply(cant_hijos)153154# inicio de actividades155156def inicio(x):157158try:159160group = re.search("\d+(?= años)",x).group()161162return group163164except:165166pass167168crimen_data['edad_inicio'] = crimen_data['observaciones'].apply(inicio)169170171172173174175176177178179180181182183