Isenção de responsabilidade: Esta biblioteca foi escrita para experimentar vários conceitos. Os submódulos entsoe_client.ParameterTypes e Entsoe_client.Queries são diretos. Para refatorar o entSOE_CLIENT.PARSERS, as próximas etapas seriam estabelecer acessórios, padronizar o achatamento da árvore XML e dissociar os registros da biblioteca de dados.
Formule consultas legíveis e manipular dados em pandas, incluindo um conjunto exaustivo 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 >
[...]torna -se
> >> 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
...As consultas predefinidas são o subconjunto da classe de consulta genérica, cobrindo todos os exemplos do guia da API 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 ()
TruePrincipais contribuições
Isso permite o mapeamento entre a linguagem natural e os códigos necessários para obter solicitações, por exemplo, DocumentType.A85 == DocumentType("Imbalance price") . Esse recurso permite acompanhar as consultas sem pular entre documentos ou adicionar comentários.
O Guia da API do ENSO-E é um conjunto minial para qualquer conector da API implementar e reflete todos os painéis na plataforma de transparência ENTO-E.
Os documentos de resposta vêm no esquema XML, que podem ser analisados nos quadros de dados do pandas.
Implementado: gl_marketdocuments, transmissionnetwork_marketdocuments, publicação_marketdocuments e balancing_marketdocuments.
Falta: interrupções, gerenciamento de congestionamento e operações do sistema.
No entanto, o cliente da ENTO-E busca ser mínimo para ir da consulta para o quadro de dados e requer conhecimento de domínio sobre como formular consultas e interpretar várias colunas de uma resposta analisada.
O ENSO-E depende de muitos códigos (tipo) para mapear para as consultas desejadas. Os tipos são codificados nas classes enum com uma função .help () para listar o All. Eles podem ser abordados através do tipo [código] ou tipo (string), facilitando a interação. As solicitações e respostas HTTP geralmente exigem o código, enquanto queremos formular a consulta como uma string legível por humanos.
De Entsoe_client Importar consultas
De Entsoe_client.parameterTypes importar *
Queries.Transmission.CapacityAllocatedoutSideeu (
out_domain = área ('sk'),
in_domain = área ('ua_bei'),
MarketAgReementType = MarketAgReementType ('Daily'), # Código original: A01
AuctionType = AuctionType ('explícito'), # Código original: A02
AuctionCategory = AuctionCategory ('Hourly'), # Código original: A04
classificação ClassificatEnsence_attributeInstanceComponent_Position = 1,
periodstart = 201601012300,
Período = 201601022300)
>>> parametertypes.documentType ['a25'] == parameterTypes.documentType ('Documento de resultado da alocação')
Verdadeiro
>>> ec.parameterTypes.documentType.help ()
--- DocumentType ---
API_PARAMETER: Descrição
[...]
A25: Documento de resultado da alocação
A71: Previsão de geração
A72: Informações de preenchimento do reservatório
A73: geração real
A85: preços de desequilíbrio
A86: volume de desequilíbrio
[...]
API_PARAMETER: Descrição
--- DocumentType ---
>>> ec.parameterTypes.businessType.help ()
--- BusinessType ---
API_PARAMETER: Descrição
[...]
A25: Informações de capacidade geral
A29: Capacidade já alocada (AAC)
A97: Reserva de Restauração de Frequência Manual
B08: Capacidade total nomeada
C22: Capacidade de reserva de equilíbrio compartilhada
C24: capacidade de reserva real
[...]
API_PARAMETER: Descrição
--- BusinessType ---
#ShortEd em sample_plot.py
importar Entsoe_client como CE
das configurações Importar api_key
# Instante ao cliente, analisador e consulta.
cliente = ec.client (api_key)
Parser = Ec.parser ()
Query = Ec.Queries.generation.AggregatedGeneationPerType (
in_domain = ec.parameterTypes.area ('de_lu'),
periodstart = 202109050200,
periódico = 202109070200)
# Extrair dados.
resposta = cliente (consulta)
df = analisador (resposta)
[...]
# Transforme dados.
Produção = df [~ consumo_mask] [['quantidade', 'timeSeries.mktpsrtype.psrtype']]
## Psrtype, por exemplo, `b01`: =` biomasass`.
Produção ['generationType'] = Produção ['timeRies.mktpsrtype.psrtype'].
Aplicar (lambda x: parametertypes.psrtype [x] .Value) # mapa DESO-e Psrtypes na sequência legível por humanos.
Production_by_type = pd.pivot_table (Produção,
índice = Production.index,
colunas = 'generationType',
valores = 'quantidade')
[...]
# Trama.
Production_by_type.plot.bar (title = "Produção por tipo de geração em de-lu",
xlabel = "utc",
ylabel = 'mwh',
AX = AX,
** plot_params)
[...]
