2014-01-15

Convertir texto en número conservando los decimales en Access

Para convertir en Access una cadena de texto en número, como por ejemplo texto importado, es recomendable usar la función CDoble en lugar de Val. La documentación nos informa de lo siguiente:

La función Val sólo reconoce el punto (.) como separador decimal válido. Cuando se utilizan separadores decimales diferentes, como en aplicaciones internacionales, debe utilizar CDoble para convertir una cadena a un número.

Por tanto, cuando Access lee el campo de texto, convierte el número en entero. Para evitarlo, en nuestras consultas usaremos la función CDoble que conservará los decimales del campo. Podemos usar la función Val en el caso de que trabajemos exclusivamente con números enteros.


En SQL, la sintaxis sería:
SELECT Tabla.Texto AS Texto, Val([Texto]) AS Val, CDbl([Texto]) AS CDoble
FROM Tabla;

2014-01-12

Crear una lista alfabética automáticamente

En Excel con el controlador de relleno es posible rellenar una serie de números, fechas u otros elementos de serie integrados. Sin embargo, no es posible crear una lista alfabética del mismo modo. Si escribimos a en la celda A1 y arrastramos el controlador de relleno, en opciones de autorelleno no aparece la opción Rellenar serie.


Copiará a en todas las celdas o repetirá indefinidamente la secuencia escrita en las celdas iniciales.

Para crear una lista alfabética, además de manualmente, tenemos dos opciones complementarias:

Mediante fórmulas

=CARACTER(FILA(97:97)) 'Excel 2007 
=CAR(FILA(97:97))      'Excel 2010  
Y arrastramos el controlador de relleno hacia abajo.  Devuelve el carácter 97 del juego de caracteres ANSI: a. Con la función FILA logramos que al arrastrar nos devuelva el carácter siguiente. Si queremos la lista en mayúsculas cambiamos a FILA(65:65).

Creando una lista personalizada

    1. Primero pegamos como valores la lista alfabética generada con la fórmula del punto anterior y la seleccionamos.
    2. En Excel 2007: Botón de Microsoft Office > Opciones de Excel > Más frecuentes > Modificar listas personalizadas
        En Excel 2010: Archivo > Opciones > Avanzadas > General > Modificar listas personalizadas

    3. Comprobamos que en el cuadro Importar lista desde las celdas está el rango de la lista que deseamos importar. Presionamos Importar y luego dos veces Aceptar.



    4. Para utilizar la lista, escribimos en una celda un elemento de la misma y arrastramos el controlador de relleno. Excel rellenará en minúsculas o mayúsculas en función de las celdas seleccionadas al arrastrar. Y en orden descendente (hacia arriba o izquierda) o ascendente (hacia abajo o derecha).

2014-01-09

Formulario de Access: traducción de fórmulas Excel

Basándome en técnicas de entradas anteriores he creado el siguiente formulario en Access:



1. Tomamos los datos de las fórmulas de Excel 2010 en 16 idiomas de esta entrada.

2. A continuación normalizamos la tabla.

Tabla original. Cada columna no es una única variable y cada fila no es una única observación.

Tabla normalizada. Cada columna es una única variable y cada fila es una única observación.

Hay tres variables:
   Orden - Es la posición de la fórmula en relación a las fórmulas en inglés ordenadas alfabéticamente.
   Idioma - De la fórmula
   Fórmula - En el idioma correspondiente.

3. Creamos un formulario con cuadros combinados en cascada. Nos valemos de una consulta intermedia, que en función del idioma y función desde los que deseamos traducir, nos devuelve el orden de esa función en el idioma de destino.

Para que el formulario muestre por defecto el valor con la fórmula traducida, introducimos el siguiente código:
 FormulaDestino.Value = [FormulaDestino].[ItemData](0)
ItemData(0) para mostrar la primera fila de la lista, pues la propiedad ItemData comienza a partir de cero.

4. Finalmente añadimos una imagen a la que asociamos un código al hacer clic. Este código permite invertir el orden de los idiomas para no volver a seleccionarlos de nuevo.


Si alguien deseara el fichero de Access, que me lo haga saber en los comentarios a esta entrada.

2014-01-05

Crear un mapa con Fusion Tables de Google

Con Fusion Tables es muy fácil crear un mapa con marcas de posición rápidamente. 

Economy of the European Union (GDP)
Como ejemplo crearemos un mapa con los datos del PIB (GDP en inglés) de la Unión Europea. Los pasos a seguir son:
  • Importar datos
  • Generar mapa
  • Editar marcas de posición

