Django: Introducción a internacionalización y localización

Django: Introducción a internacionalización y localización

Cuando escribimos código, solemos hacerlo por defecto en inglés, ya que es el lenguaje predominante. Sin embargo, sucede que en algunos casos los usuarios de nuestro desarrollo necesitan ver la aplicación en su lenguaje local y este no es el inglés. Este artículo no es más que una breve guía o bitácora de las acciones a seguir para conseguir aprovechar las capacidades de traducción de Django.

Particularmente los ejemplos serán en función de Django 2, y la documentación se encuentra disponible en el sitio oficial

Leer más…

Preprocesando datos para Machine Learning

A todos nos gustaría llegar a casa y que la cena esté lista. A los algoritmos de Machine Learning también, por eso es que hoy vamos a dejarles cuatro recetas para que puedan alimentar en forma eficiente a sus procesos de entrenamiento.

Las recetas que repasaremos el día de hoy son:

  • Binarización
  • Eliminación del valor medio
  • Escalando
  • Normalización

Cada caso puede requerir el uso de uno o más de estos métodos en forma combinada.

Para simplificarnos las tareas matemáticas, vamos a hacer uso de dos paquetes Open Source para desarrollos científicos:

  • Numpy, el cual se puede instalar junto a las de herramientas de SciPy
  • El paquete de aprendizaje de Machine Learning scikit

Ambos se pueden instalar fácilmente desde pip con los siguientes comandos:

pip install scipy

pip install scikit-learn

Primero vamos a importar las librerías necesarias y definir una matriz de ejemplo en numpy para usar en cada uno de los métodos que explicaremos a continuación

import numpy as np

from sklearn import preprocessing

matriz_ejemplo = np.array([[2.3, 2.9, -1.3, 5.2],

                                            [1.3, -3.8, 2.1, 4.3],

                                            [-8.9, 2.4, -1.1, 0],

                                            [4.1, -3.9, 2.5, 2.1]])

Binarización

Este método es comparable al que utilizan las entradas de las Compuertas Lógicas con las que están hechas todos nuestros dispositivos electrónicos, en el que, habiendo definido un valor de umbral, podemos separar a los datos que ingresan de manera que los menores a ese umbral correspondan a 0 (False) y los mayores correspondan a 1 (True). Vamos a transformar esos valores numéricos en valores booleanos, usando un umbral de 2.4 con la función Binarizer:

matriz_binarizada = preprocessing.Binarizer(threshold=2.4).transform(matriz_ejemplo)

print("Matriz binarizada:\n", matriz_binarizada)

y el resultado será:

Matriz binarizada:

  [[0. 1. 0. 1.]

  [0. 0. 0. 1.]

  [0. 0. 0. 0.]

  [1. 0. 1. 0.]]

Observen que el segundo elemento de la tercer fila de la matriz de ejemplo es 2.4, y al binarizarlo con el umbral 2.4 se obtiene un 0 en la misma posición.

Pueden encontrar el código completo de este método en el archivo de ejemplo binarizacion.py.

Eliminación del valor medio

Este método es muy usado en preprocesamiento de datos para Machine Learning, con el cual se elimina el sesgo de las características en nuestro vector característico. La función que nos permite esta transformación se llama scale y es muy sencilla de usar. Para verificar los resultados paso a paso incluímos algunos prints.

print("Matriz de ejemplo:")

print(matriz_ejemplo)

print("Promedio =", matriz_ejemplo.mean(axis=0))

print("Desviación típica =", matriz_ejemplo.std(axis=0))

 

promedio_eliminado = preprocessing.scale(matriz_ejemplo)

print("\nMatriz procesada:")

print(promedio_eliminado)

print("Promedio =", promedio_eliminado.mean(axis=0))

print("Desviación Típica =", promedio_eliminado.std(axis=0))

Lo que debería darnos como resultado:

Matriz de ejemplo:

 [[ 2.1 2.9 -1.3 5.2]

 [ 1.3 -3.8 2.1 4.3]

 [-8.9 2.4 -1.1 0. ]

 [ 4.1 -3.9 2.5 2.1]]

Promedio = [-0.35 -0.6 0.55 2.9 ]

Desviación típica = [5.04058528 3.25499616 1.75712834 2.01866292]

 

Matriz procesada:

 [[ 0.48605467 1.07527009 -1.05285423 1.13936803]

 [ 0.32734294 -0.98310408 0.88212111 0.69352837]

 [-1.69623159 0.92166007 -0.93903215 -1.43659447]

 [ 0.88283399 -1.01382608 1.10976527 -0.39630192]]

Promedio = [ 0.00000000e+00 0.00000000e+00 -1.11022302e-16 4.16333634e-17]

Desviación Típica = [1. 1. 1. 1.]

Como pueden observar el promedio en la matriz procesada está cerca de 0 y la desviación típica es 1.

Pueden encontrar el código completo de este método en el archivo de ejemplo eliminar_valor_medio.py.

Escalando

Es posible que nuestro vector característico incluya valores extremadamente altos y/o extremadamente bajos, por eso es importante escalar esos valores para que nuestro algoritmo opere con valores cercanos, y así evitamos características con valores desorbitantes.

datos_escalados = preprocessing.MinMaxScaler(feature_range=(0, 1))

datos_escalados = datos_escalados.fit_transform(matriz_ejemplo)

