Descargo de responsabilidad: esta biblioteca fue escrita para experimentar con varios conceptos. Los submódulos entsoe_client.Parametertypes y entose_client. Queries son directas. Para refactorizar entose_client.parsers, los siguientes pasos serían establecer accesorios, estandarizar el aplanamiento del árbol XML y desacoplar los registros de la biblioteca DataFrame.
Formule consultas legibles y datos de manejo en pandas, incluido un conjunto exhaustivo de consultas predefinidas.
> >> import requests
> >> from lxml import objectify
> >> from lxml . etree import dump
> >> url = 'https://transparency.entsoe.eu/api?'
... 'documentType=A81&businessType=A95&psrType=A04&type_MarketAgreement.Type=A01&controlArea_Domain=10YNL----------L'
... f '&periodStart=202101010000&periodEnd=202104010000&securityToken={api_key}'
> >> response = requests . Session (). get ( url = url )
> >> element = objectify . fromstring ( response . content )
> >> dump ( element )
< Balancing_MarketDocument xmlns = "urn:iec62325.351:tc57wg16:451-6:balancingdocument:3:0" >
< mRID > 051 b91beed574b48b4548214e9001afc < / mRID >
< revisionNumber > 1 < / revisionNumber >
< type > A81 < / type >
< process . processType > A34 < / process . processType >
< sender_MarketParticipant . mRID codingScheme = "A01" > 10 X1001A1001A450 < / sender_MarketParticipant . mRID >
< sender_MarketParticipant . marketRole . type > A32 < / sender_MarketParticipant . marketRole . type >
< receiver_MarketParticipant . mRID codingScheme = "A01" > 10 X1001A1001A450 < / receiver_MarketParticipant . mRID >
< receiver_MarketParticipant . marketRole . type > A33 < / receiver_MarketParticipant . marketRole . type >
< createdDateTime > 2021 - 10 - 04 T18 : 12 : 43 Z < / createdDateTime >
< controlArea_Domain . mRID codingScheme = "A01" > 10 YNL - - - - - - - - - - L < / controlArea_Domain . mRID >
< period . timeInterval >
< start > 2020 - 12 - 31 T23 : 00 Z < / start >
< end > 2021 - 03 - 31 T22 : 00 Z < / end >
< / period . timeInterval >
< TimeSeries >
< mRID > 1 < / mRID >
< businessType > A95 < / businessType >
< type_MarketAgreement . type > A01 < / type_MarketAgreement . type >
< mktPSRType . psrType > A04 < / mktPSRType . psrType >
< flowDirection . direction > A03 < / flowDirection . direction >
< quantity_Measure_Unit . name > MAW < / quantity_Measure_Unit . name >
< curveType > A01 < / curveType >
< Period >
< timeInterval >
< start > 2020 - 12 - 31 T23 : 00 Z < / start >
< end > 2021 - 01 - 01 T23 : 00 Z < / end >
< / timeInterval >
< resolution > PT60M < / resolution >
< Point >
< position > 1 < / position >
< quantity > 44 < / quantity >
< / Point >
< Point >
< position > 2 < / position >
< quantity > 44 < / quantity >
[...]se convierte en
> >> import entsoe_client as ec
> >> from entsoe_client . ParameterTypes import *
> >> client = ec . Client ( api_key )
> >> parser = ec . Parser
> >> query = ec . Query (
... documentType = DocumentType ( "Contracted reserves" ),
... psrType = PsrType ( "Generation" ),
... businessType = BusinessType ( "Frequency containment reserve" ),
... controlArea_Domain = Area ( "NL" ),
... type_MarketAgreementType = MarketAgreementType ( "Daily" ),
... periodStart = "2021-01-01T00:00" ,
... periodEnd = "2021-04-01T00:00"
... )
> >> response = client ( query )
> >> df = parser . parse ( response )
> >> df . iloc [:,: 3 ]. head ()
position quantity Period . timeInterval . start ...
2020 - 12 - 31 23 : 00 : 00 + 00 : 00 1 44 2020 - 12 - 31 T23 : 00 Z
2021 - 01 - 01 00 : 00 : 00 + 00 : 00 2 44 2020 - 12 - 31 T23 : 00 Z
2021 - 01 - 01 01 : 00 : 00 + 00 : 00 3 44 2020 - 12 - 31 T23 : 00 Z
2021 - 01 - 01 02 : 00 : 00 + 00 : 00 4 44 2020 - 12 - 31 T23 : 00 Z
2021 - 01 - 01 03 : 00 : 00 + 00 : 00 5 44 2020 - 12 - 31 T23 : 00 Z
...Las consultas predefinidas son un subconjunto de la clase de consulta genérica, que cubre todos los ejemplos de la Guía de la API de ENSO-E.
> >> predefined_query = ec . Queries . Balancing . AmountOfBalancingReservesUnderContract (
... controlArea_Domain = Area ( "NL" ),
... type_MarketAgreementType = MarketAgreementType ( "Daily" ),
... psrType = PsrType ( "Generation" ),
... periodStart = "2021-01-01T00:00" ,
... periodEnd = "2021-04-01T00:00"
... )
...
> >> predefined_query () == query ()
TrueContribuciones principales
Estos permiten el mapeo entre el lenguaje natural y los códigos requeridos para las solicitudes GET, por ejemplo, DocumentType.A85 == DocumentType("Imbalance price") . Esta característica permite realizar un seguimiento de las consultas sin saltar entre documentos o agregar comentarios.
La Guía API de ENSO-E es un conjunto minial para cualquier conector de API para implementar y refleja todos los paneles en la plataforma de transparencia ENSO-E.
Los documentos de respuesta vienen en el esquema XML que se pueden analizar en Pandas Dataframes.
Implementado: GL_MarketDocuments, TransmissionNetwork_MarketDocuments, Publication_MarketDocuments y Balancing_MarketDocuments.
Falta: interrupciones, gestión de congestión y operaciones del sistema.
Sin embargo, el cliente de ENSO-E busca ser mínimo para pasar de una consulta a un marco de datos y requiere conocimiento de dominio sobre cómo formular consultas e interpretar varias columnas de una respuesta analizada.
ENSO-E se basa en muchos códigos (tipo) para mapear a las consultas deseadas. Los tipos están codificados en clases de enum con una función .help () para enumerar todo. Se pueden abordar a través del tipo [código] o tipo (cadena), facilitando la interacción. Las solicitudes y respuestas HTTP generalmente requieren el código, mientras que queremos formular la consulta como una cadena legible por humanos.
de consultas de importación de entsoe_client
de entsoe_client.parametertypes import *
QUERIES.TRANSMISSION.CAPACICIALLOCATADOUTSEDSEEU (
out_domain = área ('sk'),
in_domain = área ('ua_bei'),
MarketAgreementType = MarketAgreementType ('Daily'), # Código original: A01
subuctionType = subuctionType ('explícito'), # código original: a02
subuctionCategory = subuctionCategory ('Hourly'), # Código original: A04
ClasificationSequence_AttributeinstanComponent_Position = 1,
PeriodStart = 201601012300,
Periodend = 201601022300)
>>> parametertypes.documentType ['a25'] == Parametertypes.DocumentType ('Documento de resultado de asignación')
Verdadero
>>> ec.parametertypes.documenttype.help ()
--- DocumentType ---
API_PARAMETER: Descripción
[...]
A25: documento de resultado de asignación
A71: pronóstico de generación
A72: Información de llenado de embalses
A73: Generación real
A85: precios de desequilibrio
A86: Volumen de desequilibrio
[...]
API_PARAMETER: Descripción
--- DocumentType ---
>>> EC.Parametertypes.BusinessType.Help ()
--- BusinessType ---
API_PARAMETER: Descripción
[...]
A25: Información de capacidad general
A29: Capacidad ya asignada (AAC)
A97: Reserva de restauración de frecuencia manual
B08: Capacidad total nominada
C22: Capacidad de reserva de equilibrio compartido
C24: Capacidad de reserva real
[...]
API_PARAMETER: Descripción
--- BusinessType ---
#shorted de sample_plot.py
importar entsoe_client como EC
Desde Configuración Importar API_KEY
# Instanciar cliente, analizador y consulta.
Client = EC.Client (API_KEY)
parser = ec.parser ()
consulta = ec.queries.generation.GregatedGenerationpertype (
in_domain = ec.parametertypes.area ('de_lu'),
periódico = 202109050200,
Periodend = 202109070200)
# Extraer datos.
respuesta = cliente (consulta)
df = analizador (respuesta)
[...]
# Transformar datos.
producción = df [~ consumo_mask] [['Cantidad', 'Timeseries.mktpsrtype.psrtype']]
## psrtype, por ejemplo, `b01`: =` biomass`.
Producción ['GenerationType'] = Production ['Timeseries.mktpsrtype.psrtype'].
Aplicar (lambda x: parametertypes.psrtype [x] .value) # map ento-e psrTypes en una cadena legible por humanos.
production_by_type = pd.pivot_table (producción,
índice = producción.index,
columnas = 'GenerationType',
valores = 'cantidad')
[...]
# Trama.
production_by_type.plot.bar (title = "Producción por tipo de generación en De-Lu",
xlabel = "utc",
ylabel = 'Mwh',
ax = ax,
** trot_params)
[...]
