Você está na página 1de 14

El USO DEL PYTHON COMO

HERRAMIENTA PARA EL ANÁLISIS


EN LA INDUSTRIA ELÉCTRICA.
Gonzalo Oscar Eulate Choque – Alejandro Gianluca Eulate Mollo

Abstract.

This paper presents a review of the use of Python for different types of analysis in the
electrical industry, the use of Python in geographic information systems among others.
We can cite the implementation of script in the software DIgSILENT POWER FACTORY,
implementation of script in the CYMDIST software, and also a review of the use of Python
as a real alternative in numerical analysis, thanks to its libraries called Numpy / Matplotlib
for numerical operations, Cython for code optimizations low, IPython to work interactively,
etc.

Keywords – Script, Digsilent, Cymdist, ArcGis, GIS, Matlab, Python.

RESUMEN.

El presente trabajo presenta una revisión del uso del Python para diferentes tipos de análisis
en la industria eléctrica, el uso de Python en los sistemas de información geográfica entre
otros. Podemos citar la implementación de script en el software DIgSILENT POWER FACTORY,
implementación de script en el software CYMDIST, así también una revisión del uso del Python
como una alternativa real en el análisis numérico, gracias a sus librerías llamadas Numpy
/ Matplotlib para operaciones numéricas, Cython para optimizaciones de código a bajo nivel,
IPython para trabajar de forma interactiva, etc.

INTRODUCCIÓN.

Los sistemas eléctricos en constante crecimiento requieren el análisis exhaustivo de la operación


para el conocimiento de las diferentes variables eléctricas, que en muchos casos son de manera
informática y repetitiva que demandan tiempo y recursos que por lo general son escasos. La
automatización de los diferentes análisis de los sistemas eléctricos, proporcionan los elementos
necesarios para la toma de decisiones para la operación optima de los sistemas, información en
tiempo real, información de los distintos parámetros eléctricos entre otros.

En la actualidad existen herramientas como el DIgSILENT POWER FACTORY que se utiliza para
el análisis de los sistemas eléctricos de potencia, el CYME que se utiliza para el análisis de los
sistemas eléctricos de distribución, el ArcGis para los sistemas de información geográfica, etc.,
de amplio uso en el caso de Bolivia. Las herramientas mencionadas tienen en común que se
pueden automatizar mediante el uso del software Python, se pueden acceder a la modificación
de los parámetros mediante programación en Python.

El software Digsilent Power Factory, es una herramienta integrada para el análisis de sistemas
eléctricos de potencia, caracterizando técnicas confiables y flexibles de modelado y algoritmos.
El programa utiliza un ambiente de trabajo muy similar al que utiliza Windows.

El software DIgSILENT dispone de un modulo para programación DPL (Digsilent Program


Language), asimismo dispone el trabajo en script en Python, que puede ser usado para tareas
de automatización que presenta además el acceso a todos los objetos, a los atributos de los
elementos, acceso a todos los comandos (por ejemplo load flow) [9].

22
Colegio de Ingenieros Electricistas y Electrónicos
El software CYME es un conjunto de programas para el análisis de redes eléctricas, entre los que
podemos mencionar el estimador de estado de redes de distribución, protección de distancia,
análisis de redes secundarias malladas, etc.

Para la automatización en el análisis de las redes eléctricas, CYME ha incorporado el scripting


de Python, El lenguaje de programación de secuencias de comandos Python viene con un “Site
Package”. Con el scripting de Python, el usuario puede realizar fácilmente análisis por lotes,
automatizar estudios de rutina, crear nuevos algoritmos y recuperar rápidamente informaciones
con un simple clic sobre un script [9].

El software ArcGis comprende una serie de aplicaciones, que utilizadas en conjunto, permiten
realizar funciones que alimentan y administran un sistema de información geográfica (SIG), desde
creación de mapas, manejo y análisis de información, edición de datos, metadatos y publicación de
mapas en internet. Tiene diferentes módulos (aplicaciones) como el ArcGis Desktop, ArcCatalog,
ArcToolbox, ArcMAP. Trabaja con el Shape File que es el archivo principal que se utiliza en el
ArcGis, el mismo que está formado por varias extensiones.

MATLAB es un software de cálculo técnico de altas prestaciones para cálculo numérico y


visualización que integra análisis numérico, calculo matricial, procesamiento de señales, gráficos
y entorno de programación en script m.

Tiene un entorno fácil de usar, donde los problemas y las soluciones son expresados como se
escriben matemáticamente. El nombre MATLAB proviene de ``Matrix Laboratory’’ (Laboratorio de
Matrices). MATLAB fue escrito originalmente para proporcionar un acceso sencillo al software
matricial desarrollado por los proyectos LINPACK y EISPACK, que juntos representan lo más
avanzado en programas de cálculo matricial. MATLAB es un sistema interactivo cuyo elemento
básico de datos es una matriz que no requiere dimensionamiento.

