Sabermetría y Perceptrón

Remuestreo - Reordención y Submuestreo



La sabermetría se usa en el béisbol para determinar en base a los datos y mediciones que jugador, que jugadas, son mejores.  Así en plan resumen. Ojalá! en mesas redondas y reuniones de sala se supiese aunque fuese solo el concepto, pues aún, a día de hoy, se escuchan frases como a continuación. Necesitamos Big Data porque Excel se ha quedado pequeño, y seguidamente se escuchan preguntas tan simples como ¿qué es una wiki? y se hace el silencio porque nadie sabe que es eso y para que sirve.

Y aunque uno se pueda preguntar, ¿para qué necesito saber que es la sabermetría o una wiki?, si se va a hablar de datos, por lo menos algo de cultura básica no vendría mal, que hasta los entrenadores de béisbol saben más que mucha gente en este campo de datos.

Cultura y dinero! ese sería el resumen, aunque quizá sea dinero y cultura. Cual Don Quijote y sus molinos en esta era apabullante de datos, saber de datos es complejo. Me pregunto, a día de hoy en puestos de poder hay personas que no saben ¿qué es la Wikipedia? o por contra, ¿existen otras razones para no quererlo saber?.  La barrera y la resistencia cultural es enorme, y a veces se cruza con el no querer dejar que los datos sean accesibles por personas en una empresa, los datos se convierten en un verdadero cautivo. 

Ya en el lejano 2010, se representaba en la siguiente gráfica Kowalewski sobre el tratamiento que se debe dar a los datos para tratarlos con "cariño" en base a modelos Monte Carlo y modelos aleatorios.




Análisis de Procustes

Cortar cabeza estirar pies


Se conoce como análisis de Procrustes a la serie de  métodos estadísticos que aplican la teoría de grupos al análisis de conjuntos de datos, para poder compararlos y realizar inferencias de dichas comparaciones K-means, g-means. Forma parte del llamado análisis estadístico multivariable. Coeficiente de Jaccard / Tanimoto.




Procusto, por desgracia tenía una afición un poco menos saludable, hacia que las personas se ajustaran perfectamente al tamaño de su cama cortándoles o estirándoles las extremidades. Disponía de dos camas, una exageradamente grande y otra exageradamente pequeña. El termino se corresponde con situaciones en las que las simplificaciones no son tales simplificaciones. En resumen, el Sr Procusto categorizaba en dos grandes grupos.

Algoritmos con R y Python


El siguiente enlace lleva al pdf de la infografía que categoriza para R y Python los principales algoritmos de Machine Learning: link

Fuente: link

IDTipo de AnalisisDescripción
1Aprendizaje supervisado- Decision Tree
- Random Forest
- kNN
- Logistic Regression
2Aprendizaje no supervisado- Apriori algorithm
- k-means
- Hierarchical Clustering 
3Aprendizaje Reforzado- Markov Decision Process
- Q Learning
- EM (expectation-maximization) del tipo duro 

Rastreando y Rascando (Web Crawling Web Scraping) a Elitetorrent

Crawling and Scraping a lo Denis Diderot


Se conoce como L'esprit de l'escalier (el ingenio de la escalera) a la expresión francesa que describe el acto de pensar en una respuesta ingeniosa cuando es demasiado tarde para darla, en una reunión, en una entrevista, en una presentación puedes sufrirlo, un algoritmo puede ser mejorado hasta ser lo suficientemente voraz como para que te arregle un consumo de tiempo desenfrenado, hasta que tenga la respuesta correcta a su esprit d'escalier temporal.  


Fuente: Link

  • Evitar anuncios.
  • Crear un listado de las películas del día.
  • Entrar en todas las subpáginas de cada una de las películas de manera desatendida.
  • Crear un enlace a cada fichero de descarga de cada una de las películas.
  • Todo en tiempo record.

El código R sobre la última Web de Elitetorrent2 la Elitetorrent normal creo que ya no funciona.
library(rvest)
library(dplyr)
#rm(list=ls()) #Limpiar variables

