Gráficas utilizando CanvasJS

Las gráficas nos ayudan a visualizar un conjunto de datos para que podamos comparar rápidamente sus valores. 

Una tabla de datos en una hoja puede resultar difícil de analizar y tardaremos más tiempo en comprender y comparar los valores. En una gráfica todo se ve mucho más claro solo con un vistazo.

Aquí podemos ver un simple ejemplo para la creación de gráficas utilizando la librería CanvasJS.

Con esta librería podemos crear rápidamente gráficas dinámicas e integrarlas en la web.

Código html:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"/>
    
    <title>Ejemplos Graficas</title>
</head>
<body>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6">
            <div id="pieChart" style="height: 360px; width: 100%;">
            </div>
            </div>
            <div class="col-md-6">
            <div id="columnChart" style="height: 360px; width: 100%;">
            </div>
            </div>
        </div>
        </div>

    <script src="https://canvasjs.com/assets/script/canvasjs.min.js"> </script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
    <script src="pack.js"></script>
</body>
</html>

Código javaScript:

var pieChartValues = [{
    y: 39.16,
    exploded: true,
    indexLabel: "Estados Unidos",
    color: "#1f77b4"
}, {
    y: 21.8,
    indexLabel: "Canada",
    color: "#ff7f0e"
}, {
    y: 21.45,
    indexLabel: "Europa",
    color: " #ffbb78"
}, {
    y: 5.56,
    indexLabel: "Malasia",
    color: "#d62728"
}, {
    y: 5.38,
    indexLabel: "Peru",
    color: "#98df8a"
}, {
    y: 3.73,
    indexLabel: "Bolivia",
    color: "#bcbd22"
}, {
    y: 2.92,
    indexLabel: "Tunez",
    color: "#f7b6d2"
}];
renderPieChart(pieChartValues);

function renderPieChart(values) {

    var chart = new CanvasJS.Chart("pieChart", {
        backgroundColor: "white",
        colorSet: "colorSet2",

        title: {
            text: "Pie Chart",
            fontFamily: "Verdana",
            fontSize: 25,
            fontWeight: "normal",
        },
        animationEnabled: true,
        data: [{
            indexLabelFontSize: 15,
            indexLabelFontFamily: "Monospace",
            indexLabelFontColor: "darkgrey",
            indexLabelLineColor: "darkgrey",
            indexLabelPlacement: "outside",
            type: "pie",
            showInLegend: false,
            toolTipContent: "<strong>#percent%</strong>",
            dataPoints: values
        }]
    });
    chart.render();
}
var columnChartValues = [{
    y: 936.04,
    label: "Paris",
    color: "#1f77b4"
}, {
    y: 391.84,
    label: "Londres",
    color: "#ff7f0e"
}, {
    y: 365.76,
    label: "Roma",
    color: " #ffbb78"
}, {
    y: 197.48,
    label: "Barcelona",
    color: "#d62728"
}, {
    y: 94.2,
    label: "Atenas",
    color: "#98df8a"
}, {
    y: 65.28,
    label: "Berlin",
    color: "#bcbd22"
}, {
    y: 51.2,
    label: "Madrid",
    color: "#f7b6d2"
}];
renderColumnChart(columnChartValues);

function renderColumnChart(values) {

    var chart = new CanvasJS.Chart("columnChart", {
        backgroundColor: "white",
        colorSet: "colorSet3",
        title: {
            text: "Datos por Ciudades",
            fontFamily: "Verdana",
            fontSize: 25,
            fontWeight: "normal",
        },
        animationEnabled: true,
        legend: {
            verticalAlign: "bottom",
            horizontalAlign: "center"
        },
        theme: "theme2",
        data: [

            {
                indexLabelFontSize: 15,
                indexLabelFontFamily: "Monospace",
                indexLabelFontColor: "darkgrey",
                indexLabelLineColor: "darkgrey",
                indexLabelPlacement: "outside",
                type: "column",
                showInLegend: false,
                legendMarkerColor: "grey",
                dataPoints: values
            }
        ]
    });

    chart.render();
}

Son dos ejemplos simples para ver el potencial que nos ofrece esta librería.

Puedes encontar más información aquí.



Si encuentras esta noticia interesante la puedes compartir en tus redes sociales, a tus seguidores les puede gustar. Utiliza los botones que tienes más abajo.

Share

Generar mapas con datos estadísticos, con Python y Plotly

Si necesitas representar diferentes datos estadísticos sobre un mapa del mundo o de un continente o zona del planeta determinado, existe una herramienta muy potente que te permite de forma fácil realizar esta tarea.

Con Python y la librería Plotly podrás mostrar tus datos estadísticos sobre diferentes zonas geográficas.