MATLAB también proporciona una serie de soluciones específicas denominadas TOOLBOXES,


para el procesamiento de señales, diseño de sistemas de control, simulación de sistemas
dinámicos, inteligencia artificial, etc.

SOFTWARE PYTHON.

El software Python es un lenguaje de programación interpretado cuya filosofía hace hincapié


en una sintaxis que favorezca un código legible. Se trata de un lenguaje de programación
multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor
medida, programación funcional.

Python puede ser utilizado en diversas plataformas y sistemas operativos, entre los que podemos
destacar los más populares, cómo Windows, Mac OS X y Linux. Pero, además, Python también
puede funcionar en smartphones, Nokia desarrolló un intérprete de esté lenguaje para su sistema
operativo Symbian.

Python es open source, todos los usuarios del Python pueden contribuir a su desarrollo y divulgación.
Además, no es necesario pagar ninguna licencia para distribuir el software desarrollado con esté
lenguaje.

Fue creado por Guido van Rossum y su nombre se debe a la afición de su creador a los humoristas
británicos Monty Python.
Se trata de un lenguaje de programación en scripts, competencia directa de Perl.

Python permite dividir el programa en módulos reutilizables desde otros programas Python.

23
Colegio de Ingenieros Electricistas y Electrónicos
También viene con una gran colección de módulos estándar que proporcionan E/S de ficheros,
llamadas al sistema, sockets, interfaces GUI, etc.

Características generales de Python

Lenguaje de programación de alto nivel del tipo scripting.


Diseñado para ser fácil de leer y simple de implementar.
Es código abierto (de libre uso).
Puede ejecutarse en Mac, Windows y sistemas Unix; también ha sido portado a máquinas virtual
JAVA y .NET.
Es a menudo usado para desarrollar aplicaciones web y contenido web dinámico.
Se utiliza para crear extensiones tipo plug-ins para programas de 2d y 3d como Autodesk Maya,
GIMP, Blender, Inkscape, etc.

Los scripts de Python tienen la extensión de archivo .PY, que pueden ser parseados y ejecutados
inmediatamente.

Permite grabar programas compilados con extensión de archivo .PYC, los cuales suelen ser
usados como módulo que pueden ser referenciados por otros programas Python.

Python nació de la mano de Guido van Rossum, un programador de origen holandés que desarrolló
este lenguaje de programación a finales de los años 80 para el Centro para las Matemáticas y la
Informática de los Países Bajos que buscaba un lenguaje de programación para ser utilizado bajo
el sistema operativo Amoeba de Andrew S. Tanenbaum que fuese capaz de sustituir al lenguaje
ABC. ¿Y qué es Python? Un lenguaje de programación de alto nivel que fue diseñado con una
sintaxis muy limpia que permitiese obtener códigos que fuesen fáciles de leer, es multiplataforma
y soporta orientación a objetos, programación imperativa e, incluso, programación funcional.

Con un nombre que era un guiño al grupo de humoristas Monty Python, Van Rossum asumió el papel
del BDFL de Python y siguió a la cabeza de los desarrollos de este lenguaje. En 1991, Van Rossum
publicó la versión 0.9.0 del lenguaje en el que aparecían clases con herencia o excepciones, en
1994 se formó el primer foro de discusión alrededor de este lenguaje además de lanzarse, en el
mes de enero, la versión 1.0 del lenguaje (que incluía herramientas para programación funcional).
En 1995, Van Rossum dejó el Centro para las Matemáticas y la Informática de los Países Bajos
y se marchó a Estados Unidos a continuar el desarrollo de Python en la Corporation for National
Research Initiatives hasta que en el año 2000, Van Rossum y su equipo de desarrolladores se
marcharon a BeOpen.com donde lanzaron Python 2.0 (que incluía un recolector de basura) hasta
marcharse, de nuevo, a Digital Creations (ambos movimientos motivados por la idea de trabajar
en software comercial).

Python está presente en muchas de las aplicaciones y servicios que utilizamos de manera habitual,
por ejemplo, el cliente oficial de Dropbox está desarrollado en Python, el Software Center de
Ubuntu, el gestor de ebooks Calibre (que está escrito en Python y en C), el servicio de streaming
Flumotion, el gestor de listas de correo Mailman o, incluso, YouTube también lo utiliza.

Se presenta a continuación las características del Python extractado de la referencia [13].


