You are on page 1of 15

Computación Aplicada a la

Minería

Uso de Bases de datos con Matlab

Cristian A. Soto Pinto


Introducción

Matlab es una poderosa herramienta para hacer análisis de datos e


integra un amplio con junto de utilidades para conectarse a diversos
orígenes de información, ya sea un dispositivo periférico o una base de
datos remota. Esta característica es la que se buscará explotar en esta
clase, donde se verán algunas de las herramientas elementales que nos
ofrece Matlab para extraer y manipular la información contenida en una
base de datos, en nuestro caso MySql.
Terminología
Para referirnos a la estructura que contiene la información dentro
de la base de datos, es necesario considerar la terminología
adecuada para no caer en confusión entre un atributo o el conjunto
de estos.
Registro
Tupla
Fila

Atributo
Columna
Campo

Cuándo se habla de una entidad que contiene la información,


de por ejemplo “personas” un registro o tupla de nuestra tabla
podría ser: (‘Juan’, ‘Perez Gonzales’, ‘15.343.141-1’, 23) y cada
uno de estos elementos se denominan atributos o campos.
Terminología
• Query
– Consulta hacia la base de datos, una consulta esta escrita en lenguaje SQL y se realiza para
obtener información de la BD, modificar la información de la BD o cambiar aspectos
estructurales de ésta.
• Lenguaje host
– Es el lenguaje en el que se incrusta la consulta en SQL (anfitrión), éste realiza la solicitud o
envío de información. En nuestro caso es Matlab el que recibe la información proveniente de
la BD y hace, finalmente, uso de ésta.
• SGBD
– Sistema de gestión de bases de datos, nos permite administrar y manipular bases de datos, su
contenido y los mecanismos de acceso.
• PHPMyAdmin
– Sistema web basado en PHP que nos permite hacer uso de nuestro SGBD MySql de una
manera gráfica amigable.
• Servidor
– Es el equipo que aloja el SGBD y/o la bd, para permitir su acceso local o remoto, además por lo
general aloja un servidor web para sostener paginas web y así permitirnos, en nuestro caso,
acceder a PHPMyAdmin.
Matlab como Host
Matlab soporta un amplio conjunto de conexiones a diferentes sistemas
de bases de datos, en su versión 2008a tiene soporte para:
IBM DB2®, IBM® Informix®, Ingres®, Microsoft® Access™, Microsoft®
Excel®, Microsoft® SQL Server™, MySQL®, Oracle®, Postgre SQL, Sybase®
SQL Anywhere®, Sybase SQL Server

Para que Matlab pueda establecen una conexión a estos sistemas se debe
hacer uso de un driver que actúa como interfaz. Matlab en su versión
2008a soporta el driver ODBC (Open Database Connectivity) y el driver
JDBC (Sun™ Java™ Database Connectivity).
Matlab como Host
• Matlab invoca el driver JDBC para establecer la conexión con
MySQL y así, éste pueda interpretar las SQL Querys, gracias a
los que se puede enviar y recibir la información a nuestra BD.
• Para realizar la conexión es necesario especificar los
parámetros para acceder a nuestra BD en el SGBD, los
parámetros para el driver y la ruta al .jar del conecctor.
MySQL
• Para MySQL es transparente la solicitud de información, independiente de
si la solicitud se ejecuta desde un sistema web, desde la consola, desde
Matlab o desde otro lenguaje anfitrión, la consulta llega de la misma
manera y la información es entregada siempre con el mismo mecanismo
gracias al conector.
• En caso de ocurrir un error MyQSL envía mensajes de error que pueden
ser interpretados en el lenguaje anfitrión.
• Los parámetros especificados para la conexión con MySQL especifican si es
una conexión remota o es el mismo equipo.
• MySQL como servidor debe estar siempre operativo para recepcionar las
solicitudes, ni Matlab ni el conector levantan el servicio de MySQL.
Conexión
• Una conexión de base de datos permite que el software cliente
pueda comunicarse con el software de base de datos del servidor,
ya sea en la misma máquina o no. Se necesita una conexión abierta
y disponible para enviar comandos y recibir respuestas, y dado que
algunos motores DBMS tienen un número limitado de conexiones,
por los recursos que estas consumen, es que se debe siempre
cerrar una conexión una vez se ha dejado de usar.

