Mostrando entradas con la etiqueta datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta datos. Mostrar todas las entradas

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.


sábado, 9 de octubre de 2021

Privacidad de datos

Uno de los mayores desafíos en el uso de los sistemas informáticos actuales se relaciona con la privacidad de los datos. Y esto se aplicaría a individuos, agencias gubernamentales y organizaciones. Por eso es importante que las organizaciones creen e implementen políticas de seguridad y privacidad. Los usuarios finales deben saber que existen políticas de seguridad. Y cuáles son los procedimientos adecuados en la protección de datos. Pero también, es importante que los usuarios comprendan la relevancia de por qué existen esas políticas de seguridad.

Privacidad de datos
La privacidad de los datos se puede lograr de muchas formas, incluida la seguridad física. Por ejemplo, cerraduras de puertas , ventanas y sistemas de alarma. Además, los controles técnicos de seguridad pueden proteger los datos en forma de cortafuegos, que pueden implementarse en el borde de la red para controlar el tráfico que entra y sale de la red. O firewalls implementados en todos y cada uno de los dispositivos informáticos para controlar el tráfico que entra y sale de esos dispositivos. También tenemos el cifrado y la codificación de datos. De modo que mientras se transmiten los datos, solo el poseedor de la clave de descifrado adecuada podrá ver los datos originales. Lo mismo se aplicaría a los datos en reposo o los datos que se están almacenandos y que deben protegerse de miradas indiscretas. También deberían estar cifrados. Para que las políticas de seguridad sigan siendo relevantes, debemos realizar una revisión periódica de las políticas. Pues las amenazas cambian con el tiempo y también las soluciones tecnológicas y los controles de seguridad existentes implementados para proteger los activos de datos podrían haber funcionado al mismo tiempo, pero podrían volverse cada vez menos efectivos con el tiempo. Es importante que revisemos estas cosas periódicamente para hacer mejoras para reforzar la seguridad. 

Información de identificación personal, o PII

Es cualquier cosa que identifique de forma única a un individuo. Puede ser el nombre, apellido, la dirección postal, el número de seguridad social, el número de la tarjeta de crédito. En cuanto a datos sanitarios, se conocen como información médica protegida o PHI. Esto incluiría los registros médicos de los pacientes, cómo se administró y pagó la atención médica, etc.

HIPAA, la Ley de responsabilidad de portabilidad de seguros médicos de Estados Unidos. Se ocupa de la protección de la PHI, información médica protegida o información médica. PIPEDA es una ley del Parlamento de Canadá. Significa Ley de Protección de Información Personal y Documentos Electrónicos. Y se ocupa de la recopilación y el uso del sector privado de información de identificación personal. GDPR es el Reglamento general de protección de datos 2016/679 de la Unión Europea. Es la recopilación y el uso de PII por parte del sector privado tanto dentro como fuera de la UE.

La Ley de Privacidad de 1988 se refiere a Australia. Una vez más, se trata de la protección de la PII. y es aplicable a agencias gubernamentales y al sector privado.  Estas leyes suelen incluir disposiciones relacionadas con la notificación de violación de datos a los usuarios afectados cuyos datos podrían haber sido comprometidos. PCI DSS no es una ley, son las siglas en inglés de Payment Card Industry Data Security Standard. Su enfoque es la protección de los datos de los titulares de tarjetas de débito y crédito para comercio a través de elementos como cifrado y firewalls, etc. El cifrado está realmente diseñado para proteger datos confidenciales, proporciona confidencialidad. Uno de sus requisitos, llamado 3.4, es el cifrado de los datos del titular de la tarjeta. Con el cifrado, los datos originales se denominan texto sin formato. Una vez que los datos se cifran o codifican, se denominan texto cifrado. 

Encriptado de datos
El texto sin formato se introduce en un algoritmo de cifrado. Un algoritmo de cifrado es realmente una fórmula matemática complicada. El texto sin formato se introduce en un algoritmo de cifrado con una clave y el resultado es texto cifrado. No podremos encontrar sentido a ese texto cifrado a menos que tengamos la clave de descifrado correcta.  

