Cultivando informaciรณn de la web

ยซManitas de budaยป
[Fotografรญa de Miguel Andrade]. (Rancho Viejo, Veracruz. 2019).

Minando artistas amigos

Antes que nada le doy las gracias a mi compaรฑera de vida y mejor amiga Ladrรณn de Mar, quien me asistiรณ en la grabaciรณn del video siguiendo la actividad generando dudas y aclaraciones.

Preรกmbulo

Que tal queridas personas. Espero que se encuentren llenas de salud y amor en estos tiempos de cambio. Esta entrada del blog fue inspirada por el canal de facebook Coronatv (@CoronaTV2020) y particularmente por una lectura realizada por Hunaac-cel: Mรบsico, rapero y distinguido miembro del grupo. La lectura fue acerca de โ€œLa dictadura de los datos: La verdadera historia desde dentro de Cambridge Analytica y cรณmo el Big Data, Trump y Facebook corrompieron la democracia, y cรณmo puede volver a pasarโ€, libro de Brittany Kaiser, y nos platicรณ un poco acerca de cรณmo se crean perfiles psicolรณgicos a partir de la informaciรณn que dejamos tirada como basura en redes sociales (sรญ, likes y toda esa mierda). Resulta escalofriante la exactitud con la que pueden conocernos una vez que tienen suficientes datos, como recomendaciรณn podemos dar ยซMe gustaยป y ยซSeguirยป a cosas que no nos gustan para que no tengan un perfil tan preciso. Hacer esto tambiรฉn ayuda a que la informaciรณn que se te presente (noticias, anuncios, etc.) no estรฉ sesgada al tema definido de forma algorรญtmica como ยซde tu agradoยป.


Al finalizar esta actividad habremos aprendido:

  1. Algo de programaciรณn
  2. Raspar informaciรณn de la web
  3. codificar y ejecutar un script

Introducciรณn


Hoy platicaremos un poco acerca de cรณmo extraer informaciรณn de la red, utilizaremos el lenguaje de programaciรณn R. Este lenguaje de programaciรณn tiene un enfoque al anรกlisis estadรญstico y ha evolucionado tanto que ya puedes hacer casi cualquier cosa con su ayuda. Los invito a visitar este par de pรกginas web que construรญmos con R.

Coronavirus (Web app para ver tasa de infectados/muertos que raspa informaciรณn diariamente de OMS)

Nicรณmaco (Web app para analizas nรบmeros naturales y jugar con espirales de nรบmeros primos)

Instalaciรณn

Si no tienes R puedes descargarlo aquรญ:

para Windows:

https://cran.r-project.org/bin/windows/base/

para Mac:

https://cran.r-project.org/bin/macosx/

instale R y prosiga con la actividad.


Resumen

Comenzaremos con un ejercicio sencillo obteniendo informaciรณn de la URL

http://www.discogs.com

El cual es una base de datos de la mรบsica. Pero, la idea al fondo de esta actividad, es sembrar los conocimientos bรกsicos para que cada quien pueda hacer sus propios proyectos de cultivo de datos.

En esta actividad, construiremos un script (archivo con serie de lรญneas de cรณdigo que realiza una tarea especรญfica al ser ejecutado) que al ejecutarlo nos pida el nombre de una artista y el programa automรกticamente entre a la pรกgina del artista en discogs y extraiga la informaciรณn de artistas que han colaborado con el artista buscado. A continuaciรณn agrego una captura de una ejecuciรณn del script en donde gรฉnero la lista de ยซartistas amigosยป o ยซcolaboradoresยป de el artista buscado: Lassi Nikko.

La actividad es sencilla y se realiza paso a paso de manera que pueda seguirse sin mucho esfuerzo y esta destinada a cualquier pรบblico, sin importar si tiene o no conocimientos de programaciรณn. El video se realiza junto con un asistente que nos apoyarรก con generar dudas y preguntas durante la actividad de manera que sirva de ayuda a cualquiera que llegue a frenar su avance en la actividad debido a confusiรณn o mal interpretaciรณn.

Actividad

Video de actividad, sรญguenos en Youtube.

