LibreOffice Con Python Para Cálculos Numéricos
-
Upload
camilo-bernal -
Category
Documents
-
view
221 -
download
2
Transcript of LibreOffice Con Python Para Cálculos Numéricos
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
1/19
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
2/19
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
3/19
1. Introducción
Aunque LibreOffice Calc brinda la posibilidad de crear algoritmos básicos para tratar
con problemas de métodos numéricos (muy frecuentes en matemáticas e ingeniería),
el lenguaje de Macros (OOoBasic) en ocasiones brinda unas estructuras de datos muy
simples, que obligan a escribir mucho código para realizar tareas que en otros lenguajes
resultarían simples.
También se pueden usar los componentes de UNO (Universal Network Objects, objetos
de red universales) para acceder a las funciones de Calc directamente, pero suele ser
un proceso complejo y desalentador para quienes no tienen (y no les interesa tener)
profundos conocimientos de LibreOffice.
Lo ideal sería tener un lenguaje tan simple como OOoBasic pero que a la vez brinde
mayores posibilidades de expresión sin aumentar la complejidad. Pues bien, esta opción
existe, y consiste en usar python como lenguaje para programar las macros en LibreOffice
Calc.
Python es un lenguaje de programación con un conjunto de estructuras de datos mucho
más amplio y versátil que OOoBasic, pero cuya sintaxis es igual de fácil. Con python se
tiene la posibilidad de usar listas, conjuntos, diccionarios, clases,... dentro de las macros
de LibreOffice, ampliando considerablemente la potencia de estas herramientas. Además,se pueden usar los numerosos módulos estándar, que ahorrarán la escritura de mucho
código en algunos problemas de métodos numéricos.
Aunque su funcionalidad dentro de las macros de LibreOffice puede ser limitada (por
ahora), python puede facilitar enormemente el trabajo de cálculos numéricos en una hoja
de cálculo. La mejor alternativa sería usar python y OOoBasic en conjunto, con lo cual
se obtiene una funcionalidad completa.
1
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
4/19
2. ¿Qué es LibreOffice?
LibreOffice es la mejor Suite Ofimática que el dinero no puede comprar.
Comparada con Microsoft Office, puede realizar el 95 % de las tareas que hace esta, másun 100000000 % de funciones que sólo se pueden realizar con LibreOffice. La razón de esto
es que LibreOffice es de código abierto, de manera que puedes cambiar la herramienta
como quieras y hasta donde quieras. El único límite es la imaginación. Si además usas
LibreOffice junto con GNU/Linux, puedes convertir a LibreOffice en el Dios de todas
las herramientas de oficina.
Concretamente, LibreOffice se describe como una suite de productividad moderna, fácil
de usar y de código abierto, para procesar texto, hojas de cálculo, presentaciones y más.
La utilidad de hojas de cálculo usada aquí se llama LibreOffice Calc en la versión 4.1.3.2.
2
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
5/19
3. ¿Qué es GNU/Linux?
GNU/Linux es el mejor sistema operativo que el dinero no puede comprar.
Comparado con Microsoft Windows, es más rápido, no tiene virus, es multitarea y mul-tiusuario, no cobra por la licencia, no cobra por actualizaciones, no roba tu información
personal para enviarla a servidores remotos,... y más.
Comparado con Mac OS, es multitarea y multiusuario, no te deja en la ruina económica,
no te dice qué tipo de persona eres por usarlo (tú decides quién eres, por ejemplo una
persona auténtica),... y más, aunque se reconoce la superioridad de Mac OS sobre Mi-
crosoft Windows, ambos sistemas te cobran cifras astronómicas por darte mucho menos
de lo que GNU/Linux te daría a precios ridículamente bajos (Ojo: no confundir valor
con precio).
Concretamente, Linux es un sistema operativo: un conjunto de programas que le permi-
ten interactuar con su ordenador y ejecutar otros programas.
Un sistema operativo consiste en varios programas fundamentales que necesita el orde-
nador para poder comunicar y recibir instrucciones de los usuarios; tales como leer y
escribir datos en el disco duro, cintas, e impresoras; controlar el uso de la memoria; y
ejecutar otros programas. La parte más importante de un sistema operativo es el núcleo.
En un sistema GNU/Linux, Linux es el núcleo. El resto del sistema consiste en otros
programas, muchos de los cuales fueron escritos por o para el proyecto GNU.
3
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
6/19
4. ¿Qué es Python?
Python es un lenguaje de programación multiparadigma (soporta programación orien-
tada a objetos, programación imperativa y programación funcional). Es un lenguaje
interpretado multiplataforma (se puede usar en Microsoft Windows, GNU/Linux, Unix
y MacOS) y de tipado dinámico.
El intérprete de Python viene pre-instalado en los sistemas tipo Unix (GNU/Linux y
MacOS). Para los que usan Microsoft Windows deben buscarlo en google.
4
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
7/19
5. ¿Cómo usar python para escribir macros de
LibreOffice?
Una completa explicación de los principios conceptuales y técnicos del uso de python enLibreOffice puede encontrarse en internet. Sin embargo, el propósito del presente docu-
mento es mantener las cosas lo más simple posible, y por tanto se hará una explicación
del cómo (superficialmente) y se deja al lector la tarea de averiguar el qué y el por qué.
La explicación que se da aquí funciona para la plataforma GNU/Linux, de modo que es
preciso hacer algunas pequeñas modificaciones para que funcione para los usuarios de
Windows y MacOS.
Lo que se necesita esencialmente son cuatro elementos: 1) Una versión de LibreOffice
4.1 o Superior, 2) Una versión del intérprete de python 2.7 o Superior, 3) El paquete
python-uno y 4) El paquete libreoffice-script-provider-python. Estos paquetes se pueden
instalar fácilmente desde el gestor de software o el emulador de terminal.
Una vez instalados, los scripts de python se almacenarán en el directorio /usr/lib/libreof-
fice/share/Scripts/python (en caso de que no sea así, es preciso revisar la configuración
particular de libreoffice en su sistema). En este directorio se crearán los subdirectorios de
trabajo que sean necesarios (hay que tener privilegios de administrador para realizar este
tipo de tareas). En nuestro caso se creará el subdirectorio ’Matematicas’, para escribirlos scripts de ejemplo, para empezar se puede crear un fichero llamado ’Ejemplos.py’.
Se recomienda hacer una lectura rápida a la documentación de python y LibreOffice
para no quedar perdidos en los ejemplos, aunque si estas leyendo esto, seguramente ya
sabes de qué va el asunto.
5
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
8/19
6. Algunos ejemplos explicativos
6.1. Obtener (get) una celda para manipular su valor
La función que captura una celda para obtener su valor u otorgarle otro es una de las más
básicas y esenciales, pues permitirá interactuar con la primera hoja del documento Calc
sobre el que estemos trabajando. En el fichero ’Ejemplos.py’ escribiremos esta función
de la siguiente manera:
Listing 1: Función CP
def CP(columna=0, f i l a =0):
e s c r i t o r i o = XSCRIPTCONTEXT. ge tD es kt op ( )O b je t o = e s c r i t o r i o . g e tC u rr e nt C om po ne n t ( )
H oj a = O b je t o . C u r r e n t C o n t r o l l e r . A c t i v e S h e e t
C e ld a = H oj a . g e t C e l l B y P o s i t i o n ( c o lu mn a , f i l a )
return Celda
6.2. Aplicar una función
La siguiente función se encarga de leer un número entero de una celda, asignarlo a la
variable x y retornar el resultado de aplicar f(x) = x^3+x+1
Listing 2: Función f
def f ( c o lu mn a =0 , f i l a = 0 ) :
x = i nt (CP(col umna , f i l a ) . V alue )
F = x^3+x+1
return F
6.3. Obtener el factorial de un número
La función lee el número entero de una celda y retorna su factorial.
6
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
9/19
Listing 3: Funcion factorial
def f a c t o r i a l ( c olumna =0 , f i l a = 0) :
x = i nt (CP(col umna , f i l a ) . V alue )
f a ct = 1
i f x > 0 :
f o r i in range ( 1 , x + 1 ):
f a c t ∗= ireturn f a c t
6.4. Números armónicos
La función escribe unos números, calcula los números armónicos H N =
N n=1
1
n, y com-
prueba la veracidad de los análisis matemáticos que establecen que H N ≈ ln (N ) +0,57721 para N grande.
Listing 4: Funcion armonico
def armonico ( ) :
import math
#O b t ie n e l o s d at os i n i c i a l e s
d at os = [ 1 , 1 00 , 1 00 0 , 1 00 00 , 1 00 0 00 0 ]#O b t i e n e l o s n um er os a r mo n ic o s
a r m o n i co s = [ ]
f o r dato in datos :
n h = 0
f o r i in range ( 1 , d a to + 1) :
nh += 1/ i
armon icos . append( nh)
#O bt i en e l o s d a t o s d e c om pa ra ci on
d_comparacion = [ ]
f o r dato in datos :
d_comparacion . append( math. l og ( dato )+0. 5772 1)
#E s cr i be l a i nf or ma ci on en l a h oj a de c a l c u l o
# −E s c r ib i r d at os i n i c i a l e s f i l a = 0
7
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
10/19
col umna = 0
CP( c olu mna , f i l a ) . S t r i n g = "N"
f i l a += 1
f o r dato in datos :
CP( c o lu mn a , f i l a ) . V al ue = d a t of i l a += 1
# −E s c r i b i r n um er os a r mo n ic o s f i l a = 0
col umna = 1
CP(col umna , f i l a ) . St ri ng = "H_N"
f i l a += 1
f o r nh in armon icos :
CP(col umna , f i l a ) . V alue = nhf i l a += 1
# −E s c r i b i r v a l o r d e c om pa ra ci on f i l a = 0
col umna = 2
CP( c o lu mn a , f i l a ) . S t r i n g = " Ln (N) + 0 , 5 7 72 1 "
f i l a += 1
f o r d_c in d_comparacion :
CP(col umna , f i l a ) . V alue = d_c
f i l a += 1
6.5. Una función a trozos
La función recibe unos valores procedentes de dos celdas y calcula la siguiente expresión:
T (a, x) =
a ln (x) si x > 0
cosa
x
+ sin
a
x
+ ex si x
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
11/19
a = CP(col _a , f i l _ a ) . V alue
x = CP(col_ x , f i l _ x ) . V alue
Resul tado = N one
i f x > 0 :
R e s u l t a d o = a ∗ math. log ( x)e l i f x < 0 :
Resu ltad o = math. cos ( a/x)+math. si n ( a/x)+math. exp( x)
e l s e :
R e s u l t a d o = 0
return R e s u l t a d o
6.6. Estadísticas básicas
La función genera unos valores de prueba, calcula algunos datos estadísticos básicos y
luego escribe la información en la hoja de cálculo.
Listing 6: Funcion estadistica
def e s t a d i s t i c a ( ) :
import random
import math
#Gen er ar 20 v a l o r e s d e p ru eb a
v a l o r e s = [ ]
f o r i in range ( 2 0 ) :
v a l o re s . append( random. uni form (0 , 1 00 ))
#E s t a d i s t i c a s b a s i ca s
# −Maximomaximo = max( v a l o r e s )
# −Minimo
minimo = min( v a l o r e s )# −Promediopromedi o = sum( v a l o r e s ) / len ( v a l o r e s )
# −Varianza v l r _ v = 0
f o r v a l o r in v a l o r e s :
vlr_v += math. pow( ( v a l o r − promedi o ) , 2)
9
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
12/19
v a ri a nz a = v lr _v / ( len ( v a l o r e s ) − 1)# −D e sv i a ci o n e s t a nd a r desv _ est = math . sq rt ( v ar i an za )
#
#ESCRIBIR LA INFORMACION
#
# −E s c r i b i r v a l o r e s de p ru eb a f i l a = 0
col umna = 0
CP( c o lu mn a , f i l a ) . S t r i n g = " X_i "
f i l a += 1
f o r dato in v a l o r e s :
CP( c o lu mn a , f i l a ) . V al ue = d a t of i l a += 1
# −E s c r ib i r e s t a d i s t i c a s b a s i c a s CP(2 , 2 ). Stri ng = "Maximo : "
CP( 3 ,2 ) . Value = maximo
CP(2 , 3) . St ri ng = "Minimo : "
CP( 3 ,3 ) . Value = minimo
CP(2 , 4 ). St ri ng = " Promedio : "
CP(3 , 4 ). V alue = promedi o
CP(2 , 5 ). Stri ng = " V ari anza : "
CP ( 3 , 5 ) . V al ue = v a r i a n z a
CP ( 2 , 6 ) . S t r i n g = " D es . E s t a n da r : "
CP(3 , 6 ). V alue = desv _ est
6.7. Algunas funciones interesantes presentes en el módulo math
de python
factorial(x): Devuelve el factorial de x
gamma(x): Devuelve la función gamma de x
hypot(x,y): Devuelve la distancia euclidiana (√
x2 + y2)
10
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
13/19
e: Número e (2.718281828459045)
pi: Número π ( 3.141592653589793)
6.8. Otros módulos de python
Algunos módulos adicionales de python son:
python-simpy: Lenguaje de simulación de eventos discretos basados en procesos
pytho-glpk: Interfaz para resolver problemas de programación lineal a gran escala
python-numpy: Herramienta para operar con vectores n-dimensionales
python-sympy: CAS(Computer Algebra System) para python
python-patsy: Libreria para describir modelos estadísticos
Con estos y otros módulos, puedes convertir a tus macros de LibreOffice en unas herra-
mientas muy potentes y prácticamente ilimitadas.
11
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
14/19
7. Conclusiones
Es posible escribir macros en LibreOffice con el lenguaje python, de una manera
igual de sencilla y agradable que OOoBasic, pero con toda la potencia y versatilidad
de un lenguaje de programación profesional.
Las macros escritas en python pueden extender enormemente la capacidad de las
hojas de cálculo de LibreOffice.
12
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
15/19
Referencias
[1] Wikipedia: La enciclopedia libre. GNU/Linux.
http://es.wikipedia.org/wiki/GNU/Linux?oldid=78087514. Fecha de acceso: 11 nov
2014.
[2] Wikipedia: La enciclopedia libre. Software libre.
http://es.wikipedia.org/wiki/Software_libre?oldid=78063707. Fecha de acceso:
mié 12 nov 2014.
[3] Wikipedia: La enciclopedia libre. Python. http://es.wikipedia.org/w/index.php?oldid=75999492.
Fecha de acceso: vie 15 ago 2014.
13
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
16/19
A. Script de cálculos matemáticos
Aquí se anexa el script completo con todos los ejemplos.
Listing 7: Ejemplo - Calculos matematicos
import uno
def CP(columna=0, f i l a =0):
e s c r i t o r i o = XSCRIPTCONTEXT. ge tD es kt op ( )
O b je t o = e s c r i t o r i o . g e tC u rr e nt C om po ne n t ( )
H oj a = O b je t o . C u r r e n t C o n t r o l l e r . A c t i v e S h e e t
C e ld a = H oj a . g e t C e l l B y P o s i t i o n ( c o lu mn a , f i l a )
return Celda
def f ( c o lu mn a =0 , f i l a = 0 ) :
x = i nt (CP(col umna , f i l a ) . V alue )
F = x^3+x+1
return F
def f a c t o r i a l ( c olumna =0 , f i l a = 0) :
x = i nt (CP(col umna , f i l a ) . V alue )
f a ct = 1
i f x > 0 :
f o r i in range ( 1 , x + 1 ):
f a c t ∗= ireturn f a c t
def armonico ( ) :
import math
#O b t ie n e l o s d at os i n i c i a l e s d at os = [ 1 , 1 00 , 1 00 0 , 1 00 00 , 1 00 0 00 0 ]
#O b t i e n e l o s n um er os a r mo n ic o s
a r m o n i co s = [ ]
f o r dato in datos :
n h = 0
f o r i in range ( 1 , d a to + 1) :
14
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
17/19
nh += 1/ i
armon icos . append( nh)
#O bt i en e l o s d a t o s d e c om pa ra ci on
d_comparacion = [ ]
f o r dato in datos :d_comparacion . append( math. l og ( dato )+0. 5772 1)
#E s cr i be l a i nf or ma ci on en l a h oj a de c a l c u l o
# −E s c r ib i r d at os i n i c i a l e s f i l a = 0
col umna = 0
CP( c olu mna , f i l a ) . S t r i n g = "N"
f i l a += 1
f o r dato in datos :CP( c o lu mn a , f i l a ) . V al ue = d a t o
f i l a += 1
# −E s c r i b i r n um er os a r mo n ic o s f i l a = 0
col umna = 1
CP(col umna , f i l a ) . St ri ng = "H_N"
f i l a += 1
f o r nh in armon icos :
CP(col umna , f i l a ) . V alue = nh
f i l a += 1
# −E s c r i b i r v a l o r d e c om pa ra ci on f i l a = 0
col umna = 2
CP( c o lu mn a , f i l a ) . S t r i n g = " Ln (N) + 0 , 5 7 72 1 "
f i l a += 1
f o r d_c in d_comparacion :
CP(col umna , f i l a ) . V alue = d_c
f i l a += 1
def T( c o l_ a =0 , f i l _ a =0 , c ol _x =0 , f i l _ x = 1 ):
import math
15
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
18/19
a = CP(col _a , f i l _ a ) . V alue
x = CP(col_ x , f i l _ x ) . V alue
Resul tado = N one
i f x > 0 :
R e s u l t a d o = a ∗ math. log ( x)e l i f x < 0 :
Resu ltad o = math. cos ( a/x)+math. si n ( a/x)+math. exp( x)
e l s e :
R e s u l t a d o = 0
return R e s u l t a d o
def e s t a d i s t i c a ( ) :
import randomimport math
#Gen er ar 20 v a l o r e s d e p ru eb a
v a l o r e s = [ ]
f o r i in range ( 2 0 ) :
v a l o re s . append( random. uni form (0 , 1 00 ))
#E s t a d i s t i c a s b a s i ca s
# −Maximomaximo = max( v a l o r e s )
# −Minimominimo = min( v a l o r e s )
# −Promediopromedi o = sum( v a l o r e s ) / len ( v a l o r e s )
# −Varianza v l r _ v = 0
f o r v a l o r in v a l o r e s :
vlr_v += math. pow( ( v a l o r
− promedi o ) , 2)
v a ri a nz a = v lr _v / ( len ( v a l o r e s ) − 1)# −D e sv i a ci o n e s t a nd a r desv _ est = math . sq rt ( v ar i an za )
#
#ESCRIBIR LA INFORMACION
#
16
-
8/18/2019 LibreOffice Con Python Para Cálculos Numéricos
19/19
# −E s c r i b i r v a l o r e s de p ru eb a f i l a = 0
col umna = 0
CP( c o lu mn a , f i l a ) . S t r i n g = " X_i "
f i l a += 1f o r dato in v a l o r e s :
CP( c o lu mn a , f i l a ) . V al ue = d a t o
f i l a += 1
# −E s c r ib i r e s t a d i s t i c a s b a s i c a s CP(2 , 2 ). Stri ng = "Maximo : "
CP( 3 ,2 ) . Value = maximo
CP(2 , 3) . St ri ng = "Minimo : "
CP( 3 ,3 ) . Value = minimoCP(2 , 4 ). St ri ng = " Promedio : "
CP(3 , 4 ). V alue = promedi o
CP(2 , 5 ). Stri ng = " V ari anza : "
CP ( 3 , 5 ) . V al ue = v a r i a n z a
CP ( 2 , 6 ) . S t r i n g = " D es . E s t a n da r : "
CP(3 , 6 ). V alue = desv _ est
g _ ex p or t ed S cr i pt s = f , f a c t o r i a l , a rmo nico , T, e s t a d i s t i c a ,
17