sábado, 20 de noviembre de 2021

Crear un diagrama de relación entre entidades

En esta demostración, veremos una herramienta que nos ayudará a crear un diagrama de relación de entidades, o ERD, para planificar la estructura de la base de datos. La herramienta se encuentra en el enlace https://www.visual-paradigm.com en un navegador, vamos a este sitio web donde hacemos clic en el enlace Download para descargar una prueba gratuita de 30 días. Entramos en la interfaz de Visual Paradigm, donde las pestañas de la parte superior identifican diferentes categorías de diagramas que podríamos querer crear con esta herramienta. Por ejemplo, ERD, que son diagramas de relación de entidades. Aunque si nos desplazamos hacia abajo, también tenemos otras opciones disponibles enumeradas a la derecha.  Hacemos  clic en la opción ERD. Aparece una nueva ventana con el encabezado Diagrama de relaciones entre entidades. 



Crear un diagrama de relación entre entidades
Tiene las siguientes opciones: En blanco, Álbum de fotos en línea, Alquiler de películas, etc. En la parte inferior están los botones, Next y Cancel. Podemos construir un diagrama de relación de entidades en blanco, o elegir una de las plantillas preexistentes, por ejemplo, si nos desplazamos hacia abajo, podemos elegir Bookstore Online. Podemos utilizar esta plantilla porque solo deseamos modificarla, y eso puede ser más rápido que construirla desde cero. La seleccionamos y hacemos clic en Siguiente. Le ponemos un nombre, y aceptamos. hacemos clic en el botón Next. Se abre el diagrama de tablas de la librería en línea. 

Crear un diagrama de relación entre entidades


Tiene las siguientes opciones en el panel de navegación: Cursor, Stored Procedures (Procedimientos almacenados), Triggers (Disparadores), etc. En el centro hay un diagrama de flujo de varias entidades como: Author, Book, Publisher, etc. Book está conectado al  Publisher,  Author, ShoppingBasket_Book y Warehouse_Book. Warehouse_Book está conectado a Warehouse. ShoppingBasket_Book está conectado a ShoppingBasket y ShoppingBasket está conectado al Customer. Podemos ver las diversas entidades. Esto sirve para diseñar la estructura de una base de datos, donde cada una de estas entidades, como las llamamos, representan una tabla de base de datos. Y dentro de cada una de ella, tenemos varias columnas. En el ejemplo de Publisher aquí, la tabla Publisher, tiene una columna Name que se define como  Primary Key (clave principal). Podemos verlo porque tiene una llave dorada. 


Crear un diagrama de relación entre entidades : Primary Key
Todo lo que debemos hacer para configurarlo es hacer clic derecho sobre el campo y luego incluir el campo en la clave principal. 

En el diagrama tenemos varias entidades o tablas. Esto define una estructura de base de datos. Por ejemplo, en la tabla Publisher, tiene una serie de columnas como Name, Adress, Telephone, URL.  Podemos realizar cambios en cualquiera de estos elementos. Por ejemplo, si hacemos doble clic en el nombre de una tabla en la parte superior, la selecciona y podemos escribir un nombre nuevo. 

Crear un diagrama de relación entre entidades: Modificar una tabla

Crear un diagrama de relación entre entidades: Modificar un campo


Lo mismo ocurre con una columna. Podemos cambiar lo que queramos. Por ejemplo, podría hacer clic con el botón derecho y escribir un nombre que deseemos. Cuando hacemos clic con el botón derecho en una columna, si elegimos Open Specification podemos determinar el tipo de datos de la lista desplegable Type. 

También podemos agregar nuevos elementos. Y también si estamos construyendo un diagrama de relación de entidades desde cero, podemos hacer clic con el botón derecho y hacer todo manualmente. Si hacemos clic derecho sobre una parte vacía del diagrama, y elegimos add Shape y luego Entity. De modo que se crea una nueva entidad (futura tabla de una base de datos)  

Crear un diagrama de relación entre entidades: Añadir nueva tabla