Si eres de los que prefiere leer, aquรญ puedes consultar la actividad desarrollada en forma textual, que tambiรฉn puede servir como material de apoyo para resolver alguna duda del video.

http://www.mediafire.com/file/8wt0u9bsnhc3658/Mining_artist_friends.html/file

Dicho esto, no dejen de escribir con sus dudas, comentarios, sugerencias, correcciones. Las cuales leo y contesto con mucho gusto.

Me despido con los mejores deseos para todos ustedes.

โ€“ Atl Tlachinolli

Aplicaciones web educativas en R

R Shiny: herramienta en potencia para facilitar el proceso de enseรฑanza-aprendizaje

ยกHola a todos amigos!

En esta hermosa tarde de noviembre, aprovecharemos para platicarles un poco acerca del lenguaje de programaciรณn R y la poderosa librerรญa Shiny, con la cual puedes diseรฑar tu propia aplicaciรณn web interactiva de manera increรญblemente sencilla, te invitamos a conocer el poder de R Shiny probando la siguiente app, con la que podrรกs conocer entre otras cosas, las propiedades de los primeros diez millones de nรบmeros naturales:

https://atltl.shinyapps.io/niko/


En la imagen de portada (al inicio), se muestra una grafica de pastel con cinco rebanadas, las cuales representan la proporciรณn de los factores primos del numero 123123, los cuales son:
3, 7, 11, 13 y 41.

Si hacemos el producto de los factores primos de un numero, reconstruimos el numero original:

3 x 7 x 11 x 13 x 41 = 123123


Nota curiosa:

ยฟRecuerdan algo asรญ como?

ยซEl orden de los factores no altera el productoยป

Esta oraciรณn habla especรญficamente de una multiplicaciรณn (producto). Los factores no son mas que los elementos que se multiplican. Pero esto no aplica para cualquier operaciรณn. Por ejemplo, en la divisiรณn. Cuando no hay alteraciรณn por el orden de operado, decimos que la operaciรณn es conmutativa.


La aplicaciรณn fue bautizada con el nombre ยซNicรณmacoยป, en honor al filรณsofo y matemรกtico Nicรณmaco de Gerasa (primero en clasificar los nรบmeros naturales en abundantes, deficientes y perfectos, segรบn la suma de sus divisores propios) te permite conocer tanto los divisores propios de un nรบmero como la suma de los mismos. Obtener los factores primos y su clasificaciรณn segรบn de Gerasa, entre otras cosas.

Con Nicรณmaco, podemos introducir los conceptos de nรบmero natural, numero primo y compuesto, de divisores y factores, entre otros, de una manera didรกctica, interactiva y divertida. Aprovechando la tecnologรญa que ofrece la amplia paqueterรญa de librerรญas de R y unas cuantas funciones propias.

Ademรกs, Nicรณmaco contiene un espiral de Ulam interactivo, con el que se puede, una vez comprendidas las definiciones de nรบmeros primos y compuestos (y saber que no existe una ยซfรณrmulaยป para obtener el n-รฉsimo primo) sumergirnos en la curiosidad visual del aparente orden en el caos de distribuciรณn primal sobre estos fabulosos espirales, donde podrรก controlar tanto el nรบmero de vueltas cรณmo el nรบmero de entradas.

Espiral con 7107 entradas, 2470 vueltas.

A continuaciรณn presentamos una intrigante animaciรณn del espiral de Ulam que se obtuvo variando el numero de entradas mientras se mantenรญa un numero de vueltas constante, con 10 capturas por segundo…

Aquรญ dejamos el script con las funciones que se utilizaron para generar gifs de este tipo.
A la funciรณn create_gif() se le indica intervalo [a,b] y numero de vueltas. Se crean (b-a) imรกgenes en el directorio de trabajo en el que se encuentre. Con las que puede generar un gif con ayuda de una aplicaciรณn como PicGif (OSX).