Posee una sintaxis sencilla: rápido aprendizaje.
Tratamiento de excepciones con nombre.
Extensible a otros sistemas software.
Flexible en el tratamiento del lenguaje, un módulo que interactuará con un sistema externo puede
ser probado con una “imitación” del sistema escrito en Python.
Es un lenguaje dinámicamente interpretado.
Es orientado a objetos:

24
Colegio de Ingenieros Electricistas y Electrónicos
• Herencia múltiple.
• Ligadura dinámica.
• Polimorfismo.
Su núcleo es también orientado a objetos: jerarquía de clases.
Portable: está implementado en C estándar usando E/S Posix.
Gratuito, y de libre distribución.
Las desventajas del Python las extractamos de la referencia [13].

Podemos suponer que la mayoría de los programas escritos hoy en día podrían pasarse a
Python, pero él sólo no sería suficiente para la cantidad de aplicaciones que están orientadas a
componentes compilados.
Por ejemplo, no está indicado para las siguientes aplicaciones:
2 Algoritmos de compresión de datos:
Estos algoritmos traducen un flujo de datos a una forma más pequeña.
Esto implica examinar cada byte, y hacer un tratamiento estadístico. Para grandes cantidades de
datos los compresores escritos en Python resultan demasiado lentos.
2 Controladores de dispositivos:
Al igual que antes, una aplicación que realice millones de operaciones en punto flotante no
uniformes será demasiado lenta en Python. 2 Operaciones críticas de bases de datos.
2 Operaciones altamente especializadas.

IMPLEMENTACIÓN DE SCRIPT.

A continuación se describe la implementación de script en el Digsilent, Cymdist, ArcGis y análisis


numérico en el Python.

IMPLEMENTACIÓN DE SCRIPT EN DIGSILENT.

A partir de la versión 15.1.6, se tiene la opción del uso de script para la automatización en el
análisis de los sistemas eléctricos de potencia.

Para empezar el uso de script de Python, se requiere la instalación del Python versión 3.2.2 que
se encuentra en el subdirectorio PYTHON al interior del directorio donde se instaló el Digsilent.
Figura Nº 1: Entorno de trabajo para crear Script.

Fuente: Referencia [9] – elaboración propia.


En la figura Nº 1, se presenta el entorno donde se debe ingresar para invocar a los script en el
Digsilent.

25
Colegio de Ingenieros Electricistas y Electrónicos
Figura Nº 2: Selección en Digsilent para trabajar con script del Python.

Fuente: Referencia [9] – elaboración propia.

Figura Nº 3: Entorno de trabajo para script del Python.

Fuente: Referencia [9] – elaboración propia.

En la figura Nº 2 se muestra la selección para invocar archivos programados en el script de


Python.
En la figura Nº 3 se muestra el entorno de trabajo para la selección del script programado en
Python.

Para el trabajo de forma interactiva con el Excel, se requiere la instalación de la librería winpy32
que debe ser compatible con la versión del Python.

A continuación se presenta el script como ejemplo de aplicación.

# se invoca al módulo PowerFactory


import powerfactory
# se invoca a la aplicación PowerFactory
app = powerfactory.GetApplication()
#se invoca al comando ComLdf para flujos de carga
ldf = app.GetFromStudyCase(“ComLdf”)
#se realiza el cálculo de flujos de carga
ldf.Execute()

En el anterior script, considerando un proyecto activo en el Digsilent, se realiza el cálculo de flujos


de carga.

En el siguiente ejemplo se realiza el trabajo de forma interactiva con el Excel.

26
Colegio de Ingenieros Electricistas y Electrónicos
# Programa de flujos de carga en forma interactiva con el Excel
import powerfactory
app=powerfactory.GetApplication()
# se invoca al win32 para interactuar con el Excel
from win32com import client
excel=client.Dispatch(“Excel.Application”)
excel.visible=True
wb = excel.Workbooks.open(“c:\python33\Redes.xlsx”)
ws=wb.Worksheets[0]
lineas = app.GetCalcRelevantObjects(“*.ElmLne”)
demandas = app.GetCalcRelevantObjects(“*.ElmLod”)
ldf = app.GetFromStudyCase(“ComLdf”)
ldf.Execute()
ws.Cells(1,1).Value=”Line Name”
ws.Cells(1,2).Value=”loading [%]”
ws.Cells(1,6).Value=”Nombre Carga”
ws.Cells(1,7).Value=”MW”
ws.Cells(1,8).Value=”MVAr”
j,t=1,1
for linea in lineas:
if linea.outserv == 0:
linea_c = round(linea.GetAttribute(‘c:loading’),2)
ws.Cells(j+1,1).Value=str(linea.loc_name)
ws.Cells(j+1,2).Value=linea_c
j=j+1
for demanda in demandas:
if demanda.outserv == 0:
ws.Cells(t+1,6).Value=str(demanda.loc_name)
ws.Cells(t+1,7).Value=str(demanda.plini)
ws.Cells(t+1,8).Value=str(demanda.qlini)
t=t+1
wb.Close(True)

