De que hablan los desarolladores cuando mencionan Scrum?

La semana pasada hablamos de metodologías ágiles como concepto general. Esta semana vamos a profundizar con Scrum, una metodología ágil entre muchas. El Scrum hace especial énfasis en el desarrollo de software para equipos (idealmente) de 3-9 desarrolladores (que curiosamente, o no, sigue la regla de las dos pizzas). Los equipos pequeños tienden a obtener una mejor productividad en general. Los meetings son más directos y requieren menos interacciones. Si cada miembro de un equipo tiene que mantenerse en contacto con los demás miembros el número de interacciones entre participantes se incrementa exponencialmente con el número de integrantes del grupo.

Los integrantes del grupo tienen un tiempo definido para finalizar las tareas asignadas. El tiempo asignado depende de cada equipo. Normalmente se sitúan en 15 días, aunque puede llegar hasta los 30. Estos intervalos de tiempo son comúnmente nombrados “sprints”. Pero para seguir la evolución de las tareas y re-planificar si es necesario, Scrum incorpora standup meetings. Estos meetings son reuniones diarias en las que la duración aproximada es de 15 minutos y se hacen de pie. Los standup meetings tienen el nombre en clave de scrum diario (daily scrum).

La idea principal de scrum se basa en la colaboración plena entre miembros del equipo para la construcción del producto, contrario a otras metodologías más tradicionales. Previamente cada individuo hacia su tarea asignada en base a los requerimientos hecho que incrementaba las probabilidades de fracaso estrepitosamente. Cualquier error de planificación o falta de detalle era pagado con creces ya que a menudo el proyecto tenía que ser desarrollado de nuevo y a menudo requería desechar buena parte del progreso. Lo que intenta hacer Scrum es evitar justamente todo esto. Scrum intenta adaptarse a los cambios con facilidad y poder desechar partes sin que el coste total del proyecto se incremente prohibitivamente.

Implícitamente Scrum reconoce que los clientes no saben lo que quieren y que sus necesidades evolucionan continuamente adaptándose a las nuevas tendencias. A menudo los cambios son impredecibles y consecuentemente imposibles de planificar. Con todo este en mente, Scrum crea un marco en el que la adaptabilidad permite responder a los cambios emergentes, nuevas tecnologías y cambios en el mercado.

 

Que son las metodologías de desarrollo ágiles?

Hace ya algunos años que las metodologías ágiles están de moda entre ingenieros, especialmente equipos de programadores. Muchos hablan Scrum, pero hay otras como XP (eXtrem Programming), kanban, V-model, waterfall model, modelo espiral, y un largo etc. Frecuentemente estas metodologías son usadas como onanismo teórico. Recursos humanos frecuentemente recurren a las palabras “trending” para atraer talento. Pero del dicho al hecho hay un trecho.

Los métodos agile de desarrollo de software se adaptan al proyecto. Los requerimientos y soluciones evolucionan gracias al esfuerzo colaborativo entre miembros del equipo interdisciplinar de desarrollo y el cliente. Su objetivo principal es la adaptación y flexibilidad para desarrollar soluciones, entregar productos antes de tiempo, y mejorar continuamente el producto. Para los que queráis leer más sobre los principios de los métodos ágiles lo podéis encontrar un manifesto online.

Ninguna de las metodologías es perfecta. Cada una tiene un foco especifico y un objetivo concreto. Cada uno de los marcos de desarrollo intenta solventar alguno de los problemas que los equipos tienen. Algunos con más éxito que otros, pero al final una parte importante del resultado depende de las personas. Cada empresa y cada equipo tiene su blueprint para enfrentarse a problemas. Por lo que cada equipo tiene que entender la metodología y adaptarla para mejorar el rendimiento y no al revés.

 

 

Un doctorado sirve para continuar en academia o salir para industria

Un doctorado o PhD en si tiene muchas finalidades. Para lo que sirve hacer un PhD depende de cada persona y las aspiraciones que tenga cada uno en la vida. Si te quieres dedicar a la investigación o ser profesor universitario es la única salida. Pero en algunas empresas tener un doctorado conlleva una serie de connotaciones (mayoritariamente positivas). Una persona que se ha sacado el doctorado es una persona que ha trabajado duramente durante un largo periodo de tiempo para conseguir profundizar en un tema extremadamente especifico. Po lo cual una persona que ha conseguido dicho nivel de especialización puede resultar altamente atractiva para empresas que busquen un perfil muy concreto.

