gestión de tesorería con python - riunet.upv.es

21
Gestión de Tesorería con Python EDITORIAL UNIVERSITAT POLITÈCNICA DE VALÈNCIA Francisco Salas-Molina David Pla-Santamaría

Upload: others

Post on 13-Jun-2022

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Gestión de tesorería con Python - riunet.upv.es

EDITORIAL

EDITORIAL

Gestión de Tesorería con PythonFrancisco Salas-Molina David Pla-Santamaría

Este manual pretende servir de iniciación a la gestión de tesorería mediante el lenguaje de programación Python. Aunque su contenido está basado en los últimos avances en planificación financiera a corto plazo, el objetivo es básicamente instructivo y, por tanto, está pensado especialmente para ti, estudiante o profesional de las finanzas que quieres mejorar tus habilidades de gestión a través de los métodos cuantitativos. Como herramienta de trabajo básica utilizarás el lenguaje de programación de código abierto Python. Partiendo de los elementos básicos del lenguaje para tratar y visualizar datos de cualquier dominio de aplicación, aprenderás a realizar cálculos necesarios para aplicar los modelos de gestión de tesorería más utilizados. Además, podrás diseñar tu propio modelo de tesorería para poder simular diferentes estrategias de planificación. Planificar es prepararse para el futuro, y prever es prepararse para planificar. Por ello, finalmente aplicarás las últimas técnicas de previsión con el objetivo de reducir la incertidumbre sobre el futuro.

Gestión de Tesorería con Python

G

estió

n de T

esor

ería

con P

ytho

n

EDITORIALUNIVERSITAT POLITÈCNICA DE VALÈNCIA

Francisco Salas-Molina es Ingeniero de Or-ganización Industrial por la Universitat Poli-tècnica de València y Master en Creación de Empresas de Base Tecnológica por la Univer-sitat de València. Actualmente es director de I+D y Sistemas de Información en Hilaturas Ferre, S.A., una empresa industrial del sector textil valenciano. Ha colaborado con el Insti-tuto de Investigación en Inteligencia Artificial dependiente del CSIC en el desarrollo de mo-delos de gestión de tesorería basados en la previsión de series temporales. Ha publicado diversos trabajos en congresos y revistas in-ternacionales indexadas sobre investigación operativa y optimización multiobjetivo apli-cada a las finanzas.

David Pla-Santamaría es doctor en Ad-ministración y Dirección de Empresas por la Universitat Politècnica de València (UPV), en la que trabaja actualmente como Profesor Titular. Es también Director Académico del Master en Asesoramiento Financiero y Segu-ros (MAFE). El título AFE ha sido reconocido por la acreditación de la European Financial Planning Association y es el único ofertado en formato blended por una universidad pú-blica. En el área investigadora, el profesor Pla ha centrado su actividad en el análisis mul-ticriterio, la selección de carteras y el análi-sis del performance. Sus investigaciones en aplicaciones del análisis multicriterio a estos campos han sido publicadas en más de 10 revistas internacionales incluidas en el JCR.

Francisco Salas-Molina David Pla-Santamaría

Colección Académica

Colección de carácter multidisciplinar, orientada a los estudiantes y cuya finalidad es apoyar la gestión docente conforme a los planes de estudio de las titulaciones universitarias impartidas en la Universitat Politècnica de València, constituyendo bi-bliografía recomendada para el aprendizaje de una asignatura. Los títulos de la colección se clasifican en distintas series según el área de conocimiento y la mayoría de ellos están disponibles tanto en formato papel como electrónico.

Todos los títulos de la colección están eva-luados por el departamento de la Universitat Politècnica de València en el que se inscribe la materia, atendiendo a la oportunidad de la obra para el estudiante y la adecuación de la metodología empleada en su didáctica.

Para conocer más información sobre la colección, los títulos que la componen y cómo adquirirlos puede visitar la web http://www.lalibreria.upv.es

UPVUPV

Phyton™ es una marca propiedad de Python Software Foundation

Page 3: Gestión de tesorería con Python - riunet.upv.es

EDITORIALUNIVERSITAT POLITÈCNICA DE VALÈNCIA

Gestión de Tesorería conPython

Abril de 2017