## Script que genera b-a graficas para creac gif
## Function that plots Ulam Arquimedian Spiral (Pseudo Stach spiral, Stach gives 1 turn por cada cuadrado perfecto)
prime.spiral <- function(obs,vueltas){
  vueltas <- vueltas * 2  
  data.frame(x = seq(0, vueltas * pi, length.out = obs), primo = sapply(1:obs,chkp)) %>% mutate(theta = x %% (2 * pi), r = x) %>%
  ggplot() + aes(x = theta, y = r, colour = primo) +
  coord_polar(start = - pi / 2, direction = - 1) + 
  ggtitle(expression(Espiral~r == theta)) + geom_point() +
  ylim(0, vueltas * pi) + xlim(0, 2 * pi) +
  labs(x = NULL, y = NULL)
}

create_gif <- function(a,b,vueltas){
	v <- a:b
	for(n in v){
		myplot <- prime.spiral(n, vueltas) 
		png(paste("plot", n, ".png", sep = ""))
		print(myplot)
		dev.off()
	}
}

Se recomienda crear una carpeta especial para almacenar los archivos png creados por create_gif() y asignarla como directorio de trabajo. Una vez hecho esto basta con introducir las funciones anteriores y hacer:

create_gif(num_entradas_inicial, num_entradas_final, num_vueltas)

Ejemplo:

create_gif(100, 150, 20)

crea (150-100) = 50 imรกgenes de un espiral de veinte vueltas. iniciando con 100 entradas y aumentando de una en una hasta 150. Con estas 50 imรกgenes se puede crear un gif como el mostrado arriba con ayuda de algรบn software que genere gifs a partir de un conjunto de imรกgenes, software muy comรบn hoy en dรญa.

ยกEspero que les haya parecido interesante y les deseo lo mejor!

โ€“Atl Tlachinolli

Programaciรณn en R

Los primeros cuatro primos se encuentran entre el uno y el diez. Si los sumas, el resultado es 17

Nรบmeros: primos, primos relativos perfectos y amigos

Aprendiendo R con curiosidades matemรกticas

Preรกmbulo

ยฟQuรฉ tal Tlachinollis?

En lo personal, por acรก se podrรญa decir que somos mas adeptos de ANSI C pero debemos comentar que nos estamos enamorando de R. Este poderoso, intuitivo y eficaz lenguaje, te permite aprender a programar evitando conceptos complicados como declaraciรณn de variables, apuntadores y asignaciรณn de memoria, es la herramienta perfecta para el estudiante de ciencias e ingenierรญas o para cualquiera con una curiosidad inherente por los nรบmeros.

Confesaremos ser novatos en R, lo poquito que hemos escrito son unas funciones muy sencillas para el manejo de tablas generadas por sistemas de rastreo deportivo ZXY (ZXY Sport tracking systems), las cuales pueden hallarse aquรญ:

R ZXY Sport Tracking data edition tools

esto ya fue hace tres aรฑos y a hachazos, sin saber mucho de R se fue implementando en unos tres dรญas por que asรญ fue el plazo de trabajo, hicimos lo que se pidiรณ… pero digamos que sin aprender de forma adecuada, o al menos como hubiรฉsemos deseado en caso de haber tenido mas tiempo.

Ahora estamos desempolvando o mรกs bien re-aprendiendo con paciencia y con ayuda de un par de libros excelentes para iniciarse, los cuales se encuentran en la red en varios sitios, aquรญ les dejo la lista con los enlaces por si les interesa:

La mejor manera de aprender es con las manos a la obra. Despuรฉs de refrescarnos un poco de la sintaxis de R para quitarnos el chip ANSI C, algunos resultados fueron las siguientes funciones que sirven para revisar curiosidades matemรกticas como nรบmeros primos, nรบmeros perfectos, nรบmeros amigos y primos relativos, que son funciones muy bรกsicas que presentan un buen ejercicio para el aprendizaje de un nuevo lenguaje de programaciรณn, ademรกs pueden llegar a ser de utilidad para estudiantes de cursos cรณmo fundamentos de รกlgebra . En fin, quisimos compartirlas, esperamos que a alguien le sean รบtiles.


Cรณdigo

A continuaciรณn se muestra el cรณdigo fuente y explicaremos como pueden usarse las funciones para pasar un buen rato.

ยกHรกgalo usted mismo!