La otra alternativa es que tengas empresas pretendientes gracias a las soft-skills adquiridas durante ese tiempo. Por ejemplo, las empresas alemanas valoran los doctorados para posiciones directivas. A los alemanes les gustan los doctorados en el management porque son personas que en teoría tienen una buena ética de trabajo. Durante el PhD los estudiantes han tenido la oportunidad de pensar, y planificar proyectos, gestionar estudiantes y aprender organización general. También han aprendido a comunicar conceptos no triviales de la mejor manera posible, organizar las ideas de forma lógica y adquirir conocimientos ajenos de manera rápida. Finalmente gracias al requisito general de publicar los resultados de la investigación, los doctorados han aprendido también a expresarse de forma escrita de manera concisa y directa.

11 comandos para data scientists que quieran aprender a usar la consola

Algunas veces manipular datos puede resultar costoso. A menudo los data scientists tenemos que manipular grandes cantidades de datos por lo que es bueno conocer algunos tranquillos para optimizar el proceso. Aquí os dejo unos cuantos comandos con algunas opciones para trabajar más eficientemente.

head

head archivo.txt

Este comando imprime las 10 primeras lineas del archivo. Si queremos un numero distinto de lineas podemos usar la opción -n.

head -n 20 archivo.txt

Este último comando nos imprimirá las 20 primeras lineas del archivo. Al imprimir las primeras lineas de un fichero en pantalla nos ayuda a obtener la estructura global del archivo y algunos valores para hacernos una idea general del contenido del archivo.

tr

Este comando es perfecto para pre-procesar archivos. Por ejemplo podemos cambiar el archivo de tsv a csv.

cat tab_delimited.txt | tr "\\t" "," comma_delimited.csv

Algo muy interesante de “tr” son las clases. Las clases son funciones de elementos algo más “abstractos”. Aquí una lista de algunos:

[:alnum:] todas las letras y dígitos
[:alpha:] todas las letras
[:blank:] todos los espacios
[:digit:] todos los dígitos
[:lower:] todas las letras minúsculas
[:upper:] todas las letras mayúsculas
[:punct:] todos los caracteres de puntuación

y si los concatenas puedes hacer un script bastante interesante. También puedes usar las expresiones regulares. Aquí ejemplo para pasar de mayúsculas a minúsculas

cat filename.csv | tr '[A-Z]' '[a-z]'

wc

Este es un contador de palabras (word count). Basado en mi experiencia uso la opción -l a menudo. Esta opción cuenta el número de lineas en vez de palabras. Otras opciones

  • wc -m imprimer el recuento de caracteres
  • wc -L imprime la longitud de la linea más larga
  • wc -w cuenta el numero de palabras
  • wc – l cuenta lineas

split

Nos permite trocear archivos fácilmente para reducir su tamaño. El problema es que no añade la extensión del fichero a los nuevos documentos. Podemos trocear un fichero cada 500 lineas con el siguiente comando.

split -l 500 fichero.csv nuevo_fichero_

Si queremos poner una extensión a los nuevos ficheros tendremos que usar el siguiente comando en el directorio del output

find . -type f -exec mv '{}' '{}'.csv \;

Si queremos numerar los archivos partidos tendremos que usar el flag -d para indicar que el sufijo sea numérico.

uniq

Uniq solo opera con lineas contiguas idénticas. Motivo por el cual es interesante añadir el sort antes. El sort nos pone lineas idénticas contiguamente.

sort

# Ordenando la segunda columna alfabéticamente
sort -t, -k2 filename.csv
# Numericamente 
sort -t, -k2n filename.csv
# Orden inverso 
sort -t, -k2nr filename.csv
  • sort -f ignora el caso
  • sort -r ordena inversamente
  • sort -k especifica el identificador
  • sort -t usa la coma como separador
  • sort -R mezcla el orden
  • uniq -c cuenta el numero de apariciones
  • uniq -d solo imprime las lineas duplicadas

cut

Sirve para eliminar ciertas columnas en el archivo. Por ejemplo si nos queremos quedar con la primera y tercera columna

cut -d, -f 1,3 filename.csv

Pero si queremos todas las columnas menos la primera

cut -d, -f 2- filename.csv

puede servir perfectamente con otros comandos.

paste

este comando puede ser interesante ya que pone juntamente dos archivos. No pone uno al final del siguiente sino cada fila de lado.

Si tenemos dos ficheros

# names.txt 
adam 
john 
zach

y

# jobs.txt 
lawyer 
youtuber 
developer

Los podemos juntar usando el comando

# Join the two into a CSV 
paste -d ',' names.txt jobs.txt > person_data.txt

Consiguiendo el resultado

# Output 
adam,lawyer 
john,youtuber 
zach,developer

grep

Este es uno de los comandos mas famosillos en el mundillo y extremadamente poderoso. Grep busca expresiones regulares y las imprime. Es usado a menudo juntamente con otros comandos.