Importar datos
  1. En Google Drive, clic en Crear.
  2. Elegimos Tabla dinámica (experimental).
  

   3. Tecleamos Europe GDP en la caja de búsqueda de Or search public data tables  y clic en Búsqueda o pulsamos Entrar.


   4. Import data > Import to Fusion Tables > See table

Generar mapa  

En teoría Fusion tables detecta automáticamente el tipo de datos adecuado para cada columna importada y, si la hubiera, una columna con la localización para poder crear el mapa. En nuestro caso, el proceso no funciona correctamente. No localiza la columna de localización y el resto de datos los importa como texto. Si tratamos de crear el mapa nos advierte de un error.


Editamos las columnas. Edit > Change columns. A la columna Member states le asignamos el tipoLocation para que pueda crear el mapa. Y a las otras 5 columnas reconocidas como texto les asignamos el tipo Number.




Editar marcas de posición
  1. Hacemos clic sobre la pestaña con el mapa. Clic sobre Tools > Change map
  2. Clic sobre Change info window... En la pestaña Automatic podemos escoger la información que queremos mostrar. En la pestaña Custom se puede alterar el estilo y el contenido.

2013-12-29

Usando RStudio por primera vez

Una vez instalado R y RStudio, es hora de abrir RStudio:


La interfaz está dividida en 4 ventanas que explicamos muy simplificadamente en la imagen anterior. Se puede tanto minimizar las ventanas como modificar su tamaño. Si no apareciera la ventana de la esquina superior izquierda, creamos un nuevo R script: File, New y clic sobre R Script o Ctrl+Mayús+N

Tres atajos muy útiles para comenzar son:

Ctrl+1 - Mueve el cursor al editor del código
Ctrl+2 - Mueve el cursor a la consola
Ctrl+L - Limpia la consola

Una vez en el editor de código podemos escribir nuestro código:

# - Delante del texto, para introducir comentarios
Ctrl+Mayús+C - Convierte las líneas seleccionadas en comentarios.
Ctrl+Entrar - Para ejecutar el código seleccionado en la consola.

RStudio ofrece la opción de completar automáticamente el código presionando el tabulador. Tanto en el editor de código como en la consola. También muestra argumentos de una función y completa el nombre de un objeto que hayamos creado previamente.

En el ejemplo anterior escribimos read, presionamos tabulador y nos sugiere funciones que comienzan con esas letras. Una vez seleccionada una función y tras abrir paréntesis, presionamos tabulador y nos mostrará los argumentos de dicha función.

Aprendiendo más


Como en la mayoría de los programas hay muchas maneras de realizar la misma acción: menús desplegables, botones y atajos (indicados en las dos maneras anteriores). Por ejemplo, si abrimos el menú desplegable View ,vemos comandos adicionales a los mencionados previamente, para navegar en RStudio. Y a la derecha indica el método abreviado mediante teclas.


Finalmente, para familiarizarnos con el programa, es recomendable leer las preguntas más frecuentes,  la documentación, y explorar la barra menú con sus desplegables. También es buena idea situarnos sobre un botón para que el texto de ayuda nos aclare su utilidad.

Hay un exhaustivo listado de atajos disponible aquí. En sucesivas entradas exploraremos más opciones de RStudio para mejorar nuestra productividad.

2013-12-19

Eliminar múltiples tablas de errores de importación en Access

Title Es frecuente que al importar ficheros, Access cree nuevas tablas con los errores de importación (tabla_ErroresDeImportación). Tres opciones para eliminarlas son:

1. Si es una importación puntual lo lógico es eliminar dicha tabla manualmente.

2. Si es un procedimiento que ejecutamos frecuentemente, sería recomendable incluir dentro del código de importación una instrucción que elimine dicha tabla, especificando el nombre de la misma:

DoCmd.RunSQL "DROP TABLE [tabla_ErroresDeImportación]"
3. Si en nuestro proceso de importación de ficheros se generaran varias tablas de errores, podríamos adaptar este código y copiarlo en un módulo. En este caso, nuestro código elimina aquellas tablas que contengan la palabra errores:

Sub EliminarTblsErroresImport()
Dim db As DAO.Database, t As DAO.TableDef, i As Integer
   Set db = CurrentDb()
      For i = db.TableDefs.Count - 1 To 0 Step -1
         Set t = db.TableDefs(i)
         If t.Name Like "*errores*" Then
            db.TableDefs.Delete t.Name
         End If
      Next i
   db.Close
