sábado, 28 de noviembre de 2020

Visualizar datos de Machine Learning con la librería matplotlib de Python


En este post vamos a ver algunas formas de visualización. En nuestro caso visualizaremos los datos de temperaturas del observatorio del Retiro en Madrid. La librería matplotlib contiene una amplia variedad de herramientas para el visualizado de datos, es muy sencillo generar gráficos de líneas, de puntos o histogramas. In particular, vamos a utilizar el módulo matplotlib.pyplot porque es el de uso más sencillo, pyplot permite generar visualizaciones paso a paso. 

from matplotlib import pyplot as plt
años = [2010, 2011, 2012, 2013, 2014, 2015, 2016]
temperatura_media = [14.71, 16.04, 15.51, 15.03, 16.07, 16.60, 16.04]
# crea un gráfico lineal , años en el eje x y tempertura en el y
plt.plot(años, temperatura_media, color='green', marker='o', linestyle='solid')
# añadimos un título
plt.title("Temperatura media Madrid-Retiro")
# añadimos una etiqueta al eje y
plt.ylabel("Grados centígrados ºC")
plt.show()


Visualizar datos de Machine Learning con la librería matplotlib de Python

sábado, 21 de noviembre de 2020

AWS in a nutshell 6: Soluciones de Bases de Datos

Veremos cómo implementar y configurar varias bases de datos en AWS, incluidas Amazon Aurora, MySQL, MariaDB, PostgreSQL, Microsoft SQL Server y Oracle.

Así como otras opciones de almacenamiento de datos de Redshift. Cuándo usar las bases de datos DocumentDB, DynamoDB y NoSQL 

6.1 SQL y NoSQL

Cuando estemos planificando el uso de soluciones de bases de datos basadas en la nube de Amazon Web Services, debemos considerar el tipo de solución de base de datos que mejor resuelve un problema comercial, ya sea una solución SQL o una solución NoSQL.

El lenguaje de consulta estructurado, o SQL, es un lenguaje que se utiliza para acceder a datos y objetos de bases de datos relacionales. Los objetos incluirían cosas como registros dentro de tablas. 

6.2 Servicio de base de datos relacional

Uno de los beneficios de ejecutar una base de datos en la nube de Amazon Web Services es la escalabilidad. También tenemos la opción de utilizar una solución de servicio administrado de base de datos de AWS. Un servicio administrado significa que el servidor subyacente y el software de la base de datos están instalados y atendidos por nosotros. 

6.3 Amazon Aurora  

Amazon Aurora es una oferta de servicio de base de datos relacional en Amazon Web Services. Y es compatible con MySQL y PostgreSQL. Lo que pasa es que, desde cero, fue diseñado para ejecutarse en un entorno de nube donde, mientras que MySQL, originalmente fue diseñado para ejecutarse en servidores físicos. Entonces, Aurora está diseñada para ser muy rápida y al mismo tiempo compatible con MySQL y PostgreSQL. 

Para acceder a Amazon Aurora entramos en la consola de AWS y ponemos:

RDS → Create Database → standard Create


Amazon Aurora

Seleccionamos Amazon Aurora

Y Pulsamos dashboard del panel Lateral 

Amazon Aurora


6.4 Para crear otras bases de datos

Seguimos las siguientes secuencias desde la consola principal de AWS.

Consola → RDS → MySQL 

Consola → RDS → PostgreSQL

Consola → RDS → SQL Server

Consola → RDS → Oracle

6.5 Amazon RedShift 

Amazon Redshift es una solución de almacenamiento de datos basada en la nube. Cuando necesitamos ingerir muchos tipos diferentes de datos de una multitud de fuentes de datos diferentes en conjunto para analizarlos como uno solo para derivar el valor comercial y los conocimientos de ese análisis. Se trata de un tipo de solución a escala de petabytes. Un petabyte equivale a 1000 terabytes. Así que definitivamente es adecuado para el análisis de big data. Redshift se basa en PostgreSQL.

Admite procesamiento paralelo masivo. El procesamiento en paralelo significa que tenemos varios nodos de clúster trabajando juntos para analizar datos. Por tanto, se utiliza para el análisis de datos y también admite consultas muy rápidas. Para eso está diseñado Redshift. Es una solución de almacén en la nube de AWS. Está diseñado para big data, almacenamiento y análisis de datos a gran escala. Podemos migrar datos a Redshift usando el comando COPY. Y podemos traer datos de otras soluciones como Amazon EMR Elastic MapReduce, otra solución de análisis de datos basada en la nube.

Consola → Redshift 

Amazon RedShift

Amazon RedShift


6.6 DocumentDB y DynamoDB

