6
6
from . import entsoe as et
7
7
8
8
9
+ def _format_energy_data (df ):
10
+ start_time_column = df .pop ("startTimeUTC" )
11
+ df .insert (0 , "startTime" , start_time_column )
12
+ local_timezone = datetime .now ().astimezone ().tzinfo
13
+ df ["startTime" ] = pd .to_datetime (df ["startTime" ], format = "%Y%m%d%H%M" ).dt .tz_localize ("UTC" ).dt .tz_convert (local_timezone )
14
+ df .insert (1 , "startTimeUTC" , start_time_column )
15
+ return df
16
+
9
17
def energy (country , start_time , end_time , type = "generation" , interval60 = True ) -> dict :
10
18
"""
11
19
Returns hourly time series of energy production mix for a specified country and time range.
@@ -19,8 +27,9 @@ def energy(country, start_time, end_time, type="generation", interval60=True) ->
19
27
========================== ========== ================================================================
20
28
Column type Description
21
29
========================== ========== ================================================================
22
- startTimeUTC datetime Start date in UTC (60 min interval)
23
- Biomass float64
30
+ startTimeUTC object Start date in UTC (format YYYYMMDDhhmm)
31
+ startTime datetime Start time in local timezone
32
+ Biomass float64
24
33
Fossil Hard coal float64
25
34
Geothermal float64
26
35
....more energy sources float64
@@ -47,11 +56,13 @@ def energy(country, start_time, end_time, type="generation", interval60=True) ->
47
56
:param datetime start_time: The start date for data retrieval. A Datetime object. Note that this date will be rounded to the nearest hour.
48
57
:param datetime end_time: The end date for data retrieval. A datetime object. This date is also rounded to the nearest hour.
49
58
:param str type: The type of data to retrieve; either 'generation' or 'forecast'. Defaults to 'generation'.
59
+ :param boolean interval60: To fix the time interval of data to 60 minutes. True by default. Only applicable for generation data
60
+
50
61
:return: A dictionary containing:
51
62
- `error`: A string with an error message, empty if no errors.
52
63
- `data_available`: A boolean indicating if data was successfully retrieved.
53
64
- `data`: A pandas DataFrame containing the energy data if available, empty DataFrame if not.
54
- - `time_interval` : the time interval of the DataFrame
65
+ - `time_interval` : the time interval of the DataFrame
55
66
:rtype: dict
56
67
"""
57
68
if not isinstance (country , str ):
@@ -70,11 +81,15 @@ def energy(country, start_time, end_time, type="generation", interval60=True) ->
70
81
e_source = meta .get_country_energy_source (country )
71
82
if e_source == "ENTSOE" :
72
83
if type == "generation" :
73
- return et .get_actual_production_percentage (
84
+ energy_data = et .get_actual_production_percentage (
74
85
country , start_time , end_time , interval60
75
86
)
87
+ energy_data ["data" ] = _format_energy_data (energy_data ["data" ])
88
+ return energy_data
76
89
elif type == "forecast" :
77
- return et .get_forecast_percent_renewable (country , start_time , end_time )
90
+ energy_data = et .get_forecast_percent_renewable (country , start_time , end_time )
91
+ energy_data ["data" ] = _format_energy_data (energy_data ["data" ])
92
+ return energy_data
78
93
else :
79
94
raise CodegreenDataError (Message .NO_ENERGY_SOURCE )
80
95
return None
0 commit comments