Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG7/Grupo_7_py.py
2714 views
1
# -*- coding: utf-8 -*-
2
"""
3
Created on Sat Nov 5 16:28:16 2022
4
5
@author: Jose Pastor
6
"""
7
8
import pandas as pd
9
import numpy as np
10
import re # for regular expressions (REGEX)
11
import os # for directorio
12
import swifter # for parallel procesing
13
import unidecode # to drop tildes
14
from datetime import datetime # library for time
15
16
17
18
# "1.0 Set Directorio y leyendo datos"
19
user = os.getlogin() # Username
20
os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2/Lab8") # Set directorio
21
data = pd.read_excel("../data/crime_data/data_administrativa.xlsx") # Subir base de datos
22
23
24
# 1.
25
# Convertir el nombre de las variables a minúscula
26
data.columns = map(str.lower, data.columns)
27
28
29
# 2.
30
# Fíjese que el nombre de la persona tiene puntuaciones y número, retirar todo aquello
31
# que no permita identificar el nombre correcto.
32
data['solo_nombre'] = data['nombre'].swifter.apply(lambda x: re.sub('[0-9]|\/|\-|\.|\!','',x)) # eliminando números y signos en específico
33
34
35
# 3.
36
# Limpiar la fecha de nacimiento de aquellos elementos que la ensucien.
37
data['fecha'] = data['born_date'].swifter.apply(lambda x: re.findall('[0-9]+/[0-9]+/[0-9]+', str(x)))
38
data['fecha'] = data['fecha'].apply(lambda x: ''.join(x) ) # extrae los valores de la lista
39
40
# Luego crear otra variable con el formato de fecha.
41
data['fecha_formato'] = pd.to_datetime(data['fecha'], dayfirst = True).dt.strftime('%d/%m/%Y')
42
43
44
# 4.
45
# Limpiar la columna de edad, el cual tiene puntuaciones que no permiten identificar la edad correcta.
46
data['edad'] = data['age'].swifter.apply(lambda x: re.findall('[0-9]+',str(x))) # eliminando números y signos en específico
47
data['edad'] = data['edad'].apply(lambda x: ''.join(x) ) # extrae los valores de la lista
48
49
50
# 5.
51
# Crear dummies según el rango del sentenciado en la organización criminal
52
data["dummy1"] = data['rank'].str.contains(r"banda criminal").map({True: 1, False: 0})
53
data["dummy2"] = data['rank'].str.contains(r"cabecilla local").map({True: 1, False: 0})
54
data["dummy3"] = data['rank'].str.contains(r"cabecilla regional").map({True: 1, False: 0})
55
data["dummy4"] = data['rank'].str.contains(r"sicario").map({True: 1, False: 0})
56
data["dummy5"] = data['rank'].str.contains(r"extorsion|extorsionador").map({True: 1, False: 0})
57
data["dummy6"] = data['rank'].str.contains(r"miembro").map({True: 1, False: 0})
58
data["dummy7"] = data['rank'].str.contains(r"novato|novto|noato|principiante").map({True: 1, False: 0})
59
60
61
# 7.
62
# Extraer el usuario del correo electrónico.
63
data['usuario_correo'] = data['correo_abogado'].swifter.apply(lambda x: re.findall('(\w+)\@\.*',str(x)))
64
data['usuario_correo'] = data['usuario_correo'].apply(lambda x: ''.join(x) ) # extrae los valores de la lista
65
66
67
# 8.
68
# Crear una columna que contenga solo la información del número de dni (por ejemplo: 01-75222677)
69
data['DNI'] = data['dni'].swifter.apply(lambda x: re.findall('[0-9]+-[0-9]+', str(x)))
70
data['DNI'] = data['DNI'].apply(lambda x: ''.join(x) ) # extrae los valores de la lista
71
72
73
# 9.
74
# A partir de la columna observaciones, crear las siguientes variables:
75
# - crimen: debe contener información del delito cometido
76
def sentenciado(x):
77
78
try:
79
match = re.search("(?<=sentenciado por )[a-z\s]*", x)
80
81
return match.group()
82
83
except:
84
85
pass
86
87
data['crimen'] = data['observaciones'].apply(sentenciado)
88
89
90
91
92
# - n_hijos: cantidad de hijos del criminal
93
def n_hijos(x):
94
95
try:
96
match = re.search("(?<=tiene )[0-9]*", x)
97
98
return match.group()
99
100
except:
101
102
pass
103
104
data['n_hijos'] = data['observaciones'].apply(n_hijos)
105
106
107
108
109
# - edad_inicio : edad de inicio en actividades criminales
110
def edad_inicio(x):
111
112
try:
113
match = re.search("[0-9]+(?= años)", x)
114
115
return match.group()
116
117
except:
118
119
pass
120
121
data['edad_inicio'] = data['observaciones'].apply(edad_inicio)
122
123
124
125
126
127
128