Francisco Salas-Molina David Pla-Santamaria

Page 4: Gestión de tesorería con Python - riunet.upv.es

Colección Académica

Los contenidos de esta publicación han sido revisados por el Departamento de Dpto. de Economía y Ciencias Sociales de la Universitat Politécnica de València

Para referenciar esta publicación utilice la siguiente cita: Salas Molina, Francisco; Pla Santamaria, David. (2017). Gestión de Tesorería con Python. Valencia: Universitat Politècnica de València

© Francisco Salas Molina

© 2017, Editorial Universitat Politècnica de València distribución: Telf.: 963 877 012 / www.lalibreria.upv.es / Ref.: 0606_03_01_01

Imprime: Byprint Percom, sl

ISBN: 978-84-9048-622-1 Impreso bajo demanda

La Editorial UPV autoriza la reproducción, traducción y difusión parcial de la presente publicación con fines científicos, educativos y de investigación que no sean comerciales ni de lucro, siempre que se identifique y se reconozca debidamente a la Editorial UPV, la publicación y los autores. La autorización para reproducir, difundir o traducir el presente estudio, o compilar o crear obras derivadas del mismo en cualquier forma, con fines comerciales/lucrativos o sin ánimo de lucro, deberá solicitarse por escrito al correo [email protected].

Impreso en España

David Pla Santamaria

© Marca de la portada propiedad de Python Foundation Software

Page 5: Gestión de tesorería con Python - riunet.upv.es

Índice general

Resumen iii

Índice general iii

1 Introducción a Python para finanzas 31.1 Todo lo que debes saber sobre Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2 Analizando datos financieros con Pandas . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1.3 Visualizando datos financieros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2 La gestión de tesorería 252.1 ¿Qué es la gestión de tesorería? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.2 Un modelo determinista de gestión de tesorería . . . . . . . . . . . . . . . . . . . . . . 28

2.3 Un modelo estocástico de gestión de tesorería . . . . . . . . . . . . . . . . . . . . . . . 30

3 Simulación de modelos de tesorería 413.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3.2 Configuración del sistema de tesorería . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3.3 Galería de flujos de caja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

iii

Page 6: Gestión de tesorería con Python - riunet.upv.es

Índice general

3.4 Elaboración del plan de tesorería . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4 PyCaMa: Python para gestión de tesorería 634.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

4.2 Descripción detallada de PyCaMa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4.3 Un ejemplo ilustrativo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5 Previsiones de tesorería 735.1 Análisis de series temporales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

5.2 Modelos lineales de previsión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

5.3 Modelos no lineales de previsión: árboles de decisión . . . . . . . . . . . . . . . . . . 94

Bibliografía 99

iv

Page 7: Gestión de tesorería con Python - riunet.upv.es

Índice de figuras

1.1. Una celda de un Notebook esperándote. . . . . . . . . . . . . . 4

1.2. Tipos de celdas en un Notebook. . . . . . . . . . . . . . . . . . 5

1.3. Un primer gráfico de capitalización a interés compuesto. . . . . 19

1.4. Un segundo gráfico de capitalización a interés compuesto. . . . 20

1.5. Visualización conjunta de 4 gráficos. . . . . . . . . . . . . . . . 22

1.6. Un gráfico para ejercitarse. . . . . . . . . . . . . . . . . . . . . 23

2.1. Saldo bancario de una secuencia de cobros y pagos. . . . . . . . 30

2.2. Un modelo global de gestión de tesorería. . . . . . . . . . . . . 32

2.3. Modelo estocástico de Miller y Orr. . . . . . . . . . . . . . . . . 33

2.4. Saldo bancario resultante del ejercicio 2.3.3. . . . . . . . . . . . 40

3.1. Un sistema de tesorería con dos cuentas. . . . . . . . . . . . . . 43

3.2. Un sistema de tesorería de tres cuentas. . . . . . . . . . . . . . 46

3.3. Flujos de caja seguros. . . . . . . . . . . . . . . . . . . . . . . . 48

v

Page 8: Gestión de tesorería con Python - riunet.upv.es

Índice de figuras

3.4. Flujos de caja aleatorios normales o Gaussianos. . . . . . . . . 50