End Sub
Podemos asociar el código anterior a un botón en un formulario que elimine todas esas tablas cuando deseemos. También utilizar el método de llamada para ejecutarlo desde nuestra subrutina de importación

Call EliminarTblsErroresImport
Las ventajas de esta tercera opción son:
  • Flexibilidad: no es necesario escribir el nombre exacto de la tabla de errores generada. Solo especificar una palabra que siempre incluirán dichas tablas: errores.
  • Más potente: elimina tantas tablas como errores generados.
  • Extensibilidad: podemos llamar dicha subrutina desde cualquier módulo y emplearla en cualquier base de datos Access.

Es necesario tener en referencias disponibles para Ms Access 2007 y 2010 Microsoft Office 12.0 Access database engine Object Library. En Ms Access 2003 Microsoft DAO 3.6 Object Library.

2013-12-13

Sistemas de ecuaciones lineales en Excel

Podemos usar Excel para resolver fácilmente sistemas de ecuaciones lineales. Tomemos el siguiente ejemplo:

2x + 3y + 3z = 20
  x + 4y + 3z = 15
5x + 3y + 4z = 30

1.1. Representamos el sistema con matrices, A*x = b:


1.2. Multiplicamos cada lado de la ecuación por la matriz inversa, A-1 *A * x = b*A-1  -> x = b*A-1 :



Empleamos la fórmula matricial MINVERSA. Selecciona el rango, inserta la fórmula y presiona Ctrl+Mayús+Entrar.

1.3. El paso final es multiplicar ambas matrices, x = b*A-1:


Empleamos la fórmula matricial MMULT. Selecciona el rango, inserta la fórmula y presiona Ctrl+Mayús+Entrar.

2. En un único paso:



Anidamos las dos funciones anteriores.

-Notas:
Es necesario que la matriz sea cuadrada y que tenga inversa. Una matriz es invertible si su determinante es distinto de cero. Podemos comprobar previamente si una matriz es invertible usando la función MDETERM:
 

Entradas relacionadas:

2013-12-06

Instalación de R y RStudio

Instalación de R

En esta entrada vamos a mostrar como instalar tanto R como RStudio.

R es un lenguaje y entorno de programación para análisis estadístico y gráfico. Está disponible en las siguientes plataformas: Linux, Mac OS y Windows. Así como en versiones de 32 y 64 bits. Las principales ventajas respecto a otros programas son:

  • Es gratuito, se puede instalar en cualquier ordenador y para cualquier plataforma, sin pagar ningún tipo de licencia.
  • Es un programa de código abierto susceptible de ser mantenido y mejorado continuamente por una comunidad muy activa e implicada.
  • Fruto en parte de las dos anteriores características, hay un ingente material disponible en Internet. Tanto de ayuda, como una extensa variedad de funciones, paquetes y métodos estadísticos desarrollados por miles de contribuidores.
  • Sus inmensas capacidades gráficas.

Para una información más exhaustiva en español consulta Introducción a R.

RStudio es una interfaz gráfica para R. Nos facilitará notablemente el trabajo con R. Es necesario tener instalado previamente R. Es gratuita, de código abierto y también está disponible para las plataformas anteriormente mencionadas, así como en un servidor web. Desde RStudio también podremos controlar si usamos la versión 32 o 64 bits en el caso de que tengamos ambas instaladas.

Instalación de R

En cran.r-project.org elige la plataforma para tu sistema. Para Windows haz clic aquí y descarga el instalador.

Tras descargarlo lo ejecutamos y seguimos los pasos del proceso de instalación. En el paso de instalación Select components nos dejará instalar las versiones de 32 o 64 bits. Lo más recomendable, si quieres instalar la versión de 64 bits, es instalar también la de 32 bits. Por si algún paquete (como el RODBC) que necesites usar no es compatible con la versión de 64-bits. Desde RStudio podremos controlar si usamos la versión 32 o 64 bits de R en el caso de que tengamos ambas instaladas.

Instalación de RStudio

Tras instalar R, descargamos el instalador de RStudio haciendo clic en Download RStudio Desktop.

Elegimos nuestra plataforma y seguimos los pasos del instalador. En el caso de que no dispongas permisos de administrador se pueden descargar los archivos binarios de RStudio.

Tras instalarlo, clic sobre el icono de Rstudio para abrir el programa:

2013-12-04

Números aleatorios de una lista o rango de opciones

Title En otras entradas hemos empleado los números aleatorios en repetidas ocasiones. En este caso, queremos generar números aleatorios de una lista o rango de opciones. Por ejemplo, elegir aleatoriamente un valor de la siguiente lista: 1, 3, 5, 7, 11.