En el anterior script se invoca a la librería win32 para la interacción con el Excel, se abre el
archivo Redes.xlsx para trabajo interactivo con el Digsilent.
Con la siguiente instrucción se accede al objeto líneas del Digsilent:
lineas = app.GetCalcRelevantObjects(“*.ElmLne”)
Con la siguiente instrucción se graban datos en el Excel:
ws.Cells(1,1).Value=”Line Name”
Para acceder a los atributos del objeto línea en forma secuencial, se considera la siguiente
instrucción:
for linea in lineas:

La siguiente instrucción se utiliza para verificar las líneas que se encuentran en servicio:
if linea.outserv == 0:
Para acceder al valor del atributo del estado de carga de la línea, se utiliza la siguiente instrucción:
linea_c = round(linea.GetAttribute(‘c:loading’),2)
Con la siguiente instrucción se accede al valor del atributo de la potencia del objeto demanda y se
almacena en el Excel (en este caso se está obteniendo el valor de la potencia activa de la carga):
ws.Cells(t+1,7).Value=str(demanda.plini)
Con la siguiente instrucción se cierra el archivo abierto del Excel y se guardan los cambios
realizados.
wb.Close(True).

27
Colegio de Ingenieros Electricistas y Electrónicos
Para acceder a los diferentes objetos del Digsilent como transformadores, buses, generadores,
etc., se puede realizar la consulta en el Digsilent y conocer los atributos y su forma de invocar a
las diferentes variables.

IMPLEMENTACIÓN DE SCRIPT EN CYMDIST.

El software Cymdist es utilizado en el análisis de las redes de distribución.


En el Cymdist se ha desarrollado el módulo Package, han desarrollado su librería CymPy para el
trabajo de Python para los diferentes análisis en el entorno del Cymdist.
El Python permite las siguientes tareas:

• Automatizar estudios de rutina, en el análisis de flujos de carga en diferentes escenarios.


• Implementar nuevos algoritmos, por ejemplo ubicación de banco de condensadores, en
CYME se puede crear su propio algoritmo en script y ejecutar dentro de CYME.
• Manipular los equipos y dispositivos, se puede crear una red de distribución con el script de
Python, manejo de la base de datos, o cualquier elemento de la red solo con un script.
• Módulo de Python, a diferencia del COM es una aplicación externa, Python está directamente
integrado en la interfaz de Python, tiene acceso a las herramientas del Cymdist.
• Módulo de Python continuará con el desarrollo de script para los procesos de optimización,
el trabajo está enfocado al desarrollo en Python para temas de optimización en Cymdist. Así
también puede crear sus propias palabras claves, para personalizar los datos de las variables
resultantes de los diferentes análisis en Cymdsit.

IMPLEMENTACIÓN DE SCRIPT PARA EL ANÁLISIS NUMÉRICO.

Una alternativa para el análisis numérico, el uso de matrices en forma intensiva, el uso de gráficos,
el uso de números complejos, etc., es el software Python que presenta funcionalidades similares
al Matlab. Para el trabajo con matrices y cálculos numéricos, se requiere la instalación de la
librería numpy que se dispone de manera gratuita y libre en el internet, para mayor referencia
consultar la referencia [11] de la bibliografía del presente documento.

Como ejemplo de aplicación se considera el siguiente sistema de 3 generadores conectados a


una sola barra, con una demanda de 120 MW.

Tabla Nº 1: Datos de las funciones de costos de los generadores.


Pg a b c 𝑃𝑃𝑃𝑃𝑚𝑚𝑚𝑚𝑚𝑚 𝑃𝑃𝑃𝑃𝑚𝑚𝑚𝑚𝑚𝑚
us$ 𝑢𝑢𝑢𝑢$ 𝑢𝑢𝑢𝑢$ MW MW
𝑀𝑀𝑀𝑀ℎ 𝑀𝑀𝑀𝑀ℎ2
1 40 4,50 0,015 30 50
2 50 3,50 0,015 30 50
3 40 3,30 0,02 30 50

Fuente: Elaboración propia.


2
Se considera que la función de costo de los generadores es de la forma: 𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶 = 𝑎𝑎 + 𝑏𝑏 × 𝑃𝑃𝑃𝑃 + 𝑐𝑐 × 𝑃𝑃𝑃𝑃
Se presenta a continuación parte del programa desarrollado en el script de Python, para el
despacho económico de 3 unidades de generación [1] y [7].
# Script para el despacho económico en Python
# se invoca a la librería numpy
import numpy as np
# se asigna el tamaño de la población y generaciones
Npob, Ngen, Pd = 600, 100, 120
# se genera de forma aleatoria una matriz de orden Npob x 4 pob = np.random.rand(Npob,4)
# se genera una matrizde unos de orden Npob x 1
aux = np.ones((Npob,1))