#Fase 1 
############################################################
web_a_rascar <- read_html("https://www.elitetorrent2.net/")
etiqueta_a_buscar <- html_nodes(web_a_rascar,"article")
titulo_peliculas <- etiqueta_a_buscar[grep("movies", etiqueta_a_buscar)]
titulo_peliculas <- html_text(titulo_peliculas)
#titulo_peliculas

url_peliculas <- web_a_rascar %>% html_nodes("div > a")
columnas <- bind_rows(lapply(xml_attrs(url_peliculas), function(x) data.frame(as.list(x), stringsAsFactors=FALSE)))
direcciones_url <- columnas[1]
direcciones_limpias <- direcciones_url[grep("pelicula", direcciones_url$href), ]
numero_peliculas <- length(direcciones_limpias)
#direcciones_limpias

#Fase 2
############################################################
torrent <- c(1:numero_peliculas)
for (i in 1:numero_peliculas){
  web_a_rascar <- read_html(direcciones_limpias[i])
  url_peliculas <- web_a_rascar %>% html_nodes("td > a")
  columnas <- bind_rows(lapply(xml_attrs(url_peliculas), function(x) data.frame(as.list(x), stringsAsFactors=FALSE)))
  torrent[i] <- columnas[1,1]
}
M <- matrix(c(titulo_peliculas,direcciones_limpias, torrent[1:numero_peliculas]), ncol=3)
M #Creamos una matriz de 3 columnas con el titulo de la pelicula y los enlaces
Obteniendo algo parecido a:




Siempre he tenido mejores ideas cuando he estado asustado. Steven Spielberg 

Algoritmo voraz

El ADN viene de Montecarlo

Cuando cree el dominio de esta página siempre vi que la información de una empresa, sus datos, son una espiral caprichosa de ADN en composiciones de adenina y sus cuatro compañeras. De ahí salió semejante nombre ADNENT-"erprise".  Por desgracia, y como norma general, somos algo más desorganizados que el ADN en una empresa, aunque siempre hay variables dominantes.

Articulo representado de Xataka link para ciertas palabras

Machine Learning

Creo que el estudio de los datos por minería de datos y machine learning, ese aprendizaje profundo, es un PET sobre los dataset con las herramientas estadísticas disponibles y gráficos. Las herramientas en si, no significan mucho, cada minuto sale una, pero con cada evolución el estudio es más rápido y sencillo, y el diseño de redes sintéticas permitirán desentramar problemas estadísticos como nunca hemos visto. Métodos como montecarlo, análisis de sensibilidad, correlación de variables, ya son comunes.

Dentro de mi juego de constructores de gráficos tengo este de más arriba aplicado al articulo de Xataka representando ciertas palabras que aparecen en el.


Gif almacenado en un ADN de un organismo vivo.

Artículo

En el artículo de los amigos Xatakeros se puede leer como han conseguido almacenar en ADN una imagen, el caballito corriendo de arriba link. Esto no es algo nuevo, hace años que ya se lleva estudiando y Michio Kaku un tipo bastante listo, nos habla de ello. 

A donde quiero ir a parar, a parte de lo que comentan en el artículo sobre poder llevar nuestro propio ADN con nuestros documentos, creo que se podrá "teletransportar" ciertas moléculas de ADN de un recipiente=humano a otro, lo que es lo mismo, implantar información en otro ser, tener telepatía como también indica el Sr. Kaku. Llegamos a humanizar lo digital y a estudiar mediante la matemática y estadística para determinar el comportamiento, el maldito patrón.

Sin duda, nada nuevo que no se haya ya escrito en libros ciberpunk como Neuromante de William Gibson. Para muchos, esto seguirá siendo magia y una era posthumanista que jamás llegará y que solo está en los libros de una panda de frikis.

Cuidado en ser anti-visionarios, no vaya a ser que seamos como el Almirante William Leahy el cual en un alarde de expertise dijo: 
"La bomba -atómica- nunca funcionará, hablo como experto en explosivos".
De momento, redes sintéticas, información almacenada en ADN, olfatos electrónicos, etc. todo ello variables independientes en n situaciones.  