Excel

Hay dos soluciones usadas frecuentemente en diversos foros:

1. Mediante una fórmula en la que introducimos la lista con los números a elegir.

=ELEGIR(ALEATORIO.ENTRE(1;5);1;3;5;7;11)
2. Usando un rango en lugar de teclear manualmente la lista dentro de la fórmula

=INDICE(A2:A6;ALEATORIO.ENTRE(1;5)) o 
=INDICE(A2:A6;ALEATORIO.ENTRE(1;CONTAR(A2:A6)))
F9 para generar otro nº aletorio
Podemos usar ambas fórmulas con una lista alfanumérica. Por ej.: Flaubert, Proust, Balzac, Montaigne, Racine.

1. Escribiendo la lista en el interior de la fórmula

=ELEGIR(ALEATORIO.ENTRE(1;5);"Flaubert";"Proust";"Balzac";"Montaigne";"Racine")
2. Usando un rango

=INDICE(E2:E6;ALEATORIO.ENTRE(1;5)) o 
=INDICE(E2:E6;ALEATORIO.ENTRE(1;CONTARA(E2:E6)))
F9 para generar otro nombre aleatorio

Access

En Access ya vimos cómo generar una muestra aleatoria. En este caso, creamos una tabla con los valores numéricos o de texto y extraemos una muestra de un sólo elemento: Con campo numérico en SQL:

SELECT TOP 1 TuTabla.*
FROM TuTabla
ORDER BY Rnd([campo numérico]);
Con campo de texto en SQL:

SELECT TOP 1 TuTabla.*
FROM TuTabla
ORDER BY Rnd(Len([campo de texto]));

Entradas relacionadas

2013-12-01

Gráfico de barras animado emulando Google Public Data Explorer - Parte 3 de 3

Finalizamos con los dos últimos pasos para elaborar un gráfico de barras animado emulando Google Public Data Explorer. Es importante señalar, que estos dos últimos pasos son independientes. Podemos optar por solamente uno de ellos o ambos. En anteriores entradas vimos:

1. Título del gráfico dinámico.
2. Formato personalizado del eje vertical.
3. Series ordenadas con los 10 primeros valores en orden descendente.
4. Control de número ActiveX para avanzar y retroceder en el tiempo.
5. Animación con código VBA asociada a dos botones para iniciar y detener la animación

4. Control de número ActiveX para avanzar y retroceder en el tiempo.

El penúltimo paso es insertar un control de número.

Una vez insertado, modificamos en el cuadro de diálogo Propiedades:

- LinkedCell - Celda vinculada al valor del control de número.
- Max - Valor máximo permitido. Fila donde está el primer país del último mes.
- Min -  Valor mínimo permitido. En este caso 1.
- SmallChange - Variación cada vez que se hace clic en la flecha de control de número. En este caso 30 pues es el número de filas necesarias para empezar en el siguiente mes.

Desactivamos el modo diseño y el cuadro de control estará listo para ser utilizado

5. Animación con código VBA asociada a dos botones para iniciar y detener la animación
Insertamos 4 formas para crear dos botones: play y stop. Dos rectángulos redondeados y en el interior un triángulo y un cuadrado;
A continuación, copiamos el siguiente código en un módulo.
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public StopMacro As Boolean
Sub Iniciar()
    Dim i As Integer
    StopMacro = False
    For i = 1 To 10711 Step 30: ' Min, Max y SmallChange
    DoEvents
    If StopMacro = True Then Exit Sub
        Range("G5").Value = i   ' Celda vinculada
        Application.Calculate
        Sleep (1)   ' Velocidad de la animación
    Next
End Sub
Sub Parar()
    StopMacro = True
End Sub

He modificado el código de S Anand para incluir incrementos de 30 en cada iteración (Step 30), y la opción de detener la subrutina pulsando el botón de stop. Creamos una variable booleana pública llamada Stopmacro. El loop continua mientras dicha variable sea false. Al apretar el botón stop, le asignaremos a Stopmacro el valor true, deteniéndolo.

Asignamos a cada botón su macro correspondiente: Iniciar y Parar.
Ya tendremos lista la animación:

Entradas para construir un gráfico animado emulando Google Public Data Explorer:
1. Título del gráfico dinámico.
2. Formato personalizado del eje vertical.
3. Series ordenadas con los 10 primeros valores en orden descendente.
4. Control de número ActiveX para avanzar y retroceder en el tiempo.
5. Animación con código VBA asociada a dos botones para iniciar y detener la animación.
Nube de datos