Отказ от ответственности: эта библиотека была написана для экспериментов с различными понятиями. Sumdules entsoe_client.parametertypes и ontsoe_client.queries прямо вперед. Чтобы рефакторировать entsoe_client.parsers, следующими шагами будет установление светильников, стандартизации сглаживания дерева XML и отделить записи из библиотеки DataFrame.
Сформулируйте читаемые запросы и обрабатывайте данные в пандах, включая исчерпывающий набор заранее определенных запросов.
> >> 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 >
[...]становится
> >> 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
...Предопределенные запросы являются подмножеством общего класса запросов, охватывающих все примеры Руководства 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 ()
TrueОсновные взносы
Они позволяют отображать между естественным языком и кодами, необходимыми для получения запросов, например DocumentType.A85 == DocumentType("Imbalance price") . Эта функция позволяет отслеживать запросы, не прыгая между документами и не добавляя комментарии.
Руководство по API ENTSO-E-это миниат для любого разъема API для реализации и отражает все панели панели на платформе прозрачности ENTS-E.
Ответные документы поставляются в схеме XML, которые могут быть проанализированы в DataFrames Pandas.
Реализовано: gl_marketdocuments, raymissionnetwork_marketdocuments, publication_marketdocuments и Balancing_marketDocuments.
Отсутствует: перебои, управление перегрузками и операции системы.
Тем не менее, клиент ENTSO-E стремится быть минимальным, чтобы перейти от запроса к DataFrame и требует домена- знания о том, как сформулировать запросы и интерпретировать различные столбцы аналитического ответа.
ENTSO-E опирается на многие коды (тип) для карты для желаемых запросов. Типы кодируются в классах перечисления с функцией .help () для перечисления All. Они могут быть адресованы типом [Code] или Type (String), что облегчает взаимодействие. HTTP-запросы и ответы обычно требуют кода, тогда как мы хотим сформулировать запрос как читаемый на человеке строку.
от entsoe_client import Queries
от entsoe_client.parametertypes import *
Queries.transmission.CapacityAllocatedOutsideeu (
out_domain = область ('sk'),
in_domain = область ('ua_bei'),
MarketagreementType = MarketAgreementType ('Daily'), # Оригинальный код: A01
AuctionType = AuctionType ('explicit'), # исходный код: A02
AuctionCategory = AuctionCategory ('Hourly'), # исходный код: A04
classification sectecure_attributeinstancomponent_position = 1,
PEOMENTART = 201601012300,
Периодэнд = 201601022300)
>>> parametertypes.documentype ['a25'] == parametertypes.documentype ('document result allocation')
Истинный
>>> ec.parametertypes.documentype.help ()
--- DocumentType ---
Api_parameter: описание
[...]
A25: Документ результата распределения
A71: прогноз поколения
A72: информация о заполнении резервуара
A73: Фактическое поколение
A85: цены на дисбаланс
A86: Объем дисбаланса
[...]
Api_parameter: описание
--- DocumentType ---
>>> ec.parametertypes.businesstype.help ()
--- BusinessType ---
Api_parameter: описание
[...]
A25: Информация об общем потенциале
A29: уже выделенная емкость (AAC)
A97: Резерв для восстановления ручного восстановления
B08: общая номинированная емкость
C22: общая балансная резервная емкость
C24: Фактическая резервная емкость
[...]
Api_parameter: описание
--- BusinessType ---
#shorted от sample_plot.py
Импорт entsoe_client как ec
Из настройки импорт api_key
# Создание создания клиента, анализатора и запроса.
client = ec.client (api_key)
parser = ec.parser ()
Query = ec.queries.Generation.AggregatedGenerationPertype (
in_domain = ec.parametertypes.area ('de_lu'),
PEOMENTART = 202109050200,
Периодинг = 202109070200)
# Извлеките данные.
ответ = клиент (запрос)
df = parser (ответ)
[...]
# Преобразование данных.
Производство = df [~ Потребление enurning_mask] [['Количество', 'TimeSeries.mktpsrtype.psrtype']]]]
## psrtype, например, `b01`: =` biomass`.
Производство ['GenerationType'] = Производство ['timesseries.mktpsrtype.psrtype'].
Применить (Lambda x: parametertypes.psrtype [x] .value) # map ents-e psrtypes в строку, читаемую человеку.
Production_by_type = pd.pivot_table (производство,
index = production.index,
Columns = 'GenerationType',
Значения = 'Количество')
[...]
# Сюжет.
Production_by_type.plot.bar (title = "Производство по типу генерации в de-lu",
xlabel = "utc",
ylabel = 'mwh',
ax = ax,
** plot_params)
[...]
