Tratamiento y procesado de imágenes con R y `magick`

Estoy preparando la batalla entre geometría e inteligencia artificial, batalla que está perdida porque tengo que dar de comer a mis chavales y si tengo que ir a vender un producto queda más comercial contar lo que se supone que hace la inteligencia artificial y no contar lo que hacen vectores, direcciones, puntos en el espacio,… eso lo cuentan en la educación secundaria y no es «disruptivo». Sin embargo, aprovecho para contar historia del abuelo, el único proyecto serio basado en inteligencia artificial en el que he estado involucrado se resolvió gracias a la geometría y a las mejoras que se propusieron en el reconocimiento óptico, las redes convolucionales nos provocaron un problema. Inicialmente es mejor plantear una solución sencilla. ...

1 de septiembre de 2020 · rvaquerizo

Expandir un data frame de R con tidyr

En alguna entrada del blog ya he tratado sobre la expansión de un conjunto de datos pero quería tener una entrada específica. Es algo que se puede programar mediante bucles (tarda una vida) o bien podemos usar la función expand del paquete tydyr. Viendo un ejemplo y los conjuntos de datos generados vais a entender el propósito de la expansión de tablas, se trata de un inicio y un fin y deseamos que se genere una secuencia de observaciones sucesivas dado ese inicio y ese fin. A modo de ejemplo ilustrativo: ...

13 de agosto de 2020 · rvaquerizo

Optical Character Recognition (OCR) con R y tesseract

Una pincelada sobre Optical Character Recognition con R. El paquete tesseract de R permite aplicar el reconocimiento óptico de caracteres con R de una forma bastante sencilla, es uno de los múltiples líos en los que me estoy metiendo, si llega a buen puerto pondré más. Tenemos esta imagen: Necesitamos tanto el paquete tesseract como el magick y ejecutando en R: ```r library(tesseract) library(magick) img <- image_read("/images/2020/06/prueba_OCR.png") str(img) cat(image_ocr(img)) ```r Tipos de uniones (join) de tablas con Python Pandas By rvaquerizo | 16/05/2020 | No hay comentarios | Formacién, Monogréticos, Python Recopilacién de las uniones més habituales con Python Pandas en una sola entrada. No se realiza equivalencias con sal join, la intencién es tener de ‘forma resumida los cédigos para realizar left join inner join y concatenacién de data frames de Pandas. Hay amplia documentacion esto es una sintesis. Los data frames empleados para ilustrar [..] Fácil en principio y parece tener problemas con las tildes. Si llegan a buen puerto mis proyectos iré poniendo algunas posibilidades más. Saludos.

15 de junio de 2020 · rvaquerizo

Latent semantic analysis y la importancia de las matemáticas

Vivimos “días extraños”, tan extraños que en España se están planteando prescindir de la asignatura de matemáticas en la enseñanza obligatoria. Es evidente que las personas que gobiernan hoy (25/05/2020) España habrían suspendido matemáticas. Sin embargo, es curioso que haya pocos matemáticos ejerciendo cargos políticos, ¿puede ser que los matemáticos no tengan esa vocación por mejorar la vida de los demás? En fin, esta crítica a la ignorancia numérica y al egoísmo matemático me sirve de “extraña introducción” al Latent semantic analysis (LSA) como siempre los aspectos teóricos los podéis encontrar en otros sitios. Y todo este conjunto de frases inconexas hilan con la entrada en el blog de mi amigo J.L. Cañadas en muestrear no es pecado porque, reducción de dimensionalidad, el lenguaje y la importancia de las matemáticas es en realidad el Latent Semantic Analysis. ...

27 de mayo de 2020 · rvaquerizo

Identificar los municipios costeros y limítrofes de España con R.

Otro ejercicio con spatial data R Rstats y data science para el trabajo con objetos espaciales en el ecosistema big data. Empiezo con frase ilógica y ridícula para mejorar las búsquedas de Google pero el tema que traigo hoy creo que puede ser útil para aquellos que, dado un spatial data, tienen que identificar los polígonos que bordean ese objeto, en este caso vamos a identificar los municipios que bordean España, pueden ser limítrofes con Francia y Portugal o bien municipios costeros. No se plantean algoritmos complicados, como en entradas anteriores nos centramos en la extracción de mapas de GADM: ...

27 de abril de 2020 · rvaquerizo

Mover parte de un shapefile con R. Mapa con tasa de casos de coronavirus por habitante en España

Si leéis habitualmente el blog ya conocéis la entrada sobre el mapa del COVID por Comunidades Autónomas y estaréis de acuerdo conmigo en que el mapa de España representado con Rstats es feo de solemnidad. Pero el código es «sencillo» por ahí se ve cada representación que requiere ser desarrollador de R cinturón negro. Bueno, los torpes empleamos ggplot con geom_polygon pero podemos empezar a complicar el mapa añadiendo nuevas posibilidades. La que os traigo hoy es muy interesante en el caso de España, se trata de mover las Islas Canarias en el mapa de Comunidades Autónomas pero directamente con R. Ya tenemos hecho un mapa con QGIS en otra entrada, pero ahora vamos a mover esa parte del shapefile directamente con R y la función elide como hemos hecho en otra ocasión. Estaréis pensando «Vaquerizo no tiene imaginación por eso tira de entradas anteriores y las junta», no es el caso. ...