# Buscar recursivamente nombres de ficheros que contengan la palabra "word"
grep -lr 'word' .

Algunas opciones interesantes

  • alias grep=”grep –color=auto” hace grep más colorido
  • grep -E usa la versión extendida de las expresiones regulares
  • grep -w busca un mach completo de la palabra
  • grep -l imprme el nombre de los ficheros conteniendo la palabra
  • grep -v invierte el match

sed

Este comando también es uno de los más potentes. Trabaja linea a linea. La función más básica es s/old/new/g . Podemos eliminar las comas de los miles en un fichero csv

sed -i '' 's/\([0-9]\),\([0-9]\)/\1\2/g' data.txt 
# balance,name 
# 1000,john 
# 2000,jack

o eliminar una linea especifica

sed -i '' '/jack/d' data.txt 
# balance,name 
# 1000,john

awk

Este también es un comando de los más usados y el último de hoy. Tiene bastantes de las funcionalidades de grep en su ultima versión.

awk '/word/' filename.csv

En el siguiente ejemplo awk imprime la 3a y 4a columna de las filas que contengan la palabra word.

awk -F, '/word/ { print $3 "\t" $4 }' filename.csv

Es capaz de usar múltiples expresiones numéricas

# Print line number and columns where column three greater 
# than 2005 and column five less than one thousand
awk -F, ' $3 >= 2005 && $5 <= 1000 { print NR, $0 } ' filename.csv

puede hacer un sumatorio de las columnas para las filas que cumplan cierta condición

awk -F, '$1 == "something" { x+=$3 } END { print x }' filename.csv

Puede imprimir filas duplicadas

awk -F, '++seen[$0] == 2' filename.csv

O borrar duplicados

# lineas consecutivas
awk 'a !~ $0; {a=$0}']
# Lineas no consecutivas
awk '! a[$0]++' filename.csv
# Más eficiente
awk '!($0 in a) {a[$0];print}

Substituir valores usando gsub

awk '{gsub(/scarlet|ruby|puce/, "red"); print}'

Fuente: https://www.kdnuggets.com/2018/06/command-line-tricks-data-scientists.html

Tim Minchin: Las 9 reglas por las que vivir

“Las 9 reglas por las que es la mejor charla que me he encontrado recientemente. Tim Minchin presenta en la ceremonia de graduación las 9 reglas que cualquier persona debería seguir para tener una vida más feliz. El ponente es un comediante y músico australiano y la charla es de lo más inconvencional que he escuchado recientemente. Si elegís escuchar el vídeo directamente (en ingles, al final del post) os puedo asegurar que van a ser los 7 minutos mejor invertidos que hayáis tenido en mucho tiempo. No es la charla típica de sigue tu pasión, es una charla que te abre de miras y te hace reflexionar sobre todos los consejos que recibes. Os dejo un resumen para la posteridad. Para los que queráis ver el vídeo directamente os lo dejo al final del post.

1. No tienes porque tener un sueño

Si siempre has tenido ese sueño ve a por ello. Si es suficientemente grande te costara toda la vida, y quizás al final de la vida ya no tendrá importancia. Lo que Tim recomienda es perseguir apasionadamente objetivos a corto plazo. Trabaja con orgullo en la tarea que tengas en frente. Nunca sabes donde te llevara el destino. Las oportunidades suelen pasar en la periferia de tu visión, por eso se tiene que ir con cuidado con los objetivos a largo plazo. Si estas demasiado concentrado en un objetivo distante, pierdes la noción de lo que pasa en tu alrededor.

2. No busques la felicidad

Cita: La felicidad es como un orgasmo, si piensas demasiado en ello desaparece. Céntrate en hacer a los demás felices y tu encontraras la felicidad como efecto secundario. Nuestros antepasados complacientes fueron comidos antes de tener descendencia, no evolucionamos para estar satisfechos continuamente.

3. Todo es suerte

Entender que tus éxitos no te pertenecen,  son un resultado de la suerte y que los fracasos de los demás no son culpa suya sino de la mala suerte. Entenderlo te hará mas humilde y compasivo. La empatía es algo que puedes trabajar.

4. Haz ejercicio

Aunque seas filosofo y trabajes en planos metafísicos vas a necesitar tu cuerpo. Cuida de él. El ejercicio te va ayudar a dormir, pero a mantener tu mente sana. El ejercicio te revitaliza y previene depresiones.

5. Ten fuertes convicciones

Cita: Las opiniones son como culos, todo el mundo tiene uno. Pero las opiniones tienen que ser constantemente y cuidadosamente examinadas. Tienes que pensar críticamente, no solo con las opiniones de los demás, pero también con las tuyas. Se intelectualmente riguroso. Identifica tus sesgos, preferencias, y privilegios.

