Manipulación de datos en Mathematica

Ayer quería un dato sencillo: El promedio del tipo de cambio de MXN a USD durante el 2012.

Probablemente haya alguna aplicación en web en el que hubiera podido encontrar el dato prefabricado, pero no confío mucho, no se cómo obtuvieron el dato y no se de donde vienen los estimados. Así que tomé los datos del FMI, que a su vez los toma de los banco centrales. Probablemente habría sido más fácil obtener los datos directamente del Banco de México, pero quería ver cómo estaban los datos de Fondo Monetario. Resulta que esos datos tenían todos los problemas que podrían existir al tomar una base de datos.

Para esto tomé todos los datos desde enero hasta diciembre de 2012. La aplicación me da tres opciones, una era Excel, que por comodidad fue la primera que intenté bajar. Pero estos datos al importarlos en Mathematica me daba toda la fila como un sólo String, por lo que pensé que mejor intentaría otro tipo de datos.

Curiosamente tienen entre sus tipos de datos una extensión *.tsv, es decir tab-separated values, que pensé que sería muy similar al *.csv, separados por comas.

Así que al importar, tuve que quitar la información al inicio y al final. Como en las columnas el dato que me interesaba estaba en medio, tuve que transponer la matriz y repetir el proceso de limpia de datos. el programa se veía así:

tdc = Import["/Users/(...)/Exchange_Rate_Report.tsv"];
tdc = Drop[tdc, 3];
tdc = Drop[tdc, -13];
tdc = Transpose[tdc];
tdc = Drop[tdc, 2];
tdc = Drop[tdc, -2];
tdc = First[tdc];

Probablemente había una forma más rápida de hacerlo, no lo se… el punto es que quedó un vector limpio con sólo los tipos de cambio. El problema es que pasó los datos como String, y peor aún, como son datos separados por el tabulador, los últimos valores de la cadena de datos de cada uno de los valores tienen espacios en blanco que no nos sirven.

Por eso hice este pequeño programa que elimina los valores en blanco y a la vez se deshace de los días en que no hay registros:

temp = {};
For[i = 1, i < Length[tdc], i++,
 If[
  StringLength[Part[tdc, i]] > 3,
  temp = Append[temp, StringDrop[Part[tdc, i], -2]],
  Null
  ]
 ]
tdc = temp;

 

Notarán que he incluido un If que ejecuta la acción sólo si la cadena tiene más de tres elementos, esto ayuda a eliminar los datos que no tienen registro, de lo contrario el programa dejaría más basura de la que elimina.

Finalmente, he usado por primera vez (para mi) la función ToExpression, que convierte un String en expresión, lo cual ha resultado bastante útil. Ya una vez convertido a expresión, el vector es realmente manipulable, se puede realizar gráficos con él y realizar cálculos, como la media.

temp = {};
For[i = 1, i < Length[tdc], i++,
 temp = Append[temp, ToExpression[Part[tdc, i]]]
 ]
tdc = temp
Clear[temp];

 

Imagen

 

PS: La media del tipo de cambio MXN/USD en 2012 fue de 13.166.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s