28
Colegio de Ingenieros Electricistas y Electrónicos
penaliza = np.zeros((Npob,1))
# se genera los vectores inf y sup de orden Npob x1
inf = 30*aux
sup = 50*aux
# genera poblacion inicial
pob = inf+(sup-inf)*pob
# se asignan los valores de la constante “a” de las funciones de costo de los tres generadores
que se presentan en la tabla Nº 1
a = np.array([[40,50,45]])
b = np.array([[4.50,3.50,3.3]])
c = np.array([[0.015,0.010,0.02]])
pg = pob[:,0:3]
pg[:,2] = Pd-pg[:,0]-pg[:,1]
# se calcula el costo de los tres generadores y de la cantidad
# de Npob individuos.
costo = a + b*pg + c*pg**2
pob[:,3] = costo[:,1]+costo[:,0]+costo[:,2]+penaliza[:,0]
# se ordena la matriz pob de menor a mayor
pob = pob[pob[:,3].argsort(),]

En el anterior script, se puede apreciar que las operaciones matriciales son similares a las
utilizadas en el Matlab.
Para la generación de números aleatorios entre 0 y se utiliza la siguiente instrucción:
pob = np.random.rand(Npob,4)
Para almacenar los valores de la potencia generada 3, como la diferencia de la demanda menos
las potencias generadas 1 y 2, se utiliza la siguiente instrucción:
pg[:,2] = Pd-pg[:,0]-pg[:,1]
Se hace notar que se esta trabajando con matrices de Npob filas (en el ejemplo es 600).
Para el cálculo del costo de los tres generadores del ejemplo, se utiliza la siguiente instrucción:
costo = a + b*pg + c*pg**2
Para ordenar la matriz pob respecto a la columna 4, se utiliza la siguiente instrucción:
pob = pob[pob[:,3].argsort(),]
Los resultados obtenidos del ejemplo son los siguientes:
𝑃𝑃𝑃𝑃1 = 30 MW, 𝑃𝑃𝑃𝑃2 = 48,15 MW, 𝑃𝑃𝑃𝑃3 = 41,12 MW.

Para mayor referencia del uso de algoritmos genéticos para el despacho económico, consultar la
referencia [7] de la bibliografía del presente documento.

Los paquetes Numpy y Scipy pueden convertirlo, con poco trabajo, en un sustituto completo
a programas prohibitivamente caros pero de uso común en este ámbito como otros que son
utilizados para el cálculo numérico y en particular en el área de la ingeniería.

Hay que destacar que las librerías mencionadas son de uso gratuito y pueden ser obtenidas
fácilmente en el internet.

Así también si se dispone de programas basados en Python, que puede conectarlo a una
secuencia de comandos de MATLAB, existe la opción del uso del conversor de código abierto de
MATLAB-a-Python, que se puede probar en línea.

Se puede seguir los siguientes pasos:


1 Ir a ompclib.appspot.com/m2py~~V, 2 Haga clic en “Examinar” y vaya al archivo de secuencia
de comandos de MATLAB en su disco duro. 3 Haga clic en “Abrir” y luego “Convertir”. 4 Lea la
secuencia de comandos Python resultante y corregir los errores.
29
Colegio de Ingenieros Electricistas y Electrónicos
Matplotlib es el módulo de dibujo de gráficas 2D y 3D aunque no es el único existente. Matplotlib tiene
multitud de librerías de las cuales, por semejanza a Matlab, utilizaremos pyplot. Recomendamos
que puedan visitar la dirección http://matplotlib.sourceforge.net/ donde se puede encontrar
multitud de programas y ejemplos de cómo hacer dibujos con Matplotlib. La documentación oficial
se encuentra en http://matplotlib.sourceforge.net/contents.html.
A continuación se presenta el script simplificado que se dispone en la referencia [11].
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
periodo = 0.5
x = np.linspace(0, 2, 1000)
y = np.sin(2*np.pi*x/periodo)
plt.figure()
plt.plot(x, y, ‘k--’, linewidth = 2, label = ‘y1’)
plt.hold(True)
plt.plot(x,-y,’r’, linewidth = 2, label = ‘y2’)
plt.legend(loc = 2)
plt.xlabel(r”$x (\mu m)$”, fontsize = 24, color = (1,0,0))
plt.ylabel(r”$y (\mu m)$”, fontsize = 24, color = ‘blue’)
plt.text(x = 1, y = 0.0, s = u’T = 0.05’, fontsize = 24)
plt.grid(True)
plt.grid(color = ‘0.5’, linestyle = ‘--’, linewidth = 1)
plt.axis(‘tight’)
plt.title(‘(a)’,fontsize = 28, color = ‘0.75’, verticalalignment = ‘baseline’, horizontalalignment = ‘center’)
plt.savefig(‘plotCompleta.png’)
plt.show()
Se presenta a continuación la gráfica en matplolib.