• Para crear una conexión en Matlab se debe contar, primero, con los
parámetros del driver, los cuales especifican que tipo de driver se
usará y a que base de datos apuntará.
• Además se debe contar con el archivo del conector (.jar) y con las
credenciales que nos permiten hacer uso de la BD (nombre de
usuario y contraseña).
Conexión
host = 'localhost'; Nombre del servidor

user = 'root';
password = 'miclave'; Credenciales

dbName = 'pruebas_db'; Nombre de la BD

jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbName); Parámetros del driver


jdbcDriver = 'com.mysql.jdbc.Driver';

javaaddpath('C:\mysql-connector-java-5.1.6-bin.jar') Ruta al conector

dbConn = database(dbName, user , password, jdbcDriver, jdbcString);

Creación del objeto conexión


Consultar información
Una vez establecida la conexión se puede solicitar información gracias al
lenguaje SQL, la función de Matlab que nos permite hacer esto es fetch, la
que recibe como parámetros el objeto de conexión y la consulta SQL. Esta
función retorna una matriz de celdas que contiene el resultado de la
consulta.

result = fetch(dbConn, 'SELECT * FROM mantenciones');

Una vez la consulta se ha realizado la matriz result puede operarse como


cualquier otra variable dentro de Matlab. Como ésta es una matriz de
celdas es necesario trabajar sus elementos con llaves {} para poder hacer
operaciones sobre los datos.
Modificar información
Las operaciones UPDATE, ISERT y DELETE que no retornan datos se
ejecutan con la función de Matlab exec, la que recibe como
parámetros el objeto de conexión y la Query SQL. En el ejemplo a
continuación como la Query lleva comillas simples en los datos de
entrada y como Matlab tiene sus propias comillas por ser la Query
un string, se deben poner 2 comillas(2 comillas simples o comillas
dobles)

exec(dbConn, 'INSERT INTO personal (RUT,NOMBRES,APELLIDOS)


VALUES(''15994945'','‘Juanito '','‘Perez Gonzales'')');
Validar conexión
Para validar que la conexión fue efectuada de manera exitosa , Matlab incluye la
función isconnection, la que recibe como parámetro el objeto conexión y retorna
verdadero si la conexión esta disponible y retorna falso si se produjo un error en
ella o ésta se encuentra cerrada.
En el ejemplo a continuación se obtiene la información de la tabla mantenciones
si la conexión ha sido exitosa y si no, se muestra el mensaje de error.

if isconnection(dbConn)
result = fetch(dbConn, 'SELECT * FROM mantenciones');
disp(result);
else
disp(sprintf('Connection failed: %s', dbConn.Message));
end

Una vez se ha terminado de realizar las operaciones en la base de datos se cierra la


conexión
close(dbConn);
Ejemplo completo
host = 'localhost';
user = 'root';
password = 'fardos';
dbName = 'pruebasmineria';

jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbName);


jdbcDriver = 'com.mysql.jdbc.Driver';

javaaddpath('C:\mysql-connector-java-5.1.6-bin.jar')
dbConn = database(dbName, user , password, jdbcDriver, jdbcString);

if isconnection(dbConn)
result = fetch(dbConn, 'SELECT * FROM mantenciones');
disp(result);
else
disp(sprintf('Connection failed: %s', dbConn.Message));
End

close(dbConn);

result =

[1101] [1] '2011-09-07' [1212] [15994945]


[1102] [2] '2011-08-07' [1017] [15994945]
Otro ejemplo
host = 'localhost';
user = 'root';
password = 'fardos';
dbName = 'pruebasmineria';

jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbName);


jdbcDriver = 'com.mysql.jdbc.Driver';

javaaddpath('C:\mysql-connector-java-5.1.6-bin.jar')
dbConn = database(dbName, user , password, jdbcDriver, jdbcString);

If isconnection(dbConn) Selecciona la
Query = 'SELECT mes, tonelada FROM produccion WHERE agno = 2004‘; producción de
result = fetch(dbConn, Query); cada mes del año
meses=char(result(:,1)); %Todos los meses de cell a string 2004
valores = cell2mat(result(:,2)); %Todos los valores de producción de cell a numero

plot(valores)
set(gca,'XTick',1:12) Grafica los
Set(gca,'XTickLabel',meses) resultados por
cada mes.
else
disp(sprintf('Connection failed: %s', dbConn.Message));
End

close(dbConn);
Otro ejemplo

Resultado:
4
x 10
10

2
enero febrero marzo abril mayo junio julio agsto septiembre octubre noviembre diciembre

You might also like