Tan solo copie y pegue el siguiente cรณdigo en la consola de R y presione introducir, con lo que estarรก listo para jugar con las funciones :

# R Qurra packet
# functions to test primes, relative primes, perfect and friend numbers
# This package may be useful for undergraduate students in Fundaments of Algebra courses
# where you are usually introduced deeply into this concepts and their properties
# tlachinolliatl@gmail.com
#########################################################################

# Function that checks for primality
# returns TRUE in case n prime, FALSE instead
# try checking primality for first 100 natural numbers like this:
# > chkrprime(1:100)
chkprime <- function(x){
	primo <- vector()
	j <- 1
	for(n in x){
		primo[j] <- T
		for(i in 2:(sqrt(n))){
			if(n%%i==0 && n!=2){
				primo[j] <-F
				break
			}
		}
	j <- j+1		
	}
return(primo)
}
# Function that returns a list of proper divisors of a given set of numbers
# divp stands for (div)isores (p)ropios
#
divp <- function (x){
	k <- 1
	lista <- list()
	for(n in x){
		divisores <- vector()
		j <- 1	
		for(i in 2:(n/2)){
			if(chkprime(n)) break # not looping if n is prime
			if(n%%i==0){
				divisores[j] <-i
				j <- j+1
			}
		}
	lista[[k]] <- c(1,divisores)
	k <- k + 1			
	}
return(lista)
}

# Function that checks if a pair of numbers are friends between them
# if friends, testfrnd returns TRUE, else it will return FALSE
#
#  Muhammad Baqir Yazdi found the pair (9363584,9437056) in the XVII century 
# Checking this pair took a couple of minutes for my old Intel Core 2 Duo at 2.13 GHz
# Try with  (1184, 1210) for faster computation
testfrnd <- function(x,y){
	divpx <- unlist(divp(x)) # is the same divp(x)[[1]]?
	divpy <- unlist(divp(y))
	sumx <- sum(divpx)
	sumy <- sum(divpy)
	if(sumx==y && sumy==x){
		return(T)
	}else return(F)
}
#Function that checks if two numbers x,y are relative primes between them
# i.e. MCD(x,y) = 1 i.e. they have no common proper divisors between them !=1
# if relative primes, testrprime returns TRUE, else it will return FALSE
testrlpr <- function(x,y){
	divpx <- unlist(divp(x))
	divpy <- unlist(divp(y))
	if(length(divpx)==1 && divpx[1]==1 || length(divpy)==1 && divpy[1]==1){
		return(T)
	}else
	if(any(divpx[2:length(divpx)]==divpy[2:length(divpy)])){
		return(F)
	}else return(T)
}

#Function that checks if a number is perfect
# i.e the sum of his proper divisors (including one) add up to the same number
# Example: proper divisors of 6 are 1, 2, 3 wich sum 1+2+3 = 6 the number itself
# RETURNS TRUE IF NUMBER IS PERFECT FALSE INSTEAD 
# Find the perfectos between 1:10000 with a crazy R loop like this:
# > for(i in 1:10000) if(testprfc(i)) print(i)
# be patient it may take a while
testprfc <- function(x){
	divpx <- unlist(divp(x))
	sumx <- sum(divpx)
	if(sumx==x){
		return(T)
	}else return(F)
}


En el siguiente video se muestra como sacarle un poco de jugo a estas funciones desde la consola de R, lo cual puede ser una prรกctica para cualquiera que se estรฉ iniciando en este lenguaje:

Si tienes comentarios para mejorar el cรณdigo o algรบn consejo de R relacionado con las funciones anteriores serรก muy apreciado.

ยกNos despedimos con los mejores deseos!


De los nรบmeros he aprendido:

ยซSi quieres llegar a ser perfecto comienza por ser tu propio amigoยป

โ€“ E.P. del Cerro


Grรกfica y regresiรณn local de temperatura interna LG M2762D

Se observa un comportamiento logarรญtmico con una posible asรญntota en y = 35ยบC tras dos horas de funcionamiento despuรฉs de la reparaciรณn de Pierre y Atl mod.

Graficando datos capturados por sensor LM35 en Arduino Monitor Serie

Mah xipano

Problema