Amazon Web Services admite tanto documentos como bases de datos NoSQL de tipo valor-clave. Las bases de datos de documentos y de valor-clave vienen en forma de DocumentDB y DynamoDB. Admiten bases de datos de estilo de documentos. Un documento es un conjunto de pares clave-valor, no un solo par de clave y valor, es decir, es un conjunto o colección de ellos juntos lo que llamamos documento.

Múltiples documentos, los podemos considerar registros, y se denominan colecciones. Y a su vez esos se almacenan en tablas. Por lo tanto, los documentos almacenados se pueden almacenar como XML, JSON o BSON. BSON es simplemente una versión binaria de un archivo de texto JSON. El tipo de valor-clave de las bases de datos NoSQL es mucho más simple, y eso vendría en forma específicamente de DynamoDB como una opción dentro de Amazon Web Services. Es un par simple clave-valor, el operativo o palabra clave aquí es único, mientras que con una base de datos basada en documentos, sería un conjunto de pares clave-valor.

DocumentDB y DynamoDB


Para acceder a Document DB

Consola → Amazon DocumentDB → pulsamos botón create

Para desplegar Dynamo

Consola  → DynamoDB → create table



sábado, 14 de noviembre de 2020

Crear un set de pruebas para Machine Learning

En teoría es simple, consiste en tomar algunos registros aleatoriamente de nuestros datos. Típicamente un 20% de nuestro set de datos, o menos incluso si tenemos muchos datos.
El objeto Datos es el set de datos creado en el post anterior con los datos de nuestro archivo csv retiro.csv.

set de pruebas para Machine Learning


import numpy as np

# Para enseñanza solo NO UTILIZAR EN CASOS REALES. Sklearn tiene su propia definición de train_test_split()
def split_train_test(datos, test_ratio):
    shuffled_indices = np.random.permutation(len(datos))
    test_set_size = int(len(datos) * test_ratio)
    test_indices = shuffled_indices[:test_set_size]
    train_indices = shuffled_indices[test_set_size:]
    return datos.iloc[train_indices], datos.iloc[test_indices]


Utilizamos esta función para crear nuestro set de datos con el 20% de ellos

train_set, test_set = split_train_test(datos, 0.2)
len(train_set)

Para elegir un set de pruebas en función del Id de una columna podemos utilizar esta función.

from zlib import crc32

def test_set_check(identifier, test_ratio):
    return crc32(np.int64(identifier)) & 0xffffffff < test_ratio * 2**32

def split_train_test_by_id(datos, test_ratio, id_column):
    ids = datos[id_column]
    in_test_set = ids.apply(lambda id_: test_set_check(id_, test_ratio))
    return datos.loc[~in_test_set], datos.loc[in_test_set]

Si nuestro conjunto de datos no dispone de una columna identificadora, podemos utilizar el índice de las filas como ID.

datos_con_id = datos.reset_index()   # añade una columa de índice
train_set, test_set = split_train_test_by_id(datos_con_id, 0.2, "index")

Si vamos a utilizar este índice como identificador único de nuestro conjunto de datos, debemos asegurarnos de que los nuevos datos sean añadidos siempre al final de nuestro conjunto de datos y no debemos eliminar ninguna fila de este conjunto. Si esto no fuera posible debemos utilizar una columna con las características más estables posibles para construir un identificador único. Por ejemplo en nuestro conjunto de datos, el año es la ideal.

datos_con_id["id"] = datos["Año"]
train_set, test_set = split_train_test_by_id(datos_con_id, 0.2, "id")
test_set.head()

Scikit-Learn provee varias funciones para cortar sets de datos, la más simple es  train_test_split() Se le pasa como parámetro el set de datos, el tamaño del test y la semilla aleatoria.

from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(datos, test_size=0.2, random_state=42)
test_set.head()

Si estamos encuestando gente por teléfono, es mala idea llamar a la gente de una página de la guía telefónica, pues seguramente viva todos en la misma ciudad o el mismo barrio, para ello interesa seguir un patrón más aleatorio que sea representativo de cada estrato social. Para ello existe una función llamada StratifiedShuffleSplit que nos permite obtener diferentes sets de datos de diferentes estratos de los datos.

from sklearn.model_selection import StratifiedShuffleSplit

split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in split.split(datos, datos["FEB"]):
    strat_train_set = datos.loc[train_index]
    strat_test_set = datos.loc[test_index]

Para ver las diferentes proporciones de cada categoría en nuestro set de datos podemos hacer

strat_test_set["FEB"].value_counts() / len(strat_test_set)

Estas funciones no funcionarán con un set de datos pequeño, pues necesitan datos suficientes para ser operativas.

