Path: blob/main/Trabajo_grupal/WG7/Grupo_1_r.R
2714 views
########################################### GRUPO 1 ############################################12##################################### Miembros del grupo ######################################34# 20163197, Enrique Alfonso Pazos5# 20191894, Ilenia Ttito6# 20151595, Rodrigo Ramos7# 20193469, Luis Egusquiza8# 20163377, Jean Nino de Guzman910#Instalamos los paquetes que vamos a utilizar11install.packages("lubridate")12install.packages("tidyverse")1314#Llamamos las librer�as que vamos a utilizar15library(readxl)16library(lubridate)17library(tidyverse)18search()1920#Directorio21user <- Sys.getenv("USERNAME") # username2223setwd( paste0("C:/Users/",user,"/Documents/GitHub/1ECO35_2022_2/Trabajo_grupal") ) # set directorio2425data <- read_excel("../data/crime_data/data_administrativa.xlsx")26df <- data.frame(data)2728# 1. Convertir el nombre de las variables a minuscula29colnames(df) <- tolower(colnames(df))3031# 2. Fijese que el nombre de la persona tiene puntuaciones y número, retirar todo aquello que no permita identificar el nombre correcto.3233# Primero, voy a hacer una limpieza de los numeros que haya. Y pondr? las observaciones limpias en la variable "name".34# [0-9]* : identifica numeros entre 0 y 9, y encontrar? por lo menos desde 0 (ninguno o m?s).3536df$name <- apply(df['nombre'],371 , # margin 1: aplicar la funcion por filas , por observaciones38function(x) gsub("[0-9]*", '', x))3940# Ahora, para eliminar los signos de puntuaci?n hay dos maneras:4142# MANERA 1: creando variables adicionales sobre las que se vayan eliminando los signos de puntuacion.43df$name2 <- apply (df['name'], 1 ,44function(x) gsub ("\\-", '', x) )4546df$name3 <- apply (df['name2'], 1 ,47function(x) gsub ("\\,", '', x) )4849df$name4 <- apply (df['name3'], 1 ,50function(x) gsub ("\\;", '', x) )5152df$name5 <- apply (df['name4'], 1 ,53function(x) gsub ("\\.", '', x) )5455df$name6 <- apply (df['name5'], 1 ,56function(x) gsub ("\\!", '', x) )5758df$name7 <- apply (df['name6'], 1 ,59function(x) gsub ("\\¡", '', x) )6061df$name8 <- apply (df['name7'], 1 ,62function(x) gsub ("\\¿", '', x) )6364df$name9 <- apply (df['name8'], 1 ,65function(x) gsub ("\\?", '', x) )6667df$name10 <- apply (df['name9'], 1 ,68function(x) gsub ("\\\\", '', x) )6970df$name11 <- apply (df['name10'], 1 ,71function(x) gsub ("\\/", '', x))7273# Reemplazo la variable final 'name11' que está limpia de números y signos de puntuación sobre la variable 'nombre'.74df['nombre'] <- df['name11']7576# Me quedo solo con las variables del principio.77df <- df[,1:7]7879# MANERA 2:80# Hago que identifique y limpie los signos de puntuacion con: [[:punct:]]+81# [:punct:] : para identificar signos de puntuacion.82# + : lo hara por lo menos una vez83#84df$name12 <- apply (df['nombre'], 1 ,85function(x) gsub ("[[:punct:]]+", '', x))8687# Al igual que antes, reemplazo esta variable 'name12' sobre la variable 'nombre'.88df['nombre'] <- df['name12']8990# Me quedo solo con las variables del principio.91df <- df[,1:7]9293# Nombre esta limpio.94df['nombre']9596# Claramente, la manera 2 es mas rapida y ademas puede que con la manera 1 haya olvidado algunos signos de puntuacion.97# Entonces, esta manera 2 la aplicare en adelante, cuando sea necesario.9899# 3. Limpiar la fecha de nacimiento de aquellos elementos que la ensucien. Luego crear otra variable con el formato de fecha.100101# Algunas observaciones terminan en "00:00"102# Entonces, voy a limpiar esto de las observaciones. Para ello, uso "00:00$".103df$nacimiento <- apply (df['born_date'], 1 ,104function(x) gsub ("00:00$", '', x))105106# Ahora, para hacerlo más sencillo (pues hay estructuras complejas de signos de puntuación y las fechas tienen "/"),107# voy a extraer directamente la fecha. Para ello, formaré su estructura y, finalmente, usaré str_extract.108109df$fecha <- apply (df['nacimiento'], 1 ,110function(x) str_extract(x, "[0-9]{2}/[0-9]{2}/[0-9]{4}"))111112# [0-9]{n} : significa que tomara� numeros entre 0 y 9, y que, además,se debe repetir como maximo n veces.113# El dia tiene 2 dos digitos como maximo. Por ello, va n = 2.114# Lo mismo será con el mes, cuyo valor de n es 2 también. Y, para el año, va n = 4.115# Luego, pongo como separador a "/".116# De manera que formo la estructura de la fecha como yo quiero que la extraiga.117118# Ahora, me quedara solo con las variables relevantes.119df <- df[, c(1, 2, 9, 3, 4, 5, 6, 7)]120121# Se tiene la variable "born_date" y "fecha" uno al lado de la otra.122# "Fecha" esta limpio.123124df["fecha"]125126127#4. Limpiamos la edad128129# extraer solo 3 digitos del rango 0-9130131df$edad <- apply(df['age'],1321 ,133function(x) str_extract(x,"[0-9]{2}"))134135#5. Creamos dummies para diferenciar los rangos de los sentenciados136137df <- 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 criminal138dum2 = ifelse(str_detect(rank,"cabecilla\\s(l)"), 1 , 0), #dum2: toma el valor de 1 si el sentenciado fue cabecilla local139dum3 = ifelse(str_detect(rank,"cabecilla\\s(r)"), 1 , 0), #dum3: toma el valor de 1 si el sentenciado fue cabecilla regional140dum4 = ifelse(str_detect(rank,"(^s)"), 1 , 0), #dum4: toma el valor de 1 si el sentenciado fue sicario141dum5 = ifelse(str_detect(rank,"(^e)"), 1 , 0), #dum5: toma el valor de 1 si el sentenciado realiz? extorsi?n142dum6 = ifelse(str_detect(rank,"(^m)"), 1 , 0), #dum6: toma el valor de 1 si el sentenciado fue miembro regular143dum7 = ifelse(str_detect(rank,"(^n)|(^p)"), 1 , 0) #dum7: toma el valor de 1 si el sentenciado fue novato o principiante144)145146#7. Extraemos el usuario del correo electr?nico147148df$correo <- apply(df['correo_abogado'],1491 ,150function(x) str_extract(x,"(\\w+)"))151152#8. Extraemos solo el numero del dni153154df$dni_2 <- apply (df['dni'], 1 ,155function(x) gsub ("dni es ", '', x) )156157#9. Creamos las variables solicitadas158159# Primero extraemos los hijos160hijos<- apply (df['observaciones'], 1 , function(x) str_extract(x, "...hij.s"))161hijos<-data.frame(hijos)162163df$n_hijos <- apply(hijos,1641 ,165function(x) str_extract(x,"[0-9]"))166167# Luego, la edad de inicio en actividades criminales168169a�os<- apply (df['observaciones'], 1 , function(x) str_extract(x, "...a�os"))170a�os<-data.frame(a�os)171172df$edad_inicio <- apply(a�os,1731 ,174function(x) str_extract(x,"[0-9]"))175176# Informaci�n del delito cometido177178crimen<- apply (df['observaciones'], 1 , function(x) str_extract(x, "sentenciado por [[:print:]]*[$|,]"))179crimen<-as.data.frame(crimen)180df$crimen <-crimen181182183