El código es bien sencillo, y es altamente configurable. Para que Plotly ubique los datos en cada país, es necesario incluir el nombre de dicho país en los datos, el nombre debe estar en formato internacional, por ejemplo “Estados Unidos” debe ser “United States of America“.

import funciones_db as db
import plotly.graph_objects as go
import plotly.offline as opy

datos = db.actores_paises()

fig = go.Figure(go.Choropleth(
    locations = datos['pais'],
    locationmode = "country names",
    z = datos['total'],
    text = datos['pais_a'],
    colorscale = 'Hot',
    autocolorscale = False,
    reversescale = True,
    marker_line_color = '#efefef',
    marker_line_width = 0.5,
    colorbar_ticksuffix = '%',
    colorbar_title = 'Actores',
    )
)

fig.update_layout(
    title_text = 'Número de Actores por Países',
    showlegend = False,
    geo = dict(
        scope = 'world',
        resolution = 50,
        projection_type = 'miller',
        showcoastlines = True,
        showocean = True,
        showcountries = True,
        oceancolor = '#eaeaea',
        lakecolor = '#eaeaea',
        coastlinecolor = '#dadada'
    )
)

fig.show()

En el ejemplo los datos se extraen de una base de datos.

  • locations: Indica el país al que pertenece el dato.
  • locationmode = “country names”: Indica la forma en la que se mostrara la información, es este caso por países. Si llos datos son para un determinado país y quieres mostrar los datos por provincias o estados, se debe cambiar este parametro.
  • colorscale: La paleta de colores que mostrará los datos. Algunas de las paletas disponibles; Brwnyl, Agsunset, Sunsetdark, Magenta, Sunset, Purpor, Purp, Tealgrn, Teal, Bluyl, Aggrnyl, Emrld, Darkmint, Blugrn, Mint, Pinkyl, Peach, Oryel, Redor, Burgyl, Burg, tempo, amp, speed, matter, algae, dense, deep, gray, ice, solar, haline, thermal, turbid, YlOrRd, YlOrBr, YlGnBu, YlGn, Reds, RdPu, RdBu, Purples, Greys, Greens, Rainbow. Lista completa, aqui.
  • scope: Es la parte del globo terraqueo que se mostrará. world, para mostrar todos los continentes. Otros valores para cada continente; “usa” | “europe” | “asia” | “africa” | “north america” | “south america”.
  • projection_type: Es el tipo de mapa que se representará. Admite los siguientes valores; equirectangular, mercator, orthographic, natural earth, kavrayskiy7, miller, robinson, eckert4, azimuthal equal area, azimuthal equidistant, conic equal area, conic conformal, conic equidistant, gnomonic, stereographic, mollweide, hammer, transverse mercator, albers usa, winkel tripel, aitoff, sinusoidal.
  • También es posible personalizar y mostrar/ocultar otros datos del mapa, como la separación de los paises o el color de los oceanos.
  • El código genera un archivo en html, que se abre directamente en el navegador por defecto del sistema.

Algunos ejemplos con Plotly, cambiando los parametros; colorscale, scope y projection_type.

Para visualizar los datos de cada país, tan solo debemos pasar el cursor del ratón por encima de dicho país.

Los mapas pueden ser facilmente incluidos en proyecto de dJango, directamento o a través de javascript.

Plotly es una herramienta muy completa, la cual también permite realizar infinidad de graficas estadisticas a parte de los mapas. Más información de esta completa libreria aqui.



Si encuentras esta noticia interesante la puedes compartir en tus redes sociales, a tus seguidores les puede gustar. Utiliza los botones que tienes más abajo.

Share

Crea un log fácilmente para tus proyectos en Python

Un fichero de registro o log nos permite llevar una cronología de lo que va sucediendo en nuestra aplicación. Podemos registrar con facilidad todos aquellos procesos, fallos y errores que consideramos oportunos, esto nos permite poder encontrar fallos y errores presentes en el script que ejecutamos.

Esta utilidad esta presente en el modulo “logging“. Nos permite crear de forma fácil y rápida los archivos log en nuestros proyectos.

Logging dispone de 5 métodos para notificar los diferentes mensajes:

  • Debug. Normalmente se utiliza cuando estamos desarrollando nuestra aplicación, nos permite depurar el proyecto.
  • Info. Mensajes informativos. Pueden indicar que los procesos se realizan de forma correcta.
  • Warning. Utilizado para realizar advertencias, algo puede no ir bien o causar problemas en un futuro proximo.
  • Error. Algo ha salido mal o el resultado no es el esperado.
  • Critical. Posiblemente el programa deje de funcionar o responder.

