Más manejo de Datos: MXN/RUB

Nuevamente he tomado los datos del FMI, aunque son horribles, son estándar. Los he tomado en formato TSV nuevamente, pues el formato XML tiene mucha basura y el Excel lo acomoda de una manera imposible de manejar (al importarlos, vectores que conjuntan los datos, por lo que no se puede trabajar a gusto, tendría que usar StringDrop de manera compulsiva).

Así que primero limpiamos los datos:

Clear["Global`*"]
list = Import["/Users/Marius/Desktop/Exchange_Rate_Report.tsv"];
list = Drop[list, 3];
list = Drop[list, -13];
list = Most[Rest[Transpose[list]]];
dates = list[[1]];
mxn = list[[2]];
rub = list[[3]];

Esto deja tres vectores, uno de fechas, y dos con los tipos de cambio (MXN/USD y RUB/USD). He descubierto que no es necesario hacer uso de StringDrop para limpiar las cadenas de datos, el simple hecho de usar ToExpression hace el truco y deja el dato limpio.

temp = {};
For[i = 1, i <= Length[mxn], i++,
 If[StringLength[mxn[[i]]] > 3,
  temp = Append[temp, ToExpression[mxn[[i]]]],
  If[StringLength[mxn[[i - 1]]] < 3 || StringLength[mxn[[i + 1]]] < 3,
   temp = Append[temp, Mean[temp]],
   temp =
    Append[temp,
     N[(ToExpression[mxn[[i + 1]]] + ToExpression[mxn[[i - 1]]])/2]]
   ]
  ]
 ]
mxn = temp;

Hay que notar que he usado un If anidado. Usé como referencia el tamaño del String para determinar lo que debe hacer. En el primer nivel del If, se pasan los datos normales al vector temporal, ya convertidos a formato de expresión, claro.

El segundo nivel determina si se puede realizar una interpolación. Para interpolar se necesitan el dato posterior y el anterior, por lo que si alguno de ellos falta no puede darse una interpolación apropiada. Cuando se da este otro caso se toma la media hasta el momento del vector temp. Else hace la interpolación con el dato i+1 e i-1.

Se hace lo mismo con el vector del Rublo:

temp = {};
For[i = 1, i <= Length[rub], i++,
 If[StringLength[rub[[i]]] > 3,
  temp = Append[temp, ToExpression[rub[[i]]]],
  If[StringLength[rub[[i - 1]]] < 3 || StringLength[rub[[i + 1]]] < 3,
   temp = Append[temp, 30],
   temp =
    Append[temp,
     N[(ToExpression[rub[[i + 1]]] + ToExpression[rub[[i - 1]]])/2]]
   ]
  ]
 ]
rub = temp;
Clear[temp];

A este punto me di cuenta de que, como el primer dato no existía, no había de donde tomar la interpolación, así que sólo tomé un dato medio: 13. Pude haber hecho otro If para este caso especial, pero no es tan importante. Finalmente lo que queríamos desde el inicio era el histórico del tipo de cambio MXN/RUB, por lo que hacemos la división (MXN/USD/RUB/USD=MXN/RUB):

mxnRub = mxn/rub;
lm = LinearModelFit[mxnRub, x, x]
Show[ListLinePlot[mxnRub], Plot[lm[x], {x, 1, Length[mxnRub]}],
 ImageSize -> Large]
lm["RSquared"]
lm["ANOVATable"]

He incluído una regresión lineal, que generó como función y=0.42048-1.35234*10^-6x, lo cual es una relación negativa pero casi despreciable. Así que si se hace negocios con Rusia puede que convenga hacer contratos con tipo de cambio MXN/RUB

Imagenema

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