3.5. Saldo de caja previsto y real con error controlado. . . . . . . . . 52

3.6. El sistema de tesorería de tus finanzas personales. . . . . . . . . 53

3.7. Saldo previsto para el Plan 1. . . . . . . . . . . . . . . . . . . . 56

3.8. Saldo previsto para el Plan 2. . . . . . . . . . . . . . . . . . . . 58

3.9. El sistema de tesorería de una empresa. . . . . . . . . . . . . . 59

4.1. Saldo previsto para el Plan 3. . . . . . . . . . . . . . . . . . . . 71

5.1. Gráfico de evolución temporal para la empresa 51. . . . . . . . 76

5.2. Histograma de frecuencias para la empresa 51. . . . . . . . . . . 77

5.3. Histograma de frecuencias acumuladas para la empresa 51. . . . 78

5.4. Diagrama de caja y bigotes para la empresa 51. . . . . . . . . . 79

5.5. Diagrama de dispersión del el flujo de caja y el día del mes enla empresa 51. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

5.6. Gráfico de autocorrelación para el flujo de caja de la empresa 51. 82

5.7. Flujo medio diario por mes para la empresa 51. . . . . . . . . . 85

5.8. Resumen de ajuste del modelo de regresión. . . . . . . . . . . . 93

5.9. Un ejemplo de árbol de decisión. . . . . . . . . . . . . . . . . . 96

vi

Page 9: Gestión de tesorería con Python - riunet.upv.es

Índice de tablas

1.1. Un ejemplo de DataFrame. . . . . . . . . . . . . . . . . . . . . . 16

2.1. Datos de partida para el ejemplo 2.2.1. . . . . . . . . . . . . . . 29

2.2. Plan de tesorería del ejercicio 2.3.3. . . . . . . . . . . . . . . . . 39

3.1. Estructura de costes para el sistema de la Figura 3.1. . . . . . . 46

3.2. Estructura de costes y estado inicial para el sistema de la Figura3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

3.3. Resumen de resultados de tu planificación financiera. . . . . . . 58

3.4. Definición del sistema de la Figura 3.9. . . . . . . . . . . . . . . 60

4.1. Datos de entrada y salida de PyCaMa. . . . . . . . . . . . . . . 69

4.2. Resumen de resultados de tu planificación financiera. . . . . . . 71

5.1. Principales propiedades estadísticas del flujo de la empresa 51. . 80

vii

Page 10: Gestión de tesorería con Python - riunet.upv.es
Page 11: Gestión de tesorería con Python - riunet.upv.es

Resumen

Este manual pretende servir de iniciación a la gestión de tesorería medianteel lenguaje de programación Python. Aunque su contenido está basado en losúltimos avances en planificación financiera a corto plazo, el objetivo es básica-mente instructivo y, por tanto, está pensado especialmente para ti, estudianteo profesional de las finanzas cuya inquietud por mejorar tus habilidades degestión te lleva a explorar nuevos caminos de conocimiento.

En primer lugar, abordarás cuestiones introductorias a la gestión de tesoreríadesde un punto de vista cuantitativo. Para ello utilizarás como herramienta ellenguaje de programación de código abierto Python. Sin embargo, no es nece-sario que tengas ningún conocimiento previo sobre Python ya que este manualtambién persigue ayudarte a abrir una nueva ventana que probablemente esta-ba cerrada. Conocerás los elementos básicos del lenguaje para tratar y visua-lizar datos de cualquier dominio de aplicación. Aprenderás a realizar cálculosnecesarios para aplicar los métodos cuantitativos más habituales.

En finanzas el tiempo lo es casi todo. Por ello, en el Capítulo 1 encontrarásuna introducción a Python para finanzas que te permitirá manejar series tem-porales financieras. Verás lo sencillo que es importar datos, aplicar cualquiertratamiento que sea de tu interés sobre ellas y, finalmente, serás capaz de re-presentarlas gráficamente. También podrás analizar cuáles son las principalespropiedades estadísticas de cualquier variable financiera.

En el Capítulo 2, te ocuparás de la gestión de tesorería. Una vez que has conse-guido llenar tu mochila de herramientas útiles, es hora de empezar a utilizarlas.

1