Podemos configurar logging para que cree un archivo de texto, en el cual se guardarán los mensajes que vamos colocando en el código.

import logging
from datetime import datetime, date, time

ahora = datetime.now()
fecha_log = ahora.strftime('%d-%m-%Y_%H-%M-%S')

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s : %(levelname)s : %(message)s',
                    filename = fecha_log + '_registro.log',
                    filemode = 'w',)
  • Level. Nivel del mensaje.
  • Format. El formato en el cual serán guardados los mensajes.
  • Filename. El archivo que contendrá el log.
  • Filemode. El modo del archivo.

Ejemplo del formato de salida de los mensajes:

Ahora solo nos queda añadir la salida de los mensajes en los lugares de nuestra aplicación que consideremos más oportunos, propensos a errores, criticos o simplemente informativos.

El formato para los mensajes es el siguiente:

logging.debug('Información detallada, generalmente de interés solo cuando se diagnostican problemas.')
logging.info('Confirmación de que las cosas funcionan como se esperaba.')
logging.warning('Una indicación de que sucedió algo inesperado o indicativo de algún problema en el futuro cercano (por ejemplo, "espacio en disco bajo"). El software sigue funcionando como se esperaba.')
logging.error('Debido a un problema más serio, el software no ha podido realizar alguna función.')
logging.critical('Un error grave que indica que el programa en sí no puede continuar ejecutándose.')

Aqui, puedes encontrar la documentación oficial de logging.



Si encuentras esta noticia interesante la puedes compartir en tus redes sociales, a tus seguidores les puede gustar. Utiliza los botones que tienes más abajo.

Share

Ejecutar con Python una función con determinados periodos de tiempo

Muchas veces utilizamos crontab para programar la ejecución de un determinado script de python en determinadas horas o fechas. Utilizando crontab, el periodo de tiempo más corto para lanzar un script es de un minuto, si necesitamos realizar procesos con periodos de tiempo más cortos debemos utilizar otras técnicas.

Existen multitud de formas para ejecutar un función que lance los procesos de nuestro script, unas más complejas y sofisticadas, otras más sencillas, que no dependen de funcionalidades ni complementos externos.

Este pequeño ejemplo de script de python, ejecuta una función cada 15 segundos:

import time

while True:
    funcion_a_ejecutar()
    time.sleep(15)
    print("Se Ejecuto!!!")

Este proceso crea un bucle infinito. Ejecuta la función “funcion_a_ejecutar()“, y seguidamente espera a que transcurran 15 segundos, e imprime por pantalla el mensaje “Se Ejecuto!!!“. Al ser un bucle infinito, ejecutara este mismo proceso continuamente.

Existen complementos que realizan tareas similares como pueden ser:

  • InterruptableLoop
  • threading
  • Scheduler

Entre otras muchas opciones disponibles con diferentes librerias de python. Hoy hemos propuesto el sistema más sencillo y sin la necesidad de librerias externas.



Si encuentras esta noticia interesante la puedes compartir en tus redes sociales, a tus seguidores les puede gustar. Utiliza los botones que tienes más abajo.

Share

La Raspberry Pi 4 ya admite el arranque desde un disco SSD

Hasta hace poco la Raspberry Pi 4 no podia realizar el arranque del sistema operativo desde un disco usb, ya fuera un disco HDD o SSD. Con el firmware lanzado a mediados de junio, este problema se ha solucionado.

Ahora ya podemos realizar el arranque desde un dispositivo usb y prescindir de las tarjetas SD, que por otro lado son bastante lentas, lo aconsejable y con lo que notaremos un aumento drástico de la velocidad de la Raspberry Pi es poner un disco de estado solido SSD.

Si tu tarjeta no esta actualizada, ante todo lo primero que debes hacer es proceder a su actualización:

sudo apt update
sudo apt full-upgrade

El siguiente paso es modificar un archivo del sistema. Los firmwares pueden tener 3 estados al momento de ser liberados:

  • Beta – Solo para pruebas, no suelen ser estables.
  • Stable – Ha sido probado y su estado se considera estable.
  • Critical – Se han solucionado todos los problemas reportados, es el más estable. Si tu Raspberry Pi hace un trabajo critico, que no puede fallar, este es el que debes usar.

Al instalar Raspbian, el sistema biene configurado para solo actualizar el firmware, si este se encuentra en la fase Critical. El firmware lanzado recientemente aun se encuentra en la fase Stable, es decir aun su versión no ha pasado a la fase Critical. Por ello es necesario modificar un archivo para permitir instalar en la Raspberry Pi 4 el firmware actual que se encuentra en fase Stable.