6. Se un maestro

Los profesores son un elemento clave de este mundo. Comparte ideas, disfruta lo que aprendiste y difunde conocimiento.

7. Definete por lo que amas

Tenemos la tendencia en definirnos por nuestras oposiciones pero trata de expandir tu pasión por lo que amas. Se demostrativo y generoso con aquellos que admiras. Manda postales de agradecimiento y ofrece elogios.

8. Respeta a la gente con menos poder

Basa tus elecciones sobre con quienes colaborar basándote en como tratan las personas menos importantes que ellos. No importa tu rango.

9. No te apresures

No necesitas saber que harás el resto de tu vida. La vida es corta. También puede parecer larga y dura. Algunas veces estarás feliz, otras triste. Cita: Solo hay una cosa para hacer en esta existencia vacía: llenarla. La mejor forma de llenar la vida es aprendiendo tanto como puedas, enorgullociendote de lo que hagas, teniendo compasión, compartiendo ideas, corre, se entusiasta, viaja, bebe vino, ten sexo, crea arte, se generoso.

 

 

Resumen del paper: Análisis de datos topológicos

Recientemente me encontré un par de papers relevantes para la minería de datos (data mining). Incluso hay una empresa que basa su business model en este concepto (Ayasdi). El concepto como habéis podido leer en el titulo es análisis de datos topológicos. ¿Que significa esto? La ida principal, tal y como se expone en la Figura 1 (sacada del paper [1]), se basa en que los datos tienen forma y la forma es consistente. Por ejemplo, la letra “A” seguirá siendo la misma letra a pesar de que le apliquemos distintas transformaciones ya que la información obtenida es calculada en base a las distancias relativas. Podemos rotar los datos, hacia un lado u otro. Podemos cambiar la tipografía o la forma (aplastarla o extenderla) que seguirá siendo la misma letra. Al final la letra “A” esta formada por millones de puntos que no vemos. Quizás perdemos algo de detalle especifico pero se gana en visión global.

descripción gráfica de la letra A
Figura 1: Transformaciones aplicadas a la letra A siguen formando la misma letra. Extraído de [1]
El primer paso consiste en agrupar en sub-poblaciones en bins (contenedores). En el segundo paso estas divisiones son analizadas. Cada uno de los contenedores contiene puntos que son similares el uno al otro. Como los bins han sido divididos de tal forma que solapan entre ellos por lo que cada punto de nuestros datos pueden estar en más de un grupo. Finalmente para construir la red (network) dibujamos un link entre los distintos clusters de la network final.

Para empezar a construir la red tenemos que escoger la métrica y la lente. La métrica la usaremos para medir la similitud (o distancia) entre dos puntos mientras que la lente es una función matemática para observar los datos. Cualquier métrica que sirva para producir un numero de un punto puede ser una lente. Una lente puede ser la media, max, min, el centro, PCA-score, distancia SVM, entre otros. Se pueden agrupar los resultados de distintas lentes multiplicando el resultado de los outputs.

El vector unitario producido por a lente es dividido en subgrupos que se solapan. Todos los puntos que tienen valores de lentes en el mismo subgrupo se agrupan juntos en un contenedor. De esta forma distintas particiones son obtenidas para todos los puntos gracias al resultado de la lente. Como las lentes producen sets que solapan es posible que un punto este en múltiples contenedores. Todos los puntos en un contenedor son agrupados ya que todos los puntos son altamente similares entre si y este grupo representa un simple nodo de nuestra red. El color que le asignaremos es la media del color de la lente de este grupo. El nodo en su representación gráfica tiene un tamaño proporcional al numero de puntos que tenga el cluster.

Habiendo hecho lo pasos anteriores tendremos distintos nodos en nuestra red, con diferentes tamaños y colores. Los nodos se conectaran entre si cuando tengan puntos en común. Estos links generaran la red topológica final.

Tenemos que tener en cuenta que esta implementación tiene dos parámetros. Uno es la resolución que indica el numero de contenedores en los cuales vamos a partir los datos. Una baja resolución genera unos pocos nodos gruesos sintetizando la información generada por el algoritmo. Contrariamente si la incrementamos genera muchísimos nodos pero de un tamaño mas pequeño perdiendo similitud entre nodos incluso generando clusters aislados. El segundo parámetro se llama ganancia y controla las regiones que se solapan entre contenedores. Como mas grande sea la ganancia mas aristas (conexiones entre nodos) vas a obtener el tu red. Este parámetro resalta las relaciones entre los elementos de tus datos.

No hay unos valores óptimos para la resolución y la ganancia. Cada red es singular y sus parámetros tienen que ser escogidos acordemente. También depende de lo que se quiera observar en la red. Por lo que cada análisis requerire una afinación (tuning). Tened en cuenta que una resolución alta no siempre es lo mejor, ya que al final lo que puede producir un resultado muy similar al observar los datos directamente

