Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG7/Solucion/script_py.py
4587 views
1
# -*- coding: utf-8 -*-
2
"""
3
Tarea de Regex
4
5
@author: Roberto
6
7
"""
8
9
# import libraries
10
11
import pandas as pd
12
import numpy as np
13
import re # for regular expressions (REGEX)
14
import os # for directorio
15
import unidecode # to drop tildes
16
from datetime import datetime # library for time
17
18
user = os.getlogin() # Username
19
20
print(user)
21
22
# Set directorio
23
24
os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2/Trabajo_grupal/WG7/Solucion") # Set directorio
25
26
27
crimen_data = pd.read_excel("../../../data/crime_data/data_administrativa.xlsx") # Subir base de datos
28
29
30
# 1.
31
32
crimen_data.columns = map(str.lower, crimen_data.columns)
33
34
#2.0 nombres limpios
35
36
# Primero retiramos las tildes
37
38
39
crimen_data['nombre'] = crimen_data['nombre'].apply(unidecode.unidecode)
40
41
42
crimen_data['nombre_clean'] = crimen_data['nombre'].apply(lambda x: re.sub('[^a-zA-Z\s]','',x))
43
44
# 3.0 fecha de nacimiento limpio
45
46
crimen_data['born_date'] = crimen_data['born_date'].apply(lambda x: re.sub('\"#%|!|00:00|','',x))
47
48
49
crimen_data['new_date'] = pd.to_datetime(crimen_data['born_date']
50
, dayfirst = True).dt.strftime('%d/%m/%Y')
51
52
# 4.0 edad
53
54
crimen_data['age'] = crimen_data['age'].apply(lambda x: re.sub('\D','', str(x)))
55
56
# 5.0 Dummies por rango criminal
57
58
# Si bien toda está en minuscula, en la trabajo usted puede enfrentarse con mayuscula o minuscula
59
# En ese caso es mejo pasar todo a minuscula
60
# Tambien es recomendable retirar los espacios vacíos al inicio o final
61
# !!! Esto de los espacios vacios al incio y al final no siempre es visible. Igual hagalo
62
63
# Un ejemplo
64
65
words = [' ffk ','ksksksk ']
66
67
list(map(str.strip, words)) # se ha retirado los espacios vacios
68
69
# Conversión a minuscula
70
71
crimen_data['rank'] = crimen_data['rank'].str.lower().str.strip()
72
73
#retirar tildes
74
75
crimen_data['rank'] = crimen_data['rank'].apply(unidecode.unidecode)
76
77
# retirar espacios vacios al inicio y fin
78
79
80
81
crimen_data['dum1'] = np.where(
82
crimen_data['rank'].str.contains('criminal$',
83
),1,0)
84
85
86
crimen_data['dum2'] = np.where(
87
crimen_data['rank'].str.contains('local$',
88
),1,0)
89
90
crimen_data['dum3'] = np.where(
91
crimen_data['rank'].str.contains('regional$',
92
),1,0)
93
94
crimen_data['dum4'] = np.where(
95
crimen_data['rank'].str.contains('sicario',
96
),1,0)
97
98
99
crimen_data['dum5'] = np.where(
100
crimen_data['rank'].str.contains('^extor',
101
),1,0)
102
103
crimen_data['dum6'] = np.where(
104
crimen_data['rank'].str.contains('miembro',
105
),1,0)
106
107
108
crimen_data['dum7'] = np.where(
109
crimen_data['rank'].str.contains('^princ|^nov|^noa',
110
),1,0)
111
112
# 7.0
113
114
crimen_data['user'] = crimen_data['correo_abogado'].apply(lambda x: re.search("(\w+)\@\.*", x).group(1))
115
116
# 8.0
117
118
119
crimen_data['dni'] = crimen_data['dni'].apply(lambda x: re.search("(?<=dni es )[\d+\-]+",x).group() )
120
121
122
# 9.0
123
124
# tipo de sentencia
125
126
def sentencia(x):
127
128
try:
129
group = re.search("(?<=sentenciado por )[\w+\s]+",x).group()
130
return group
131
132
except:
133
134
pass
135
136
crimen_data['crimen'] = crimen_data['observaciones'].apply(sentencia)
137
138
# cantidad de hijos
139
140
def cant_hijos(x):
141
142
143
try:
144
145
group = re.search("(?<=tiene |tener )\d+",x).group()
146
147
return group
148
149
except:
150
151
pass
152
153
crimen_data['cant_hijos'] = crimen_data['observaciones'].apply(cant_hijos)
154
155
# inicio de actividades
156
157
def inicio(x):
158
159
try:
160
161
group = re.search("\d+(?= años)",x).group()
162
163
return group
164
165
except:
166
167
pass
168
169
crimen_data['edad_inicio'] = crimen_data['observaciones'].apply(inicio)
170
171
172
173
174
175
176
177
178
179
180
181
182
183