Para modificar el archivo utiliza el siguiente comando:

sudo nano /etc/default/rpi-eeprom-update

Ahora debemos cambiar el parametro FIRMWARE_RELEASE_STATUS de “critical” a “stable“, guarda los cambios realizados y sal del archivo. Ejecutar el siguiente comando.

sudo rpi-eeprom-update -d -a

Esto actualizara el bootloader, que es el encargado de arrancar la Raspberry Pi 4 desde unidades diferentes a la tarjeta SD.

Ahora toca reiniciar la raspberry Pi:

sudo reboot

Y comprobar que todo ha ido correctamente:

vcgencmd bootloader_version

Si realizas esta operación con fecha posterior a Agosto de 2020, puede que ya exista un firmware en estado Critical, y no tengas que modificar este archivo.

Aquí puedes encontrar más información sobre los bootloaders lanzados.

La fecha del firmware debería ser con fecha del 15 de junio de 2020 o posterior, ya que esta versión es la primera que soporta el arrancar la Raspberry Pi desde un dispositivo USB.

Si es así, tu Raspberry Pi 4 ya es capaz de arrancar desde unidades conectadas por usb.

Ahora toca pasar el contenido de la tarjeta SD a la unidad SSD. El proceso lo realizo desde un ordenador con Mac OS X. Pero con las herramientas adecuadas también se puede realizar desde Linux, es practicamente igual, o desde Windows.

Debes conectar la tarjeta SD al ordenador que realizará la tarea y ejecutar el siguiente comando en la terminal de Mac o Linux:

diskutil list

Veremos al silimar a la siguiente imagen:

Debemos saber el nombre con el que esta montada la unidad de la tarjeta SD, para ello busca la capacidad de tu tarjeta, sera de 16 o 32 GB, en la columna “SIZE“, y apunta la ruta que se muestra al principio, será algo como “/dev/disk6“, corresponde a una tarjeta SD de 16 GB (15.5 GB).

El siguiente paso es realizar una imagen de la tarjeta SD en nuestro ordenador, para ello utilizamos el comando:

sudo dd if=/dev/rdisk6 of=~/Desktop/raspberrypi.img bs=1m
  • if=, con este parametro seleccionamos la unidad a copiar, aquí debes poner la ruta que te dio en el paso anterior. Muy importante no olvides poner la letra “r” antes de disk6.
  • of=, indica la ruta donde se realizara la copia de la tarjeta SD, en este caso es en el “escritorio“, el archivo tendrá el nombre “raspberrypi.img
  • bs=1m, es el parametro y valor recomendado para este tipo de operaciones.

El proceso es algo lento, puede llevar entre 12 y 15 minutos, dependiendo en gran medida de la clase de la tarjeta SD.

Ya con la imagen creada de nuestra tarjeta SD, es hora de grabar dicha imagen en el disco SSD, es el mismo proceso que ya utilizaste para grabar la imagen de Raspbian en la SD. Solo que ahora grabamos la imagen que hemos creado, en la unidad SSD. Para ello utilizamos la herramienta “Etcher“. Ten mucho cuidado al seleccionar la unidad de destino, selecciona bien el disco SSD donde quieres grabar la imagen, ya que este proceso borrar todos los datos de dicho disco.

Una vez completado el proceso solo nos queda montar el disco SSD en la Raspberry Pi 4, y proceder a su arranque, si todo ha ido bien, ya tienes instalado tu sistema Raspbian en un disco SSD, mucho más rapido que la tarjeta SD.

Ahora solo queda un último paso, como habras podido comprobar, el tamaño actual de tu SSD es igual al de la imagen que has grabado.

Si en tu Raspberry Pi 4 no tienes instalada la herramienta “GParted“. Procede a su instalación. La encontraras en la pestaña “Raspbian/Preferencias/Add / Remove Software

La herramienta se instala en la pestaña “Herramientas del sistema“.

Al ejecutar GParted, verás que aparecen varias particiones en tu disco SSD. Selecciona la partición que contiene el sistema operativo, tendrá el tamaño de la imagen que anteriormente has grabado. Pulsa con el botón secundario del ratón, y selecciona “Redimensionar“. En la siguiente pantalla selecciona todo el tamaño disponible. Pulsa en el botón “Redimensionar“. Aun no se ha realizado ninguna tarea. Pulsa en el icono con el check verde, para que se realicen todas las operaciones pendientes.

Una vez que GParted termine de realizar la redimensión, ya dispondras de todo tu espacio en el disco SSD.



Si encuentras esta noticia interesante la puedes compartir en tus redes sociales, a tus seguidores les puede gustar. Utiliza los botones que tienes más abajo.

Share