print("Datos escalados:\n", datos_escalados)

Podemos comprobar que cada fila fue escalada para que sus valores mínimos y máximos sean 0 y 1 respectivamente, y los demás se transformaron en forma proporcional:

Datos escalados:

 [[0.84615385 1.                 0.                 1.                  ]

  [0.78461538  0.01470588 0.89473684 0.82692308 ]

  [0.                  0.92647059 0.05263158 0.                 ]

  [1.                  0.                 1.                 0.40384615 ]]

Pueden encontrar el código completo de este método en el archivo de ejemplo escalando.py.

Normalización

La normalización se usa para modificar los valores en el vector característico y así poder medirlos en una escala común. Existen varios métodos para esto, así que vamos a presentarles los dos más comunes.

Normalización L1: Busca las menores desviaciones absolutas, y funciona asegurándose que la suma de los valores absolutos en cada fila sea 1.

Normalización L2: Busca los menores cuadrados, y funciona asegurándose que la suma de los cuadrados sea 1.

En general el método de Normalización L1 se considera más robusto que el de Normalización L2, porque el primero es más resistente a valores atípicos en los datos de origen. Es frecuente encontrar valores atípicos y no hay nada que podamos hacer al respecto, por eso buscamos técnicas que los ignoren de forma segura y efectiva durante los cálculos. En cambio, si los valores atípicos son importantes para el problema que estamos resolviendo, podríamos inclinarnos a usar la Normalización L2.

datos_normalizados_l1 = preprocessing.normalize(matriz_ejemplo, norm='l1')

datos_normalizados_l2 = preprocessing.normalize(matriz_ejemplo, norm='l2')

print("Datos con Normalización L1:\n", datos_normalizados_l1)

print("\nDatos con Normalización L2:\n", datos_normalizados_l2)

Usamos la función normalize, indicando el tipo de normalización, y así podremos apreciar la diferencia por pantalla:

Datos con Normalización L1:

[[ 0.1826087 0.25217391 -0.11304348 0.45217391]

[ 0.11304348 -0.33043478 0.1826087 0.37391304]

[-0.71774194 0.19354839 -0.08870968 0. ]

[ 0.32539683 -0.30952381 0.1984127 0.16666667]]

 

Datos con Normalización L2:

[[ 0.32578702 0.44989636 -0.20167768 0.80671072]

[ 0.20808658 -0.60825309 0.33613986 0.68828639]

[-0.95870891 0.25852824 -0.11849211 0. ]

[ 0.62758369 -0.59696986 0.38267298 0.32144531]]

Pueden encontrar el código completo de este método en el archivo de ejemplo normalizacion.py.

Espero que con estos métodos le den un merecido banquete a sus algoritmos, y que tengan ustedes una deliciosa y nutritiva cena.

Usando Python en funciones de Postgresql

Usando Python en funciones de Postgresql

Además de ser súper robusto a muy bajo costo, Postgresql, posee una muy buena característica, que es poder generar distintos tipos de funciones haciendo uso del lenguaje procedural, en este caso vamos a hablar de PL/Python, el cual, como pueden deducir por el titulpo del post, nos permite escribir codigo python dentro de las funciones.

En el post de hoy nos vamos a concentrar en dejar la extensión disponible para una base de datos en particular y también haremos un pequeño ejemplo de uso para poder sacarnos las ganas.

Leer más…

Píxel de seguimiento

En este post voy a mostrar como agregar un píxel de Facebook y Google Analitycs a nuestro sitio web.

¿Qué son y para qué sirven los píxeles de seguimiento?

Los píxeles de seguimiento son una herramienta de análisis con la que podemos medir la eficacia de nuestras publicacines y entender las acciones que las personas realizan en nuestro sitio web.


Agregando píxel de Facebook

Agregar el píxel de facebook a nuestra web es relativamente sencillo, basta con seguir los pasos que están en la propia documentación de facebook. Aquí les mostraremos ese paso a paso.

imagen

1) Vamos a la pestaña píxeles del administrador de anuncios, hacemos click en crear píxel e inmediatamente nos pide asignarle un nombre identificador, en este caso nuestro píxel se llama bitson.

imagen

2) A continuación ingresamos a las configuraciones del píxel y hacemos click en "Instala el código manualmente".

imagen

3) En este momento nos muestra la pantalla con los pasos para terminar la configración. Seleccionamos el código que nos brinda la configuración y lo pegamos en el encabezado de nuestras páginas, a las que le haremos seguimiento.

imagen


Agregando píxel de Google Analytics

Para agregar este píxel debemos ingresar a Google Analytics aquí encontraremos las diferentes opciones de configuración que nos brinda esta herramienta, debemos elegir la opción de Configurar Google Analytics.

imagen

Cuando accedemos con esta opción, acontinuación nos muestra que configuración esta disponible para ser usada. En nuestro caso vamos a usar la opción gtag.js.

imagen

Luego de esto, vamos a copiar el siguiente código, este fragmento que copiamos debe ser insertado después de la etiquet <head></head> en todas las páginas de nuestro sitio web.

imagen

Esto es todo lo que necesitamos para realizar el seguimiento en nuestros sitios, controlando publicaciones e interacciones de nuestros visitantes, solo necesitamos hacer uso del código que nos brinda Facebook y Google Analytics.