Suele utilizarse un cifrado simétrico esto significa que tenemos una clave única  que se usa para el cifrado y el descifrado. El problema es ¿cómo podemos hacer llegar esa clave de forma segura a través de Internet a todos los usuarios que la necesitan para el cifrado o descifrado? por eso encontraremos a menudo que el cifrado simétrico y asimétrico se utilizan juntos. 

Encriptación simétrica
El cifrado asimétrico, utiliza dos claves relacionadas matemáticamente. La clave pública se puede compartir públicamente con cualquier persona y no hay riesgo de seguridad. Está diseñada para esto. Sin embargo, no ocurre lo mismo con la clave privada. La clave privada debe mantenerse privada para el propietario de la clave. No debería compartirse con nadie. Imaginemos que estamos enviando un mensaje de correo electrónico encriptado a alguien. Para ello necesitamos la clave pública del destinatario. Para  descifrarlo, necesitamos la clave privada relacionada. Aquí es donde entra en juego el cifrado asimétrico. 

Encriptación asimétrica
Al final estamos hablando de privacidad de datos, y un aspecto de esto es cifrar los datos en reposo y los datos que se transmiten a través de una red. 


sábado, 28 de agosto de 2021

Regresión logística y clasificación para Machine Learning IV. Preparación de datos

Estos post están pensados para que el lector realice las pruebas con sus propios Datasets, pues ya estoy harto de seguir ejemplos siguiendo las instrucciones para tratar un dataset previamente descargado de internet con datos que ni entendemos ni nos sirven de mucho. Creo que se aprende mucho más creando tu propio dataset y adaptando las instrucciones a tus necesidades en vez de ejecutar como un robot las instrucciones del script. 

Vamos a crear un modelo de clasificación utilizando los conocimientos que hemos visto sobre regresión logística,

RL1RL2RL3, y scikit-learn.

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

from sklearn import linear_model,  preprocessing

from sklearn.linear_model import LogisticRegression

Estas líneas llaman a las librería que necesitaremos. También vamos a suprimir las advertencias en el notebook, ya que algunas de las bibliotecas dependientes de scikit-learn pueden emitir advertencias.

import warnings

warnings.filterwarnings('ignore')

 import pandas as pd

quinielas = pd.read_csv('Completo_Etiquetado_Puntuado.csv') #tiene goles quiniela y quinigol

quinielas.head()

Regresión logística. Preparación de datos
Una vez que hayamos cargado el conjunto de datos en el DataFrame, podemos mezclarlo haciendo uso de la función de muestra Pandas DataFrame. Y le especificamos una fracción de 1, de modo que se mezcle todo el conjunto de datos.

quinielas = quinielas.sample(frac = 1).reset_index(drop = True)

En nuestro caso no sería necesario hacer esto, pues ya son datos suficientemente aleatorios, pero con otro tipo de dataset puede venir bien hacerlo. Después, verificamos la longitud de este DataFrame en particular y obtenemos la información de que contiene 37147 filas de datos.

len(quinielas)

Si nuestra columna de etiquetas viene como cadena texto, es necesario realizar una codificación nuestro DataFrame.

No podemos usar valores de cadena cuando se introducen en nuestro modelo y debemos convertirlo en etiquetas específicas. Después de importar LabelEncoder, que es una de las herramientas de preprocesamiento de scikit-learn, lo aplicaremos a nuestra columna de etiquetas del DataFrame, usando la función fit_transform de LabelEncoder.

from sklearn.preprocessing import LabelEncoder

lb_make = LabelEncoder()

quinielas["etiqueta"] = lb_make.fit_transform(quinielas["etiqueta"])

En nuestro dataset tampoco es necesario pues todos estos pasos ya se siguieron en este curso pero dejo el código por si alguien lo necesita.

Esto reemplaza los valores actuales usados en la columna de la etiqueta con los valores codificados. 