Figura Nº 4: Grafica del script en Python.

Fuente: Referencia [11] – elaboración propia.

IMPLEMENTACIÓN DE SCRIPT EN ARCGIS.

ArcGIS es un sistema que permite recopilar, organizar, administrar, analizar, compartir y distribuir
información geográfica. Como la plataforma reconocida a nivel global para crear y utilizar sistemas
de información geográfica (SIG), ArcGIS es utilizada para poner el conocimiento geográfico al
servicio de los sectores del gobierno, la empresa, la ciencia, la educación y los medios. ArcGIS
permite publicar la información geográfica para que esté accesible para usuarios que utilicen y

30
Colegio de Ingenieros Electricistas y Electrónicos
tengan conocimiento del SIG. El sistema está disponible en lugares a través de navegadores Web,
dispositivos móviles como smartphones y equipos de escritorio. El sistema ArcGIS hace posible
que información geográfica autorizada creada por la comunidad SIG pueda ser aprovechada
fácilmente y de forma gratuita. Este sistema incluye software, una infraestructura on-line basada
en la nube, herramientas profesionales, recursos configurables como plantillas de aplicación,
mapas base listos para utilizar y contenido propio compartido por la comunidad de usuarios. La
compatibilidad con las plataformas de servidor y de la nube posibilitan la colaboración y el uso
compartido, lo que garantiza que la información vital para la planificación y la toma de decisiones
está disponible de inmediato para los usuarios.

Una de las ventajas que tiene ArcGis es que utiliza un paquete relacionado con Python
denominado “ArcPy”. ArcPy es un paquete de sitio que se basa en el exitoso módulo arcgis scripting.
Su objetivo es crear la piedra angular para una manera útil y productiva de realizar análisis de
datos geográficos, conversión de datos, administración de datos y automatización de mapas con
Python. Este paquete proporciona una rica experiencia en Python nativa, que ofrece finalización
de código así como documentación de referencia para cada función, módulo y clase.

La ventaja adicional de utilizar ArcPy dentro de Python es que Python es un lenguaje de


programación del propósito general. Es un lenguaje interpretado con asignación dinámica de
tipos, adecuado para el trabajo interactivo y la creación rápida de prototipos en programas únicos
conocidos como secuencias de comandos, además de ofrecer potencia suficiente como permitir
la escritura de aplicaciones grandes. Las aplicaciones ArcGIS escritas con ArcPy se benefician
del desarrollo de módulos adicionales en numerosos nichos de Python por parte de profesionales
del SIG y programadores de muchas disciplinas diferentes.

A continuación se demostrara una aplicación sencilla para la extracción de un archivo en formato


shape dentro de otro utilizando “ArcPy” como modulo script.

Figura Nº 5: Departamento de La Paz

Fuente: Elaboración propia

En la figura 5 se observa el Departamento de La Paz, Bolivia en formato shape y un punto de


referencia sobre un municipio, por lo cual haremos la extracción del municipio que se encuentra
debajo del punto de referencia.

31
Colegio de Ingenieros Electricistas y Electrónicos
Figura Nº 6: Identificación de un Municipio del Departamento de La Paz

Fuente: Elaboración propia

Para esto seleccionamos en municipio como se ve en la figura 6 y procedemos a la introducción


del código.

Figura Nº 7: Código en Python

Fuente: Elaboración propia

En la figura 7 se utilizó el siguiente código arcpy.Clip_analysis(in_features=”LPZGeoDa”,


clip_features=”LPZGeoDa”, out_feature_class=”D:/ESCRITORIO/ArcPy/Extract.shp”, cluster_
tolerance=””) para que a través de la ventana de Python que se encuentra en el ArcGis se extraiga
el municipio seleccionado con el nombre de “Extract1” para diferenciar.
Así obtenemos una extracción de un archivo en formato shape utilizando el paquete de ArcPy
como herramienta principal en lugar de usar el paquete “ToolBox” que mayormente es utilizado
por usuarios del ArcGis.

CONCLUSIONES.

De acuerdo a los ejemplos de script para la interacción con el Digsilent, se concluye que es
posible acceder a los objetos como líneas y demandas, para modificar, así también se verifico