Una vez creada la tabla podemos definir columnas las columnas, si hacemos clic derecho dentro de esa tabla, podemos elegir New Column. 

Crear un diagrama de relación entre entidades: Nueva columna

Si hacemos clic derecho sobre la columna y elegimos Open Specification sale una lista desplegable donde podemos elegir por ejemplo el tipo de datos de la columna. 

Crear un diagrama de relación entre entidades: Nueva columna

Crear un diagrama de relación entre entidades: Incluir primary key

Crear un diagrama de relación entre entidades: Primary Key

También podemos hacer clic derecho sobre él y configurarlo como clave principal. 

Incluso tenemos la opción, de vincular estas columnas para establecer una relación. Por ejemplo, si colocamos el cursor sobre una tabla existente como Publisher. 

Crear un diagrama de relación entre entidades: Relaciones entre tablas


Contiene un icono que podemos usarlo para arrastrar una línea a la otra tabla. Y determinar si existe una relación de uno a uno con las filas de cada una de esas tablas, o de uno a muchos. Digamos que es uno a muchos.  Aparece una ventana emergente con 4 opciones de iconos de vinculación como: Relación uno a uno, Relación uno a muchos, etc. Hacemos clic en el icono que nos interese (en este caso Relación uno a muchos) y  aparece una ventana de especificación de relación. 

Crear un diagrama de relación entre entidades: Relaciones entre tablas


Tiene dos pestañas: Foreign Key Column Mapping (Asignación de columna de clave externa)  y General, donde se selecciona Asignación de columna de clave externa. Ahora, determinamos las columnas específicas que queremos vincular. Debajo en el combo se nos muestra la lista de columnas que podemos vincular con la clave principal en la tabla de Publisher, y podemos determinar a qué columna queremos  vincular nuestra tabla.

Podemos continuar con esto en el diseño de la estructura para nuestro almacenamiento de datos, y esto es parte de la arquitectura de datos. Hay muchas otras herramientas que hacen esto además de Visual Paradigm.

Si vamos al menú Herramientas en la parte superior y luego elegimos DB para base de datos. Y luego elegimos Configuración de la base de datos, podemos decirle que queremos hacer una conexión a un tipo específico de base de datos.

Crear un diagrama de relación entre entidades: Elegir base de datos

Crear un diagrama de relación entre entidades: Elegir base de datos


Hacemos clic en la opción Configuración de base de datos. Y sale un menú desplegable con el lenguaje de programación, en este caso está seleccionado Java y aparece una ventana que muestra: la Versión, el Driver, User, Engine, etc. y los botones de  Importar, (Import)  Exportar /Export), en la parte inferior.

Digamos que elegimos .NET como idioma, y Microsoft SQL Server. Podemos especificar el nombre del host. Así que la identidad de ese servidor a través de la red con un nombre de usuario y contraseña y prueba la conexión. 

Crear un diagrama de relación entre entidades: Probar la conexión

A la derecha está la Configuración de la base de datos con varias opciones. Nombre de la base de datos, nombre de usuario y contraseña. Justo debajo, hay un botón llamado Probar conexión. (test Connection) Nos encontraremos con muchas de estas herramientas no solo nos permitirán diagramar la relación entre nuestras entidades, las tablas de nuestra base de datos. En realidad, crearemos un sistema de base de datos dado, ya sea MySQL, Microsoft SQL Server, Oracle, DB2, etc. Por lo tanto, es importante tener una herramienta para realizar varios tipos de planificación de la arquitectura de datos en la empresa. 


sábado, 13 de noviembre de 2021

Construyendo redes neuronales

Vamos a construir una red neuronal usando Python y Keras para clasificación con TensorFlow como backend. Keras es una biblioteca de Python poderosa y simplificada que podemos usar para construir redes neuronales y redes de aprendizaje profundo.

La primera tarea es importar todas las bibliotecas necesarias para TensorFlow y Keras. En la primera celda de código, especificamos las declaraciones para importar todas las bibliotecas necesarias para crear un entorno de TensorFlow.

from __future__ import absolute_import, division, print_function, unicode_literals

# TensorFlow y Keras