Este conjunto de datos (dataset) incluye actualmente un total de 16 columnas, incluyendo la etiqueta. Lo que significa que hay 15 características potenciales que se pueden incorporar a nuestro modelo. Si tuviéramos que usar esas 15 columnas como características, esa técnica se denominaría regresión del sumidero de la cocina (kitchen sink regression). Ya que literalmente estamos utilizando todo en nuestro modelo. Sin embargo, estos modelos tienden a sobreajustarse (overfitting) con los datos de entrenamiento. Y terminan haciendo predicciones deficientes cuando se usan con datos reales. Una cosa que podemos hacer para evitar tal escenario es ser selectivos en las características que se utilizan para nuestro modelo. Es decir, realizamos una selección de funciones. Y para eso, usaremos un mapa de calor de Seaborn.

import seaborn as sns

import matplotlib.pyplot as plt

corrmat = quinielas.corr()

f,ax = plt.subplots(figsize = (15,15))

sns.heatmap(corrmat, vmax=.8, square=True, annot=True, fmt='.2f')

plt.show()

Importamos la biblioteca Seaborn y pyplot de matplotlib. Un mapa de calor tiene varios usos. Pero uno de ellos es visualizar la correlación entre varias columnas en nuestro  DataFrame. Si dos columnas están muy fuertemente correlacionadas entre sí, no tiene mucho sentido incluir ambas como características para nuestro modelo. Y probablemente podamos conformarnos con solo una. Para obtener toda la correlación entre las distintas columnas, usamos la función corr de Pandas.

Esto devolverá una matriz de correlación, que incluye los valores de correlación entre todos los posibles pares de columnas en nuestro DataFrame. Después, introducimos esta matriz de correlación en un mapa de calor de Seaborn, lo que nos facilitará la visualización de las correlaciones. Lo que nos permitirá identificar rápidamente qué columnas están fuertemente correlacionadas y potencialmente pueden eliminarse de nuestro conjunto de funciones. Inmediatamente algunas cosas saltan a la vista.

mapa de calor seaborn

Los valores cercanos a 1 nos indicarán que no necesitamos una de esas dos columnas correlacionadas. En el mapa aparecen con tonos más claros en este mapa de calor en particular representan una correlación positiva muy alta, y los más oscuros representan correlaciones negativas muy altas. Después de analizar este mapa de calor, podemos llegar a las características que usaremos para nuestro modelo. Hay que tener en cuenta que la gráfica es simétrica por la diagonal, así que sólo tenemos que fijarnos en la parte inferior o en la superior pero no en ambas. En este caso elegimos la parte inferior. Otra cosa a destacar la he marcado en amarillo. Vemos una fuerte correlación entre los goles metidos por el equipo local cuando son más de 2 y por el visitante cuando se queda a 0, con el número de goles respectivo. Es lógico, las cuatro columnas son etiquetas y no aparecerán cuando pretendamos hacer predicciones. ¡ya quisiéramos saber los goles que va a meter cada equipo antes de hacer una quiniela!.

En este caso concreto lo que nos interesa son los equipos, junto con los puntos de cada equipo, su diferencia y sobre todo la diferencia de puntos normalizada, de cara a predecir el resultado de cada partido.

#quito todas las etiquetas excepto la Q1

#quito todos los puntos y dejo sólo la diferencia normalizada

x_data = quinielas.drop(columns = ['idPartido','temporada','golesLocal','golesVisitante','fecha','QX','Q2','QGC0','QGC1','QGC2','QGCM','QGF0','QGF1','QGF2','QGFM'])

x_data.head()

Así que hemos reducido de 15 columnas potenciales a 10 para rellenar nuestro x_data. Ahora configuramos nuestro y_data para que sea la columna de etiqueta de nuestro DataFrame.

y_data = quinielas ['Q1']

Y lo siguiente que hacemos es convertir los datos x e y en matrices NumPy.

import numpy as np

x_data = np.array(x_data)

y_data = np.array(y_data)

Una vez que se han convertido en matrices NumPy, podemos dividir nuestros datos x e y en conjuntos de prueba y de entrenamiento.

Debemos asegurarnos de que no estemos sobreajustado a los datos de entrenamiento, para lo cual creamos el conjunto de prueba por separado. Y aunque la división se puede realizar de varias maneras, usamos el 80% de los datos para entrenamiento y reservamos el 20% restante para propósitos de prueba. Una vez que nuestro x_data se ha dividido, también debemos aplicar una división correspondiente para y_data.

train_data = x_data[:29718]