Ya hemos explicado todas las ventajas ahora toca exponer algunas de sus desventajas. No es ninguna “magic bullet” puede funcionar para muchos casos pero hay otros en los que este algoritmo no sea el mejor para nuestros datos. No hay una sola solución que sea buena para todos los casos. Parte del problema es que es una ciencia con un alto componente matemático. Como los principios del deep learning, hasta que no haya implementaciones eficientes y fáciles de usar, la “gente normal” se va a abstener de usarlo. Finalmente, el coste computacional. Calcular todos los pasos es extremadamente costoso ya que se tienen que hacer distintos barridos sobre los datos e incluso calcular las distancias entre pares.

Para los que os vaya la marcha os dejo un vídeo de youtube. Se trata de un seminario en Standford donde se explica extremadamente bien el concepto (en ingles). Luego os dejo una presentación en slideshare donde se explica el concepto detalladamente. Y para terminar os dejo tres referencias que he usado para escribir este post y que si entendéis inglés las recomiendo encarecidamente que les echéis un vistazo.

 

 

Archivos multimedia para profundizar en el TDA

 

Referencias:

 

  1. Offroy, M., & Duponchel, L. (2016). Topological data analysis: A promising big data exploration tool in biology, analytical chemistry and physical chemistry. Analytica chimica acta910, 1-11.
  2. Nielson, J. L., Paquette, J., Liu, A. W., Guandique, C. F., Tovar, C. A., Inoue, T., … & Lum, P. Y. (2015). Topological data analysis for discovery in preclinical spinal cord injury and traumatic brain injury. Nature communications6, 8581.
  3. Chazal, F., & Michel, B. (2017). An introduction to Topological Data Analysis: fundamental and practical aspects for data scientists. arXiv preprint arXiv:1710.04019.

Un Doctorado o PhD es un académico que se ha hiper-especializado en un campo

Doctores hay de diversos tipos. Hay el doctor con el que todos pensamos al oír la palabra; el doctor que es medico. En los países anglosajones los doctores médicos usan la abreviatura MD. Pero los doctores en el sentido de PhD (Doctor of Philosophy) son otro tipo de doctores, en este caso son académicos. El titulo de doctorado (Ph.D.) los daban originalmente las universidades a las personas que conseguían la aprobación de sus iguales. Para conseguir dicho titulo los académicos tenían que demostrar una larga y productiva trayectoria profesional en el área de la filosofía. La palabra filosofía en este caso se refiere en el sentido mas amplio de la definición, en la búsqueda de conocimientos. Sólo personas con trayectorias profesionales avanzadas que han dedicado su vida a profundizar y expandir sus conocimientos.

Actualmente el título de doctorado (PhD) es concedido a las personas que pasan de tres a cinco años investigando. En algunos países de Europa el doctorado se puede empezar después de hacer un máster/maestría y duran por lo menos tres años. En el caso de estados unidos los doctorados son más largos ya que no requieren un titulo de master y por lo tanto incluyen clases para adquirir conocimiento especializado en el campo.

Como calcular distancias entre dos arrays con variables binarias

El computo de distancias es un procedimiento básico para poder procesar datos. Las distancias nos sirven en el mundo real para poder desplazarnos con efectividad pero también podemos usar las distancias en el mundo no-físico para medir la similitud entre dos entidades. Cuando hablamos de entidades no-físicas nos referirnos por ejemplo a palabras, objetos o conceptos abstractos. Por ejemplo, ¿Cual es la similitud entre dos palabras? Dependiendo del enfoque podemos obtener resultados muy distintos. En este caso estoy interesado en los distintos métodos para calcular distancias entre dos vectores binarios por ejemplo [0,1,0,0,0,1,1] y [0,0,1,0,0,1,0]. Si fueran vectores normales los podríamos tratar en el plano euclidiano calculando distancias como lo haríamos sobre un mapa pero usando 7 dimensiones, pero al ser binarios cada dimensión solo puede ser 0 ó 1 (y ningún otro valor intermedio). La solución no pasa por asignar otros números a las variables porque substituyendo el “uno” por un “tres” no cambia nada. Por ejemplo, las palabras binarias pueden servir para codificar si eres hombre (0) o mujer (1). ¿Cual es la distancia entre un hombre y una mujer? Lo mismo pasa con palabras, cual es la distancia entre “hola” y “guacamole” No hay un solo método universal que nos sirva para todos los problemas, por esta razón he hecho esta lista para que os pueda servir en un futuro. Los métodos de esta lista calculan la distancia entre vectores con elementos binarios. Cada método – o algoritmo – tiene sus ventajas e inconvenientes obligando al usuario a entender el problema y escoger la solución más adecuada para cada caso.

