sábado, 8 de abril de 2023

Importar datos de excel a una tabla oracle

Hay veces que queremos almacenar en una base de datos, los datos que nos pasan o tenemos almacenados en una hoja Excel. En Oracle SQL Developer hay un método para hacerlo automáticamente.

En éste ejemplo crearemos primero una tabla la cual utilizaremos para la importación de los datos.

CREATE TABLE "OWNER"."AUX_TABLA" 

   ( "ID" NUMBER, 

"CAMPO1" VARCHAR2(20 BYTE), 

"CAMPO2" VARCHAR2(20 BYTE), 

"CAMPO3" VARCHAR2(20 BYTE), 

"CAMPO4" VARCHAR2(20 BYTE), 

"CAMPO5" VARCHAR2(20 BYTE)

   ) ;

--------------------------------------------------------

--  Constraints for Table AUX_TABLA

--------------------------------------------------------

  ALTER TABLE "OWNER"."AUX_TABLA" MODIFY ("ID" NOT NULL ENABLE);


Tomamos la hoja de Excel con los datos que vamos a importar (hemos creado tantas columnas en la tabla como en el Excel, además añadimos una columna ID y le ponemos una función que sume de 1 en 1 para tener el ID de las filas.

Importar datos de excel a una tabla oracle


En Sql Developer hacemos click derecho sobre la tabla  y luego en «Importar Datos…».

 

Importar datos de excel a una tabla oracle

 

Seleccionamos el archivo de Excel a importar.

 

Importar datos de excel a una tabla oracle

 Se mostrara el paso 1 del asistente de importación de datos, click en siguiente:

 

Importar datos de excel a una tabla oracle


Hacemos click en siguiente.

 

Selección de las columnas a importar, por defecto se seleccionan todas, click en siguiente:

 

Importar datos de excel a una tabla oracle

 

Definimos la relación de las columnas del origen de los datos (excel) y las columnas de la tabla a la que deseamos importar, por defecto se relacionan en el orden de las columnas del excel y la tabla, debajo podemos ver los datos para asegurarnos que es lo que deseamos importar.

 

Importar datos de excel a una tabla oracle

 Podemos realizarla haciendo click en Terminar.

 

Importar datos de excel a una tabla oracle


con este proceso hemos importado datos de una hoja de excel a una tabla de Oracle.

 

Importar datos de excel a una tabla oracle


 Este proceso también puede realizarse utilizando un archivo CSV.


sábado, 4 de marzo de 2023

Recursos de ayuda y Espacio de trabajo de Toad

Toad Advisor  (Consejero Toad)

Toad se autodiagnostica. Si tenemos problemas, Toad Advisor puede ayudarnos. Ofrece advertencias, alertas y sugerencias sobre el estado actual de nuestra instalación. Si estamos en un entorno administrado, especifica qué funciones de Toad se administran y en qué medida. Para usar Toad Advisor:

Seleccionamos Help -> Toad Advisor

Espacio de trabajo de Toad


 Revisa los resultados, que se dividen en las siguientes categorías:     

Warnings  Describe cosas que deben arreglarse de inmediato 

Alerts Describe cosas que pueden tener un impacto en la funcionalidad de Toad 

Hints Proporciona información sobre la instalación de Toad que pueda afectar cómo funciona la actuación de Toad

Performance suggestions  Describe las configuraciones que podrían cambiarse para mejorar la velocidad de actuación. 

Si seleccionamos un resultado para obtener información adicional en el panel inferior; Haciendo doble click podemos navegar hacia una opción Toad relevante.

 

Recursos de ayuda Toad

Jump Search (Salto de búsqueda)

La función Jump Search nos permite encontrar rápidamente funciones y funcionalidades dentro del interfaz de Toad. Jump Search también nos permite acceso rápido a una gran cantidad de información en línea, para que podamos aprender de otros usuarios y obtener respuestas a sus preguntas rápidamente. 

Toad también salta de los cuadros de diálogo hasta donde aparece el mensaje de error, para que podamos encontrar rápidamente las respuestas. 

Para utilizar la búsqueda con salto escribimos un término de búsqueda en el campo de búsqueda Jump to... en la barra de herramientas principal de Toad. 

Jump To (Toad)
Si tecleamos sobre esta caja cualquier letra, se presenta una lista de categorías entre las que elegir un vínculo de acceso directo, con el número de enlaces y el  encabezado de la categoría. Podemos hacer doble clic en el encabezado para mostrar todos los enlaces disponibles, o para ir la pantalla correspondiente de la función en una ventana en la interfaz de Toad. 

Por ejemplo podemos teclear Code y hacer doble click sobre Code snippets, esto nos llevará a la pantalla de Code Snippets (fragmentos de código). Podemos hacer esto en cada epígrafe y siempre nos llevará a cada pantalla correspondiente.

Si las opciones no existen en las Opciones de Toad, esta categoría no se mostrará en los resultados de la búsqueda. 

Personalizar Toad 

Toad ofrece muchas formas de organizar y personalizar la interfaz para ayudarnos a trabajar más rápido, usar espacios de trabajo, guardar ventanas y conexiones Toad como un espacio de trabajo. Esto nos permite reanudar rápidamente el trabajo después de reiniciar Toad. También nos permite guardar diferentes configuraciones Toad y alternar fácilmente entre ellas. Si no vemos la barra de herramientas del Área de trabajo, hacemos clic con el botón derecho en la barra de herramientas principal para seleccionar Worspaces (Áreas de trabajo) o seleccionamos Restore defaults (Restaurar valores predeterminados). 

 

Customize Toad


Crear un espacio de trabajo 

 - Configurar nuestro diseño de trabajo actual en Toad. 

 - En la barra de herramientas sobre Espacio de trabajo, hacemos clic para nombrar y guardar nuestro espacio de trabajo. 

 

Espacio de trabajo Toad


Nuestras ventanas y conexiones abiertas se guardarán y se restablecerán la próxima vez que abramos este espacio de trabajo. Los componentes que se guardan son: 

Schema browser (Navegador de esquemas) -los objetos de base de datos actualmente activos (tipo y nombre) 

Editor -el contenido de la pestaña, el número de pestañas, la última pestaña activa, la línea de cada pestaña y la posición del símbolo de intercalación, y el modo dividido del Editor 

Otras ventanas -todas las demás ventanas de estilo MDI (interfaz de documentos múltiples), por ejemplo, el Diseñador de automatización, se administran con Workspaces. Ventanas sin MDI, es decir, ventanas ancladas como Project Manager y Team Coding, se retienen en los espacios de trabajo, ya que probablemente representan un trabajo general del estado del escritorio que podamos necesitar en los espacios de trabajo. 

Para realizar cambios en la configuración de nuestro espacio de trabajo: 

1. Realizamos el cambio en el espacio de trabajo. 

2. Hacemos clic en la barra de herramientas de espacio de trabajo.

3. Para mantener el nombre actual, respondemos Sí al mensaje de confirmación. Para guardarlo como nuevo espacio de trabajo, introducimos un nombre para el nuevo espacio de trabajo. Se guardarán las ventanas y conexiones recién abiertas.

Espacio de trabajo Toad


sábado, 18 de febrero de 2023

Cambiar una imagen dependiendo de una variable con JasperReport

Queremos que en función del valor de una variable que nos entra por base de datos, se muestre una imagen u otra diferente.

En este caso en nuestra query tenemos un campo llamado Marca, y dependiendo del valor de este campo, AS, LO, AK o TE deberemos mostrar una imagen diferente.

Para hacer esto colocamos un objeto imagen sobre nuestro informe y pulsamos sobre el icono Expresion de la pestaña Image (ver imagen inferior panel derecho abajo)

diferentes imágenes con JasperReport


Nos abre una pantalla donde le ponemos este código. En este caso MARCA es el campo de la query que traerá el valor a discriminar la imagen.

$F{MARCA}.equals("AS") ? "C:/LOGOS/logo_as.jpg" :  $F{MARCA}.equals("LO") ? "C:/LOGOS/Lo_logo.jpg" :  $F{MARCA}.equals("AK") ? "C:/LOGOS/logo_ak.png" :  $F{MARCA}.equals("TE") ? "C:/LOGOS/Te.jpg":"C:/LOGOS/logo_as.jpg"

imágenes variables en JasperReport
Hecho esto en función del valor que traiga el campo MARCA de la query se mostrará una imagen u otra.

sábado, 4 de febrero de 2023

Clasificador binario sencillo con Machine Learning

 Vamos a repetir este clasificador binario  pero en vez de con matrices de imágenes con un dataset sencillo numérico.

Dado un listado numérico (en este caso precipitaciones de una estación meteorológica) deberemos clasificarlas como año normal, si la precipitación está entre 300 mm anuales y 600 mm anuales y como extraordinario si la precipitación está por encima o por debajo de estos valores.

Si te gusta esta imagen

Hacer esto con Machine Learning es matar moscas a cañonazos, no tiene mucho sentido utilizar ML para clasificar esta serie numérica si supera o no cierto rango. Este tutorial tiene exclusivamente carácter didáctico pues para hacer esto bastaría un programa  tradicional con un simple if valor < 300 or valor > 600 then “extraordinario” else “normal”.



ML no trabaja con cadenas de texto, así que convertiremos ‘NORMAL’ en 0 y ‘EXTRAORDINARIO’ en 1.

El objetivo de hacer esto en ML es simplificar el dataset y utilizar uno simplemente numérico en vez de uno matricial como puede ser el dataset MNIST,  para centrarnos exclusivamente en el proceso de ML y no perdernos en tecnicismos de tratamiento de matrices.

Hay que asegurarse de que nuestro Excel genere los .csv con comas, pues puede estar configurado (sobre todo en castellano) con punto y coma ‘;‘ para no confundirlo con las comas ‘,’  decimales. Para evitar problemas, sustituiremos las comas decimales ‘,’ por puntos ‘.’ Y posteriormente sustituiremos los punto y coma ‘;’ por comas ‘,’ de este modo el intérprete de Jupyter ya leerá correctamente nuestro archivo .csv.

#Es necesaria una versión superior a Python 3.5

import sys

assert sys.version_info >= (3, 5)

 

# Es necesaria una versión de Scikit-Learn superior a ≥0.20

import sklearn

assert sklearn.__version__ >= "0.20"

 

# importaciones communes

import numpy as np

import os

 

# para hacer que la salida de este código sea estable en todas las ejecuciones

np.random.seed(42)

 

Ahora cargamos nuestrodataset, en este caso hemos creado un simple fichero .csv con un Excel en el que hemos puesto datos aleatorios y los hemos etiquetado como normal o extraordinario según los requisitos establecidos.

import warnings

warnings.filterwarnings('ignore')

Importamos la biblioteca pandas que utilizaremos para cargar los datos de un archivo CSV en un Dataset de pandas. Para que pueda leerlo el fichero debe colocarse en el raíz de nuestro proyecto, en este caso C:\Users\MI_NOMBRE\VE_TENSOR_FLOW. Para evitar errores no poner caracteres acentuados en los nombres de las columnas del csv.

import pandas as pd

caracter_precipitaciones = pd.read_csv(Caracter_Precipitaciones.csv)

caracter_precipitaciones.info

Esta última expresión debe devolvernos dos columnas, si no así es que el dataset no está bien creado.

Vamos a dividir el dataset en una parte de entrenamiento y otra de testeo, para entrenar nuestro algoritmo vamos utilizar el 90% de los datos que contiene como entrenamiento y lo testearemos con el 10% restante y despuñes con nuestro dataset aparte. Con el objetivo de aprender a utilizar nuestra red entrenada.

Antes de entrenar nuestra red neuronal, eliminamos la columna con las etiquetas, la que dice si es normal o extraordinario. De modo que nos quede la X con los datos y la Y con las etiquetas.

X = caracter_precipitaciones.drop('caracter', axis=1)

Y = caracter_precipitaciones['caracter']

Clasificadores binarios

Vamos a hacer un clasificador binario entre la etiqueta “Normal” (cero) y la etiqueta “Excepcional” (uno). Tomaremos sólo uno de los dos valores.

Elegiremos un clasificador binario y lo entrenamos. Para empezar comenzaremos con un clasificador de descenso de gradiente estocástico, utilizaremos SGDClassifier de Scikit-Learn, este clasificador de ser capaz de tratar datasets muy grandes de forma eficiente aunque no es este el caso.

Crearemos el clasificador y lo entrenaremos con el 90% del dataset.

from sklearn import preprocessing

X=preprocessing.scale(X)

from sklearn.model_selection import train_test_split

Dividimos e dataset en su parte de pruebas y entrenamiento, en este caso elegimos 90% para entrenamiento y 10% para pruebas, al ser un dataset tan pequeño, no lo barajamos para no perder el índice de cada valor.

x_train, x_test,y_train,y_test = train_test_split(X,Y,test_size=0.1,random_state=1,shuffle = False)

Y finalmente lo entrenamos con SVC

from sklearn.svm import SVC

svc_clf =SVC()

svc_clf.fit(x_train,y_train)

Utilizar la red para hacer “predicciones” con datos reales

Ya tenemos el modelo entrenado, ahora vamos a la parte que nunca se explica en Machine Learning, es decir, una vez tenemos la red entrenada vamos a cargarla con nuestro dataset de pruebas para ver como funciona.

Una vez entrenada la red neuronal cargamos el nuevo dataset que tendrá la misma estructura que el anterior pero con las etiquetas (datos de entrenamiento) a cero, Pues son los datos que la red debe predecir.

Lo primero que tenemos que hacer es cargar el nuevo dataset del que queremos predecir los resultados.

#Cargamos el dataset de pruebas

DATASET_PRUEBAS = pd.read_csv('DATASET_PRUEBAS.csv')

#DATASET_PRUEBAS.info

DATASET_PRUEBAS.head()

Tratamos el dataset de la misma forma que hicimos en el entrenamiento.

#asignamos a X_p los datos de nuestro dataset de pruebas

X_p = DATASET_PRUEBAS

X_p=preprocessing.scale(X_p)

 Y finalmente le pedimos que prediga un valor

#predecimos el valor del valor 3 del array

#x_ptrain, x_ptest,y_ptrain,y_ptest = train_test_split(X_p,Y_p,test_size=0.1,random_state=1)

svc_clf.predict([X_p[4]])

Si probamos, veremos que no es muy bueno prediciendo, comete algunos errores, sobre todo se elegimos valores no muy acordes con los que se entrenó, pero ese no era el objetivo de este post. Aquí lo que quería era entrenar y utilizar una red neuronal clasificadora con datasets creados por el usuario

Aquí el programa completo en Phyton.

# Es necesaria una versión superior a Python 3.5

import sys

assert sys.version_info >= (3, 5)

 

# Es necesaria una versión de Scikit-Learn superior a ≥0.20

import sklearn

assert sklearn.__version__ >= "0.20"

 

# importaciones communes

import numpy as np

import os

 

# para hacer que la salida de este código sea estable en todas las ejecuciones

np.random.seed(42)

 

import warnings

warnings.filterwarnings('ignore')

 

import pandas as pd

caracter_precipitaciones = pd.read_csv('Caracter_Precipitaciones.csv')

#debe devolver dos columnas para asegurarnos que el dataset está correctamente construido

#los decimales deben ir con punto y las comas representan la separación de campos

caracter_precipitaciones.info

#caracter_precipitaciones.head()

 

#eliminamos la columna de etiquetas 'caracter' de modo que la X contendrá solo los valores sin su etiqueta

#la variable Y contendrá las etiquetas

X = caracter_precipitaciones.drop('caracter', axis=1)

Y = caracter_precipitaciones['caracter']

 

#hacemos uso de su función de escala para escalar todas nuestras características de entrada.

from sklearn import preprocessing

X=preprocessing.scale(X)

from sklearn.model_selection import train_test_split

 

#dividimos nuestro conjunto de datos en conjuntos de prueba y de entrenamiento.Le ponemos shuffle a false para que no baraje los

#datos pues en este caso el orden es importante.

x_train, x_test,y_train,y_test = train_test_split(X,Y,test_size=0.1,random_state=1,shuffle = False)

 

#Para entrenar este clasificador le pasaremos nuestros datos de entrenamiento, las variables x_train e y_train.

from sklearn.svm import SVC

svc_clf =SVC()

svc_clf.fit(x_train,y_train)

#aqui podemos ver que el array no se baraja y los indices no pierden sus posiciones

y_train.head

 

#'Predecimos' un valor del dataset entrenado, ojo están barajados ya no coinciden con sus indices originales

svc_clf.predict([X[4]])

 

#podemos comprobar la precisión de las predicciones

accuracy= svc_clf.score(x_test,y_test)

print(accuracy)

 

#Cargamos el dataset de pruebas

DATASET_PRUEBAS = pd.read_csv('DATASET_PRUEBAS.csv')

#DATASET_PRUEBAS.info

DATASET_PRUEBAS.head()

 

#asignamos a X_p los datos de nuestro dataset de pruebas

X_p = DATASET_PRUEBAS

X_p=preprocessing.scale(X_p)

 

#predecimos el valor del valor 3 del array

#x_ptrain, x_ptest,y_ptrain,y_ptest = train_test_split(X_p,Y_p,test_size=0.1,random_state=1)

svc_clf.predict([X_p[4]])