23 de abril de 2020 · rvaquerizo

Mi breve seguimiento del `coronavirus` con R

Ya comentaré con más detenimiento el código, pero es la unión de muchos de los códigos R de días anteriores, es un buen ejemplo de uso de la librería gridExtra para poner múltiples gráficos en una sola salida: library(dplyr) library(ggplot2) library(reshape) library(gridExtra) df <- read.csv("https://raw.githubusercontent.com/datadista/datasets/master/COVID%2019/ccaa_covid19_fallecidos.csv", sep=',', check.names=FALSE, encoding = 'UTF-8') df2 <- melt(df[,-1]) names(df2) = c('CCAA','fecha','fallecidos') mm <- df2 %>% group_by(CCAA) %>% summarise(total_fallecidos = sum(fallecidos)) %>% arrange(desc(total_fallecidos)) %>% mutate(CCAA2 = ifelse(row_number()>=10,'Resto', as.character(CCAA))) %>% select(CCAA,CCAA2) df2 <- left_join(df2,mm) table(mm$CCAA2) df2 <- df2 %>% group_by(CCAA2,fecha) %>% summarise(fallecidos=sum(fallecidos)) %>% mutate(fecha = as.Date(as.character(fecha),origin='1970-01-01')) %>% as_tibble() df3 <- df2 %>% mutate(fecha=fecha+1, fallecidos_anterior=fallecidos) %>% select(-fallecidos) df2 <- left_join(df2, df3) %>% mutate(fallecidos_dia = fallecidos - fallecidos_anterior) #Función para hacer los gráficos grafica <- function(comunidad){ p <- ggplot(filter(df2,CCAA2==comunidad), aes(x=fecha)) + geom_line(aes(y=fallecidos_dia, group = 1), alpha = 0.5, color='red') + geom_smooth(aes(y=fallecidos_dia), method = "loess") + ggtitle(comunidad) + xlab("") + ylab("Fallecidos por día") return(p)} madrid = grafica('Madrid') cat = grafica('Cataluña') mancha = grafica('Castilla-La Mancha') leon = grafica('Castilla y León') pvasco = grafica('País Vasco') valencia = grafica('C. Valenciana') andalucia = grafica('Andalucía') aragon=grafica('Aragón') resto = grafica('Resto') total = grafica('Total') grid.arrange(madrid, cat, mancha, leon, pvasco, valencia, andalucia, aragon, resto, total, nrow=5,ncol=2) ...

20 de abril de 2020 · rvaquerizo

Entender una blockchain con R

Una introducción de bajo nivel (sin entrar mucho en tecnología) a los blockchain con R. Es una entrada destinada a comprender que es un blockchain desde otro punto de vista, no sólo criptografía o criptomoneda, podemos poner información que sólo conoce el origen. ¿Os imagináis si pusieran a disposición de los científicos de datos información sobre todos los españoles identificados por NIF y si tiene o no coronavirus? Los científicos de datos podrían trabajar de forma anónima con esos datos y ayudar a establecer las zonas libres de covid-19, persona a persona de forma perfectamente anónima. Aunque no se descarta que algún cabestro se dedicara a desencriptar… ...

9 de abril de 2020 · rvaquerizo

Datos agrupados en R con dplyr

Entrada rápida para ilustrar como crear un campo autonumérico por un factor, es una duda que me plantean, tienen datos de clientes y fechas y necesitan crear un autonumérico en R que les diga el número de orden de los eventos de una fecha. Algo parecido a lo que hacemos con el retain de R. Vamos a ilustrar la tarea con un ejemplo: ```r clientes = 100 id_cliente = rpois(clientes,10) fecha = rpois(clientes, today()-rpois(clientes,5) ) eventos <- cbind.data.frame(id_cliente,fecha) eventos$fecha <- as.Date(eventos$fecha, origin="1970-01-01") eventos <- eventos %>% arrange(id_cliente,fecha) 100 clientes que aparecen una o n veces con fechas asociadas, el primer paso que sugiero hacer es eliminar duplicados con dplyr: ...

26 de marzo de 2020 · rvaquerizo

Los pilares de mi simulación de la extensión del COVID19

No debería publicar esta simulación de la extensión del COVID19 o coronavirus porque puede disparar alarmas, provocar insultos, levantar ampollas… el caso es que yo llevo 7 días de aislamiento más que el resto de España porque sólo había que ver los datos de Italia para saber lo que iba a pasar y no avise a nadie para no disparar alarmas, provocar insultos, levantar ampollas… Y AL FINAL YO TENÍA RAZÓN. Así que os voy a exponer el motivo por el cual estoy muy asustado, bueno, hoy quiero mostraros el inicio de una simulación mala y sin fundamento que estoy realizando sobre la extensión en España del COVID19. Para hacerla vamos a emplear la siguiente información: ...

23 de marzo de 2020 · rvaquerizo