Todas las formulas siguen el mismo patrón. En la siguiente tabla hay todas las opciones que las variables pueden tomar:

. y = 1 y = 0 Total
x = 1 n11 n10 n1•
x = 0 n01 n00 n0•
Total n•1 n•0 N

Coeficiente de Jaccard

El coeficiente de Jaccard o el índice de Jaccard es una de las distancias mas intuitivas. Computa la cardinalidad de la intersección de los dos conjuntos (el numero de elementos que están en los dos grupos a la vez) dividido por su unión (todos los elementos que forman parte de un grupo o del otro). Dividiendo usando la unión de los conjuntos evita que conjuntos grandes con poca similitud dominen el espacio.

$$ Coeficente de Jaccard = \frac{n11}{n1•+n•1}$$

Coeficiente de Sørensen–Dice

Este método fue originalmente desarrollado para la botánica. Sørensen y Diece lo desarrollaron de forma independiente con 3 años de diferencia. Muy parecido al anterior, este se basa en dos veces la intersección dividido por la cardinalidad de los conjuntos. El numerador es multiplicado por dos porque en el denominador la unión de estos conjuntos contiene la intersección de los conjuntos duplicada, hay un conjunto de elementos que están en el grupo A y el grupo B.

$$ Sørensen-Diece = \frac{2*n11}{n•1+n1•}$$

Coeficiente de correlación de pearson

Quizás esta sea la métrica más avanzada de este post. A pesar de que algunos estadistas la han usado no tengo tan claro que sea una buena métrica para comparar arrays binarios. A pesar de esto lo voy a dejar al gusto del lector comprobar su validez con los datos.

$$ Coef pearson = \frac{ (n11-\frac{n01*n10}{N})}{sqrt(n10-N*n10/n^2)*sqrt(n01-N*n01/n^2)}$$

Coeficiente de Phi

El coeficiente Phi o coeficiente de correlación de Matthews es una medida para la asociación de dos variables binarias. En teoría si calculamos el coeficiente de correlación pearson para dos variables binarias nos dará el mismo resultado que con el coeficiente Phi.

$$Phi = \frac{n11*n00 – n10*n01}{sqrt(n0•*n1•*n•0*n•1)} $$

Distancia de Yule

Con la distancia distancia de yule no es extrapolable a otras métricas. Como estamos pudiendo ver todas las métricas se parecen mucho. Se busca lo común entre los conjuntos y se divide por el computo global o similar para corregir para el tamaño de los grupos.

$$ Yule distance = \frac{2*(n10+n01)}{n11+n01+n10+n01} $$

Russell-rao

En este caso la métrica es algo distinta. Las otras métricas miran lo que tienen en común los grupos, este algoritmo hace lo contrario. Rusell-rao buscan lo que no tienen en común. Aunque siguen normalizando el resultado para conseguir valores relativos.

$$Russel-Rao = \frac{N-n11}{N}$$

Sokal-Michener

Por esta distancia y la siguiente no encontré mucha información, por lo que usé los detalles de implementación de la libreria de python scipy.

$$ Skoal-Michener = \frac{2*(n1•+n•1)}{(2*(n1•+n•1)+n11+n00)}$$

Rogers-Tanmoto

Al igual que el anterior aquí os dejo el link a la implementación de scipy.

$$ Rogers-Tanmoto = \frac{n11+n00}{n11+n00+2*(n10+n01)} $$

Mutual information

O en español información mutua mide la interconexión entre dos variables. Puesto de otra forma, mide la incertidumbre de una variable habiendo observado otra (conocido como entropía). Esta métrica también es avanzada y aunque no se como funciona en comparación a pearson me da mejores vibraciones. Me ha resultado difícil/ineficiente implementarlo yo mismo completamente así que os dejo un snippet con el código en python.

[code language=”python”]

from sklearn.metrics import mutual_info_score

def calc_MI(x, y, bins):
c_xy = np.histogram2d(x, y, bins)[0]
mi = mutual_info_score(None, None, contingency=c_xy)
return mi

[/code]

Kulczynski-2

En teoría Kulczynski consiguió mejorar la facilidad de crear clusters. Lo mismo que hace Jaccard y que Russell-Rao mejoraron. Este es la segunda versión, más sofisticada.

$$ Kulczynski-2 = \frac{\frac{n11^2}{(n11+n01)*(n11+n10)}}{2} $$

Ochiai

En teoría ochiai – también conocido como cosine similarity– consigue mejorar Kulczynski-2 y consecuentemente Jaccard y Rusell-Rao.