Page 12: Gestión de tesorería con Python - riunet.upv.es

Índice de tablas

La gestión de tesorería es el área financiera en la que la automatización de to-davía tiene un largo camino por recorrer. ¿Te apetece empezar a caminar? Sies así, visitarás algunos de los modelos de gestión de tesorería más utilizados.Y si te sientes con fuerzas, en el Capítulo 3 podrás diseñar tu propio modelo detesorería con una, dos o cien cuentas bancarias para poder simular diferentesestrategias de planificación.

En el Capítulo 4, aprenderás a plantear el problema de gestión de tesoreríadesde un punto de vista de optimización. Para ello, podrás utilizar un módu-lo específico en Python para la obtención de los mejores planes de tesoreríateniendo en cuenta tanto el coste como el riesgo de los planes.

Finalmente, en el Capítulo 5, te darás cuenta de lo interesante que es preverel futuro financiero. Planificar es prepararse para el futuro, y prever es prepa-rarse para planificar. En multitud de ocasiones, la gran cantidad de datos quecada día generamos esconden patrones interesantes sobre los que nos podemosapoyar para tomar mejores decisiones. Te ayudaremos a descubrirlos.

Francisco Salas-Molina David [email protected] [email protected]

2

Page 13: Gestión de tesorería con Python - riunet.upv.es

Capítulo 1

Introducción a Pythonpara finanzas

En este capítulo conocerás qué es Python en la sección 1.1 ycómo te puede ayudar a analizar y visualizar datos financieros. Enla sección sección 1.2 aprenderás a importar, analizar y realizaroperaciones básicas de tratamiento de datos financieros. Los da-tos hablan si se les pregunta adecuadamente. Así que cuanto másconozcas sobre tus datos, mayor provecho podrás obtener de ellos.Finalmente, en la sección 1.3 encontrarás las instrucciones nece-sarias para visualizar los datos de manera que te resulte más fácilcomprenderlos y presentarlos a los demás.

3

Page 14: Gestión de tesorería con Python - riunet.upv.es

Capítulo 1. Introducción a Python para finanzas

1.1 Todo lo que debes saber sobre Python

Antes de empezar a construir necesitamos un entorno de trabajo. Nuestro labo-ratorio serán los Notebooks de Python que te permiten hacer un gran númerode cosas como ejecutar código, añadir texto, presentar gráficas o incrustarimágenes, en un entorno tan conocido como es tu navegador habitual. Lo másrecomendable es que primero descargues e instales la última versión de Python,a través de alguna plataforma de distribución como:

https://www.continuum.io/

Tranquilo no te va a costar nada y si tienes algún problema en la instalaciónsiempre puedes acudir a los numerosos tutoriales que hay en la red. Una veztengas instalado Python, ya puedes ejecutar jupyter notebook desde la interfazde consola PowerShell en Windows. Si no utilizas Windows, ya sabrás cómohacerlo. Por el contrario, si primero quieres probar de qué va esto de los Note-books sin instalar nada en tu equipo, puedes trabajar con ellos online en:

https://jupyter.org/

¿Todo en orden? ¿Has conseguido abrir tu primer Notebook de Python en tunavegador? ¿Eres capaz de ver el típico menú File-Edit-View y un In [ ] : conuna celda en blanco a su derecha como el de la Figura 1.1? Vamos a pensar quesí. Es hora de dar nuestro primer paso. Escribe lo siguiente en la celda: 2 + 2y pulsa simultáneamente las teclas Shift+Enter. ¿El resultado a la derecha deOut [1] : es 4? Enhorabuena, ya eres un programador@ de Python.

Figura 1.1: Una celda de un Notebook esperándote.

En los Notebooks de Python, hay cuatro tipos de celdas aunque probablementetrabajarás sólo con dos de ellas:

Code: Las celdas de tipo Code son las celdas que aparecen por defecto yse utilizan para insertar código ejecutable. Cuando se ejecutan (pulsando

4

Page 15: Gestión de tesorería con Python - riunet.upv.es

1.1 Todo lo que debes saber sobre Python

Shift+Enter), Python evalúa la expresión introducida y devuelve un re-sultado o un mensaje de error si hay algo que no ha funcionado bien. Siqueremos añadir un comentario en una celda de código, podemos utilizarel carácter especial ’#’.