32
Colegio de Ingenieros Electricistas y Electrónicos
que es posible realizar el análisis de flujos de carga por ejemplo. Se destaca la importancia de
poder automatizar los análisis de los sistemas eléctricos de potencia con la combinación del
Python el Digsilent.

Asimismo se verifica el manejo de parámetros eléctricos con programación en Python e


interacción además con el Excel. Se verifica el uso del Python como una alternativa para el
análisis numérico – matemático, así también se verifico que la programación en Python para el
uso de matrices es bastante sencilla y simplificada. Se valida el uso de las librerías numpy para
el ejemplo considerado del despacho económico de carga.

Se verifica también, el uso de la librería matplotlib, para realizar gráficas y su sencillez y simplicidad
en la programación en Python.

Se verifica el uso del ArcPy para trabajar en el entorno del ArcGIS, en el ejemplo analizado es
posible la extracción de datos del municipio considerado, de forma automática.

Finalmente recomendamos el uso del Python en el análisis de los sistemas eléctricos, análisis
numérico, etc., sobre todo a los estudiantes que son los que pueden profundizar y expandir el
uso del Python.

REFERENCIA BIBLIOGRÁFICA.

[1] Gonzalo Oscar Eulate Choque, “Flujo óptimo de potencia”, Revista Electromundo Nº 44, La
Paz Bolivia, marzo 1995.
[2] Gonzalo Oscar Eulate Choque, “Factores de distribución en el análisis de los sistemas eléctricos
de potencia”, Revista Electromundo Nº 62, La Paz Bolivia, mayo 2011.
[3] Gonzalo Oscar Eulate Choque, “Análisis de Flujos de Carga mediante el uso de Técnicas
Heurísticas”, Tesis de Maestría UMSA, La Paz Bolivia, marzo 2013.
[4] Gonzalo Oscar Eulate Choque, “Análisis de Flujos de Carga mediante el uso de Técnicas
Heurísticas”, Tesis de Maestría UMSA, La Paz Bolivia, marzo 2013.
[5] Gonzalo Oscar Eulate Choque, “Análisis de Flujos de Carga mediante el uso de Técnicas
Heurísticas”, Tesis de Maestría UMSA, La Paz Bolivia, marzo 2013.
[6] Gonzalo Oscar Eulate Choque, “Análisis de Flujos de Carga mediante Algoritmos Genéticos”,
Revista Electromundo Nº 69, La Paz Bolivia, marzo 2013.
[7] Gonzalo Oscar Eulate Choque, “Despacho económico de carga mediante el uso de Algoritmos
Genéticos en el software Digsilent”, Revista Electromundo No 74, ISSN 2220-5276. La Paz
Bolivia, julio 2015.
[8] Dr. Adrian Will “Algoritmos Genéticos y Optimización Heurística”, apuntes de clases. Grupo de
Aplicaciones de Inteligencia Artificial Universidad Nacional de Tucumán, 290 páginas.
[9] Digsilent GmbH, “Python Tutorial, Digsilent Technical Documentaction”, DIgSILENT
PowerFactory, Aplication Guide Power Factory Version 15.2. 2014, 42 páginas. En línea: http://
documents.tips/documents/python-tutorial-560f11ef2caba.html.
[10] 2016 GitHub, Inc., “Python scripting for PowerFactory”, Python for PowerFactory, 2015, en
línea: https://github.com/susantoj/powerfactory_python.
[11] José María Herrera Fernández, Luis Miguel Sánchez Brea “Computación científica con Python
para módulos de evaluación continua en asignaturas de ciencias aplicadas”, Esta página web
es una extracto del Proyecto de Innovación y Mejora de la Calidad Docente, en línea: http://
pendientedemigracion.ucm.es/info/aocg/python/modulos_cientificos/matplotlib/index.html.
[12] Eugenia Bahit “Curso: Python para Principiantes”, safeCreative 1207302042960. Buenos Aires
Argentina 2012, 136 páginas. En línea: www.eugeniabahit.com.
[13] Francisco Barranco Espósito, Antonio Guerrero Galindo, Manuel entrena Casas y Álvaro
González Nonay “Introducción a Python”, España 2012, 56 páginas. En línea: http://lsi.ugr.
es/~pdo/Seminarios/Python2005.pdf

33
Colegio de Ingenieros Electricistas y Electrónicos
AUTORES.

Gonzalo Oscar Eulate Choque