Insatisfechos con las grรกficas obtenidas por el Arduino Serial Plotter, con sus raras escalas y repleta de interferencias generadas por las variaciones de voltaje (capturadas por el sensor LM35 durante los registros), decidimos hacer nuestras propias grรกficas en R.

Resumen

Se modificรณ nuestro bosquejo de Arduino, de modo que lo รบnico que se imprimiera en el Monitor Serie fueran pares ordenados X1, X2.
Donde X1 = segundos transcurridos y X2 = temperatura registrada en tiempo X1.
Despuรฉs se realizaron tres pruebas, dos con un tiempo de 3600 segundos y una de 7200 (con distintos aparatos: Apple Tv, Philips DVD, Wii U), durante las cuales se registraron las medidas de temperatura por segundo con el bosquejo mencionado, todas las pruebas fueron realizadas con una luz de fondo al 100%. A continuaciรณn se copio la informaciรณn del Monitor Serie y se guardรณ en un archivo de texto con extensiรณn .csv para su futura exportaciรณn a R en donde se realizaron las graficas respectivas junto con una regresiรณn local de el paquete lattice encontrado en librerรญa de R.

La televisiรณn pudo utilizarse por un periodo de 2h sin alcanzar los 35ยบC (temperatura mรกxima de funcionamiento recomendada en el manual de usuario oficial de LG).

Existen diferencias en el comportamiento del aumento de la temperatura interna dependiendo del equipo que se estรฉ utilizando o quizรกs dependiendo de la naturaleza de las imรกgenes presentadas durante las pruebas, aparentemente, el menor aumento de temperatura por unidad de tiempo se obtiene mediante transmisiรณn por RGB observando videos en youtube, mientras el mayor se observa jugando Wii U conectado mediante HDMI. Dicho esto, aclaramos que la afirmaciรณn del pรกrrafo anterior sigue siendo vรกlida en ambos casos.

Requerimientos

  1. Computadora, Arduino, Sensor LM35, R.
  2. Bosquejo de Arduino para capturar datos:
    Bosquejo
  3. Archivo de datos capturados en extensiรณn .csv, se obtiene con bosquejo anterior
    Ejemplo
  4. Script de R para graficar datos con regresiรณn local:
    Script

Procedimiento

Con el sensor LM35 instalado en el interior de la TV, aislado y apartado lo suficiente para evitar cortos circuitos (ver esta entrada para mas informaciรณn). Se importรณ el nuevo bosquejo a nuestro Arduino, el cual se colocรณ en la parte posterior del televisor de manera que pudieramos conectar el LM35 (hicimos una perforaciรณn en la parte trasera de la tele para dar salida a los cables del LM35 instalado adentro) y se realizaron tres experimentos para los cuales se mantuvo abierto el Monitor Serie de Arduino y al finalizar cada experimento se copio la informaciรณn del Monitor en Serie y se pasรณ a un archivo de texto para guardarla con extensiรณn .csv para despuรฉs importarlas a R.

Se obtuvieron estos tres archivos:

https://www.mediafire.com/folder/23vzusy97i6eg/

Despuรฉs se realizรณ el script de R que se presenta a continuaciรณn:

  
#R Plot - Graficando regresiรณn local a partir de medidas con interferencia
#Medidas de temperatura de interior de TV LG m2762d tomadas con transistor LM35
#instalado en su interior, datos capturados con Arduino.
#Bosquejo de Arduino, apunta un par ordenado x,y donde x = segundo, y = temperatura
#en el monitor en serie. Uno por lรญnea, estos datos fueron despuรฉs copiados y pegados
#En un editor de texto y guardados con extensiรณn .csv para su futura manipulaciรณn en R
#EL SIGUIENTE SCRIPT ESTร DESARROLLADO PARA GRAFICAR LOS DATOS CAPTURADOS JUNTO CON UNA
#REGRESIร“N LOCAL. LA FINALIDAD ES LA PRESENTACIร“N DE UNA CURVA DE TEMPERATURA
#CONTRA TIEMPO PARA ESTE EQUIPO DESPUร‰S DE LA REPARACIร“N DE PIERRE Y MODIFICACIร“N ATL
#CON EL OBJETIVO DE PREVER FUTURAS PROBLEMรTICAS EN LA PLACA DEL INVERSOR
#COMO USAR:
#
#------------------------------------------------------------------------------------
#Importando archivo:
#/Users/Administrador/Desktop/prueba_temperatura_8_jul_appletv
plotdata <- read.csv("directorio_de_archivo/archivo.csv")