Markdown: Este tipo de celdas se utilizan para insertar texto con formatoque puedes utilizar para explicar el código, para insertar fórmulas, enlacesa páginas web, imágenes o incluso vídeo.

Raw NBConvert : En estas celdas puedes escribir cualquier expresión queno se evalúa nunca. ¿Te cuento un secreto? No las he utilizado nunca.

Heading : Se utilizan para escribir títulos cosa que también se puede hacermediante una celda de tipo Markdown

Figura 1.2: Tipos de celdas en un Notebook.

Pulsando simultáneamente Shift+Enter, la celda actual se ejecuta y pasa a lasiguiente. Si no hay siguiente, crea una celda nueva. Pero hay otras combina-ciones de teclas que te resultarán de utilidad cuando empieces a trabajas conNotebooks:

Alt+Enter : inserta una nueva celda después de la actual (el signo + de-nota pulsar las dos teclas simultáneamente).

Esc → m: convierte la celda actual en una celda de tipo Markdown (elsigno → denota pulsar primero una y luego la otra).

Esc → a: inserta una celda arriba de la actual.

Esc → b: inserta una celda abajo de la actual.

Esc → d → d : elimina la celda actual.

5

Page 16: Gestión de tesorería con Python - riunet.upv.es

Capítulo 1. Introducción a Python para finanzas

Tab: permite mostrar los atributos de un objeto para no tener que apren-derlos de memoria.

Shift+Tab: muestra en pantalla la ayuda sobre cualquier función.

Si las palabras objeto y función no te resultan familiares, no te preocupes. Ve-remos de qué se trata más adelante. Otro de los aspectos importantes que debesconocer sobre Python es que muchas de las funcionalidades están almacenadasen librerías que hay que importar para poder utilizarse en un Notebook. Puedeparecer una tarea pesada pero tiene su lógica si tenemos en cuenta que haycentenares de librerías que probablemente no utilizaremos nunca.

Una librería es una colección de funciones implementadas enun lenguaje de programación que permite su reutilización a tra-vés de una interfaz determinada.

Algunas de las más importantes son: Numpy que contiene las herramientasbásicas de cálculo y análisis de datos almacenados en vectores y matrices;Matplotlib que permite la visualización de datos mediante gráficos; y Pandasque dispone de las estructuras de datos necesarias para la manipulación yvisualización avanzada de datos como las series temporales. Entenderás mejorcómo se hace mediante el siguiente ejemplo. Si ejecutamos la línea 1 paracalcular e1 sin importar la librería Numpy, verás un mensaje de error. Parahacerlo tienes tres opciones: importar sólo la función exp; importar todas lasfunciones de la librería sin asignarle una etiqueta; importar toda la libreríay asignarle un nombre. La primera de las opciones te permite importar sóloaquello que vas a necesitar y las otras dos son similares aunque es recomendableañadir un nombre para saber de qué librería procede la función que estásutilizando.

6

Page 17: Gestión de tesorería con Python - riunet.upv.es

1.1 Todo lo que debes saber sobre Python

Ejemplo 1.1.1 Importación de librerías.

1 pr in t ( exp (1 ) ) #Devuelve un e r r o r2 from numpy import exp #Importa s ó l o f un c i ón3 pr in t ( exp (1 ) )4 from numpy import ∗ #Importa todo s i n nombre5 pr in t ( exp (1 ) )6 import numpy as np #Importa todo con nombre7 np . exp (1 ) #Necesar io i nd i c a r nombre

En el ejemplo anterior, has utilizado la función print para presentar el resultadode la función exp(1) por pantalla. Cuando se ejecuta una celda con varias líneas,el Notebook sólo presenta el resultado de una instrucción de tipo mostrarvariable cómo la de la línea 7 si esta es la última línea de la celda. Parapresentarlas todas es necesario utilizar la función print. De nuevo aparece lapalabra función. Es hora de ver qué son y qué pueden hacer por ti.

Una función es un conjunto reutilizable de código que reci-be uno o varios argumentos de entrada, realiza una serie deacciones, y devuelve uno o varios resultados.

