Avertissement: Cette bibliothèque a été écrite pour expérimenter divers concepts. Les sous-modules Entoe_Client.ParameterTypes et EntoE_Client.queries sont simples. Pour refactor Entoe_Client.PARSERS, les prochaines étapes consisteraient à établir des luminaires, à standardiser l'aplatissement de l'arborescence XML et à découpler les enregistrements de la bibliothèque DataFrame.
Formuler des requêtes lisibles et gérer les données dans les pandas, y compris un ensemble exhaustif de requêtes prédéfinies.
> >> 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 >
[...]devient
> >> 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
...Les requêtes prédéfinies sont le sous-ensemble de la classe de requête générique, couvrant tous les exemples du guide API ENTSO-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 ()
TruePrincipales contributions
Ceux-ci permettent la cartographie entre le langage naturel et les codes requis pour les demandes de GET, par exemple DocumentType.A85 == DocumentType("Imbalance price") . Cette fonctionnalité permet de suivre les requêtes sans sauter entre les documents ou l'ajout de commentaires.
Ento-E API Guide est un ensemble minial pour tout connecteur API pour implémenter et refléte tous les tableaux de bord sur la plate-forme de transparence Ento-E.
Les documents de réponse sont disponibles dans le schéma XML qui peut être analysé dans Pandas Dataframes.
Implémenté: GL_MARKETDocuments, TransmissionNetwork_MarkeTDocuments, Publication_MarkeTDocuments et Banquancing_marketDocuments.
Manquant: pannes, gestion de la congestion et opérations système.
Néanmoins, le client Ento-E cherche à être minime pour passer de la requête à DataFrame et nécessite des connaissances de domaine sur la façon de formuler des requêtes et d'interpréter diverses colonnes d'une réponse analysée.
Ento-E s'appuie sur de nombreux codes (type) pour mapper les requêtes souhaitées. Les types sont codés dans les classes ENUM avec une fonction .Help () pour répertorier le tout. Ils peuvent être adressés via Type [Code] ou Type (String), ce qui facilite l'interaction. Les demandes et les réponses HTTP nécessitent généralement le code, tandis que nous voulons formuler la requête en tant que chaîne lisible par l'homme.
des requêtes d'importation Entoe_Client
à partir d'Entoe_Client.ParameterTypes Import *
Requêtes.transmission.capacityAllocatedoutsideeu (
Out_Domain = Area ('SK'),
in_domain = zone ('ua_bei'),
MarketAgrementType = MarketAgrementType ('Daily'), # Code d'origine: A01
EnctionType = EnctionType ('Explicit'), # Code d'origine: a02
AuctionCategory = AuctionCategory ('horaire'), # Code original: a04
ClassificationSequence_AttributeInStanceComponent_Position = 1,
Periodstart = 201601012300,
période = 201601022300)
>>> ParameterTypes.DocumentType ['A25'] == ParameterTypes.DocumentType ('Document de résultat d'allocation')
Vrai
>>> e.ParameterTypes.DocumentType.Help ()
--- DocumentType ---
API_PARAMETER: Description
[...]
A25: Document de résultat d'allocation
A71: Prévisions de génération
A72: Informations de remplissage du réservoir
A73: Génération réelle
A85: prix du déséquilibre
A86: Volume de déséquilibre
[...]
API_PARAMETER: Description
--- DocumentType ---
>>> e.ParameterTypes.BusinessType.Help ()
--- BusinessType ---
API_PARAMETER: Description
[...]
A25: Informations sur la capacité générale
A29: Capacité déjà allouée (AAC)
A97: Réserve de restauration en fréquence manuelle
B08: Capacité totale nominée
C22: Capacité de réserve d'équilibrage partagée
C24: capacité de réserve réelle
[...]
API_PARAMETER: Description
--- BusinessType ---
#shorties à partir de samptample_plot.py
Importer Entoe_Client en tant que EC
à partir des paramètres d'importation api_key
# Client, analyseur et requête instanciés.
client = eC.Client (API_KEY)
Parser = EC.PaSer ()
query = e.Queries.generation.AggregatedGenerationPerType (
in_domain = e.ParameterTypes.Area ('DE_LU'),
Periodstart = 202109050200,
période = 202109070200)
# Extraire les données.
réponse = client (requête)
df = analyser (réponse)
[...]
# Transformer les données.
production = df [~ Consumption_mask] [['Quantity', 'TimesSeries.mktpsrtype.psrtype']]
## psrtype, par exemple `b01`: =` biomasse`.
Production ['GenerationType'] = Production ['TimeSeries.mktpsrtype.psrtype'].
Appliquer (Lambda x: ParameterTypes.PSrType [x] .Value) # map Ento-E PSRTYPES dans une chaîne lisible par l'homme.
production_by_type = pd.pivot_table (production,
index = production.index,
Columns = 'GenerationType',
valeurs = 'quantité')
[...]
# Parcelle.
production_by_type.plot.bar (title = "Production by Generation Type in De-Lu",
xlabel = "utc",
ylabel = 'mwh',
hache = hache,
** Plot_params)
[...]
