Evaluación de Modelos para Predicción Meteorológica
|
|
- Purificación Aguilar Luna
- hace 8 años
- Vistas:
Transcripción
1 Trabajo de Inteligencia en redes de comunicaciones Evaluación de Modelos para Predicción Meteorológica 5º I. Telecomunicación Autores: Aurora Agudo de Carlos Juan Carlos Alonso Bayal Ruth Santana Tejero Universidad Carlos III de Madrid
2 ÍNDICE 1. Introducción Métodos empleados Decisión Table REPTree KStar LMS MultilayerPerceptron SMOreg SMO J Preprocesado de los datos Resultados obtenidos Predicción de temperatura a 1 hora Predicción de temperatura a 24 horas Predicción de las condiciones meteorológicas Conclusiones Bibliografía Anexo I Anexo II
3 1. Introducción El objetivo es desarrollar un sistema real de predicción meteorológica para la ciudad de Madrid, utilizando técnicas de aprizaje automático para obtener modelos de caracterización y predicción, empleando como herramienta la plataforma Weka. En concreto hay que desarrollar tres modelos de predicción: Predicción de temperatura a 1 hora Predicción de temperatura a 24 horas Predicción de condiciones meteorológicas (Despejado, Parcialmente Nublado, etc) a 24 horas Es decir, con la información disponible hasta el momento (valores de las variables de entrada en la hora H, H-1, H-2, etc.) hay que predecir el valor de la variable de salida (temperatura o condiciones meteorológicas) en H+1 y H+24. Los modelos pueden basarse en cualquier técnica entre las disponibles en Weka, incorporando las variables que se estimen oportunas entre las proporcionadas y hacio uso de toda la información histórica que se crea conveniente. El punto de partida es la información METAR (Meteorological Actual Report) disponible en Internet. El código METAR, que fue establecido por la World Meteorological Organization (WMO) y adoptado por todas las naciones del mundo, sirve para representar condiciones meteorológicas en aeropuertos o estaciones meteorológicas, habitualmente con medidas horarias. Se partirá de un conjunto de datos meteorológicos en dos localizaciones (Barajas y Cuatro Vientos) desde el año 1996 a la actualidad, con las siguientes medidas cada media hora (pueden faltar medidas): HoraCET Temperatura (grados Farenheit) Punto de rocío (grados Farenheit) Humedad Presión (pulgadas) Visibilidad Dirección del viento Velocidad del viento (millas por hora) Velocidad de ráfagas de viento (millas por hora) Precipitación Eventos Condiciones El formato de los datos es el siguiente (extracto de un día cualquiera): HoraCET,TemperaturaF,Nivel de RocíoF,Humedad,PresiónIn,Visibilidad MPH,Wind Direction,Velocidad del vientomph,ráfagamph,precipitación In,Hechos,Conditions 12:00 AM,37.4,33.8,87,30.39,7.0,NNE,2.3,-,N/A,,Parcialmente Nublado 12:30 AM, 35.6,33.8,93,30.39,7.0,Calm,Calm,-,N/A,,Parcialmente Nublado... 3
4 En los datos no se ha realizado ningún tipo de procesado ni limpieza de datos, por lo que como primer paso es necesario un trabajo de limpieza y preprocesado de datos, previo al estudio de variables que conducirá a la obtención de la matriz (o matrices) de minería de datos. En particular hay que tener en cuenta el hecho de que faltan medidas para algunas horas, por lo que la matriz de minería trá huecos (valores incorrectos o inexistentes) en esos instantes de tiempo, que habrá que tratar apropiadamente (eliminar esos registros, rellenarlos con valores medios o extrapolaciones, etc.). Como conjunto de entrenamiento se utilizará la información hasta el 31/12/2003 (incluida) y los modelos se evaluarán con la información de El criterio de evaluación de sistemas será: en temperatura: el error relativo medio, calculado como: ERROR = media( abs(tpredicha-treal)/treal ) en condiciones meteorológicas: en proporción de aciertos: ERROR = cuenta(aciertos)/ (cuenta(aciertos) + cuenta(fallos)) Además puede resultar muy útil establecer un primer modelo de segmentación para distinguir situaciones meteorológicas particulares (invierno/verano, "tiempo bueno"/"tiempo malo", "tiempo mejorando"/"tiempo estable"/"tiempo empeorando", etc.) para después desarrollar modelos de predicción más ajustados a cada una de esas situaciones, y, por tanto, con menos error. 2. Métodos empleados 2.1. Decisión Table La tabla de decisión es un instrumento para decidir la mejor alternativa en un proceso de decisión. Para ello se utiliza el concepto de regla de decisión, que es una aplicación que asocia a cada alternativa un número, que expresa las preferencias del decisor por los resultados asociados a dicha alternativa. Una tabla de decisión se compone de una matriz en la que se almacenan una serie de condiciones y sus correspondientes acciones. El problema de este algoritmo es decidir qué atributos introducir en la tabla REPTree Es un método de aprizaje rápido mediante árboles de decisión. Construye un árbol de decisión usando la información de varianza y lo poda usando como criterio la reducción del error. Solamente clasifica valores para atributos numéricos una vez. Los valores que faltan se obtienen partio las correspondientes instancias. 4
5 2.3. KStar K* es un clasificado basado en instancias, esto significa que la clasificación de una instancia está basada en la clasificación de instancias de entrenamiento similares, determinadas por alguna función de similitud. Se diferencia de otros aprizajes basados en lo mismo en que usa una función de distancia basada en entropía LMS Implementa una regresión lineal LMS utilizando la clasificación por regresión lineal disponible en el WEKA para formar predicciones. Las funciones LMS se generan a partir de un muestreo de datos aleatorio. La regresión ajustada con el error cuadrático medio más bajo se elige como el modelo final MultilayerPerceptron Es un clasificador que usa retropropagación para clasificar instancias. Esta red puede construirse a mano, mediante un algoritmo o mediante ambos. Además puede ser monitorizada y modificada durante el tiempo de entrenamiento. Los nodos en esta red son todo sigmoides, excepto cuando la clase es numérica, en cuyo caso los nodos de salida son unidades lineales SMOreg Implementa el algoritmo de optimización de secuencia mínima desarrollado por John C. Platts pra entrenar una SVM (máquina de vectores soporte) con kernel polinomiales o funciones de base radial (RBF) Esta implementación substituye todos los valores que faltan y transforma atributos nominales en otros binarios. También normaliza todos los atributos por defecto. (los coeficientes a la salida están basados en los datos normalizados, no en los originales.) 2.7. SMO Es similar al anterior pero soluciona problemas multiclase usando clasificación por parejas. En los casos multi-clase las probabilidades predichas se juntaran usando los métodos de emparejamiento Hastie y Tibshirani J48 Se trata de una implementación propia de WEKA para el algoritmo C4.5, un algoritmo basado en clasificación por árbol de decisión. El algoritmo ofrece la posibilidad de poder parar antes de alcanzar las hojas en cada subárbol; esto dará lugar a árboles menos refinados, por decirlo de alguna forma, y ayudará a evitar el overfitting. 5
6 3. Preprocesado de los datos Datos de Partida El preprocesado de datos en un problema de datamining engloba la recolección la información, extrayo lo que en realidad es relevante para poder enfrentarnos a nuestro problema. Hay que limpiar la información quitando ruidos, redundancias; analizando cuál es la información de la que disponemos y qué pretemos obtener a partir de ella. En nuestro caso, la información de partida estaba constituida por las medidas tomadas en dos estaciones meteorológicas de Madrid durante el mismo intervalo de tiempo, desde 1994 hasta Observando los ficheros proporcionados, pudimos comprobar que en realidad no todos los ficheros contenían datos; exactamente, los ficheros desde 1994 hasta el 30 de Junio de 1996 estaban vacíos (para ambas estaciones meteorológicas). Por lo que, para el desarrollo de nuestro problema tuvimos en cuenta los ficheros desde el 1 de Julio de 1996 hasta el 31 de Octubre de 2004, un total de 6090 ficheros. Estos ficheros estaban escritos en HTML, formato que Weka no es capaz de procesar. HoraCEST,TemperaturaF,Nivel de RocíoF,Humedad,PresiónIn,VisibilidadMPH,Wind Direction,Velocidad del vientomph,ráfagamph,precipitaciónin,hechos,conditions<br> 2:00 AM,75.2,50.0,41,30.01, ,Calm,Calm,-,N/A,,Despejado<BR>2:30 AM,75.2,50.0,41,30.01, ,Calm,Calm,-,N/A,,Despejado<BR>3:00 AM,73.4,48.2,41,30.01, ,Este,1.2,-,N/A,,Despejado<BR>3:30 AM,73.4,48.2,41,30.01, ,Este,1.2,-,N/A,,Despejado<BR>4:00 AM,69.8,48.2,46,29.98, ,Norte,3.5,- Figura 1.- Datos en formato HTML disponibles (fichero ) Datos legibles en Weka Para poder leer los datos en Weka y comprobar qué era de lo que partíamos, usamos un programa en Java que nos permitiera sustituir las etiquetas <BR> por un retorno de carro ( \n ). Transformamos los datos a un formato que Weka sí era capaz de interpretar; teníamos que guardar cada fichero con la extensión.csv. Fue en esta fase donde verificamos que disponíamos de un fichero para cada día del calario correspondiente al intervalo de tiempo anteriormente señalado. Automatizando el proceso de preprocesado Tras eso, al observar los datos que contenía cada fichero, comprobamos que tenía medidas de temperatura, rocío, humedad, presión, visibilidad, dirección del viento, velocidad del viento, ráfaga, nivel de precipitación, eventos acontecidos y condiciones meteorológicas tomadas aproximadamente cada 30 minutos. 6
7 Hora,Temperatura,Nivel de Rocio,Humedad,Presión,Visibilidad,Dirección del Viento,Velocidad del Viento,Ráfaga,Precipitación,Eventos,Condiciones 2:00 AM,75.2,50.0,41,30.01, ,Calm,Calm,-,N/A,,Despejado 2:30 AM,75.2,50.0,41,30.01, ,Calm,Calm,-,N/A,,Despejado 3:00 AM,73.4,48.2,41,30.01, ,Este,1.2,-,N/A,,Despejado 3:30 AM,73.4,48.2,41,30.01, ,Este,1.2,-,N/A,,Despejado 4:00 AM,69.8,48.2,46,29.98, ,Norte,3.5,-,N/A,,Despejado Figura 2.- Datos transformados al formato CSV (fichero csv) En el ejemplo mostrado anteriormente se comprueba que no todos los ficheros disponían de datos en toda la franja horaria de un día de 0:00 a 23:30. Para poder preprocesar de forma automática los datos, decidimos registrar las medidas de un día de 30 en 30 minutos. Para ello tuvimos que añadir líneas con las horas que faltaban, eliminar medidas redundantes tomadas a la misma hora, el mismo día y en la misma estación meteorológica, así como las medidas tomadas en instantes de tiempo no correspondientes a los instantes que queríamos almacenar. Para eliminar la redundancia, tan sólo tuvimos en cuenta la primera medida que aparecía para dicho intervalo. Las medidas en franjas horarias distintas a las previstas no se tuvieron en cuenta. Todo esto fue posible a un array de control como el que se muestra en la siguiente figura que almacenaba qué horas eran las que ya se habían leído. Suponio que los datos estaban ordenados cronológicamente, al leer una línea, leer los datos de un intervalo de tiempo determinado, si en el array de control existían elementos previos marcados como no leídos, se interpretaba que el fichero no contenía dichos datos y había que añadir una línea vacía (atributos desconocidos). En esta fase de preprocesado fue cuando añadimos un nuevo atributo, la fecha del fichero que estábamos leyo en ese momento. La importancia de este parámetro se explicará posteriormente en este documento. Líneas vacías Línea leída 00:00 00:30 01:00 01:30 02:00 02:30 23:00 23:30 Algunas de las medidas que contenía el fichero indicaban que era un valor desconocido. El formato general de dicho valor era a través de un guión bajo _, aunque el parámetro rocío tenía un valor cuando no se conocía su valor, así como en eventos producidos cuando no había nada que escribir podía aparecer la siguiente cadena N/A. Estos valores desconocidos los sustituimos por el siguiente símbolo?, el cuál Weka interpretaba como valor desconocido. 7
8 Para poder crear la matriz de minería de datos debíamos tener los datos de todos los días en un mismo fichero. Este fue el siguiente paso a llevar a cabo y para poder distinguir entre todos los datos de los que disponíamos fue por lo que añadimos el campo fecha, de tal modo que para cada estación meteorológica teníamos un fichero con todos las medidas tomadas, donde cada una se identificaba a partir del par < fecha, hora >. Cada fichero contenía 3045*48 = líneas. Mezclado e Interpolación A fin de obtener una mejor aproximación a nuestro problema, predecir la temperatura y las condiciones meteorológicas en Madrid, decidimos mezclar los datos del siguiente modo: - para las medidas de temperatura, rocío, humedad, presión, visibilidad, velocidad del viento, ráfaga y nivel de precipitación, parámetros numéricos: tomamos la media de ambos datos; en caso de que uno de los valores fuera desconocido se tomaba el valor conocido. - para las medidas de dirección del viento, eventos acontecidos y condiciones meteorológicas, constituidos por cadenas, tomamos uno de los valores escogido aleatoriamente. Una vez realizada la mezcla de ambos ficheros, usamos un filtro interpolador para sustituir datos desconocidos por datos aproximados. Cuando un dato era desconocido, comprobamos si el registro anterior y el registro posterior de dicho parámetros no eran desconocidos; en tal caso, sustituíamos el valor desconocido usando medias en caso de datos numéricos o escogio aleatoriamente si el parámetro era una cadena, como en el caso de la mezcla, a partir del dato anterior y el dato posterior. Vector de Parámetros El vector de parámetros escogido para formar la matriz de minería es, para cada uno los problemas a predecir, distinto. Para su elección se han considerado los siguientes puntos: A mayor número de parámetros, obtenemos una selección más precisa. Según [1], los parámetros importantes para predecir temperatura y condiciones meteorológicas son la temperatura, la presión, las condiciones meteorológicas y el nivel de precipitación. Es conveniente tener un registro temporal para valorar la evolución de los parámetros. Un número elevado de parámetros produce un elevado coste computacional, a veces inabordable por ordenadores personales. Buscando una situación de compromiso entre el registro temporal y el número de parámetros, decidimos usar valores medios que nos permitieran tener en cuenta la evolución de los registros anteriores. 8
9 Parámetros que se mantienen constantes no influyen en nuestra decisión, este es el caso de la presión atmosférica, aunque en un principio es un parámetro importante a tener en cuenta como ya hemos comentado anteriormente, en nuestros datos siempre se mantiene constante: las estaciones base están situadas aproximadamente a la misma altura. Parámetros cuyo valor en la mayoría de los registros es desconocido no es útil para predecir, tan sólo proporcionan excepciones que en muchos casos inducen a aumentar el error obtenido. De este modo, tenio en cuenta los valores que obtuvimos descartamos las medidas de visibilidad, ráfaga, nivel de precipitación y eventos acontecidos. Parámetros que toman valores incongruentes no son válidos. Esto ocurre en la medida de dirección del viento, donde a veces se introducen valores numéricos en vez de una cadena indicando la dirección, algo que carece de interpretación. Vector de parámetros para predecir la temperatura con un margen de 1h. Para predecir la temperatura con un margen de una hora hemos usado los parámetros de temperatura, rocío, velocidad del viento y condiciones meteorológicas de los tres registros anteriores, es decir de la hora y media anterior, así como los valores medios de temperatura de las últimas 12 horas tomados de 3 en 3 horas. Hemos de añadir también la temperatura a predecir y la fecha. Este último parámetro nos servirá para una fase posterior de preprocesado que explicaremos a continuación. Vector de parámetros para predecir la temperatura con un margen de 24 h. Predecir la temperatura con un margen de 24 horas parece en un principio un ejercicio más complicado de abordar, por ello hemos usado un vector de parámetros algo más complejo. Hemos utilizado las siguientes medidas de los cinco registros anteriores: temperatura, rocío y velocidad del viento. También hemos añadido los valores medios de temperatura de las 36 horas anteriores tomadas de 12 en 12 horas. Al igual que en el caso anterior hemos añadido la temperatura a predecir y la fecha. Vector de parámetros para predecir las condiciones meteorológicas con un margen de 24 h. Predecir las condiciones meteorológicas con un margen de 24 horas es un problema de complejidad mayor, ya que el uso de cadenas de caracteres tanto en los parámetros como en el dato a predecir induce a algoritmos de clasificación más costosos y complejos computacionalmente. Por eso a parte de los parámetros tomados anteriormente para el problema de la temperatura con un margen de 24 horas hemos añadido también las condiciones meteorológicas de esos cinco registros anteriores. 9
10 Segmentación En los requisitos de este trabajo se imponía que para evaluar los distintos algoritmos de clasificación había que dividir los datos en un conjunto de entrenamiento y un conjunto de validación. El conjunto de validación debía corresponder a la predicción de la temperatura o de las condiciones meteorológicas del año 2004; por lo que el conjunto de entrenamiento debe estar constituido por los datos anteriores. Para crear estos dos conjuntos usamos el campo fecha en cada una de las matrices de minería creadas, una para cada problema de predicción. Por problemas de memoria de nuestros ordenadores, nos vimos obligados a segmentar los datos en función de las estaciones del año: primavera, verano, otoño e invierno, especializando de este modo aún más los clasificadores a evaluar. Para hacer esta división usamos el mes del año del parámetro fecha de cada fila de la matriz de minería. La segmentación fue según se muestra en la siguiente tabla: Grupo asignado Mes Invierno -01- ; -02- ; -03- Primavera -04- ; -05- ; -06- Verano -07- ; -08- ; -09- Otoño -10- ; -11- ; -12- Escribir matriz en fichero A la hora de almacenar en fichero, ya no tuvimos en cuenta el parámetro fecha porque no nos era útil. Además, tampoco tuvimos en cuenta las filas cuyo valor predecir era desconocido (? ) porque carecía de sentido. Debido a problemas de memoria, nos vimos también obligados a eliminar todos los datos que tuvieran algún parámetro desconocido. Aún con esas, los ficheros de entrenamiento, seguían sio demasiado grandes por lo que escogimos filas alternadas para reducir el tamaño de este. Tenio en cuenta esto, mostramos el número de datos que en un principio procesaríamos y los que al final procesamos: Fichero de entrenamiento: Invierno Primavera Verano Otoño Temperatura con un margen de 1h. Líneas Iniciales Líneas Finales Líneas Iniciales Líneas Finales Líneas Iniciales Líneas Finales Líneas Iniciales Líneas Finales Entrenamiento Validación
11 Temperatura con un margen de 24 h. Condiciones con un margen de 24 h. Entrenamiento Validación Entrenamiento Validación Cabe comentar que se cumple que aproximadamente que los datos de validación son aproximadamente un 20 % del conjunto de datos total y los datos de entrenamiento constituyen el 80 %, división que se realiza habitualmente en estos problemas de predicción. Un comentario de lo que a procesado de información se refiere, es que la mitad de él se ha realizado en Java y la otra mitad en MatLab debido a que JVM no poseía memoria suficiente como para mezclar ambos ficheros. A partir del filtro mezclador se realizó todo el preprocesado con MatLab. Al final de la memoria incluimos un anexo con todo el código utilizado. 11
12 4. Resultados obtenidos 4.1. Predicción de temperatura a 1 hora. Estación del año Método de predicción Tiempo en generar el modelo (s) Root mean squared error Relative absolute error Primavera DecisionTable % REPTree % Kstar % Verano DecisionTable % REPTree % Kstar % Otoño DecisionTable % REPTree % Kstar % Invierno DecisionTable % REPTree % Kstar % Tabla 1: Resultados obtenidos para la predicción de temperatura en 1 hora. Observando la tabla anterior se deduce rápidamente cual es el método mas exacto de los tres que se han empleado para predecir la temperatura en el plazo de 1h, es claramente el REPTree tanto por las tasas de error que presenta como por el reducido tiempo que tarde en generar el modelo de predicción a partir de los datos de entrenamiento. En las cuatro estaciones del año genera los mejores resultados que oscilan entre un 11-15% de error, un resultado que a nuestro modo de ver está bastante bien sio hasta tres veces menor que para el método de DecisionTable y la mitad que para el método Kstar. Cabe también destacar que a pesar de que el algoritmo Kstar es más rápido, este factor no compensa los errores cometidos. Una cuestión que hay que subrayar aquí y que se comprobará mas adelante es que algoritmos mas complejos (MultilayerPerceptron, LMS o SOMreg) llegan a obtener resultados para predecir temperatura a 24h pero no a 1h porque en este caso se utilizan parámetros tanto numéricos como nominales por lo que el entrenamiento y la validación tiene un coste computacional mayor. Esto es debido a que Weka trata los atributos nominales parametrizándolos a un valor numérico, lo cual requiere mayor coste computacional. Es por esto que estos algoritmos no convergen para predicciones de temperatura de 1h (con los atributos que se han utilizado). 12
13 4.2. Predicción de temperatura a 24 horas. Estación del año Primavera Verano Otoño Invierno Método de predicción Tiempo en generar el modelo (s) Root mean squared error Relative absolute error DecisionTable % REPTree % MultilayerPerceptron % SOMreg % Kstar % LMS % DecisionTable % REPTree % MultilayerPerceptron % SOMreg % Kstar % LMS % DecisionTable % REPTree % MultilayerPerceptron % SOMreg % Kstar % LMS % DecisionTable % REPTree % MultilayerPerceptron % SOMreg % Kstar % LMS % Tabla 2: Resultados obtenidos para la predicción de temperatura en 24 horas. 13
14 Si se atie solo al porcentaje de error que proporciona cada algoritmo de predicción, es lógico pensar que los resultados son mejores en este caso que en la predicción a 1 hora. Esto es debido a que los atributos que se utilizan son solo numéricos y se pueden emplear complejos algoritmos de predicción como LMS o MultilayerPerceptron. Debido a esto se llegan a realizar predicciones con un error inferior al 10% en función de la estación del año que se analice pero esta mejora se realiza a costa de un mayor tiempo de procesado de datos de entrenamiento para obtener el modelo de predicción, basta con ver el tiempo que necesita el SOMreg que es superior a 7 horas. Quizás tan solo el algoritmo que utiliza el MultilayerPerceptron sea el único que realmente mejora los anteriores en la relación precisión/tiempo ya que mejora los resultados obtenidos por el REPTree y el tiempo que tarda en crear el modelo es de minutos. Otro cuestión que se puede ver es que los resultados obtenidos por los métodos que se usaron para predecir la temperatura a 1 hora son similares (en función de la estación) a los que se obtienen para la predicción a 24 horas, a pesar de que se usan parámetros distintos, ya que ahora sólo son numéricos y antes también se empleaban nominales Predicción de las condiciones meteorológicas. En la siguiente tabla se observan los resultados de las predicciones realizadas para cada algoritmo utilizado. Al contrario que en las predicciones anteriores, el mejor algoritmo es el DecisionTable, aunque cualquiera de los otros métodos presentan resultados similares excepto el Kstar. 14
15 Estación del año Primavera Verano Otoño Invierno Método de predicción Tiempo en generar el modelo (s) Instancias mal clasificadas Decisión Table % REPTree % SMO % J % Kstar % Decisión Table % REPTree % SMO % J % Kstar % Decisión Table % REPTree % SMO % J % Kstar % Decisión Table % REPTree % SMO % J % Kstar % Tabla 3: Resultados obtenidos para la predicción las condiciones meteorológicas en 24 horas. En definitiva, para los tres tipos de predicciones realizadas podemos concluir que el mejor método en nuestra opinión es el REPTree, porque proporciona buenos resultados (aunque no siempre los mejores) en todos los casos. Además se ha comprobado que los algoritmos complejos no trabajan muy bien con atributos nominales e incluso con numéricos llegan a necesitar un tiempo de procesado para la creación del modelo demasiado grande. 15
16 5. Conclusiones En este trabajo hemos desarrollado un completo estudio en la medida de nuestras posibilidades de diferentes métodos que se pueden utilizar para predecir parámetros meteorológicos: la temperatura y las condiciones meteorológicas. En este estudio hemos conseguido errores inferiores al 10% tanto con algoritmos más bien sencillos computacionalmente como las tablas o árboles de decisión, y con algoritmos más bien complejos como las redes SOM o las redes neuronales MLP. Estos algoritmos son los que comúnmente se utilizan para predecir los parámetros meteorológicos, pero requieren de un exhaustivo periodo de entrenamiento como hemos podido verificar a lo largo de este trabajo. Los resultados obtenidos con estos algoritmos suelen ser bastante mejores que los que hemos obtenido no sólo porque el número de parámetros utilizados es mayor o el preprocesado es más complejo, sino porque actualmente las matrices de minería de datos que se utilizan son matrices espacio-temporales [1,3], contienen datos de varias estaciones de medida (aproximadamente 10) y la evolución de estos a lo largo del tiempo. Además estos algoritmos se caracterizan por conseguir disminuir el número de parámetros a medida que aumentan el número de estaciones. En nuestro trabajo hemos desarrollado tan sólo predicciones a corto plazo, sólo hemos tenido en cuenta datos con 24 h. de antelación. Las predicciones a corto plazo, a día de hoy, suelen conducir a peores resultados que las predicciones a largo plazo, esto se debe principalmente a que se considera que los datos meteorológicos siguen una periodicidad estacional, por lo que tener en cuenta datos de años anteriores en la misma estación del año permite mejorar el comportamiento de estos clasificadores. Cabe destacar que éstos son los que más tiempo llevan investigándose. 6. Bibliografía [1] [2] WEKA. Machine Learning Algorithms in Java. Chapter 8 from the book Data Mining: Practical Machine Learning Tools and Techniques with Java Implementations Ian H. Witten. [3] [4] Manual incorporado en el programa WEKA [5] [6] [7] 16
17 Anexo I. Ficheros en Java utilizados para el preprocesado Datos legibles en Weka prueba1.java import java.io.file; public class prueba_1 { /** Creates a new instance of prueba_1 */ public prueba_1() { /** args the command line arguments */ public static void main(string[] args) { FileList f = new FileList("D:/LEVS/"); File lista_f[]=f.getfich_list(); f.checkfilelist(1,7,1996,31,10,2004); for (int i=0;i < lista_f.length; i++) { ModificarFichero mf = new ModificarFichero(lista_f[i]); mf.obtenertexto(); mf.parseartexto(); mf.escribirfichero(); System.out.println(i); System.out.println("Fin del directorio"); FileList.java import java.util.arraylist; import java.io.file; import java.util.gregoriancalar; import java.lang.integer; import java.util.stringtokenizer; public class FileList { String directory; // directorio donde extraemos la lista de ficheros a modificar public String getdirectory(){ return directory; File dir_file; // objeto File que contiene el directorio. public File getdir_file(){ return dir_file; ; File[] fich_list;// lista de ficheros; public File[] getfich_list(){ return fich_list; /** Creates a new instance of FileList */ public FileList(String d) { directory = d; dir_file = new File(d); if (dir_file.isdirectory()) fich_list=dir_file.listfiles(); else System.out.println("El path indicado no corresponde a un directorio"); 17
18 public void checkfilelist(int day_ini, int mes_ini, int ano_ini, int day_fin, int mes_fin, int ano_fin){ /* 1.- Deberíamos comprobar si existen ficheros para todos los días */ GregorianCalar fecha_ini = new GregorianCalar(ano_ini,mes_ini,day_ini); GregorianCalar fecha_fin = new GregorianCalar(ano_fin,mes_fin,day_fin); GregorianCalar fecha_file = new GregorianCalar(); String parser1 = "-"; String parser2 = "."; int i, dia, mes, ano; StringTokenizer fecha, file_name; i = 0; System.out.println("IO "+fich_list.length); while ((i < fich_list.length) ((fecha_ini.date!= fecha_fin.date) && (fecha_ini.month!= fecha_fin.month) &&(fecha_ini.year!= fecha_fin.year))){ // 1. Obtener la fecha del nombre del fichero file_name = new StringTokenizer(fich_list[i].getName(),parser2); fecha = new StringTokenizer(file_name.nextToken(),parser1); /* sabemos que el nombre del fichero es como sigue: csv */ /* obtenemos los campos que necesitamos realmente*/ fecha.nexttoken(); ano = Integer.parseInt(fecha.nextToken()); mes = Integer.parseInt(fecha.nextToken()); dia = Integer.parseInt(fecha.nextToken()); // 2. Contrastar si corresponde a la fecha del calario. // suponemos que el directorio está ordenado por fechas desde la más temprana a la más tardía // en caso de que no corresponda mostramos un mensaje de información por pantalla fecha_file.set(ano,mes,dia); if ((fecha_file.date!= fecha_ini.date) (fecha_file.month!= fecha_ini.month) (fecha_file.year!= fecha_ini.year)) System.out.println("El fichero correspondiente a la fecha "+fecha_ini.date+"-"+fecha_ini.month+"-"+fecha_ini.year+"no está en el directorio"); // aumentar la fecha de inicio del calario. fecha_ini.roll(fecha_ini.date, true); i++; ModificarFichero.java import java.io.file; import java.io.filewriter; import java.io.bufferedwriter; import java.io.filereader; import java.io.bufferedreader; import java.util.arraylist; import java.util.stringtokenizer; public class ModificarFichero { File fich_lectura; 18
19 File fich_escritura; String texto_leido; public String gettexto_leido(){ return texto_leido; String cadena_escrita; public String getcadena_escrita(){ return cadena_escrita; String[] lista_cadenas; final static String parametros = "Hora,Temperatura,Nivel de Rocio,Humedad,Presión,Visibilidad,Dirección del Viento,Velocidad del Viento,Ráfaga,Precipitación,Eventos,Condiciones"; final static String parser = "<BR>"; /** Creates a new instance of ModificarFichero */ public ModificarFichero(File fich_lect) { this.fich_lectura=fich_lect; fich_escritura = new File((fich_lect.getPath()).concat(".csv")); //fich_escritura = new File((fich_lect.getPath()).concat(".csv")); texto_leido= new String(); cadena_escrita= new String(); lista_cadenas = null; public void obtenertexto(){ try{ BufferedReader stdin = new BufferedReader(new FileReader(fich_lectura)); stdin.readline(); stdin.readline(); // Hemos comprobado que tan sólo necesitamos la tercera linea del fichero de lectura texto_leido=stdin.readline(); stdin.close(); catch(exception e){ System.out.println("Exception capturada"); public void parseartexto(){ // El texto leido se transforma en una array de longitud indeterminada y no fija de líneas // Para parsear el texto, detectaremos las líneas encontrando la cadena <BR>; lista_cadenas = (this.gettexto_leido()).split(parser); public void escribirfichero(){ try{ BufferedWriter stdout = new BufferedWriter(new FileWriter(fich_escritura)); stdout.write(parametros); stdout.newline(); // Parsear texto for (int x=0; x<lista_cadenas.length; x++){ stdout.write(lista_cadenas[x]); stdout.newline(); stdout.close(); catch(exception e){ System.out.println("Exception capturada"); 19
20 Automatizando el proceso de preprocesado prueba2.java import java.io.file; public class prueba_2 { /** Creates a new instance of prueba_2 */ public prueba_2() { public static void main(string[] args) { FileList f1 = new FileList("D:/prediccion_meteo/meteo/LEVS/"); File lista_f1[]=f1.getfich_list(); for (int i=0;i < lista_f1.length; i++) { FormatearFichero ff1 = new FormatearFichero(lista_f1[i]); ff1.leerficheroaformatear(); ff1.escribirficheroformateado(); System.out.println(i); System.out.println("Fin del directorio LEMD"); FormatearFichero.java import java.io.file; import java.io.filewriter; import java.io.bufferedwriter; import java.io.filereader; import java.io.bufferedreader; import java.util.arraylist; import java.util.stringtokenizer; import java.util.vector; public class FormatearFichero { static final int TOTAL_LINEAS = 48; static final String LINEA_VACIA = ",,,,,,,,,"; File fich_lectura; File fich_escritura; String file_name; String texto_leido; public String gettexto_leido(){ return texto_leido; String cadena_escrita; public String getcadena_escrita(){ return cadena_escrita; Vector lista_cadenas; final static String parametros = "Fecha,Hora,Temperatura,Nivel de Rocio,Humedad,Presión,Visibilidad,Dirección del Viento,Velocidad del Viento,Ráfaga,Precipitación,Eventos,Condiciones"; //final static String parser = "<BR>"; /** Creates a new instance of FormatearFichero */ public FormatearFichero(File fich_lect) { this.fich_lectura=fich_lect; file_name = fich_lect.getpath(); file_name = file_name.substring(0,file_name.lastindexof(".csv")); fich_escritura = new File(file_name.concat(".arff")); 20
21 //fich_escritura = new File((fich_lect.getPath()).concat(".csv")); texto_leido= new String(); cadena_escrita= new String(); lista_cadenas = new Vector(); lista_cadenas.add(parametros); public void escribirficheroformateado(){ try{ BufferedWriter stdout = new BufferedWriter(new FileWriter(fich_escritura)); int i=0; for (i=0;i<lista_cadenas.size();i++){ stdout.write((string) lista_cadenas.get(i)); stdout.newline(); stdout.close(); catch(exception e){ System.out.println("Exception capturada "+e); public void leerficheroaformatear(){ int linea_leida = 0; FormatLinea fline = new FormatLinea(); String lista[]=null; int j = 0; int indice = 0; FormatLinea.inicializarControlHorario(); try{ BufferedReader stdin = new BufferedReader(new FileReader(fich_lectura)); /* la primera linea del fichero es la linea de parameros, no nos interesa, vamos a trabajar con los datos que vienen definidios a partir de la segunda linea */ try{ texto_leido = stdin.readline(); while ( texto_leido!= null){ texto_leido = stdin.readline(); if (texto_leido!= null){ fline = new FormatLinea(texto_leido, this.obtenerfecha(),linea_leida); if (! texto_leido.startswith(linea_vacia)){ indice = fline.obtenerindice(); if (indice!= -1){ if (! FormatLinea.comprobarHoraActualizada(indice)){ if (fline.comprobarsinuevaslineas()){ lista=fline.crearlineas(); for (j=0;j<lista.length;j++){ lista_cadenas.add(lista[j]); linea_leida = linea_leida+lista.length; lista_cadenas.add(fline.formatearlinea()); linea_leida++; // Hemos llegado al final del fichero y el numero de lineas leidas no es 47,faltan horas por detrás... 21
22 if (linea_leida < TOTAL_LINEAS){ for (int l=linea_leida;l<total_lineas;l++){ lista_cadenas.add(fline.crearlineavacia(l)); linea_leida++; catch (Exception e){ System.out.println("Exception 1 capturada "+e); stdin.close(); catch(exception e){ System.out.println("Exception 2 capturada"); public String obtenerfecha(){ StringTokenizer s = new StringTokenizer(file_name,"-"); s.nexttoken(); String year = s.nexttoken(); String mes = s.nexttoken(); String dia = s.nexttoken(); String fecha = dia +"-"+mes+"-"+year; return fecha; FormatLinea.java import java.util.arraylist; import java.util.stringtokenizer; import java.util.hashtable; public class FormatLinea { final static String HORARIO_INICIAL[] = {"12:00 AM","12:30 AM","1:00 AM","1:30 AM","2:00 AM","2:30 AM","3:00 AM","3:30 AM","4:00 AM","4:30 AM","5:00 AM","5:30 AM","6:00 AM","6:30 AM","7:00 AM","7:30 AM","8:00 AM","8:30 AM","9:00 AM","9:30 AM","10:00 AM","10:30 AM","11:00 AM","11:30 AM","12:00 PM","12:30 PM","1:00 PM","1:30 PM","2:00 PM","2:30 PM","3:00 PM","3:30 PM","4:00 PM","4:30 PM","5:00 PM","5:30 PM","6:00 PM","6:30 PM","7:00 PM","7:30 PM","8:00 PM","8:30 PM","9:00 PM","9:30 PM","10:00 PM","10:30 PM","11:00 PM","11:30 PM"; final static String HORARIO_FINAL[] = {"0:00","0:30","1:00","1:30","2:00","2:30","3:00","3:30","4:00","4:30","5:00","5:30", "6:00","6:30","7:00","7:30","8:00","8:30","9:00","9:30","10:00","10:30","11:00","11:30","12:00", "12:30","13:00","13:30","14:00","14:30","15:00","15:30","16:00","16:30","17:00","17:30", "18:00","18:30","19:00","19:30","20:00","20:30","21:00","21:30","22:00","22:30","23:00","23:30"; final static int NUM_PARAMS = 13; final static int HORA_FIELD = 1; final static int PRESION_FIELD = 5; final static int FECHA_FIELD = 0; final static int EVENTOS_FIELD = 11; final static String DEFAULT = "?"; static Hashtable control_horario = new Hashtable(); ArrayList horas; /* utilizado para facilitar el proceso de busqueda */ ArrayList parametros; /* vector de parametros leido */ int puntero; int index; static void inicializarcontrolhorario(){ for (int i=0;i<horario_inicial.length;i++){ control_horario.put(horario_inicial[i],new Integer(0)); // indicar que todavía no se ha formateado dicha linea static void actualizarcontrolhorario(int hora_key){ 22
23 if (control_horario.containskey(horario_inicial[hora_key])){ control_horario.put(horario_inicial[hora_key],new Integer(1)); static boolean comprobarhoraactualizada(int hora_key){ // devolverá 1 cuando ya se haya leido la linea correspondiente a dicha hora if( control_horario.containskey(horario_inicial[hora_key])){ Integer ni = (Integer) control_horario.get(horario_inicial[hora_key]); if (ni.intvalue()==1) { return true; return false; static boolean comprobarhorarioincompleto(){ // comprobar si hay una linea que no se ha formateado o no está leida. return control_horario.containsvalue(new Integer(0)); /** Creates a new instance of FormatLinea */ public FormatLinea(String s,string fecha_fich,int linea_leida) { horas = new ArrayList(); for (int i = 0;i<HORARIO_INICIAL.length;i++){ horas.add(horario_inicial[i]); puntero = linea_leida; /* Vector de parametros */ /*fecha,hora,temperatura,rocio,humedad,presion,visibilidad,dir_viento,vel_viento,rafaga, precipitacion,eventos,condiciones;*/ String linea[] = s.split(","); parametros = new ArrayList(); parametros.add(fecha_fich); for (int x=0; x<linea.length; x++){ if (linea[x].equals("-")) linea[x] = DEFAULT; parametros.add(linea[x]); if ((parametros.size()<num_params)){ for (int b = parametros.size();b<num_params;b++){ parametros.add(default); index = 0; /* usado para comprobar si el dato leido corresponde a uno de los datos que queremos utilizar en el preprocesado*/ /* ver HORARIO_INICIAL, valores permitidos en el campo horas */ public int obtenerindice(){ index = horas.indexof(parametros.get(hora_field)); return index; public boolean comprobarsinuevaslineas(){ return (index!=puntero); // Solo se usará en el caso en el que comprobarsinuevaslineas es FALSE public String[] crearlineas(){ // 1.- Obtener el numero de lineas a crear int num_lineas = java.lang.math.abs(index-puntero); String nuevas_lineas[]= new String[num_lineas]; 23
24 for (int j=0;j<num_lineas;j++){ nuevas_lineas[j]=this.crearlineavacia(puntero+j); return nuevas_lineas; public String crearlineavacia(int index){ String linea_vacia = parametros.get(fecha_field)+","+horario_final[index]+","; for (int i=hora_field+1;i<num_params-1;i++){ linea_vacia=linea_vacia.concat(default+","); linea_vacia=linea_vacia.concat(default); return linea_vacia; public String formatearlinea(){ String linea_final = new String(); int i = 0; // 1.- Modificar el formato de las horas: 12:00 AM -> 0:00, y 11'30 PM -> 23:00 parametros.set(hora_field,horario_final[index]); if (parametros.get(8).equals("calm")){ parametros.set(8,"0.0"); // 3.-Crear la linea a devolver /* Cuando el campo eventos está vacio, al realizar la segmentación con StringTokenizer, no ha parece un Token *asociado a dicho campo. El tamaño del vector de parametros es menor a la longitud verdadera de dicho vector. Vamos a añadir el caracter - para indicar que está vacio */ for (i = 0;i<NUM_PARAMS;i++){ linea_final=linea_final.concat((string) parametros.get(i)); if (i<num_params-1) linea_final=linea_final.concat(","); // 4.- Reemplazar la cadena ",," por ",?," linea_final = linea_final.replaceall(",,", ",?,"); // 5.- Quitar el simbolo % linea_final = linea_final.replaceall("%", ""); // 2.- Comprobar si la humedad tiene como valor y en tal caso sustituir por - linea_final = linea_final.replaceall(" ", DEFAULT); linea_final = linea_final.replaceall("-9999", DEFAULT); // Sustituir N/A por el valor por defecto. linea_final = linea_final.replaceall("n/a", DEFAULT); // 5.- Actualizar control de lineas formateadas actualizarcontrolhorario(index); return linea_final; public FormatLinea(){ 24
25 Anexo II. Ficheros en MatLab utilizados para el preprocesado Mezclado e Interpolación filtro_mezclador.m num_lineas=48*3045+1; % n= num_lineas;; % convertir el fichero LEMD.arff a matriz [fecha_lemd,hora_lemd,temperatura_lemd,rocio_lemd,humedad_lemd,presion_lemd,visibilidad_lemd, dir_viento_lemd,vel_viento_lemd,rafaga_lemd,lluvia_lemd,eventos_lemd,condiciones_lemd] = textread('lemd.arff', '%s %s %s %s %s %s %s %s %s %s %s %s %s',num_lineas,'delimiter',','); matriz_lemd = [fecha_lemd hora_lemd temperatura_lemd rocio_lemd humedad_lemd presion_lemd visibilidad_lemd dir_viento_lemd vel_viento_lemd rafaga_lemd lluvia_lemd eventos_lemd condiciones_lemd]; [num_filas_lemd,num_columnas_lemd]=size(matriz_lemd); A=matriz_lemd(2:num_filas_lemd,:); [num_filas_lemd,num_columnas_lemd]=size(a); % convertir el fichero LEVS.arff a matriz [fecha_levs,hora_levs,temperatura_levs,rocio_levs,humedad_levs,presion_levs,visibilidad_levs, dir_viento_levs,vel_viento_levs,rafaga_levs,lluvia_levs,eventos_levs,condiciones_levs] = textread('lemd.arff', '%s %s %s %s %s %s %s %s %s %s %s %s %s',num_lineas,'delimiter',','); matriz_levs = [fecha_levs hora_levs temperatura_levs rocio_levs humedad_levs presion_levs visibilidad_levs dir_viento_levs vel_viento_levs rafaga_levs lluvia_levs eventos_levs condiciones_levs]; [num_filas_levs,num_columnas_levs]=size(matriz_levs); B=matriz_levs(2:num_filas_levs,:); [num_filas_levs,num_columnas_levs]=size(b); % Crear una matriz donde los elemntos no vacios si son numericos son la % media de ambos y si son alfanumericos un valor de ambos escogido % aleatoriamente. En caso de ausencia de un elemento, se usara el otro. Si % ambos elementos son elementos vacios, dicho elemento en la nueva matriz % tambien sera un elemento vacio % sabemos que ambas matrices tienen el mismo tamaño if (size(matriz_lemd)==size(matriz_levs)) C = cellstr(char(zeros(num_filas_lemd,num_columnas_lemd))); C(:,1:2)=A(:,1:2); for i=1:num_filas_lemd for j=3:num_columnas_lemd if (strcmp(a(i,j),'?')& strcmp(b(i,j),'?')) % Ambos elementos estan vacios C(i,j)=A(i,j); elseif ((strcmp(b(i,j),'?'))& (~ strcmp(a(i,j),'?'))) % Elemento B vacio C(i,j)=A(i,j); elseif ((strcmp(a(i,j),'?'))& (~ strcmp(b(i,j),'?'))) % Elemento A vacio C(i,j)=B(i,j); else % ambos elementos no vacios switch (j) case {3,4,7,9 % tomamos valores medios b = (str2num(char(a(i,j)))+str2num(char(b(i,j))))/2; C(i,j)=cellstr(num2str(b)); % FALTA case{5 b = (str2num(char(a(i,j)))+str2num(char(b(i,j))))/2; C(i,j)=cellstr(num2str(b)); % FALTA case{6 b = (str2num(char(a(i,j)))+str2num(char(b(i,j))))/2; C(i,j)=cellstr(num2str(b)); % FALTA case {8,13 25
26 % escogemos valor aleatorio if (mod(round(10*rand(1)),2)==1) C(i,j)=A(i,j); else C(i,j)=B(i,j); filtro_interpolador.m function [A] = filtro_interpolador(b) % num_lineas=48*3045+1; % % [a b c d e f g]=textread('lemd.arff','%s %s %s %s %s %s %s',5,'delimiter',',') % % fid = fopen('lemd.arff'); % [fecha,hora,temperatura,rocio,humedad,presion,visibilidad,dir_viento,vel_viento,rafaga,lluvia, eventos,condiciones] = textread('lemd.arff', '%s %s %s %s %s %s %s %s %s %s %s %s %s',num_lineas,'delimiter',','); % % fclose(fid); % interpolador = [fecha hora temperatura rocio humedad presion visibilidad dir_viento vel_viento rafaga lluvia eventos condiciones]; % [num_filas,num_columnas]=size(interpolador); % A=interpolador(2:num_filas,:); A = B; [num_filas,num_columnas]=size(a); for i=1:num_filas for j=3:num_columnas % comprobar si el parametro es una '?' en tal caso siempre que la % instancia anterior y la posterior (sin salirnos de los limites) % tengan valores, tomaremos el valor medio exceptuando para los % campos que son cadenas de texto: condiciones(13) y dir_viento(8) % donde tomaremos aleatoriamente uno de los dos resultados. % No interpolamos ni rafaga(10), ni lluvia(11) ni eventos(12) % porque disponemos de pocos datos y no los vamos a usar para % predecir. if ((i==1)&(strcmp(a(i,j),'?'))&(~ strcmp(a(i+1,j),'?'))&((j<10) (j==8) (j==13))) % primer elemento A(i,j)=A(i+1,j); elseif ((i==num_filas)&(strcmp(a(i,j),'?'))&(~strcmp(a(i- 1,j),'?'))&((j<10) (j==8) (j==13))) % ultimo elemento A(i,j)=A(i-1,j); else % resto de elementos if ((i~=1)&(i~=num_filas)&(strcmp(a(i,j),'?'))&(~ strcmp(a(i-1,j),'?'))&(~ strcmp(a(i+1,j),'?'))) % podemos modificar switch (j) case {3,4,7,9 % tomamos valores medios b = (str2num(char(a(i-1,j)))+str2num(char(a(i+1,j))))/2; A(i,j)=cellstr(num2str(b)); % FALTA case{5 b = (str2num(char(a(i-1,j)))+str2num(char(a(i+1,j))))/2; A(i,j)=cellstr(num2str(b)); % FALTA case{6 b = (str2num(char(a(i-1,j)))+str2num(char(a(i+1,j))))/2; A(i,j)=cellstr(num2str(b)); % FALTA case {8,13 % escogemos valor aleatorio if (mod(round(10*rand(1)),2)==1) A(i,j)=A(i+1,j); else A(i,j)=A(i-1,j); 26
27 Vector de Parámetros Mineria_temperatura_1h.m function [minero] = mineria_temperatura_1h(d) % % Creacion de la matriz de mineria para el fichero de training para predecir la temperatura con un % margen de precision de una hora. % % El vector de parametros que vamos a utilizar es el que sigue: % [temperatura,rocio,vel_viento,condiciones] = [3,4,9,13] de las muestras 3 % muestras anteriores, asi como la media de la temperatura y el rocio de % las 24 instancias anterirores segmentadas de 6 en 6. % Segmentaremos los datos por la fecha de estos... % Esto implica un vector de 42 parametros, posteriormente usaremos el % selector de parametros para obtener cuales son los parametros utiles. % En la matriz de mineria incluiremos tambien tres columnas mas % correspondientes al vector que queremos predecir: [fecha,hora,temperatura] W = 24; param = [ ]; [nrow,ncol]=size(d); % for i=1:nrow; % if(strcmp(d(i,1),' ')) % nrow_train=i-1 % break; % % minero = cell(nrow-w,18); [mr,mc]=size(minero); media1 = cellstr('?'); media2 = cellstr('?'); media3 = cellstr('?'); media4 = cellstr('?'); for i=1:mr if( (~strcmp(d(w+i-1,3),'?')) & (~strcmp(d(w+i-2,3),'?')) & (~strcmp(d(w+i- 3,3),'?')) & (~strcmp(d(w+i-4,3),'?')) & (~strcmp(d(w+i-5,3),'?')) & (~strcmp(d(w+i- 6,3),'?'))) media1 = mean([str2num(char(d(w+i-1,3))) str2num(char(d(w+i-2,3))) str2num(char(d(w+i-3,3))) str2num(char(d(w+i-4,3))) str2num(char(d(w+i-5,3))) str2num(char(d(w+i-6,3)))]); media1 = cellstr(num2str(media1)); if( (~strcmp(d(w+i-7,3),'?')) & (~strcmp(d(w+i-8,3),'?')) & (~strcmp(d(w+i- 9,3),'?')) & (~strcmp(d(w+i-10,3),'?')) & (~strcmp(d(w+i-11,3),'?')) & (~strcmp(d(w+i- 12,3),'?'))) media2 = mean([str2num(char(d(w+i-7,3))) str2num(char(d(w+i-8,3))) str2num(char(d(w+i-9,3))) str2num(char(d(w+i-10,3))) str2num(char(d(w+i-11,3))) str2num(char(d(w+i-12,3)))]); media2 = cellstr(num2str(media2)); if( (~strcmp(d(w+i-13,3),'?')) & (~strcmp(d(w+i-14,3),'?')) & (~strcmp(d(w+i- 15,3),'?')) & (~strcmp(d(w+i-16,3),'?')) & (~strcmp(d(w+i-17,3),'?')) & (~strcmp(d(w+i- 18,3),'?'))) media3 = mean([str2num(char(d(w+i-13,3))) str2num(char(d(w+i-14,3))) str2num(char(d(w+i-15,3))) str2num(char(d(w+i-16,3))) str2num(char(d(w+i-17,3))) str2num(char(d(w+i-18,3)))]); media3 = cellstr(num2str(media3)); 27
28 if( (~strcmp(d(w+i-19,3),'?')) & (~strcmp(d(w+i-20,3),'?')) & (~strcmp(d(w+i- 21,3),'?')) & (~strcmp(d(w+i-22,3),'?')) & (~strcmp(d(w+i-23,3),'?')) & (~strcmp(d(w+i- 24,3),'?'))) media4 = mean([str2num(char(d(w+i-19,3))) str2num(char(d(w+i-20,3))) str2num(char(d(w+i-21,3))) str2num(char(d(w+i-22,3))) str2num(char(d(w+i-23,3))) str2num(char(d(w+i-24,3)))]); media4 = cellstr(num2str(media4)); minero(i,:)=[d(i+w-1,param) D(i+W-2,param) D(i+W-3,param) media1 media2 media3 media4 D(i+W,[1 3])]; % _matrix(i,:)=[d(i-1,param) D(i-2,param) D(i-3,param) D(i-4,param) D(i-5,param) D(i-6,param) D(i,[1 2 3])]; % Segmentar en entrenamiento y evaluacion % [rowmin,colmin]=size(minero); Mineria_temperatura_24h.m function [minero] = mineria_temperatura_24h(d) % % Creacion de la matriz de mineria para el fichero de training para predecir la temperatura con un % margen de precision de 24 hora. % % El vector de parametros que vamos a utilizar es el que sigue: % [temperatura,rocio,vel_viento] = [3,4,9] de las muestras 5 % muestras anteriores, asi como la media de la temperatura y el rocio de la % media de las 72 horas anteriores: escogemos 12 muestras por dia. % Segmentaremos los datos por la fecha de estos... W = 72; param = [3 4 9]; [nrow,ncol]=size(d); % for i=1:nrow; % if(strcmp(d(i,1),' ')) % nrow_train=i-1 % break; % % minero = cell(nrow-w,20); [mr,mc]=size(minero); media1 = cellstr('?'); media2 = cellstr('?'); media3 = cellstr('?'); for i=1:mr if ((~strcmp(d(w+i-2,3),'?')) & (~strcmp(d(w+i-4,3),'?')) & (~strcmp(d(w+i- 6,3),'?')) & (~strcmp(d(w+i-8,3),'?')) & (~strcmp(d(w+i-10,3),'?')) & (~strcmp(d(w+i- 12,3),'?')) & (~strcmp(d(w+i-14,3),'?')) & (~strcmp(d(w+i-16,3),'?')) & (~strcmp(d(w+i- 18,3),'?')) & (~strcmp(d(w+i-20,3),'?')) & (~strcmp(d(w+i-22,3),'?')) & (~strcmp(d(w+i- 24,3),'?'))) media1 = mean([str2num(char(d(w+i-2,3))) str2num(char(d(w+i-4,3))) str2num(char(d(w+i-6,3))) str2num(char(d(w+i-8,3))) str2num(char(d(w+i-10,3))) str2num(char(d(w+i-12,3))) str2num(char(d(w+i-14,3))) str2num(char(d(w+i-16,3))) str2num(char(d(w+i-18,3))) str2num(char(d(w+i-20,3))) str2num(char(d(w+i-22,3))) str2num(char(d(w+i-24,3)))]); media1 = cellstr(num2str(media1)); if ((~strcmp(d(w+i-26,3),'?')) & (~strcmp(d(w+i-28,3),'?')) & (~strcmp(d(w+i- 30,3),'?')) & (~strcmp(d(w+i-32,3),'?')) & (~strcmp(d(w+i-34,3),'?')) & (~strcmp(d(w+i- 36,3),'?')) & (~strcmp(d(w+i-38,3),'?')) & (~strcmp(d(w+i-40,3),'?')) & (~strcmp(d(w+i- 42,3),'?')) & (~strcmp(d(w+i-44,3),'?')) & (~strcmp(d(w+i-46,3),'?')) & (~strcmp(d(w+i- 28
En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.
Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa
Más detallesLABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL
OBJETIVO Mejorar el nivel de comprensión y el manejo de las destrezas del estudiante para utilizar formulas en Microsoft Excel 2010. 1) DEFINICIÓN Una fórmula de Excel es un código especial que introducimos
Más detallesLección 24: Lenguaje algebraico y sustituciones
LECCIÓN Lección : Lenguaje algebraico y sustituciones En lecciones anteriores usted ya trabajó con ecuaciones. Las ecuaciones expresan una igualdad entre ciertas relaciones numéricas en las que se desconoce
Más detallesLEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)
APRENDERAPROGRAMAR.COM LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F) Sección: Cursos Categoría: Curso básico de programación en lenguaje C desde
Más detallesInstrucción IrA (GoTo). Saltos no naturales en el flujo normal de un programa. Pseudocódigo y diagramas de flujo. (CU00182A)
aprenderaprogramar.com Instrucción IrA (GoTo). Saltos no naturales en el flujo normal de un programa. Pseudocódigo y diagramas de flujo. (CU00182A) Sección: Cursos Categoría: Curso Bases de la programación
Más detallesModulo 1 El lenguaje Java
Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto
Más detallesPredicción de los ciclos de El Niño
Predicción de los ciclos de El Niño Israel Cendrero Sánchez I.T.T.Telemática Universidad Carlos III de Madrid Leganes,Madrid,España 100055713@alumnos.uc3m.es Beatriz López Moreno I.T.T.Telemática Universidad
Más detallesCASO PRÁCTICO DISTRIBUCIÓN DE COSTES
CASO PRÁCTICO DISTRIBUCIÓN DE COSTES Nuestra empresa tiene centros de distribución en tres ciudades europeas: Zaragoza, Milán y Burdeos. Hemos solicitado a los responsables de cada uno de los centros que
Más detallesConclusiones. Particionado Consciente de los Datos
Capítulo 6 Conclusiones Una de las principales conclusiones que se extraen de esta tesis es que para que un algoritmo de ordenación sea el más rápido para cualquier conjunto de datos a ordenar, debe ser
Más detallesAplicaciones Lineales
Aplicaciones Lineales Ejercicio Dada la matriz A = 0 2 0 a) Escribir explícitamente la aplicación lineal f : 2 cuya matriz asociada con respecto a las bases canónicas es A. En primer lugar definimos las
Más detallesCaso práctico de Cuadro de Mando con Tablas Dinámicas
1 Caso práctico de Cuadro de Mando con Tablas Dinámicas Luis Muñiz Socio Director de SisConGes & Estrategia Introducción Hay una frase célebre que nos permite decir que: Lo que no se mide no se puede controlar
Más detallesCentro de Capacitación en Informática
Fórmulas y Funciones Las fórmulas constituyen el núcleo de cualquier hoja de cálculo, y por tanto de Excel. Mediante fórmulas, se llevan a cabo todos los cálculos que se necesitan en una hoja de cálculo.
Más detalles11. Algunas clases estándar de Java (II)
122 A. García-Beltrán y J.M. Arranz 11. Algunas clases estándar de Java (II) Objetivos: a) Presentar la clase predefinida en Java para trabajar con arrays b) Interpretar el código fuente de una aplicación
Más detallesGESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)
APRENDERAPROGRAMAR.COM GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado I
Más detallesRegión de Murcia Consejería de Educación, Ciencia e Investigación. Manual Usuario FCT
. Manual Usuario FCT Murcia, 9 de Julio de 2007 Manual de Usuario FCT v1.0 pág. 2 de 73 ÍNDICE Manual Usuario FCT...1 1. Tipos de usuarios... 4 2. Modelo de navegación... 5 3. Servicios... 6 3.1. Convenios...
Más detallesMODELOS DE RECUPERACION
RECUPERACIÓN Y ORGANIZACIÓN DE LA INFORMACIÓN INGENIERÍA INFORMÁTICA RECUPERACIÓN Y ACCESO A LA INFORMACIÓN MODELOS DE RECUPERACION AUTOR: Rubén García Broncano NIA 100065530 grupo 81 1 INDICE 1- INTRODUCCIÓN
Más detallesServicio de estadísticas de Alojamiento Fecha de revisión: 19/09/2005
Servicio de estadísticas de Alojamiento Fecha de revisión: 19/09/2005 1. Acerca de este documento Este documento describe el servicio de estadísticas del que actualmente disfrutan algunas de las páginas
Más detallesEjercicio 1. Desarrollar un pequeño juego para practicar mecanografía.
Examen Curso 2001-2002. Convocatoria de Febrero Página 1 Ejercicio 1. Desarrollar un pequeño juego para practicar mecanografía. Este ejercicio se divide en dos partes con el fin de que el alumno no intente
Más detallesFigura 4.1 Clasificación de los lenguajes de bases de datos
1 Colección de Tesis Digitales Universidad de las Américas Puebla Romero Martínez, Modesto Este capítulo describen los distintos lenguajes para bases de datos, la forma en que se puede escribir un lenguaje
Más detallesAnálisis y cuantificación del Riesgo
Análisis y cuantificación del Riesgo 1 Qué es el análisis del Riesgo? 2. Métodos M de Análisis de riesgos 3. Método M de Montecarlo 4. Modelo de Análisis de Riesgos 5. Qué pasos de deben seguir para el
Más detallesProyectos de Innovación Docente
Proyectos de Innovación Docente Manual de Usuario Vicerrectorado de Docencia y Profesorado Contenido INTRODUCCIÓN... 3 DATOS PERSONALES... 6 Modificar email... 6 Modificar contraseña... 7 GESTIÓN PROYECTOS...
Más detallesMATEMÁTICAS CON LA HOJA DE CÁLCULO
MATEMÁTICAS CON LA HOJA DE CÁLCULO Podemos dar a esta aplicación un uso práctico en el aula de Matemáticas en varios sentidos: Como potente calculadora: sucesiones, límites, tablas estadísticas, parámetros
Más detallesDIGITALIZACIÓN DE DOCUMENTOS: PROYECTO DIGISAN
DIGITALIZACIÓN DE DOCUMENTOS: PROYECTO DIGISAN Francisco Belmonte Díaz Diseño e implementación de Sistemas Informáticos. Coordinación de Tareas de Programación Servicio de Gestión Informática. Consejería
Más detallesSolución al Reto Hacking v2.0 de Informática 64
Febrero 2007 Introducción Este documento describe dos soluciones posibles al segundo Reto Hacking de Informática 64 que se publicó el 10 de febrero de 2007 en la siguiente dirección web: http://retohacking2.elladodelmal.com
Más detalles9. Objetos y clases. 9.1. Clases
Programación orientada a objetos con Java 103 9. Objetos y clases Objetivos: a) Presentar el concepto de objeto, clase, atributo, método e instancia b) Interpretar el código fuente de una aplicación Java
Más detalles1.1. Introducción y conceptos básicos
Tema 1 Variables estadísticas Contenido 1.1. Introducción y conceptos básicos.................. 1 1.2. Tipos de variables estadísticas................... 2 1.3. Distribuciones de frecuencias....................
Más detallesPontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación
Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación Competencias IIC1103 Introducción a la Programación (I/2010) Interrogación 1 13 de Abril de 2010
Más detallesAdministración de Empresas. 11 Métodos dinámicos de evaluación de inversiones 11.1
Administración de Empresas. 11 Métodos dinámicos de evaluación de inversiones 11.1 TEMA 11: MÉTODOS DINÁMICOS DE SELECCIÓN DE INVERSIONES ESQUEMA DEL TEMA: 11.1. Valor actualizado neto. 11.2. Tasa interna
Más detallesSIIT SISTEMA INFORMÁTICO DE INSPECCIONES DE TRABAJO. Modulo de Planificación Manual de Usuario
SISTEMA INFORMÁTICO DE INSPECCIONES DE TRABAJO Modulo de Planificación Manual de Usuario Oficina General de Estadística e Informática Oficina de Informática Unidad de Análisis y Desarrollo MÓDULO DE PLANIFICACIÓN
Más detallesPrograma Presupuestos de Sevillana de Informática.
Programa Presupuestos de Sevillana de Informática. Introducción. En sus inicios, el programa Presupuestos estaba pensado únicamente para escribir e imprimir presupuestos, facilitando el trabajo con un
Más detallesCapitulo V Administración de memoria
Capitulo V Administración de memoria Introducción. Una de las tareas más importantes y complejas de un sistema operativo es la gestión de memoria. La gestión de memoria implica tratar la memoria principal
Más detallesIntroducción a la estadística y SPSS
Introducción a la estadística y SPSS Marcelo Rodríguez Ingeniero Estadístico - Magister en Estadística Universidad Católica del Maule Facultad de Ciencias Básicas Pedagogía en Matemática Estadística I
Más detallesUna investigación australiana reveló que posiblemente la disminución
CIENTÍFICOS TRABAJAN EN DETECCIÓN DE CÁNCER DE MAMA A TRAVÉS DE REDES NEURONALES ARTIFICIALES Constituye un apoyo para el médico y los radiólogos para evitar falsos diagnósticos Fernando Álvarez Una investigación
Más detallesGOOGLE NOTICIAS Y ALERTAS
GOOGLE NOTICIAS Y ALERTAS Curso de Noticias y Alertas por KZgunea se encuentra bajo licencia Creative Commons de Reconocimiento-NoComercial-CompartirIgual_3.0_ (CC-BY-NC-SA_3.0) Índice del curso 1. TEMA
Más detallesLa ventana de Microsoft Excel
Actividad N 1 Conceptos básicos de Planilla de Cálculo La ventana del Microsoft Excel y sus partes. Movimiento del cursor. Tipos de datos. Metodología de trabajo con planillas. La ventana de Microsoft
Más detallesManual de ayuda para la utilización del Correo Interno en el Campus Virtual
Manual de ayuda para la utilización del Correo Interno en el Campus Virtual Página 1 de 12 Contenido 1. INTRODUCCIÓN... 3 2. CONFIGURACIÓN DEL BLOQUE DE CORREO INTERNO... 3 3. GESTIÓN DEL CORREO... 4 4.
Más detallesGE Power Management. 6S``O[WS\bORS1]\TWUc`OQWÕ\g. GE-FILES 7\ab`cQQW]\Sa 539$ &
')) GE Power Management 6S``O[WS\bORS1]\TWUc`OQWÕ\g /\ãzwawars@suwab`]arszawabs[o GE-FILES 7\ab`cQQW]\Sa 539$ & *(Ã3RZHUÃ0DQDJHPHQW +D\DOJRTXHQRHQFXHQWUD" $OJRQRHVWiVXILFLHQWHPHQWHFODUR" 6,Ã 7,(1(Ã $/*Ô1Ã
Más detallesEXTRACTO Descripción del uso y manejo de SIRAIS 1.2
Manual de usuario EXTRACTO Descripción del uso y manejo de ELABORADO POR Dr. Javier Rodríguez Suárez Director General de Difusión e Investigación Ing. José Joel Lucero Morales Jefe de Enseñanza de la Dirección
Más detallesManual de usuario de Solmicro BI. Página 1
Manual de usuario de Solmicro BI Página 1 Índice 1. Estructura general del sistema, 2. Estructura de presentación de la información, 3. Acceso a Solmicro BI y los diferentes cuadros de mando, 4. Partes
Más detallesIntroducción a la Programación en MATLAB
Introducción a la Programación en MATLAB La programación en MATLAB se realiza básicamente sobre archivos M, o M-Files. Se los denomina de esta forma debido a su extensión.m. Estos archivos son simple archivos
Más detallesCAPÍTULO 10 Aplicaciones de la Derivada a Funciones Económicas
CAPÍTULO 10 Aplicaciones de la Derivada a Funciones Económicas Introducción En la economía, la variación de alguna cantidad con respecto a otra puede ser descrita por un concepto promedio o por un concepto
Más detallesGENERAR DOCUMENTOS HTML USANDO LENGUAJE PHP. EJERCICIO RESUELTO EJEMPLO SENCILLO. (CU00733B)
APRENDERAPROGRAMAR.COM GENERAR DOCUMENTOS HTML USANDO LENGUAJE PHP. EJERCICIO RESUELTO EJEMPLO SENCILLO. (CU00733B) Sección: Cursos Categoría: Tutorial básico del programador web: HTML desde cero Fecha
Más detallesDescarga Automática. Manual de Usuario. Operador del Mercado Ibérico de Energía - Polo Español Alfonso XI, 6 28014 Madrid
Descarga Automática Manual de Usuario Operador del Mercado Ibérico de Energía - Polo Español Alfonso XI, 6 28014 Madrid Versión 5.2 Fecha: 2008-10-15 Ref : MU_DescargaAutomática.doc ÍNDICE 1 INTRODUCCIÓN...
Más detallesObjetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.
Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero. Uso de Ficheros Todas las estructuras de datos vistas hasta ahora utilizan la
Más detallesLa calidad de los datos ha mejorado, se ha avanzado en la construcción de reglas de integridad.
MINERIA DE DATOS PREPROCESAMIENTO: LIMPIEZA Y TRANSFORMACIÓN El éxito de un proceso de minería de datos depende no sólo de tener todos los datos necesarios (una buena recopilación) sino de que éstos estén
Más detallesRevisión del Universo de empresas para la Estimación de los Datos Del Mercado Español de Investigación de Mercados y Opinión.
Revisión del Universo de empresas para la Estimación de los Datos Del Mercado Español de Investigación de Mercados y Opinión. (Enrique Matesanz y Vicente Castellanos, Año 2011) Según la experiencia acumulada
Más detallesTEMA 3: EN QUÉ CONSISTE?
Módulo 7 Sesión 3 5/16 TEMA 3: EN QUÉ CONSISTE? La metodología seguida para aplicar correctamente la técnica de RGT se basa en cuatro fases (Figura 1). En la primera de ellas, se seleccionan los elementos
Más detallesLectura de datos. Marcelo Reyes Notas sobre gretl 1.8.6cvs
Marcelo Reyes Notas sobre gretl 1.8.6cvs Lectura de datos gretl permite cargar datos desde diferentes muestras. Si lo que queremos es practicar se proporciona un generoso banco de datos accesible desde
Más detallesListados y Etiquetas personalizados de PrefGest WhitePaper Julio 2008
Listados y Etiquetas personalizados de PrefGest WhitePaper Julio 2008 Contenidos 1. Propósito 3 2. Introducción 4 3. Listados personalizados 5 3.1. Ejemplos prácticos 7 3.2. Consideraciones adicionales
Más detallesEvaluación de modelos para la predicción de la Bolsa
Evaluación de modelos para la predicción de la Bolsa Humberto Hernandez Ansorena Departamento de Ingeniería Telemática Universidad Carlos III de Madrid Madrid, España 10003975@alumnos.uc3m.es Rico Hario
Más detallesPráctica 3. Explorando datos con Statistix
Práctica 3. Explorando datos con Statistix En esta práctica aprenderemos a explorar un conjunto de datos utilizando el menú Statistics de nuestro programa. Un geyser es un nacimiento de agua hirviente
Más detallesEsta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro
USAR MYSQL EN PHP PHP tiene una librería de funciones nativas para conectarse a las base de datos MySQL. Por un lado reconoce la librería mysql y por otro mysqli. Se recomienda el uso de mysqli dado que
Más detallesMANEJANDO FICHEROS Y CARPETAS
Tutorial 1 MANEJANDO FICHEROS Y CARPETAS 1.1.- Creando carpetas Para organizar la información que almacenamos en nuestros ordenadores, tenemos una elemento denominado carpeta. Vamos a ver cómo, usando
Más detallesPruebas de unidad con JUnit
Pruebas de unidad con JUnit Cuando se implementa software, resulta recomendable comprobar que el código que hemos escrito funciona correctamente. Para ello, implementamos pruebas que verifican que nuestro
Más detallesINSTRUCTIVO DEL COMANDO MAKE
INSTRUCTIVO DEL COMANDO MAKE Introducción Un programa escrito en C está normalmente compuesto por varios archivos. Estos archivos se van modificando según se va completando o cambiando el programa. Cada
Más detallesMANUAL DEL PROGRAMA DE ASESORAMIENTO (Asesores) Navegador y limpiar caché/cookies...2 Acceso al programa de Asesoramiento... 7
MANUAL DEL PROGRAMA DE ASESORAMIENTO (Asesores) Índice Pasos previos a la visualización del programa: Navegador y limpiar caché/cookies...2 Acceso al programa de Asesoramiento... 7 Conceptos e información
Más detallesAprendizaje Automatizado
Aprendizaje Automatizado Aprendizaje Automatizado Programas que mejoran su comportamiento con la experiencia. Dos formas de adquirir experiencia: A partir de ejemplos suministrados por un usuario (un conjunto
Más detallesManual de OpenOffice Impress
Manual de OpenOffice Impress. Capítulo 4. Trabajando con gráficos, esquemas y plantillas 1 Manual de OpenOffice Impress Capítulo 4: Trabajando con gráficos, esquemas y plantillas Este material es una adaptación
Más detallesUnidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)
Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.
Más detallesIndicaciones específicas para los análisis estadísticos.
Tutorial básico de PSPP: Vídeo 1: Describe la interfaz del programa, explicando en qué consiste la vista de datos y la vista de variables. Vídeo 2: Muestra cómo crear una base de datos, comenzando por
Más detallesConstrucción de Escenarios
Construcción de Escenarios Consiste en observar los diferentes resultados de un modelo, cuando se introducen diferentes valores en las variables de entrada. Por ejemplo: Ventas, crecimiento de ventas,
Más detallesCuestionario sobre marketing 2.0
Cuestionario sobre marketing 2.0 1 Tienen que utilizar las empresas las nuevas herramientas web foros, redes sociales, blogs, comunidades - para seguir en el mercado? Hay muchas empresas que ni siquiera
Más detallesISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA
ARREGLOS EN JAVA I I N T R O D U C C I Ó N En las sesiones anteriores, los datos manejados en los programas han sido datos simples (carácter, entero, reales) En un gran número de problemas es necesario
Más detallesIntroducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual
Introducción Algunas de las personas que trabajan con SGBD relacionales parecen preguntarse porqué deberían preocuparse del diseño de las bases de datos que utilizan. Después de todo, la mayoría de los
Más detalles2. Estructura de un programa en Java
24 A. García-Beltrán y J.M. Arranz 2. Estructura de un programa en Java Objetivos: a) Describir la estructura del código fuente de una aplicación Java b) Presentar los conceptos de comentario y de identificador
Más detallesLos números racionales
Los números racionales Los números racionales Los números fraccionarios o fracciones permiten representar aquellas situaciones en las que se obtiene o se debe una parte de un objeto. Todas las fracciones
Más detallesAdaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: 93.410.92.92 Fax.: 93.419.86.49 e-mail:atcliente@websie.
Adaptación al NPGC Introducción Nexus 620, ya recoge el Nuevo Plan General Contable, que entrará en vigor el 1 de Enero de 2008. Este documento mostrará que debemos hacer a partir de esa fecha, según nuestra
Más detallesCentro de Capacitación en Informática
Combinación de funciones y fórmulas =SI(Y(...)...) o =Si(O(...)...) En secciones anteriores vimos que la función SI() debía cumplir una condición, como por ejemplo, controlar si en una celda determinada
Más detallesPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS Clase 1. Introducción Profesor: Diego Sánchez Gómez Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases
Más detallesPara crear formularios se utiliza la barra de herramientas Formulario, que se activa a través del comando Ver barra de herramientas.
Formularios TEMA: FORMULARIOS. 1. INTRODUCCIÓN. 2. CREACIÓN DE FORMULARIOS. 3. INTRODUCIR DATOS EN UN FORMULARIO. 4. MODIFICAR UN FORMULARIO 5. MANERAS DE GUARDAR UN FORMULARIO. 6. IMPRIMIR FORMULARIOS.
Más detallesFunciones en Excel (II)
Funciones en Excel (II) Las Funciones de Texto Jose Ignacio González Gómez Departamento de Economía Financiera y Contabilidad - Universidad de La Laguna www.jggomez.eu INDICE 1 Para qué las funciones de
Más detallesCAPITULO DE BIENES AFECTOS O DE INVERSIÓN
CAPITULO DE BIENES AFECTOS O DE INVERSIÓN INDICE: A ACCESO POR PRIMERA VEZ - PANTALLA DE REGISTRO DE UN NUEVO BIEN:... 3 1 - DATOS GENERALES:... 4 A. ALTA:... 4 B. BAJA:... 8 C. MEJORA DE BIEN... 9 D.
Más detallesFuentes de información y plataformas de almacenamiento de información P08/93150/01582
Fuentes de información y plataformas de almacenamiento de información P08/93150/01582 FUOC P06/M1003/01067 2 Fuentes de información y plataformas de almacenamiento de información FUOC P08/93150/01582 Fuentes
Más detallesContraseñas seguras: Cómo crearlas y utilizarlas
Contraseñas seguras: Cómo crearlas y utilizarlas Contraseñas seguras y seguridad de las contraseñas Las contraseñas son las claves que utiliza para obtener acceso a información personal que ha almacenado
Más detallesVECTORES. Módulo, dirección y sentido de un vector fijo En un vector fijo se llama módulo del mismo a la longitud del segmento que lo define.
VECTORES El estudio de los vectores es uno de tantos conocimientos de las matemáticas que provienen de la física. En esta ciencia se distingue entre magnitudes escalares y magnitudes vectoriales. Se llaman
Más detallesProgramación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVA Jorge Pérez Introducción a la Computación Jorge Pérez Programación Orientada a Objetos en JAVA 1 / 36 Orientación a Objetos OO es un paradigma de modelación y programación
Más detallesReservas - Rooming List
Reservas - Rooming List Desde esta pantalla obtendremos la rooming list del día o periodo solicitados. 1. Criterios para obtener la Rooming List En la parte derecha de la pantalla se nos ofrecen todas
Más detallesINFORME DE LA PRODUCTIVIDAD ESPAÑOLA EN FÍSICA SOLAR Y HELIOSFÉRICA EN EL PERIODO 1999-2008
INFORME DE LA PRODUCTIVIDAD ESPAÑOLA EN FÍSICA SOLAR Y HELIOSFÉRICA EN EL PERIODO 1999-2008 M. Gómez y M. Collados Instituto de Astrofísica de Canarias 27 de Junio de 2012 RED DE INFRAESTRUCTURAS DE ASTRONOMÍA
Más detallesEl proyecto Eratóstenes. Guía para el estudiante.
El proyecto Eratóstenes. Guía para el estudiante. En esta actividad vas a trabajar en colaboración con estudiantes de otra escuela para medir el radio de la Tierra. Vas a usar los mismos métodos y principios
Más detallesPlataforma Helvia. Manual de Administración. Bitácora. Versión 6.06.04
Plataforma Helvia Manual de Administración Bitácora Versión 6.06.04 ÍNDICE Acceso a la administración de la Bitácora... 3 Interfaz Gráfica... 3 Publicaciones... 4 Cómo Agregar una Publicación... 4 Cómo
Más detallesPráctica 2: Simón dice
Práctica 2: Simón dice Fecha de entrega: 31 de enero de 2016 0.- Descripción del juego (Wikipedia.org) Simon dice es un juego electrónico, creado por Ralph Baer, que consiste en reproducir una secuencia
Más detallesPráctica 10. Redes Neuronales
Práctica 10 Redes Neuronales En esta práctica trabajaremos con un sistema de aprendizaje basado en ejemplos que ya hemos visto con anterioridad (k-vecinos) y una implementación de las redes neuronales.
Más detallesCAPÍTULO 4: ALGORITMOS DE APRENDIZAJE
Capítulo 4 Algoritmos de Aprendizaje 26 CAPÍTULO 4: ALGORITMOS DE APRENDIZAJE En este capítulo se proporcionan las descripciones matemáticas de los principales algoritmos de aprendizaje para redes neuronales:
Más detallesCapitulo VII. Editor de Mapa de Tareas. Como hemos hablado en los capítulos anteriores, sabemos que parte del éxito
Capitulo VII Editor de Mapa de Tareas. Como hemos hablado en los capítulos anteriores, sabemos que parte del éxito que puede tener un ambiente de aprendizaje, consiste en el impacto que de primera instancia
Más detalles8.1. Introducción... 1. 8.2. Dependencia/independencia estadística... 2. 8.3. Representación gráfica: diagrama de dispersión... 3. 8.4. Regresión...
Tema 8 Análisis de dos variables: dependencia estadística y regresión Contenido 8.1. Introducción............................. 1 8.2. Dependencia/independencia estadística.............. 2 8.3. Representación
Más detallesProgramación I: Funciones y módulos
Programación I: Funciones y módulos Esteban De La Fuente Rubio 2 de abril de 23 Índice. Funciones.. Definición y llamado de funciones............................................. 2.2. Parámetros por omisión..................................................
Más detallesAnálisis de los datos
Universidad Complutense de Madrid CURSOS DE FORMACIÓN EN INFORMÁTICA Análisis de los datos Hojas de cálculo Tema 6 Análisis de los datos Una de las capacidades más interesantes de Excel es la actualización
Más detallesHERRAMIENTAS DE ACCESS ACCESS 2010. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE
HERRAMIENTAS DE ACCESS ACCESS 2010 Manual de Referencia para usuarios Salomón Ccance CCANCE WEBSITE HERRAMIENTAS DE ACCESS En esta unidad veremos algunas de las herramientas incorporadas de Access que
Más detallesUnidad: Representación gráfica del movimiento
Unidad: Representación gráfica del movimiento Aplicando y repasando el concepto de rapidez Esta primera actividad repasa el concepto de rapidez definido anteriormente. Posición Esta actividad introduce
Más detallesPARA COMERCIANTES Y AUTÓNOMOS. INFORMACIÓN SOBRE TARJETAS DE CRÉDITO.
PARA COMERCIANTES Y AUTÓNOMOS. INFORMACIÓN SOBRE TARJETAS DE CRÉDITO. QUÉ DEBES SABER CUANDO ACEPTAS UNA TARJETA COMO FORMA DE PAGO EN TU ESTABLECIMIENTO? Hace ya muchos años que la mayoría de las microempresas
Más detallesEl reto de la Gestión Documental
El reto de la Gestión Documental Introducción Quizá la pregunta más habitual que nos hacemos al considerar soluciones de Gestión Documental sea cómo puedo digitalizar la enorme cantidad de documentos que
Más detallesANALISIS MULTIVARIANTE
ANALISIS MULTIVARIANTE Es un conjunto de técnicas que se utilizan cuando se trabaja sobre colecciones de datos en las cuáles hay muchas variables implicadas. Los principales problemas, en este contexto,
Más detallesMatrices Invertibles y Elementos de Álgebra Matricial
Matrices Invertibles y Elementos de Álgebra Matricial Departamento de Matemáticas, CCIR/ITESM 12 de enero de 2011 Índice 91 Introducción 1 92 Transpuesta 1 93 Propiedades de la transpuesta 2 94 Matrices
Más detalles3º Grado Educación Infantil Bilingüe Números. Método Singapur y F. Bravo E R
MATEMÁTICAS PARA EDUCACIÓN INFANTIL N Enseñamos y aprendemos llos números:: Método Siingapur y Fernández Bravo,, Porr Clarra Garrcí ía,, Marrtta Gonzzál lezz y Crri isstti ina Lattorrrre.. Ú M E R O S
Más detallesManual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL
Manual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL Índice 1 Introducción... 5 1.1 Perfil de la aplicación... 5 1.2 Requisitos técnicos... 5 2 Manual de usuario... 7 2.1 Instalación del certificado...
Más detallesMódulo II - PowerPoint
Módulo II - PowerPoint Índice Copiando diapositivas Menú Edición... 2 Copiando diapositivas utilizando la barra de herramientas... 3 Copiando diapositivas utilizando el menú contextual... 3 Copiando diapositivas
Más detallesGUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.
GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS. 1 Direcciones o Ubicaciones, Carpetas y Archivos Botones de navegación. El botón Atrás permite volver a carpetas que hemos examinado anteriormente. El botón Arriba
Más detallesTeclado sobre una PDA para Personas con Parálisis Cerebral
Manual de Usuario - 1 - - 2 - Teclado sobre una PDA para Personas con Parálisis Cerebral Capítulo 1. MANUAL DE USUARIO 12.1 Descripción de la aplicación Este programa le permitirá llevar a cabo las siguientes
Más detallesEstructuras de Datos y Algoritmos
Estructuras de Datos y Algoritmos Año 205 Deducción de algunos esfuerzos para una Distribución pseudo-aleatoria de datos Introducción Vamos a desarrollar algunos de los esfuerzos para estructuras que utilizan
Más detallesTABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.
TABLA DE DECISION La tabla de decisión es una herramienta que sintetiza procesos en los cuales se dan un conjunto de condiciones y un conjunto de acciones a tomar según el valor que toman las condiciones.
Más detalles