I have a database of law projects, which has like 20 columns, categorical and numeric, about the law projects themselves (politicians, chamber it came from, topic, parties involved, political context, gender distribution of their sponsors, etc.). One of those columns is the date of creation of the projects, too.
Some projects have already been voted and published as law, therefore I know how long it took them to be approved (in days).
I want to predict how long it will take to publish the non-published projects, based on the surrounding data.
In other words, I need to use the published projects as training data, and the non-published as data I need predictions on, based on the fact that published projects have numbers on “days” (for publishing) column, and the non-published don’t.
How can I make this prediction?
Below is a sample data frame of 20 rows, 10 with published == TRUE and 10 with published == FALSE, and the column I need to predict is days
data.frame(
stringsAsFactors = FALSE,
date = c("1992-09-16","2006-07-12",
"2016-06-02","2015-11-25","2017-04-06","1993-07-08",
"2001-04-04","2012-03-14","2014-11-17","2020-03-18",
"2011-11-24","2006-07-20","2016-08-11","2019-01-25",
"2007-12-17","2015-08-13","2008-12-18","2012-08-14",
"2017-10-17","2014-05-14"),
project_id = c("799-15","4332-15",
"10728-07","10422-06","11188-17","1034-15","2686-15",
"8201-09","9729-03","13318-07","8062-07","4357-15",
"10856-11","12434-07","5583-07","10259-18","6285-07",
"8525-18","11481-07","9352-11"),
project_title = c("Sustituye el Artículo 18 de la Nº 18.290, de Tránsito, en lo relativo a la duración de la licencia de conducir.",
"Concede permiso para trabajadores al interior de la locomoción colectiva.",
"Modifica la Carta Fundamental con el objeto de cambiar la fecha de la cuenta que efectúa la Presidenta de la República sobre el estado administrativo y político de la Nación",
"Reemplaza el artículo 111 de la Carta Fundamental, en materia de gobierno regional e instituye la elección de los intendentes mediante sufragio universal.",
"Modifica la ley Nº19.253, que Establece normas sobre protección, fomento y desarrollo de los indígenas, y crea la Corporación Nacional de Desarrollo Indígena, para reconocer al pueblo chango como etnia indígena de Chile",
"Modifica la Ley Nº 18.290, con la finalidad de establecer la obigatoriedad de realizar licitaciones públicas de establecimientos que practiquen revisiones técnicas de vehículos motorizados en todas las comunas del país.",
"Establece un seguro obligatorio de accidentes personales causados por circulación de vehículos motorizados.",
"Sobre medidas de seguridad en pasarelas, pasos sobre nivel y puentes que cruzan carreteras.",
"Modifica la ley Nº 19.496, que establece normas sobre protección de los derechos de los consumidores, con el objeto de regular el cobro del servicio de parquímetros y estacionamientos en los lugares que indica.",
"Proyecto de reforma constitucional que autoriza al Congreso Nacional a sesionar por medios telemáticos en los casos que indica",
"Reforma Constitucional que restablece obligatoriedad del voto.",
"Agrega nuevo inciso al artículo 46 de la ley Nº 18.290, referido a los colores, forma y dimensiones de las placas únicas contempladas en la ley de tránsito.",
"Modifica la ley Nº19.925, Sobre expendio y consumo de bebidas alcohólicas, para sancionar con mayor severidad las infracciones a la prohibición establecida en protección de los menores de edad",
"Modifica la ley Nº 18.918, orgánica constitucional del Congreso Nacional, para regular los efectos del permiso por paternidad en el cómputo de quórum y mayorías",
"Regula el ejercicio del derecho a reunirse pacíficamente.",
"Crea el Registro Nacional de Deudores de Pensiones Alimenticias.",
"Modifica el Código Civil respecto de los delitos y cuasidelitos civiles cometidos por menores de edad.",
"Establece efectos civiles y penales por la comisión del delito de maltrato habitual de la ley Nº20.066.",
"Modifica el Código Procesal Penal, para regular la revocación del acuerdo reparatorio.",
"Modifica Código Sanitario, a fin de sancionar a quien administre o posea, vertedero clandestino."),
status = c("Publicado","Publicado",
"Publicado","Publicado","Publicado","Publicado",
"Publicado","Publicado","Publicado","Publicado",
"En tramitación","En tramitación","En tramitación",
"En tramitación","Archivado","En tramitación","En tramitación",
"En tramitación","En tramitación","Archivado"),
topic = c("Obras Públicas, Transportes y Telecomunicaciones.",
"Obras Públicas, Transportes y Telecomunicaciones.",
"Constitución, Legislación, Justicia y Reglamento",
"Gobierno Interior, Nacionalidad, Ciudadanía y Regionalización",
"Derechos Humanos, Nacionalidad y Ciudadanía",
"Obras Públicas, Transportes y Telecomunicaciones.",
"Obras Públicas, Transportes y Telecomunicaciones.","Recursos Hídricos, Desertificación y Sequía",
"Economía, Fomento, Micro, Pequeña y Mediana Empresa, Protección de los Consumidores y Turismo",
"Constitución, Legislación, Justicia y Reglamento",
"Constitución, Legislación, Justicia y Reglamento",
"Obras Públicas, Transportes y Telecomunicaciones.","Salud",
"Constitución, Legislación, Justicia y Reglamento",
"Constitución, Legislación, Justicia y Reglamento","De la Familia",
"Constitución, Legislación, Justicia y Reglamento",
"De la Familia",
"Constitución, Legislación, Justicia y Reglamento","Salud"),
published = c(TRUE,TRUE,TRUE,TRUE,TRUE,
TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,
FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE),
days = c("4833","1214","336","407",
"1290","4538","866","817","731","8",NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA),
cargo = c("Senador","Senador",
"Diputado","Senador","Diputado","Senador","Senador",
"Senador","Diputado","Senador","Diputado","Senador",
"Diputado","Senador","Senador","Diputado","Diputado",
"Diputado","Senador","Senador"),
genero = c("M","M","M","M","F","M",
"M","M","M","M","M","F","F","F","M","F","M",
"M","M","M"),
partido = c("UDI","Independiente","UDI",
"RN","PC","UDI","RN","UDI","DC","PS","DC","DC",
"PC","PPD","Pais Progresista","PC","PPD","RN",
"Independiente","Independiente"),
region = c("Región del Maule",
"Región de Antofagasta","Región Metropolitana de Santiago",
"Región de la Araucanía","Región Metropolitana de Santiago",
"Región del Maule","Región de la Araucanía",
"Región del Libertador General Bernardo O'Higgins",
"Región de Los Ríos","Región del Maule","Región de Ñuble",
"Región de Magallanes y la Antártica Chilena",
"Región Metropolitana de Santiago","Región del Biobío",
"Región del Biobío","Región Metropolitana de Santiago",
"Región de Valparaíso","Región de Ñuble","Región de Antofagasta",
"Región de Magallanes y la Antártica Chilena"),
distrito = c(9,3,14,11,9,9,11,8,24,
9,19,15,9,10,10,9,7,19,3,15),
ideologia = c(3,0,3,3,-3,3,3,3,1,
-2,1,1,-3,0,-1,-3,0,3,0,0),
fecha_ingreso = c("1992-09-16","2006-07-12",
"2016-06-02","2015-11-25","2017-04-06","1993-07-08",
"2001-04-04","2012-03-14","2014-11-17","2020-03-18",
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),
iniciativa = c("Moción","Moción","Moción",
"Moción","Moción","Moción","Moción","Moción",
"Moción","Moción",NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),
n_ley = c("Ley Nº 20.068",
"Ley Nº 20.388","Ley N° 21.011","Ley N° 20.990","Ley N° 21.273",
"Ley Nº 20.068","Ley Nº 19.887","Ley N° 20.753",
"Ley N° 20.967","Ley N° 21.219",NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA),
fecha_publicacion = c("2005-12-10","2009-11-07",
"2017-05-04","2017-01-05","2020-10-17","2005-12-10",
"2003-08-18","2014-06-09","2016-11-17","2020-03-26",
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),
aprueba = c(NA,0.588609625988215,
0.239293203926262,0.239293203926262,0.198232587727645,NA,
0.486342468349014,0.227811246640991,0.378658817614279,
0.0602900629256258,0.263274470108713,0.45791429449014,
0.239293203926262,0.365168783759783,0.388320501421412,
0.28639908396031,0.429509630187767,0.235967915643678,
0.225057300910334,0.342202303911118),
desaprueba = c(NA,0.226933127280144,
0.580545109188936,0.580545109188936,0.600041245494515,NA,
0.262920553958243,0.619839921565968,0.430880155305093,
0.822159297111715,0.525507754836235,0.305382056498538,
0.580545109188936,0.391162345818584,0.421119293586968,
0.556417403359417,0.38144207967139,0.592325472064253,
0.534274514219923,0.462000911671922),
alineacion = c("Oposición","Independiente",
"Oposición","Oposición","Oficialismo","Oposición",
"Oposición","Oficialismo","Oficialismo","Oposición",
"Oposición","Oficialismo","Oficialismo","Oposición",
NA,"Oficialismo","Oficialismo","Oficialismo",
"Independiente","Independiente"),
personas = c(2L,3L,7L,2L,5L,2L,1L,
1L,4L,1L,5L,2L,5L,9L,1L,7L,3L,1L,1L,2L),
oposicion = c(1,NA,1,1,0,1,1,0,0,1,
NA,0,0.2,0.444444444444444,NA,NA,0,0,0,0.5),
oficialismo = c(0,NA,0,0,1,0,0,1,0.75,
0,NA,0.5,0.8,0.444444444444444,NA,NA,1,1,0,0),
diversidad = c(0.5,1,0.142857142857143,1,
0.8,0.5,1,1,0.5,1,0.6,1,1,0.777777777777778,1,
0.857142857142857,0.333333333333333,1,1,1),
transversal = c(0,0.666666666666667,0,0,0,
0,0,0,0.25,0,0.4,0.5,0.2,0.222222222222222,0,
0.142857142857143,0,0,0,0.5),
paridad = c(0,0.33,0.14,0.5,0.6,0,0,
0,0,0,0.2,0.5,0.4,1,0,0.71,0.33,0,0,0),
centralismo = c(0.5,0,0.43,0,0.4,0.5,0,
0,0,0,0,0,0.2,0.44,0,0.29,0,0,0,0),
apoyo = c(0.857142857142857,
0.937134909596662,1.40637813211845,0.397354974451458,
0.92295526434704,0.909090909090909,0.484162895927602,
0.221837549933422,0.807683716774626,0.133712528823982,
1.15158564956532,0.624756606397775,1.00455580865604,
1.15672464313557,0.312020460358056,1.3907424105801,
0.883169462116831,0.221837549933422,0.184591052869408,
0.403841858387313)
)
To use the published projects as training data, you can filter by published == TRUE. For example:
trainset <- data %>% filter(published == TRUE)
testset <- data %>% filter(published == FALSE)
Alternatively, if you want to split the training and testing datasets using the days column, you can use:
trainset <- data[!is.na(data$days),]
testset <- data[is.na(data$days),]
You can create a linear regression model and view the model output using:
linear_model <- lm(days ~ [chosen variable/s here], data = trainset)
summary(linear_model)
See the documentation here (https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/predict.lm) for making predictions on new data using the predict.lm function.
I am working with a dataset I scraped of the transcripts from the Mexican President (Adnrés Manuel López Obrador) daily speeches, contained in this webpage.
The structure of each transcript consist in a main message from the President, another parts from some of his Cabinet members and other parts from the journalists making questions. Each part is delimited by a word in caps.
For example:
PRESIDENTE ANDRÉS MANUEL LÓPEZ OBRADOR: Es que yo hablé, en mi recorrido que hice por el país con todos los gobernadores, a ustedes les consta, porque muchos de los que están aquí me acompañaron. Entonces, antes de ir al acto, en la plaza pública, yo tenía un encuentro con el gobernador y ahí hablábamos, y un tema era acerca del papel de los delegados. Nadie puede decir que no les expliqué de qué se trataba, incluso, en algunos casos hasta públicamente hice mención de que el delegado nunca le iba a faltar el respeto a la autoridad local, al gobernador, al presidente municipal. Es que hay otras cosas que yo entiendo también. Pero yo eso se los dejo de tarea a ustedes, para que ustedes indaguen, investiguen. Con todo respeto, ustedes son mirones profesionales, son periodistas, pero muy buenos periodistas. Ahí término con una. -PREGUNTA: Agencia de Noticias AP. Los médicos cubanos que estaban en Brasil, trabajando hasta Jair Bolsonaro, ellos podían venir a México; ¿hay una negociación en ese sentido, para traer a los médicos cubanos a México? -PRESIDENTE ANDRÉS MANUEL LÓPEZ OBRADOR: No. Eso es una volada de nuestros adversarios, que los queremos mucho, mucho, mucho, pero que son muy mentirosos. PREGUNTA: Señor presidente, Shaila Rosagel, de Sin Embargo, retomando, nada más, para finalizar este tema de Jalisco y de la violencia. Cuánto tiempo estiman para que empiece a disminuir la violencia, este tipo de ataques armados. FRANCISCO GARDUÑO YÁÑEZ: El día de hoy se inicia una etapa más en estas Islas Marías, la primera fue cuando su fundación con Porfirio Díaz; la segunda fue cuando estuvo el general Múgica, que empieza la prevención; la siguiente fue en los 70, con Luis Echeverría en lo que fueron la Ley de Normas Mínimas; y ahora en la Cuarta Transformación es el cierre y el respeto a los derechos humanos.
I'm interested in extract only the parts given by the President.
In other words, those strings delimited by "PRESIDENTE ANDRÉS MANUEL LÓPEZ OBRADOR:" and "PREGUNTA" or "FRANCISCO GARDUÑO".
How can I extract those particular string or, given the case, remove the remaining ones?
After each of the president's talk, there is another person's chunk of text that follows a format of "." + "Name of the person" + ":". Therefore, you can use the following to extract all president talk.
text <- c("lalala_testing_purpose PRESIDENTE ANDRÉS MANUEL LÓPEZ OBRADOR: Es que yo hablé, en mi recorrido que hice por el país con todos los gobernadores, a ustedes les consta, porque muchos de los que están aquí me acompañaron. Entonces, antes de ir al acto, en la plaza pública, yo tenía un encuentro con el gobernador y ahí hablábamos, y un tema era acerca del papel de los delegados. Nadie puede decir que no les expliqué de qué se trataba, incluso, en algunos casos hasta públicamente hice mención de que el delegado nunca le iba a faltar el respeto a la autoridad local, al gobernador, al presidente municipal. Es que hay otras cosas que yo entiendo también. Pero yo eso se los dejo de tarea a ustedes, para que ustedes indaguen, investiguen. Con todo respeto, ustedes son mirones profesionales, son periodistas, pero muy buenos periodistas. Ahí término con una. -PREGUNTA: Agencia de Noticias AP. Los médicos cubanos que estaban en Brasil, trabajando hasta Jair Bolsonaro, ellos podían venir a México; ¿hay una negociación en ese sentido, para traer a los médicos cubanos a México? -PRESIDENTE ANDRÉS MANUEL LÓPEZ OBRADOR: No. Eso es una volada de nuestros adversarios, que los queremos mucho, mucho, mucho, pero que son muy mentirosos. PREGUNTA: Señor presidente, Shaila Rosagel, de Sin Embargo, retomando, nada más, para finalizar este tema de Jalisco y de la violencia. Cuánto tiempo estiman para que empiece a disminuir la violencia, este tipo de ataques armados. FRANCISCO GARDUÑO YÁÑEZ: El día de hoy se inicia una etapa más en estas Islas Marías, la primera fue cuando su fundación con Porfirio Díaz; la segunda fue cuando estuvo el general Múgica, que empieza la prevención; la siguiente fue en los 70, con Luis Echeverría en lo que fueron la Ley de Normas Mínimas; y ahora en la Cuarta Transformación es el cierre y el respeto a los derechos humanos.")
library(stringr)
# step 1: get all the conversation chunk between President … : ------------
president_split <- str_split(string = text,pattern = "PRESIDENTE ANDRÉS MANUEL LÓPEZ OBRADOR: ")[[1]][-1]
# step2: split all the chunks by : ---------------------------------------
president_split_2 <- president_split %>% str_split(":")
# step3: remove everything after the last . -------------------------------
get_the_string <- function(string) {
substr(string[1], 1, (gregexpr(pattern = "\\.", string[1])[[1]] %>% max()))
}
sapply(president_split_2, get_the_string)
Results:
[1] "Es que yo hablé, en mi recorrido que hice por el país con todos los gobernadores, a ustedes les consta, porque muchos de los que están aquí me acompañaron. Entonces, antes de ir al acto, en la plaza pública, yo tenía un encuentro con el gobernador y ahí hablábamos, y un tema era acerca del papel de los delegados. Nadie puede decir que no les expliqué de qué se trataba, incluso, en algunos casos hasta públicamente hice mención de que el delegado nunca le iba a faltar el respeto a la autoridad local, al gobernador, al presidente municipal. Es que hay otras cosas que yo entiendo también. Pero yo eso se los dejo de tarea a ustedes, para que ustedes indaguen, investiguen. Con todo respeto, ustedes son mirones profesionales, son periodistas, pero muy buenos periodistas. Ahí término con una."
[2] "No. Eso es una volada de nuestros adversarios, que los queremos mucho, mucho, mucho, pero que son muy mentirosos."