import tensorflow as tf

from tensorflow import keras

También necesitaremos algunas bibliotecas auxiliares. Importamos numpy  y matplotlib. La tarea final consiste en imprimir la versión de TensorFlow para la que hemos especificado la versión de impresión en la última línea de la celda de código.

#librerías de ayuda

import numpy as np

import matplotlib.pyplot as plt

print(tf.__version__)

Al ejecutar esta celda, la última línea nos devuelve la versión de TensorFlow que tenemos instalada

La siguiente tarea será cargar los datos para construir el modelo de red neuronal. Keras proporciona varios conjuntos de datos que podemos utilizar para construir un modelo de red neuronal. Utilizaremos un conjunto de datos llamado fashion_mnist, que contiene varias imágenes que se pueden clasificar en diferentes tipos.

dataset_mnist = keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = dataset_mnist.load_data()

Para acceder al conjunto de datos fashion_mnist, declaramos una variable en la primera línea llamada dataset_mnist y le asignamos keras.datasets.fashion_mnist para cargar los datos en dicha variable. Los datos que estamos cargando ya están etiquetados, para el conjunto de entrenamiento, contamos con train_images y train_labels.

Y para el conjunto de prueba, se proporcionan test_images y test_labels. Para generar estos dos conjuntos diferentes de datos de prueba y de entrenamiento, llamamos a la función load_data. 

 

Construyendo redes neuronales

La siguiente tarea consiste en definir varios tipos de clases. Hay varios tipos de clases que se pueden encontrar en el conjunto de datos fashion_mnist.

class_types = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

Hay diez etiquetas diferentes que se almacenarán en una matriz NumPy donde la primera etiqueta es asignada al número 0 y los números apuntarán a clases particulares. Por ejemplo, la etiqueta de la camiseta / top, 'T-shirt/top' será 0. La etiqueta para los pantalones 'Trouser' será 1 y así sucesivamente.

Al ejecutar la celda, se han definen los class_types. A continuación exploraremos los datos y el formato de los datos que usaremos para entrenar la red neuronal nuestro conjunto de entrenamiento.

train_images.shape

Si ejecutamos esta instrucción,  nos muestra el número de imágenes y la forma de estas. Indica que hay 60.000 imágenes y el tamaño de cada imagen es de 28 por 28 píxeles. 

len(train_labels)

Cuando ejecutamos la instrucción len(train_labels), la salida indica que hay 60.000 etiquetas en el conjunto de entrenamiento actual. Exploraremos las etiquetas en el conjunto de entrenamiento, que debería ser un número entero dentro de un rango particular. 

train_labels

Al ejecutar esta línea, se muestra el siguiente resultado: 