Algoritmo voraz

No olvidemos que un algoritmo voraz (también conocido como ávido, devorador o goloso o algoritmo codicioso) es aquel que, para resolver un determinado problema, sigue una heurística consistente en elegir la opción óptima en cada paso local con la esperanza de llegar a una solución general óptima. Volvemos a la estadística y modelos.

Me pregunto, ¿qué pasaría si genero n imágenes como la de arriba de n noticias y las paso por una red neuronal sintética para la detección de tipos de noticias entrenando un modelo?

Vas a jugar a las cartas o al ajedrez?


Como comentaba ayer, link, estuvimos presentes en el Meetup de TensorFlow. Con una agenda como esta de más abajo, era imposible pasarlo mal y no tomar ideas. Si hay que destacar algo negativo en estos eventos, es la premura de las presentaciones que pasan como si nada y te dejan ese sabor a querer algo más.

Agenda

  • Supercharge your Computer Vision Models with TensorFlow by Sergio Guadarrama, Research Software Engineer at Google
  • Using U-Nets with TensorFlow for 3D Medical Image Segmentation by Virilo Tejedor Aguilera, Project Manager at Colegio de Registradores
  • Transfer Learning - PreTrained Models for Improved Performance by Fernando Costantino
  • TensorFlow for Android by Jorge Barroso

Datos obesos - obesidad en datos

Humanizar términos
Puede ser una de las mejores maneras de explicar el mundo tecnológico, al mundo no tecnológico. Así pues, sin más circunloquio vamos allá.

Según la Wikipedia: La obesidad es una enfermedad crónica de origen multifactorial prevenible, la cual se caracteriza por acumulación excesiva de grasa de excesivos datos o hipertrofia general.

Infografias

Gráficos en Infografías + respondiendo a Metodologías

Como vengo diciendo en entradas anteriores, me falta tiempo para aderezar con perejil las noticias, pero me veo en la obligación, de indexar mi conocimiento, con lo cual, puesto en la balanza, prima la indexación al buen hacer.

No por ello, dejaré de regirme por un mínimo de agrado visual/literal que me permita hacer mi búsqueda referencial y etiquetado cognitivo. Sin más preámbulos, vayamos a:
1.- una buena página para crear infografías con una buena dosis de gráficos,
2.- un par de pildoras shell
3.- leyes de productividad
4.- preguntas y respuestas hipótesis sobre agile y bondades
5.- links amigos (muy recomendable el último sobre programación en línea)



Elimina filas cambia rutas

Se me acumulan las noticias 

El asunto lo dice claro, y el código es preciso, si se quiere lanzar sobre Windows cambiar la comilla simple por una doble y listo.


Eliminar una fila intermedia en concreto o de una línea a otra 

Elimina filas del 1 al 3 y del 2 al 4

cat prueba.log | sed '1,3d' | sed '2,4d'


Cambia una ruta por otra en una lista de ficheros+rutas de un fichero llamado "files.var"