Aquí se puede ver otro ejemplo de conjunto de datos

sábado, 7 de noviembre de 2020

AWS in a nutshell 5: Procesamiento y análisis de datos

 5.1 Transcodificador de Amazon Elastic

El servicio de transcodificador elástico en AWS 

tiene que ver con el procesamiento de vídeo en la nube. Básicamente, es la manipulación en origen de archivos multimedia para dar como resultado algún tipo de archivo multimedia de salida diferente. Esto  permite la reproducción de medios en una amplia variedad de dispositivos donde podríamos modificar el tamaño, el tipo o formato de archivo de los medios, y también la calidad en términos de audio y vídeo. Hay muchos tipos diferentes de formatos de destino que podemos usar con Elastic Transcoder. Algunos de los cuales incluyen MP4, audio FLAC, GIF animados, MP3, audio y vídeo H.264 y muchos otros formatos. Para trabajar con Elastic Transcoder, necesitamos una canalización de transcodificación y también necesitamos dos cubos 

Podemos acceder desde la consola de AWS tecleando Elastic transcoder → create a New Pipeline 

Finalmente damos al botón Create Pipeline y Create New Job 

5.2 Amazon Kinesis

Amazon Kinesis  es un servicio de análisis en la nube en tiempo real. Está diseñado para traer datos en tiempo real, por lo que el procesamiento del flujo de datos y con la recopilación y el análisis de datos en tiempo real, tenemos la capacidad de permitir que los tomadores de decisiones estén informados más rápidamente para tomar buenas decisiones. Estos datos pueden provenir de muchas fuentes diferentes, incluidas las fuentes de redes sociales, transacciones financieras o podría ser el resultado de datos de clics de un sitio web. Según dónde hacen clic los usuarios y qué visitan cuando están en un sitio web determinado.

Accedemos desde Consola de AWS  → Kinesis → Get started -> Create Data Stream

Amazon Kinesis

 5.3 Clústeres de Elastic MapReduce

Los clústeres de Elastic MapReduce  son colecciones de instancias de Linux. Estos no aparecerán si vamos a la consola EC2. Pero son instancias EC2 de Linux a las que podemos acceder mediante SSH, si necesitamos administrarlas.

El clúster para la reducción de mapas elásticos es útil para el análisis de grandes cantidades  datos, big data. 

Accedemos desde 

Consola AWS  → EMR → Create Cluster

Elastic MapReduce

5.4 Amazon Rekognition

Amazon Rekognition,   tiene que ver con el análisis facial en imágenes y videos, y hay beneficios obvios para las fuerzas del orden y la seguridad aeroportuaria. Pero también desde la perspectiva del marketing, tal vez determinar las emociones de las personas en función de las imágenes cargadas.


Amazon Rekognition

Consola → Amazon Rekognition

Amazon Rekognition


5.5 Amazon Elasticsearch

Como su nombre lo indica, Amazon Elasticsearch  es un mecanismo de búsqueda en la nube donde los desarrolladores pueden realizar llamadas a la API. Por ejemplo, usando Node JS o usando el comando Linux Curl que está integrado en Mac OS y Linux para cargar archivos en un dominio Elasticsearch, cargamos archivos y se indexan para que el resultado se pueda buscar, Por ejemplo, utilizando la herramienta curl integrada de Linux.  También podemos descargarlos y ejecutarlos en Windows utilizando un verbo de puerto HTTP. Ahora, lo que sucede es que la indexación da como resultado un documento JSON. 

Consola → Elasticsearch Service → create a new Domain

Amazon Elasticsearch


5.6 Amazon Athena

Amazon Athena  es un servicio de consulta de macrodatos. Está diseñado para consultas SQL muy rápidas que podrían usarse para análisis de datos. Los datos de origen pueden provenir de una multitud de fuentes, como S3 o AWS Glue.  AWS Glue es un servicio de AWS administrado que está diseñado para la extracción, transformación y carga de datos en otros servicios. Donde extraer transformar una carga a menudo se denomina ETL. Trabajar con Athena comienza con obtener datos, por ejemplo, en S3, y luego crear una tabla externa en Athena para albergar esos datos para después escribir una consulta en ellos. Hay varios servicios de big data disponibles en AWS.

5.7 QuickSight

Amazon QuickSight   es una herramienta diseñada para analistas comerciales y de análisis de datos que proporciona visualizaciones, una vez que nos hemos registrado para obtener una cuenta, esta es la página de destino de QuickSight. Podemos iniciarlo desde la Consola de administración de AWS simplemente buscando QuickSight.

Consola →  QuickSight

QuickSight