array([9, 0, 0, ..., 3, 0, 5], dtype = uint8

Esta matriz representa las etiquetas que están dentro del rango de 0 y 9. 

Para ver el número de imágenes y su dimensión en el conjunto de datos de prueba, ejecutaremos.

test_images.shape

Después de la ejecución, se muestra el siguiente resultado: (10000, 28, 28). Que indica que hay 10.000 imágenes y el tamaño de cada imagen es de 28 por 28 píxeles. 

Ahora vamos a preprocesar los datos de las imágenes. Para ello utilizaremos  plt, que es un objeto de Matplotlib que importamos anteriormente.

plt.figure()

plt.imshow(train_images[0])

plt.colorbar()

plt.grid(False)

plt.show()

Queremos inspeccionar la primera imagen y, para ello, hemos especificado las declaraciones plt.figure y plt.imshow. A la que le estamos pasando el índice 0 para obtener la primera imagen del conjunto de entrenamiento. 

 

Red neuronal con MNIST

Tras la ejecución, se nos proporciona la primera imagen, pero no se escala correctamente. Así que la siguiente tarea consistirá en escalar la imagen. 

train_images = train_images /  255

test_images = test_images /  255

Hacemos lo mismo con test_images, para asegurarnos de que estamos escalando correctamente el valor de las imágenes de entrenamiento y las imágenes de prueba antes de que se envíen a la red neuronal. Las imágenes de entrenamiento de prueba se factorizarán en 255. 

Ahora verificamos los datos, para ello, trazamos ciertos rangos de los datos, y usamos un tamaño de figura de 10 por 10.  Y especificamos xticks e yticks, que representan el eje x y eje y.

plt.figure(figsize=(10,10))

for i in range(25):

    plt.subplot(5,5,i+1)

    plt.xticks([ ])

    plt.yticks([ ])

    plt.grid(False)

    plt.imshow(train_images[i], cmap=plt.cm.binary)

    plt.xlabel(class_types[train_labels[i]])

    plt.show()

La declaración plt.imshow mostrará las imágenes. Después de extraerlas de  train_images, la instrucción que tiene justo debajo garantiza que las imágenes estén etiquetadas con los tipos de clase adecuados.

 

Redes neuronales con Keras

Podemos observar que cada una de las imágenes están etiquetadas con sus respectivos tipos de clases. Habiendo explorado los datos, la siguiente tarea es construir el modelo de red neuronal. Para construir el modelo, primero configuraremos la etiqueta del modelo y luego compilaremos el modelo.

model = keras.Sequential([

     keras.layers.Flatten(input_shape=(28, 28)),

     keras.layers.Dense(128, activation=tf.nn.relu),

     keras.layers.Dense(10, activation=tf.nn.softmax)

 ])

Hemos especificado el modelo utilizando la declaración model = keras.Sequential.  Y hemos agregado tres capas diferentes, la primera capa es la capa de entrada. La segunda capa es la capa oculta y la tercera capa es la capa de salida.

En la capa de entrada, estamos usando la función Aplanar (Flatten), a la que le estamos pasando el tamaño de entrada como 28 por 28, que es el tamaño real de la imagen. En la capa oculta, estamos usando la función Dense, a la que le estamos pasando un 128 como el número de nodos o neuronas, seguido de la función de activación relu. Finalmente, en la capa de salida estamos usando la función Dense y estamos pasando el valor del nodo como 10 seguido de la función de activación softmax. 

La tarea final es compilar el modelo. Tenemos que compilar y configurar el modelo con ciertas configuraciones importantes antes de que el modelo esté listo para entrenarlo. 

model.compile(optimizer='adam',

    loss='sparse_categorical_crossentropy',

    metrics=['accuracy'])

La primera parte contiene el optimizador, que indica cómo se actualiza el modelo en función de los datos proporcionados y la función de pérdida aplicada. La función de pérdida es la medida de precisión que generalmente está involucrada durante el proceso de entrenamiento.

La función de pérdida que hemos especificado es sparse_categorical_crossentropy. Las métricas, son el elemento de configuración final, se utilizan para especificar el aspecto de monitoreo de los pasos o procesos de capacitación y prueba. La métrica que hemos especificado es la precisión:  accuracy.  

Hemos construido y compilado nuestro modelo con éxito, y podemos comenzar a usar la red neuronal para entrenar. Hay una última línea que entrena el modelo.

model.fit(train_images, train_labels, epochs = 5)

 

Redes neuronales Keras con Python


sábado, 6 de noviembre de 2021

SQL frente a NoSQL

No se puede hablar sobre arquitectura de datos sin estudiar el almacenamiento de datos, ya sean archivos almacenados en el sistema de archivos o elementos almacenados dentro de una tabla de base de datos. Un sistema de base de datos compatible con SQL o lenguaje de consulta estructurado es un sistema de base de datos relacional. Incluye productos como Oracle SQL, Microsoft SQL Server o MySQL. Estos productos se pueden implementar en las instalaciones, pero también podemos implementarlos en una nube pública, donde no tenemos que preocuparnos por el hardware, el almacenamiento o la adquisición del software. 

SQL frente a NoSQL

SQL 

En un sistema de base de datos relacional, la razón por la que se llama relacional es porque podemos relacionar o vincular tablas. lo hacemos usando lo que se llaman claves externas. Por ejemplo, si tenemos una tabla Cliente y Transacciones, donde almacenamos información del cliente y almacenamos, digamos, artículos comprados, respectivamente. Para mantener un vínculo entre esas dos tablas separadas, lo que podemos hacer es usar una columna en ambas. Cada una de ellas tendría una columna de identificación de cliente única. Para que podamos establecer una relación entre los clientes y sus transacciones. Con un tipo de base de datos SQL, cada tabla, fila o registro almacena el mismo tipo de datos, como el nombre del cliente, número de teléfono, dirección de correo electrónico, dirección postal, etc.  Eso sería igual para cada fila o para cada cliente. Esto se llama esquema estructurado, donde el esquema es simplemente el plano que definimos, qué se almacenará y cómo se almacenará en el entorno de base de datos compatible con SQL. 

Las bases de datos SQL normalmente aprovechan el escalado vertical. Es decir, si necesitamos aumentar la potencia en la máquina donde está alojada la base de datos,  ya sea una máquina física o virtual, aumentamos la cantidad de RAM cuando escalamos,  o aumentamos la cantidad de CPU o el tipo de CPU a algo más rápido. O bien aumentando las IOPS del disco, (operaciones de entradas y salidas por segundo), lo que aumenta el rendimiento del disco. Estamos ampliando la escala. Reducir la escala significa que está disminuyendo la cantidad de potencia, tal vez reduciendo la cantidad de RAM o reduciendo la cantidad de núcleos de CPU disponibles para fines informáticos. 

NoSQL

NoSQL está diseñado para escalabilidad a gran escala. Por tanto, está diseñado para procesar macrodatos (Big Data). Ejemplos de productos que son NoSQL son MongoDB, IBM Domino, Redis, etc. A diferencia de una base de datos SQL, En NoSQL cada fila o registro de datos puede almacenar tipos de datos completamente diferentes. NoSQL utiliza un esquema semi o no estructurado. A diferencia de las bases de datos compatibles con SQL que usan un esquema o plano rígido o fijo de lo que se va a almacenar, ese no es el caso con NoSQL. Por eso escala tan bien. Podemos almacenar métricas de dispositivos de IoT, publicaciones en redes sociales, archivos de audio y video. Todas esas cosas se almacenan de manera muy diferente, tienen diferentes tipos de formatos, pero eso es exactamente para lo que está diseñado NoSQL. Y así, En este caso la  escalabilidad, se denomina horizontal.

Que es el escalado se utiliza más a menudo con NoSQL. Escalado horizontal significa que estamos agregando múltiples nodos de cómputo para manejar la carga de trabajo para un mejor rendimiento o para el procesamiento en paralelo de grandes conjuntos de datos.  Puede implementarse mediante la agrupación en clústeres, donde tenemos un montón de máquinas trabajando juntas para ofrecer el mismo servicio. O mediante el equilibrio de carga, de modo que si un servidor deja de funcionar, los usuarios son dirigidos a otro servidor que permanece en ejecución. Todos los servidores siempre ejecutan lo mismo al mismo tiempo. También podríamos utilizar la replicación en varios servidores para poder tener varias copias para la disponibilidad de datos.


sábado, 30 de octubre de 2021

Algoritmos evolutivos y descenso de gradiente

 En esta entrada veremos el concepto y las características de los algoritmos evolutivos, los algoritmos genéticos y el descenso de gradiente.

El objetivo de implementar redes neuronales es lograr un aprendizaje optimizado de los modelos informáticos. La informática evolutiva es un grupo de algoritmos destinados a la optimización. Y están fuertemente inspirados por la evolución biológica. La idea fundamental detrás de la computación evolutiva es impulsar un conjunto de soluciones que se generen y actualicen de forma iterativa. Hay tres algoritmos esenciales que evolucionaron a partir de propiedades matemáticas y genéticas. Y comparten algunas características comunes que se derivan de la computación evolutiva. El primero es el algoritmo evolutivo, el segundo es el algoritmo genético y el tercero es el gradiente de descenso. El algoritmo evolutivo es esencialmente un algoritmo de optimización genérico basado en poblaciones, se utiliza de forma destacada para realizar aproximaciones de soluciones para los problemas identificados o dados. El algoritmo genético se considera uno de los algoritmos evolutivos más populares, que generalmente se usa para problemas de optimización, está inspirado en los principios biológicos de recombinación y mutación. El algoritmo de descenso de gradiente, es otro algoritmo de optimización esencial que se utiliza de forma destacada para minimizar las funciones de coste y actualizar los parámetros de los modelos de redes neuronales. Los parámetros pueden ser coeficientes para regresión lineal o pesos para redes neuronales. 

 

Algoritmos evolutivos y descenso de gradiente

Algoritmos evolutivos

Se considera un subconjunto de la computación evolutiva. Se implementan en sistemas informáticos y resuelven problemas incorporando las técnicas de algoritmo evolutivo, evolución diferencial, algoritmo genético y búsqueda. El algoritmo evolutivo utiliza ciertos mecanismos que se inspiran en la evolución biológica. La evolución biológica se refiere a cualquier cambio genético en una población que se hereda durante varias generaciones. 

La imagen muestra el diagrama de flujo que involucra la implementación de algoritmos evolutivos. La implementación es un proceso iterativo y comenzamos generando la población inicial. Después de haber generado la población inicial, calcularemos los valores de aptitud.

 

Algoritmos evolutivos

Si hemos alcanzado la condición de optimización o el umbral de aptitud, finalizamos el proceso. De lo contrario, generaremos una nueva población, calcularemos la aptitud y evaluaremos hasta que hayamos alcanzado el umbral de valor de aptitud óptima o la condición de optimización. 

Algoritmos genéticos

Se inspiran en el proceso de selección natural. Con la implementación de este algoritmo, seleccionamos una parte de la población existente de generaciones sucesivas para crear una nueva generación y luego aplicamos procesos basados en la aptitud.

Los algoritmos genéticos se utilizan para generar soluciones de alta calidad para manejar y gestionar problemas de optimización y búsqueda. Las soluciones se construyen utilizando funciones de aptitud que se definen sobre representaciones genéticas, lo que a su vez proporciona la capacidad de medir la calidad de las soluciones generadas. El algoritmo genético se basa en la teoría de la evolución propuesta por Charles Darwin. Un enfoque científico que explica y predice fenómenos que ocurren naturalmente en base a observaciones y experimentación.

 

Algoritmos genéticos

La figura muestra el diagrama de flujo de la implementación de algoritmos genéticos. El proceso comienza con el muestreo de la población inicial. Después se aplica el proceso de selección, mejoramiento, cruce y transformación para generar una nueva población. Todo el proceso se repite hasta que hayamos obtenido una población correctamente ajustada.

Descenso de gradiente

Es otro algoritmo esencial que se utiliza con frecuencia en el aprendizaje automático y el aprendizaje profundo para optimizar los modelos. Es un algoritmo de optimización iterativo de primer orden que podemos usar para encontrar el mínimo de una función. El descenso de gradiente se puede implementar de forma iterativa para identificar los parámetros óptimos para los modelos. Se implementa ampliamente para derivar el mínimo local de una función y también se utiliza para entrenar redes neuronales.

Para optimizar los modelos y derivar el mínimo local de una función, el descenso de gradiente utiliza tres parámetros importantes. Estos parámetros incluyen ponderaciones, sesgos y función de costos. Para mejorar un conjunto dado de ponderaciones, obtenemos el valor de la función de costo para dichas ponderaciones y calculamos el gradiente. Después nos movemos en una dirección que reduzca la función de costo, Comenzamos inicializando los pesos al azar, luego calculamos el gradiente de la función de costo con respecto a los parámetros. Esto se hace mediante diferenciación parcial. Pues el valor del gradiente depende de la entrada, los valores actuales de los parámetros del modelo y de la función de costo. Después, se actualizan los pesos con valores proporcionales a los valores del gradiente.  

E iteramos los primeros tres pasos hasta que los valores de la función de costo dejen de reducirse. Cuando estamos actualizando los pesos, implica una tasa de aprendizaje. Y esta tasa de aprendizaje determina el tamaño de los pasos que damos para alcanzar un mínimo. Debemos ser cautelosos al definir la tasa de aprendizaje. Una tasa de aprendizaje alta puede superar el mínimo y una tasa de apren


sábado, 23 de octubre de 2021

El ciclo de vida de los datos

Existe un período de tiempo en el que los datos tienen utilidad para una organización, y esto se denomina ciclo de vida de los datos. Se refiere a la vida útil que tienen los datos y está dividido en varias fases diferentes. La gestión de datos debe aplicarse a cada fase,  por lo tanto, debemos asegurarnos de gestionar los datos correctamente desde su inicio, su creación, hasta su eventual desmantelamiento o eliminación. Y a menudo tenemos que hacer esto para el cumplimiento legal y regulatorio. Por supuesto, también debemos asegurarnos de cumplir con las pautas de gestión de la política de datos de la organización. Las políticas de seguridad también dictarán cómo se tratan los datos a lo largo de su vida útil. El ciclo de vida de los datos, que se enumera aquí, comienza con la creación. después, el almacenamiento, uso e intercambio de datos.

El ciclo de vida de los datos

Crear

La creación de datos puede presentarse de muchas formas diferentes. Por ejemplo recopilación de datos. Ya sea a través de formularios on-line o físicos que escaneamos.  Realizando encuestas, métricas para anuncios que pueden rastrear ciertas preferencias de un usuario y luego mostrar los anuncios adecuados. Métricas de dispositivos de IoT que se envían de vuelta a un repositorio central. Incluso las cookies del navegador web se pueden utilizar para recopilar datos sobre las preferencias del usuario y los sitios visitados. Incluso cosas como el escaneo de códigos de barras para fines de control de inventario. Podemos automatizar acciones relacionadas con la creación de datos.

El ciclo de vida de los datos, creación
La clasificación de datos también es importante para organizar los diferentes tipos de datos a los que tenemos acceso. Y también pueden relacionarse con los datos con los que deben archivarse o qué datos deben almacenarse en los medios de almacenamiento más rápidos. También es importante saber que datos necesitan cifrado. Podemos automatizar el cifrado de datos, de modo que a medida que introducimos los datos en la  nube, se cifren automáticamente. También podemos hacerlo localmente encriptando una carpeta de Windows utilizando un sistema de encriptación.

Almacenar

Una de las consideraciones para el almacenamiento es la accesibilidad a los datos. La alta disponibilidad significa que los datos están disponibles cuando se necesitan. Y eso se puede lograr de muchas formas diferentes, como mediante el uso de técnicas de organización de disco, como RAID 1. El nivel 1 de RAID se denomina duplicación de disco. Requiere al menos dos discos, donde todos los datos que se escriben en una partición de disco también se reflejan o se escriben en el segundo disco. Así que siempre tenemos una segunda copia de los datos actualizados. También podríamos habilitar RAID 5, que requiere un mínimo de tres discos, donde tenemos bandas de discos con paridad distribuida. De modo que cuando se escriben datos en la matriz de discos RAID 5, los datos están divididos en trozos más pequeños escritos en esos discos. Tenemos varios discos trabajando juntos como uno. La paridad distribuida significa que la información de recuperación se escribe en una variedad de diferentes discos dentro del sistema RAID 5. Y puede tolerar la falla de un disco.

El ciclo de vida de los datos, almacenamiento
También podríamos proporcionar alta disponibilidad de datos a través de la replicación. Al replicar los datos en otra ubicación, tenemos esos datos disponibles allí. Ahora, la pregunta es ¿Con qué frecuencia estamos replicando datos entre estos diferentes conjuntos de réplicas? El almacenamiento también incluye la clasificación de datos, como comentamos, para organizar nuestros datos. Que también se puede utilizar para asignar permisos a datos clasificados de cierta manera. Y tenemos que pensar en el cifrado de datos que están en reposo o en medios de almacenamiento, utilizando una variedad de algoritmos de cifrado. Es posible que tengamos que usar un tipo específico de algoritmo de cifrado, como AES-256, para cumplir con ciertas regulaciones.

Utilizar

Debemos adherirnos al principio de privilegio mínimo, o PoLP, donde solo se asignan los permisos necesarios para realizar una función de trabajo para el uso de datos, y nada más. También podemos auditar el uso de datos para determinar si se está abusando de los privilegios, si los privilegios se están utilizando correctamente o si necesitamos otorgar o revocar permisos. Solo lo sabremos si auditamos datos a lo largo del tiempo.

El ciclo de vida de los datos, utilizar


También podemos configurar la prevención de pérdida de datos o políticas DLP. Las políticas de DLP generalmente requieren un agente de software en los dispositivos del usuario que monitorea cómo se manejan los datos confidenciales. Y evita que, por ejemplo, se envíe fuera de la empresa a través del uso de las redes sociales o mediante archivos adjuntos de correo electrónico. El uso también incluye resumir datos en informes.

Compartir

Puede ser interna o externamente. Por ejemplo, podríamos tener datos que deben compartirse en un servidor de archivos con acceso controlado a algunos empleados dentro de la organización. O podríamos compartir datos externamente, con datos clasificados como públicos. También podemos controlar nuestro intercambio utilizando las leyes de privacidad de datos como pautas y regulaciones. Las políticas de prevención de pérdida de datos, o DLP, se aplican nuevamente a la fase de uso compartido. Queremos asegurarnos de que estamos compartiendo datos de manera adecuada, solo con las partes que deberían tener acceso a esos datos. Por lo tanto, debemos controlar el intercambio de información confidencial, como información de identificación personal, PII o información médica protegida, PHI.

El ciclo de vida de los datos, compartir
Y nuevamente, eso suele estar bajo el paraguas de las regulaciones que determinan cómo se recopilan, usan y comparten esos datos. Por lo tanto, también podemos limitar la cantidad de custodios de datos, aquellos administradores de datos que tienen acceso a los datos y controlan los permisos. Por lo tanto, la custodia de datos establece permisos sobre los datos de acuerdo con las políticas de seguridad de la organización.

Archivar

Debemos establecer políticas de respaldo de datos. También contamos con políticas de retención de datos que pueden estipular que la copia de seguridad o el archivo de datos a largo plazo se realice en un medio de almacenamiento diferente al de la copia de seguridad de datos normal. Quizás la copia de seguridad de datos regular vaya a la biblioteca de copias de seguridad en cinta de red del área de almacenamiento. Mientras que la retención o el archivo de datos a largo plazo pueden ir a la nube en medios de almacenamiento lentos, ya que no se accede a ellos con frecuencia. También tenemos que determinar si los datos archivados están encriptados o no para su custodia, y eso podría ser requerido por leyes o regulaciones. 

El ciclo de vida de los datos, archivar

La migración de datos a medios de almacenamiento de rendimiento lento puede ser un proceso automatizado. Por lo tanto, podemos implementar políticas que digan, por ejemplo, que queremos mover datos a los que no se ha accedido en 60 días a medios de almacenamiento más lentos. De este modo liberando espacio para un rendimiento más rápido.

Eliminar

Consiste en la eliminación de los datos una vez que han llegado al final de su vida útil los datos deben ser eliminados. Esto tiene que hacerse de acuerdo con las leyes, regulaciones y políticas organizacionales que pueden tener reglas que determinen qué período de tiempo debe transcurrir antes de que los datos se puedan eliminar de forma permanente. Este lapso de tiempo es muy importante. Además, tenemos que considerar cómo se eliminan esos datos. Incluso puede ser necesaria la destrucción física de dispositivos de almacenamiento.

El ciclo de vida de los datos, eliminar
O borrado de datos, utilizando herramientas que evitan que los datos se recuperen, a menudo esto se consigue sobrescribiendo en múltiples pasadas en dispositivos de disco. Además, debemos considerar la posibilidad de borrar datos utilizando algunas herramientas del sistema operativo, o de aplicaciones de terceros, para borrar datos de forma segura.