sed 's/'\$\{target\}'/'${destino//\//\\/}'/g' files.var

Programación en linea

Por último una Web que permite probar nuestro código en línea con "emuladores" en realidad es más una conexión a un entorno virtual para como digo probar lenguajes y código sin tener que instalar en tu máquina servicios, lenguajes etc. Esto tengo que probarlo en una tableta! tipo, probar a lanzar R en un Ipad.

Verticalizar matrices

Verticalizar en menos de 8 seg


Saber el número de columnas de un fichero de datos a veces no es tan sencillo. No es la primera y no será la última vez que vea que para saber cuantas columnas tiene un fichero de datos este se importa en un excel y se cuentan las columnas, eso si, en ficheros de datos de enorme tamaño es un poco absurdo.

Existen varias formas para saber cuantas columnas hay en un fichero, pero como en todo, las formas y los métodos son importantes si queremos ser eficientes.


Total, que supongamos que tenemos un fichero de 50.000 filas por 120 columnas, importarlo en un excel puede ser una solución, pero desde luego poco cómoda, poco rápida y menos aún eficiente.

Podemos obtener el número de columnas de un fichero construyendo un fichero bat que le pasemos por argumento el nombre del fichero de datos y nos verticalice la primera fila de datos obteniendo el número de columnas del fichero.

Prefiero hacerlo en Windows en una consola de MS DOS que hacerlo directamente en Unix ya que por regla general la gente usa más Windows. Detalle eso si, instalarse los comandos de Unix en Windows.

El script

c:\Temp\cat verticaliza.bat
@echo off
set name=%1
cat %name% | head -1 | sed "s/;/ ;/g" | xargs -n 1 | nl | sed "s/;//g"

Mostramos el contenido del fichero de datos separado por ";" destacar que en la primera fila hay espacios en blanco o signos ; contiguos para forzar más casuisticas para comprobar que la verticalización aplica a todos los casos.

Los datos

c:\Temp\cat datos.dat
enero;febrero;marzo;abril; ;a;;
junio;julio;agosto;septiembre

El lanzamiento y resultado

Si lanzamos el comando verticaliza pasando por argumento el fichero de datos obtenemos la primera fila verticalizada.
c:\Temp\verticaliza datos.dat
     1  enero
     2  febrero
     3  marzo
     4  abril
     5
     6  a
     7
     8

Ejecutar comandos de Unix en una consola de msdos "vitaminada" es necesario.




Volcado de xls a csv con VBS

Volcado masivo con VBS

Si queremos volcar múltiples pestañas de un fichero Excel a fichero plano csv o dat con un separador que podemos elegir, haciendo la salvedad de no tener en cuenta la primera celda A1 o N(1,1). 
El código será como sigue, es un recorre pestañas con volcado a ficheros independientes con el nombre de cada pestaña y uso de la celda A1 como primer valor de cada registro. 
Ojo, al tener en cuenta la variante de tratamiento especial de A1, no podemos hacer ese famoso "volcado a todo trapo" que es un guardar as. En otra entrada contaremos eso, guardar como csv. Es más elegante, pero menos versátil. 
Con pequeñas variaciones en el código se puede realizar un volcado a un solo fichero o empezar a recorrer desde A2 o contemplar A1 como si fuese otro registro.
Para un fichero origen como este

Con unas pestañas como estas y misma estructura

Un código como este:

Bastará entonces, guardar el código como "convert_v.1.2.vbs" por ejemplo y ejecutar desde una consola de MSDOS o doble click desde escritorio, sin necesidad de instalar ningún programa y ni siquiera abrir el Excel en primer plano.
Se pueden parametrizar entradas para invocar como parámetros de entrada como fichero origen, destino, separador. Ojo que con R por supuesto también podemos hacerlo que menos! pero esto es un "más por menos" hacer algo con el mínimo de herramientas.

Dim folder_out_file
Dim extension 
Dim worksheetCount
Dim counter
Dim currentWorkSheet
Dim usedColumnsCount,usedRowsCount
Dim row,column
Dim top,left
Dim Cells,WriteStuff,f,name
Dim curCol,curRow
Dim word,separador,data_row
separador = ";"
excelPath = "C:\Users\adnent\Desktop\juan.xlsx"
folder_out_file = "C:\Users\adnent\Desktop\"
extension = ".dat"
WScript.Echo "Leemos datos de: " & excelPath
Set objExcel = CreateObject("Excel.Application")
objExcel.DisplayAlerts = 0
objExcel.Workbooks.open excelPath, false, true
workSheetCount = objExcel.Worksheets.Count
For counter = 1 to workSheetCount
 'WScript.Echo "Reading data from worksheet " & counter & vbCRLF
 Set currentWorkSheet = objExcel.ActiveWorkbook.Worksheets(counter)
 usedColumnsCount = currentWorkSheet.UsedRange.Columns.Count
 usedRowsCount = currentWorkSheet.UsedRange.Rows.Count
 top = currentWorksheet.UsedRange.Row
 left = currentWorksheet.UsedRange.Column
 name = currentWorksheet.name
 Set Cells = currentWorksheet.Cells
 Set WriteStuff = CreateObject("Scripting.FileSystemObject")
 Set f = WriteStuff.createTextfile(+folder_out_file & +name & +extension, True)
 For row = 0 to (usedRowsCount-1)
  data_row = ""
  For column = 0 to usedColumnsCount-1
   curRow = row+top
   curCol = column+left
   word = Cells(curRow,curCol).Value
   if curRow = 1 then
    'WScript.Echo "Pasamos a la siguiente fila, no tenemos en cuenta la primera fila" 
   else
    'WScript.Echo (word)
    if curCol = 1 then
     data_row = Cells(1,1).Value & +separador & +word 
    else
     data_row = +data_row & +separador & +word 
    end if
   end if
  Next 
  if curRow <> 1 then
   f.WriteLine +data_row
  end if 
  'WScript.Echo (+data_row)
 Next
 Set currentWorkSheet = Nothing
Next
objExcel.Workbooks(1).Close
objExcel.Quit
f.close
WScript.Echo ("Hemos terminado")
Set currentWorkSheet = Nothing
Set objExcel = Nothing

Obtenemos un resultado como este:

Que se mantenga solo y pintemos con D3

Jugando con la representación


Fue el 31 de agosto del 2016 cuando escribí esta entrada y con el cambio de web no quería perder esta indexación de entrada que tengo almacenada en mi cabeza. "Que se mantenga solo".
Que se mantengan solo los datos, los fichero temporales o los ficheros de log o que de una manera incremental podamos crecer sin tener que realizar mantenimiento, ese debe ser el fin. Es por esto, que estos scripts, sentencias o procesos me gusta tenerlos e invocarlos cuando hago algo que no es esta tarea en sí.  
Por ejemplo, si pasas un proceso de validación, al final le paso un proceso de auto-mantenimiento, lo cual me permite olvidarme de un mantenimiento manual y realizo una limpieza dejando solo los ficheros de 90 días, es más, si esto es un proceso global, muchas veces lo encapsulo para que la gente lo lance sin que lo sepa. 
El código shell y windows aquí.

Hierarchical Edge

Es una manera al principio lineal de crecimiento pero luego exponencial que al final se traduce en ganar tiempo (no perderlo). El caso es que como me daba algo de pena no poner ninguna foto en este post, he decidido poner una de fabricación casera:

- Un poquito de Python para levantar un servidor local
- Un D3.js
- Un json
Y a pintar mi propio: Hierarchical Edge en donde en amarillo pequeño aparezco Yo.

Gráficos de alta información - Enrico Bertini

A tener en cuenta

Mañana viernes 10 vamos al Machine Learning Spain XVII con una agenda interesante:
  • "¿Tensores Funcionales? Librería de Haskell para Tensor Flow". 
  • "Deep Learning aplicado en medicina"
  • "Antikaggle: contra la homeopatía de datos"
  • Y un último punto de ¡Cervezas y networking! no menos interesante
Y todo ello me llevará seguramente a ver cosas y seguirán normas como las que comenta Tufte:
  • Los gráficos de datos a menudo deben basarse en matrices de datos grandes en lugar de pequeñas y una alta densidad de datos en lugar de baja. 
  • Los diseños ricos en datos dan contexto y credibilidad a la evidencia estadística. Los diseños de baja información son sospechosos: lo que queda fuera, lo que está oculto, ¿por qué nos muestran tan poco?.
  • Los gráficos de alta densidad nos ayudan a comparar partes de los datos mostrando mucha información dentro de la vista del ojo.

Aprender, aprender y representación.


Foto: http://www.informationisbeautifulawards.com/showcase/1698-olympic-feathers-visualizing-all-gold-medal-winners-since-1896Interesante gráfico donde las medallas se representan en los propios aros olímpicos.

Unas presentaciones dignas de ver:

Mañana promete, pero hoy no ha sido menos interesante tras ver este interesante artículo de microsiervos y como enamorarse de los datos con Enrico Bertini, aquel que se dedique a los datos, no puede dejar de ver sus presentaciones.