$$ Ochiai = sqrt(\frac{a^2}{(n11+n10)*(n11+01)} $$

Yo lo dejo aquí pero podéis encontrar más métricas en los siguientes enlaces:

Search Results Binary Vector Dissimilarity Measures for Handwriting Identification consta de varias métricas, algunas ya señaladas en los anteriores apartados. Tengo que decir que las formulas que exponen me parecen algo raras, no se si las han adaptado al caso en concreto.

Para una descripción en profundidad de Kulczynski y Ochiai

Spearman’s rank correlation coefficient or Spearman’s rho para vuestro disfrute.

¿Quién tenia razón George Orwell o Aldous Huxley?

Dos de los referentes para los futuros distópicos son Orwell y Huxley pero comparten distintos puntos de vista. Los dos escritores veían un futuro un poco amargo, un futuro en el que la humanidad no se podía expresar en su máximo exponente.

George Orwell con su libro 1984 nos presenta un futuro en el que un gobierno omnipresente  controla y manipula la sociedad. Con este libro Orwell nos pretendía advertir sobre los gobiernos totalitarios que impartían un control intenso y a menudo abusivo sobre sus ciudadanos. La excusa de los gobiernos para justificar sus acciones era una presunta guerra contra otros países. Los ciudadanos, controlados 24h al día, y con miedo a represalias no se atrevían a criticar el gobierno y aun menos intentar rebelarse contra este pese a una falta de alimentos generalizada y manca de productos de calidad. El control que ejerce el gobierno sobre sus ciudadanos a menudo pasa desapercibido con la manipulación que estos sufren (en el libro). Los gobiernos están en guerra perpetua haciendo creer a los ciudadanos que la vigilancia continua es necesaria.

Parte de la manipulación que ejerce el estado fascista es a partir del lenguaje. En el libro el gobierno manipula el lenguaje para restringir los pensamientos que una persona puede tener, reformando y restringiendo la lengua para determinar las ideas de cada persona. Limitando así lo que sus súbditos pueden contextualizar.

El futuro propuesto por Orwell no te recuerda un poco a la China actual? El gobierno tiene un partido único (con un líder único) y controla tanto como puede a sus ciudadanos. En China hay lo que le llaman la muralla digital china que no permite a sus ciudadanos el acceso a determinados sitios web que son considerados “malos” para los ciudadanos chinos. Recientemente han implementado un sistema de puntuaciones para cada ciudadano chino basado en la reputación que tiene en las redes sociales. Justamente como en black mirror (serie). Pero esto no es solo problema chino. En Rusia también hay herramientas para controlar a la sociedad. O en el caso de Estados Unidos con Snowden  en el que se demostró que el gobierno espiaba ciudadanos americanos.

Aldous Huxley en su libro Un mundo feliz visualiza un futuro en el que la humanidad no se rebela porque están adormecidos por una droga llamada soma. En esta versión del futuro Huxley describe una sociedad clasificada en base a la inteligencia innata. Las personas duermen escuchando una voz que les dice como pensar incitando a la conformidad y disuadiendo el pensamiento critico. Además de incentivar el consumismo des de las élites. En Un mundo feliz los ciudadanos están condicionados para consumir continuamente y tomar drogas para ser felices sin hacer introspecciones de sus vidas.

El futuro que predijo Huxley tampoco no está muy lejos de la realidad. Ya vivimos en un mundo dónde, por voluntad propia, escogemos mirar hacia el otro lado. Intentamos reducir la soledad enganchados todo el día al móvil en vez de quedar con los amigos en el mundo real. Vivimos en un mundo dónde las personas deprimidas en vez de analizar cual es el problema de base de sus ansiedades toman sistemáticamente antidepresivos. Vivimos en una sociedad dónde el consumismo es lo que se supone que nos tiene que traer la felicidad y nos condicionan a base de anuncios. Todos queremos ser más jóvenes, más ricos, más felices.

En resumen como hemos podido ver tanto Orwell como Huxley tenían razón. Aunque honestamente creo que vivimos en la mejor era de la humanidad, también creo que nos queda mucho recorrido para mejorar. Así que sin desanimar recomiendo que le echéis un vistazo al libro Enlightenment now de Steven Pinker donde el autor expone datos para justificar que la humanidad está mejor que en cualquier otro momento en el pasado.

Como sobrevivir en la China sin hablar chino usando aplicaciones para el móvil

Recientemente fui a la China. Contrariamente a lo que pensaba poca gente habla inglés. De hecho casi nadie lo habla. Incluso las recepcionistas de los hoteles sabían algunas palabras pero estaban muy lejos de poder mantener una conversación sin usar el traductor del móvil. Pero este no fue el único problema que nos encontramos en el gran país asiático. Distintos servicios a los que estamos acostumbrados a usar en nuestro día a día no están disponibles detrás de la gran muralla digital. En este post quiero dejar por escrito cuales fueron los métodos que usé para superar todas las adversidades en un país tan grande y tan distinto del nuestro.

Para la comunicación:

Para mi este fue uno de los puntos clave en la china. La gente por regla general no se sabe ni una palabra de inglés. Algunos estudiantes universitarios si que hablan algo de inglés pero no es la regla general. No esperes que la gente de los hoteles o restaurantes sepa inglés o que tengan el menú en inglés. De hecho había pocos no asiáticos en el país. China al parecer está bastante focalizada en el mercado interno y no han abierto las puertas al mundo exterior.

Como no teníamos datos en el móvil (íbamos a base de wifi) usamos dos aplicaciones que pueden funcionar offline para traducir y hacernos entender.

Traductor offline ingles-chino: Este nos permitió escribir palabras o frases simples para hablar con la gente. Los chinos usaban la versión china de google translate para escribir frases. No es una comunicación super fluida, pero sirve para entenderse (y es divertido de ver que tu amigo se va pasando el teléfono con un chino).

Luego para los menús en los restaurantes es algo más complicado. Como están en chino no podíamos escribir el carácter en el móvil así que usamos waygo. Waygo nos permitió hacerle una foto al menú y luego obtener la traducción al inglés. A veces no es súper preciso y no funciona con todas las tipografías pero por regla general funciona y nos salvó bastante. Especialmente si no teníamos que hablar con la camarera. En muchos restaurantes todos los platos o la mayoría tienen una foto para que puedas ver como va a ser cuando te lo sirvan. Pero normalmente quieres saber que animal es y que parte del animal contiene.

Para comunicarse con amigos chinos o con personas de otros sitios – ya que no vas a poder usar whatsapp – los chinos tienen su alternativa llamada WeChat. Es lo mismo que whatsapp en versión china. Se lo instalé a mi madre para que pudiera escribirle y contarle por donde iba pasando (y que supiera que estaba vivo). Esta aplicación también te permite pagar en los sitios (si tienes saldo en la aplicación). Para tener saldo vas a tener que pedírselo a algún amigo chino que te pase dinero ya que para tener dinero un amigo te tiene que hacer una transferencia o tienes que tener una cuenta bancaria china. Ya verás que este es uno de los métodos que muchos chinos usan en su día a día. Es muy conveniente porqué es más rápido que pagar en metálico.

Para moverse:

Usamos Osmand para los mapas. Esta aplicación permite descargarse los mapas de distintos países de manera offline (recuerda que probablemente no vayas a tener internet). Por defecto ofrece bastante información sobre los edificios y tiene guardados monumentos, hospitales, museos, universidades y sitios relevantes. Ofrece la posibilidad de marcar lugares favoritos en el mapa de forma manual. Pero lo más importante, por si te tienes que comunicar con chinos, puedes cambiar el nombre de las calles del inglés al nombre original (con alfabeto chino) para que los nativos lo puedan entender.

Luego está el Lyft/Uber chino llamado Didi. Te permite pedir taxis y pagarlos en cash (sin dejar cuenta bancaria o tarjeta de crédito en la app). Esto es bastante útil para moverte grandes distancias dentro de la ciudad. Los taxis son relativamente baratos. El metro también es muy barato y todo está indicado en inglés. Afortunadamente no hay tanta gente en el metro como esperábamos y está bastante organizado.

Para usar los servicios disponibles en europa o américa:

Facebook, whatsapp y cualquier servicio de Google no funcionan en china. El gobierno tiene restringidos todos estos servicios (y otros). En teoría se puede rodear esta restricción usando un VPN. Las opciones comerciales tienden a ser reconocidas rápidamente y a ser bloqueadas por el gobierno chino. Por lo que si consigues crear tu propio VPN va a ser ideal. Astrid por lo que me han comentado tiene un periodo de prueba de 7 días y funciona bastante bien (no lo he probado usé mi propio VPN). Por internet hay artículos que comentan que los VPN públicos el gobierno chino los tiene identificados y bloqueados.

Para terminar quiero recordar que hay zonas administrativas que no están directamente gobernadas por el gobierno central chino. Este son el caso por ejemplo de Hong Kong y Macau. Donde puedes acceder a Google, Facebook y otros servicios sin restricciones. La contra partida es que por ejemplo Didi y otros servicios comúnmente usados en la China principal no son tan usados o directamente no funcionan.

Si con esto logramos sobrevivir tres semanas, no cabe duda que tu también podrás. Si usas estos servicios no te olvides de volver y dejar tu experiencia en los comentarios!