En Python, hay funciones previamente definidas como exp, que aceptan unargumento como 1 y que devuelven un resultado, en este caso, 2.718. Perotambién puedes definir tus propias funciones. Por ejemplo, imagina que tienesuna serie de flujos de caja almacenados en una lista llamada f y quieres calcularla media de estos valores. ¿Podrías diseñar una función que hiciera esto porti? El Ejemplo 1.1.2 muestra cómo podría hacerse. Como verás la definiciónde una función en Python comienza por la palabra def seguida del nombre dela función que incluye entre paréntesis los argumentos de la función acabandosiempre con dos puntos (:). En nuestro ejemplo el nombre que hemos elegidoes media y el argumento es lista cuyo nombre también elegimos nosotros. Ladefinición explícita del código de la función, es decir, las acciones que se reali-zan, empiezan después de los dos puntos y tras una tabulación. Python utilizalos dos puntos y las tabulaciones para delimitar las distintas partes del código.

7

Page 18: Gestión de tesorería con Python - riunet.upv.es

Capítulo 1. Introducción a Python para finanzas

Ejemplo 1.1.2 Definición de la función media.

1 de f media ( l i s t a ) :2 suma = 03 cuenta = 04 f o r elemento in l i s t a :5 suma = suma + elemento6 cuenta = cuenta + 17 r e turn ( suma/ cuenta )

La definición de nuestra función media incluye la inicialización de dos varia-bles auxiliares suma y cuenta que se utilizan para is sumando y contando loselementos de la lista. ¿Y cómo se recorre la lista? Mediante un bucle for. No teasustes, es sencillo. Un bucle for es una instrucción especial presente en todoslos lenguajes de programación que permite realizar la misma serie de instruc-ciones un número determinado de veces que viene dado normalmente por uncontador. En nuestro ejemplo, por la posición de los elementos de la lista. Dela misma manera que con la función, las instrucciones a realizar de maneraiterativa empiezan tras los dos puntos y una tabulación. Por ejemplo, paracalcular la media de los valores almacenados en una lista, sumamos el valor delelemento en cada iteración a la suma parcial de todos los elementos anteriores.Además, utilizamos la variable auxiliar cuenta para contar los elementos quehemos sumado. En ambos casos, lo hacemos mediante una instrucción de asig-nación que incluye el valor anterior de la variable. En otras palabras, leemosel valor de la variable suma, lo sumamos al valor del elemento de la lista, y elresultado lo asignamos de nuevo a la variable suma, actualizando su valor.

Finalmente, la instrucción return() incluye entre paréntesis el resultado quedebe devolver la función cuando sea llamada. Esta instrucción marca también elfin de la definición de la función. Para comprobar si has definido correctamentela función, haz una llamada a la función tal como se indica en el Ejemplo1.1.3. Para ello, primero crea una lista de valores f, escribiendo los valoresentre corchetes y separados por comas, y luego escribe el nombre de la funciónincluyendo como argumento la lista f que acabamos de crear. Otra funciónmuy útil de una lista es append que te permite añadir elementos al final deuna lista. Prueba a añadir un nuevo elemento y vuelve a llamar a la funciónmedia. Seguramente el resultado será diferente.

8

Page 19: Gestión de tesorería con Python - riunet.upv.es

1.1 Todo lo que debes saber sobre Python

Ejemplo 1.1.3 Llamando a la función media.

1 f = [1 ,2 ,3 , −1 , −2]2 pr in t ( media ( f ) ) # Resultado 0 .63 f . append (5 ) # Añade un nuevo elemento4 pr in t ( media ( f ) ) # Resultado 1 .33

Las listas son una de las estructuras de datos más utilizadas en Python, perohay más, por ejemplo, los vectores, las matrices, las tuplas, los rangos, losdiccionarios, las series, los data frames. Más adelante, verás qué ventajas tieneorganizar los datos de una determinada manera. De momento, con saber queexisten es suficiente.

Una estructura de datos es una forma determinada de or-ganizar los datos para poder ser utilizados de forma eficiente.

