Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG7/Grupo_1_r.R
2714 views
1
########################################### GRUPO 1 ############################################
2
3
##################################### Miembros del grupo ######################################
4
5
# 20163197, Enrique Alfonso Pazos
6
# 20191894, Ilenia Ttito
7
# 20151595, Rodrigo Ramos
8
# 20193469, Luis Egusquiza
9
# 20163377, Jean Nino de Guzman
10
11
#Instalamos los paquetes que vamos a utilizar
12
install.packages("lubridate")
13
install.packages("tidyverse")
14
15
#Llamamos las librer�as que vamos a utilizar
16
library(readxl)
17
library(lubridate)
18
library(tidyverse)
19
search()
20
21
#Directorio
22
user <- Sys.getenv("USERNAME") # username
23
24
setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Trabajo_grupal") ) # set directorio
25
26
data <- read_excel("../data/crime_data/data_administrativa.xlsx")
27
df <- data.frame(data)
28
29
# 1. Convertir el nombre de las variables a minuscula
30
colnames(df) <- tolower(colnames(df))
31
32
# 2. Fijese que el nombre de la persona tiene puntuaciones y número, retirar todo aquello que no permita identificar el nombre correcto.
33
34
# Primero, voy a hacer una limpieza de los numeros que haya. Y pondr? las observaciones limpias en la variable "name".
35
# [0-9]* : identifica numeros entre 0 y 9, y encontrar? por lo menos desde 0 (ninguno o m?s).
36
37
df$name <- apply(df['nombre'],
38
1 , # margin 1: aplicar la funcion por filas , por observaciones
39
function(x) gsub("[0-9]*", '', x))
40
41
# Ahora, para eliminar los signos de puntuaci?n hay dos maneras:
42
43
# MANERA 1: creando variables adicionales sobre las que se vayan eliminando los signos de puntuacion.
44
df$name2 <- apply (df['name'], 1 ,
45
function(x) gsub ("\\-", '', x) )
46
47
df$name3 <- apply (df['name2'], 1 ,
48
function(x) gsub ("\\,", '', x) )
49
50
df$name4 <- apply (df['name3'], 1 ,
51
function(x) gsub ("\\;", '', x) )
52
53
df$name5 <- apply (df['name4'], 1 ,
54
function(x) gsub ("\\.", '', x) )
55
56
df$name6 <- apply (df['name5'], 1 ,
57
function(x) gsub ("\\!", '', x) )
58
59
df$name7 <- apply (df['name6'], 1 ,
60
function(x) gsub ("\\¡", '', x) )
61
62
df$name8 <- apply (df['name7'], 1 ,
63
function(x) gsub ("\\¿", '', x) )
64
65
df$name9 <- apply (df['name8'], 1 ,
66
function(x) gsub ("\\?", '', x) )
67
68
df$name10 <- apply (df['name9'], 1 ,
69
function(x) gsub ("\\\\", '', x) )
70
71
df$name11 <- apply (df['name10'], 1 ,
72
function(x) gsub ("\\/", '', x))
73
74
# Reemplazo la variable final 'name11' que está limpia de números y signos de puntuación sobre la variable 'nombre'.
75
df['nombre'] <- df['name11']
76
77
# Me quedo solo con las variables del principio.
78
df <- df[,1:7]
79
80
# MANERA 2:
81
# Hago que identifique y limpie los signos de puntuacion con: [[:punct:]]+
82
# [:punct:] : para identificar signos de puntuacion.
83
# + : lo hara por lo menos una vez
84
#
85
df$name12 <- apply (df['nombre'], 1 ,
86
function(x) gsub ("[[:punct:]]+", '', x))
87
88
# Al igual que antes, reemplazo esta variable 'name12' sobre la variable 'nombre'.
89
df['nombre'] <- df['name12']
90
91
# Me quedo solo con las variables del principio.
92
df <- df[,1:7]
93
94
# Nombre esta limpio.
95
df['nombre']
96
97
# Claramente, la manera 2 es mas rapida y ademas puede que con la manera 1 haya olvidado algunos signos de puntuacion.
98
# Entonces, esta manera 2 la aplicare en adelante, cuando sea necesario.
99
100
# 3. Limpiar la fecha de nacimiento de aquellos elementos que la ensucien. Luego crear otra variable con el formato de fecha.
101
102
# Algunas observaciones terminan en "00:00"
103
# Entonces, voy a limpiar esto de las observaciones. Para ello, uso "00:00$".
104
df$nacimiento <- apply (df['born_date'], 1 ,
105
function(x) gsub ("00:00$", '', x))
106
107
# Ahora, para hacerlo más sencillo (pues hay estructuras complejas de signos de puntuación y las fechas tienen "/"),
108
# voy a extraer directamente la fecha. Para ello, formaré su estructura y, finalmente, usaré str_extract.
109
110
df$fecha <- apply (df['nacimiento'], 1 ,
111
function(x) str_extract(x, "[0-9]{2}/[0-9]{2}/[0-9]{4}"))
112
113
# [0-9]{n} : significa que tomara� numeros entre 0 y 9, y que, además,se debe repetir como maximo n veces.
114
# El dia tiene 2 dos digitos como maximo. Por ello, va n = 2.
115
# Lo mismo será con el mes, cuyo valor de n es 2 también. Y, para el año, va n = 4.
116
# Luego, pongo como separador a "/".
117
# De manera que formo la estructura de la fecha como yo quiero que la extraiga.
118
119
# Ahora, me quedara solo con las variables relevantes.
120
df <- df[, c(1, 2, 9, 3, 4, 5, 6, 7)]
121
122
# Se tiene la variable "born_date" y "fecha" uno al lado de la otra.
123
# "Fecha" esta limpio.
124
125
df["fecha"]
126
127
128
#4. Limpiamos la edad
129
130
# extraer solo 3 digitos del rango 0-9
131
132
df$edad <- apply(df['age'],
133
1 ,
134
function(x) str_extract(x,"[0-9]{2}"))
135
136
#5. Creamos dummies para diferenciar los rangos de los sentenciados
137
138
df <- df %>% mutate(dum1 = ifelse(str_detect(rank,"(^l)"), 1 , 0 ), #dum1: toma el valor de 1 si el sentenciado fue l?der de la banda criminal
139
dum2 = ifelse(str_detect(rank,"cabecilla\\s(l)"), 1 , 0), #dum2: toma el valor de 1 si el sentenciado fue cabecilla local
140
dum3 = ifelse(str_detect(rank,"cabecilla\\s(r)"), 1 , 0), #dum3: toma el valor de 1 si el sentenciado fue cabecilla regional
141
dum4 = ifelse(str_detect(rank,"(^s)"), 1 , 0), #dum4: toma el valor de 1 si el sentenciado fue sicario
142
dum5 = ifelse(str_detect(rank,"(^e)"), 1 , 0), #dum5: toma el valor de 1 si el sentenciado realiz? extorsi?n
143
dum6 = ifelse(str_detect(rank,"(^m)"), 1 , 0), #dum6: toma el valor de 1 si el sentenciado fue miembro regular
144
dum7 = ifelse(str_detect(rank,"(^n)|(^p)"), 1 , 0) #dum7: toma el valor de 1 si el sentenciado fue novato o principiante
145
)
146
147
#7. Extraemos el usuario del correo electr?nico
148
149
df$correo <- apply(df['correo_abogado'],
150
1 ,
151
function(x) str_extract(x,"(\\w+)"))
152
153
#8. Extraemos solo el numero del dni
154
155
df$dni_2 <- apply (df['dni'], 1 ,
156
function(x) gsub ("dni es ", '', x) )
157
158
#9. Creamos las variables solicitadas
159
160
# Primero extraemos los hijos
161
hijos<- apply (df['observaciones'], 1 , function(x) str_extract(x, "...hij.s"))
162
hijos<-data.frame(hijos)
163
164
df$n_hijos <- apply(hijos,
165
1 ,
166
function(x) str_extract(x,"[0-9]"))
167
168
# Luego, la edad de inicio en actividades criminales
169
170
aos<- apply (df['observaciones'], 1 , function(x) str_extract(x, "...a�os"))
171
aos<-data.frame(aos)
172
173
df$edad_inicio <- apply(aos,
174
1 ,
175
function(x) str_extract(x,"[0-9]"))
176
177
# Informaci�n del delito cometido
178
179
crimen<- apply (df['observaciones'], 1 , function(x) str_extract(x, "sentenciado por [[:print:]]*[$|,]"))
180
crimen<-as.data.frame(crimen)
181
df$crimen <-crimen
182
183