Ingeniero Electricista, Magister Sc en Ingeniería del Software, Docente Universidad Mayor de San
Andrés, Trabaja en el Sistema Nuevo de la Empresa de Electricidad La Paz S.A., DELAPAZ, áreas
de interés: Regulación de Electricidad, Inteligencia Artificial, Sistemas Eléctricos de Distribución,
Senior Member IEEE. Estudios de Postgrado en Administración de Empresas, Planificación,
Protección de Redes de Distribución, Métodos Numéricos de la Simulación y Modelación,
Análisis de los Regímenes de las Redes de Distribución, Economía Informática, Ingeniería del
Software. Este artículo dedico a mi señora madre Valentina Choque de Eulate, por su invaluable
colaboración en mi formación personal y profesión y a la memoria de mi señor padre Benigno
Eulate Chambi.
Página web: http://geulate.okicode.com
Email: geulate@gmail.com

Alejandro Gianluca Eulate Mollo

Estudiante de la Universidad Mayor de San Andrés en la carrera de ingeniería Geográfica y


estudiante de la Universidad Bolivia de Informática en ingeniería de Sistemas, áreas de interés:
Inteligencia artificial, producción y planificación del suelo en el área de agricultura.

ANEXO 1

Programa en Python del ejemplo del Despacho Económico de carga, de un sistema de 3


generadores conectados a una barra.

import numpy as np
Npob, Ngen, Pd = 600, 100, 120
pob = np.random.rand(Npob,4)
aux = np.ones((Npob,1))
penaliza = np.zeros((Npob,1))
inf , sup = 30*aux, sup = 50*aux
#genera poblacion inicial
pob = inf+(sup-inf)*pob
a = np.array([[40,50,45]])
b = np.array([[4.50,3.50,3.3]])
c = np.array([[0.015,0.010,0.02]])
for t in range(1,Ngen+1):
pg = pob[:,0:3]
pg[:,2] = Pd-pg[:,0]-pg[:,1]
costo = a + b*pg + c*pg**2
34
Colegio de Ingenieros Electricistas y Electrónicos
pob[:,3] = costo[:,1]+costo[:,0]+costo[:,2]+penaliza[:,0]
pob = pob[pob[:,3].argsort(),]
#realiza el cruce
padres = np.random.randint(1, 0.4*Npob,0.4*Npob)
padres1 = padres[0:0.2*Npob,]
padres2 = padres[0.2*Npob:0.4*Npob,]
#print pob
ax = np.random.rand()
A = ax*pob[padres1,] + (1-ax)*pob[padres2,]
B = (1+ax)*pob[padres1,] - ax*pob[padres2,]
C = ax*pob[padres1,] + (1+ax)*pob[padres2,]
pob[0.4*Npob:0.6*Npob,] = A
pob[0.6*Npob:0.8*Npob,] = B
pob[0.8*Npob:Npob,] = C
#penaliza a los individuos que están fuera de los limites
penaliza = np.zeros((Npob,1))
for i in range(0,Npob):
for j in range(0,3):
if pob[i,j] < 30:
penaliza[i,0] = penaliza[i,0] + 1000
if pob[i,j] > 50:
penaliza[i,0] = penaliza[i,0] + 1000
#calcula nuevamente el costo
pg = pob[:,0:3]
pg[:,2] = Pd-pg[:,0]-pg[:,1]
costo = a + b*pg + c*pg**2
pob[:,3] = costo[:,1]+costo[:,0]+costo[:,2]+penaliza[:,0]
pob = pob[pob[:,3].argsort(),]
#genera poblacion inicial
#el 20 % de los peores individuos
aux1 = np.random.rand(Npob,4)
aux1 = inf+(sup-inf)*aux1
n1 = 0.2*Npob
pob[n1:Npob,0:3] = aux1[n1:Npob,0:3]
print “resultado despacho economico”
print pob[1:20,:]

Frases de la filosofía Python

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis
muy limpia y que favorezca un código legible.

• Bello es mejor que feo.


• Explicito es mejor que implícito.
• Simple es mejor que complejo.
• Complejo es mejor que complicado.
• Plano es mejor que anidado.
• Disperso es mejor que denso.
• La legibilidad cuenta.
• Los casos especiales n son tan especiales como para quebrantar las reglas.
• Aunque lo práctico gana a la pureza.
• Los errores nunca deberían dejarse pasar silenciosamente.
• Frente a la ambigüedad, rechaza la tentación de adivinar.
• Debería haber una (y preferiblemente sólo una) manera obvia de hacerlo.
• Ahora es mejor que nunca.
• Aunque nunca es a menudo mejor que ya mismo.
• Si la implementación es difícil de explicar, es una mala idea.
• Si la implementación es fácil de explicar, puede que sea una buena idea.
• Los espacios de nombres (namespaces) son una gran idea… ¡Hagamos más de esas cosas.
35
Colegio de Ingenieros Electricistas y Electrónicos

Você também pode gostar