#Graficando con regresiรณn local (LOESS) con ayuda de lattice (librerรญa de R)

#importando libreria de lattice
library(lattice)


#panel function pa' paintar pimped lรญneas
panel_fn <- function(x, y, ...)
{
    panel.xyplot(x, y,col = "cornflowerblue" ...)
    panel.xyplot(x, y, type = "smooth", col = "gray33", lwd ="4", ...)
    #panel.abline(v = 3600, col="darkorange")
    panel.abline(h = 35, col="orangered")
	
}


#plotting you menso!

xyplot(plotdata$X2 ~ plotdata$X1, panel = panel_fn, pch=".", cex = "2",xlab = "Etiqueta X", ylab = "Etiqueta Y" , main = "Tรญtulo principal", xlim=c(0, max(plotdata$X2)), ylim = c(20,40) )



  

Basta sustituir <directorio_de_archivo/archivo.csv> por la ruta hacia tu archivo en la primera lรญnea del cรณdigo y correr el script para obtener la grรกfica.

Resultados

Prueba 1. Apple TV, aprox 60 minutos

Lรญnea naranja-roja horizontal en y = 32ยบC. Supuesta asรญntota segรบn entrada anterior bajo una prueba por RGB de 1 hora 40 minuots. Aquรญ ya la estรก alcanzando en 1 hora. ยฟEs RGB mรกs cool?

Prueba 2. Philips DVD, aprox 60 minutos

Se puede apreciar que a pesar de que la Prueba 2 iniciรณ a una temperatura menor que la Prueba 1, se alcanzรณ la misma temperatura al cabo de 1 hora.
ยฟA quรฉ se debe?

Prueba 3. Wii U, aprox 2 horas

Aparentemente se calienta mas rรกpido con Wii U. Podemos ver que en menos de una hora ya se rebasรณ la ยซasรญntotaยป de 32ยบC. Tambiรฉn podemos ver que no parecen existir interferencias, debe ser por el convertidor AC/DC del Wii U.
ยฟBonito no?

Conclusiones

Todavรญa no estamos seguros de nada en especรญfico pero podrรญamos afirmar lo siguiente:

O utilizar la televisiรณn por RGB es lo que menos genera estrรฉs por temperatura y utilizarla con Wii U es lo que mรกs.

ร“ cada vez se estรก calentando mรกs rรกpido nuestra televisiรณn.

Debemos mencionar que en la prueba de 2 horas se comenzรณ a percibir un olor peculiar cรณmo a plancha caliente alrededor del segundo 6000. No era un olor a quemado, pero tampoco muy agradable. Pienso que quizรกs es buena idea dejar reposar la PCB dentro de agua destilada despuรฉs de la reparaciรณn y limpieza (nosotros utilizamos alcohol isopropรญlico para limpiar despuรฉs de las reparaciones) para eliminar cualquier residuo quรญmico que pudiera despedir gases no deseables.

Secuela

En un par de semanas mรกs, dรกndole uso a nuestra televisiรณn vamos a abrirla nuevamente para ver el estado de nuestra PCB del inversor (pieza reparada) y de una vez crearemos un manual con instrucciones para realizar la reparaciรณn de Pierre y la modificaciรณn de Atl paso por paso, reuniendo las recomendaciones y advertencias que se conocieron durante la experimentaciรณn documentada en este, nuestro Blog de Vida.


Por otro lado, me parece intrigante la belleza que presentan los patrones de interferencias en las pruebas de Apple Tv y Philips DVD, y estamos pensando en traducir algunas secciones superiores de estas interferencias para escucharlas en forma de mรบsica.

Ahรญ hay un mensaje oculto…

ยกSaludos amigos!

โ€“Atl Tlachinolli