test_data = x_data[29718:]

train_labels = y_data [:29718]

test_labels = y_data [29718:]

Dado que nuestro conjunto de datos contiene un total de 37147 filas, nuestros datos de entrenamiento incluyen todas menos las últimas 7429 filas que se convierten en nuestros datos de prueba. Y con eso, todos los datos que necesitamos para construir nuestro modelo de regresión lineal ya están listos.

Clasificación mediante un modelo de regresión logística

Ahora que hemos preparado todos los datos que necesitamos entrenar y evaluar nuestro modelo.

Hemos inicializado nuestro modelo de regresión logística con todos los parámetros predeterminados. Y después comenzamos el entrenamiento de este modelo llamándolo con la función de ajuste.

logisticRegr = LogisticRegression()

Para eso, analizamos todos nuestros datos x, es decir, los datos de entrenamiento, así como las etiquetas de entrenamiento. Esta formación debería ser razonablemente rápida, ya que no tenemos demasiadas filas de datos. Y una vez hecho esto, veremos que  hemos creado nuestro modelo de regresión logística y podemos echar un vistazo a todos los parámetros predeterminados para este modelo.

logisticRegr.fit(train_data, train_labels)

Entonces, ¿es correcto este modelo de regresión logística? solo hay una

forma de averiguarlo, y es usar test_data para obtener las predicciones.

predictions = logisticRegr.predict(test_data)

Para esto, hacemos uso de la función de predicción del modelo de regresión logística, a la que pasamos el test_data y obtenemos las predicciones. Podemos comparar los valores en estas predicciones con los valores reales y calcular una puntuación de precisión  nosotros mismos. O alternativamente, podemos hacer uso de la característica de puntuación de este modelo de regresión logística.

score = logisticRegr.score(test_data, test_labels)

print(score)

Clasificación mediante un modelo de regresión logística
Para esto, alimentamos test_data y test_labels. Esto calculará las predicciones usando test_data y nuestro modelo de regresión logística y luego las comparará con test_labels para dar una puntuación de precisión. Y aquí vemos que nuestro modelo de regresión logística ha funcionado razonablemente bien, incluso con los parámetros predeterminados al obtener una puntuación de precisión del 50%. Lo que pone de manifiesto que se trata de datos estrictamente aleatorios.


sábado, 28 de septiembre de 2019

Modelado de datos

Un modelo de datos es una representación de la información consumida y producida por un sistema. El modelado de datos implica analizar los objetos de datos presentes en un sistema y las relaciones entre ellos. Los modelos de datos pueden ser conceptuales, lógicos y físicos y permiten analizar y modelar un sistema en todos los niveles de abstracción.

Modelo conceptual de datos 


Un Modelo Conceptual de Datos (CDM) representa la estructura lógica de un dato independientemente de cualquier software o estructura de almacenamiento de datos. Proporciona una representación formal de los datos necesarios para dirigir una empresa o negocio. Puede contener objetos de datos que aún no están implementados en una base de datos.

Modelado de Datos
Minifiguras trabajando en equipo.

sábado, 31 de octubre de 2015

Arquitectura física de SQL Server

arquitectura SQL Server
Imagen tomada de www.enter.co

Intoducción

En entornos corporativos con mainframes, comunes hace unos años, el establecimiento de un sistema de base de datos era un acontecimiento en el que no se podía dejar nada a la improvisación. La inversión corporativa en bases de datos, tanto a nivel de hardware, software como de recursos de administrador de bases de datos requería que los detalles de la aplicación se conociesen perfectamente de antemano.
En la actualidad, las aplicaciones de bases de datos evolucionan rápidamente y las inercias se reducen, con la rapidez en el desarrollo e implantación que eso conlleva. Por ello, es necesario que el gestor de bases de datos se encargue  cada vez más de tareas rutinarias, presentando a los usuarios y al administrador una mayor simplicidad, al mismo tiempo que les dota de los mecanismos para poder modificar y extender las características de las aplicación de base de datos mientras ésta se halla en producción.
SQL Server es un potente gestor de bases de bases de datos que cumple estos requisitos necesarios para poder gestionar de forma sencilla bases de datos con grandes volúmenes de información.