Probablemente estarás pensando que alguien habrá necesitado antes definiruna función tan común como la media y que lo más lógico sería reutilizar esafunción más que crear una nueva. Estás en lo cierto. Es más, el concepto dereutilización de código está en la esencia de un lenguaje abierto como Python.Para ello, debemos importar las librerías que contienen las funciones que nosinteresan tal como se explicó más arriba. Una búsqueda rápida en la red tedará información sobre qué librerías te pueden resultar de ayuda. La libreríade Python que contiene la mayoría de las funciones para cálculo científicoes Numpy, abreviación de Numerical Python que incluye un buen número deutilidades que te pueden resultar de gran ayuda en algún momento:

vectores, matrices y otras estructuras de datos multidimensionales;

funciones algebraicas, por ejemplo, para resolver sistemas de ecuacioneslineales;

generación de números aleatorios;

Si quieres averiguar más sobre Numpy, un buen sitio donde empezar a buscares McKinney (2012). Para cumplir con los objetivos marcados de este manual,al menos debes conocer cómo se crea un vector y una matriz, cómo se indexanlos elementos de vectores y matrices, y cómo realizar las operaciones básicasentre ellos para obtener la información que te interesa. Empecemos por crear

9

Page 20: Gestión de tesorería con Python - riunet.upv.es

Capítulo 1. Introducción a Python para finanzas

un vector a partir de la lista f del ejemplo anterior. Para importar Numpy, uti-lizaremos la convención habitual import numpy as np. Una vez creado, puedesutilizar funciones básicas de Python como len para presentar la longitud delvector, o funciones de Numpy para calcular la media y la desviación típica delos valores del vector.

Ejemplo 1.1.4 Crea un vector y presenta sus características básicas.

1 import numpy as np2 vec to r = np . array ( f ) # Equiva lente a vec to r = np . array ( [1 ,2 ,3 , −1 , −2])3 pr in t ( l en ( vec to r ) ) # Presenta l a l ong i tud de l vec to r4 pr in t (sum( vec to r ) ) # Presenta l a suma de l o s e lementos de l vec to r5 pr in t (np . mean( vec to r ) ) # Calcula l a media6 pr in t (np . std ( vec to r ) ) # Calcula l a d e s v i a c i ón t í p i ca

¿Y qué ocurre si queremos acceder al primer elemento de nuestro vector? Loprimero que debes tener en cuenta es que las operaciones de indexación enPython empiezan con el cero, no con el uno. Lo segundo es que para accedera un determinado elemento de un vector debes escribir el nombre del vectorseguido del índice entre corchetes. Si lo que pretendes es extraer los elementosdel vector en un determinado rango de índices debes utilizar el operador (:) talcomo se indica en el siguiente ejemplo:

Ejemplo 1.1.5 Indexación de los elementos de un vector.

1 pr in t ( f [ 1 ] ) # Presenta e l segundo elemento : 22 pr in t ( f [ 0 ] ) # Presenta e l primer elemento : 13 pr in t ( f [ 0 : 2 ] ) # Presenta desde e l primer elemento a l segundo : [ 1 , 2 ]4 pr in t ( f [ −1]) # Presenta e l ú l t imo elemento : −25 pr in t ( f [ 1 : ] ) # Presenta desde e l segundo a l ú l t imo : [ 2 , 3 , −1, −2]6 pr in t ( f [ −2 : ] ) # Presenta l o s dos ú l t imos : [−1 , −2]7 f [−1] = 0 # Asigna un nuevo va l o r a l ú l t imo elemento8 pr in t ( f [ −1]) # Presenta e l ú l t imo elemento : 0

La forma más sencilla de crear una matriz con unas dimensiones determina-das es la indicada en el Ejemplo 1.1.6. Sin embargo, imagina que tienes quecontrolar un conjunto de 3 cuentas bancarias y que quieres simular el efectoque tendrá en los próximos 4 días un flujo de caja aleatorio entero entre unvalor mínimo de -3 y máximo de 5. Si buscas un poco en la red verás que lafunción de Numpy que permite generar valores aleatorios enteros entre un valormínimo y un valor máximo es random.randint. Utilizando esta función puedescrear un vector de 12 valores aleatorios que posteriormente puedes transformaren la matriz M mediante la función reshape que recibe como argumento una

10

Page 21: Gestión de tesorería con Python - riunet.upv.es

Para seguir leyendo haga click aquí