-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdata_utils.py
More file actions
97 lines (82 loc) · 3.17 KB
/
Copy pathdata_utils.py
File metadata and controls
97 lines (82 loc) · 3.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import pandas as pd
import matplotlib.pyplot as plt
import time
def clean_eurostat_df(df): # prva vrstica; prvi stoplec vsebuje več info, ki jih potem treba razdelit da je bolj pregledno; potem pa še tudi nadomesti vse vredonsti da pač piše ali je prazno ali pač številka; potem še pretvori v številke in odstrani morebitne presledke
raw_col = df.columns[0]
head_split = raw_col.split('\\')[0].split(',')
df[head_split] = df[raw_col].str.split(',', expand=True)
df = df.drop(columns=[raw_col])
id_vars = head_split
df = df.melt(id_vars=id_vars, var_name='year', value_name='value')
df['value'] = df['value'].replace(r'[:\s]+', 'NaN', regex=True)
df['value'] = df['value'].str.replace(r'[a-zA-Z\s]+', '', regex=True)
df['value'] = pd.to_numeric(df['value'], errors='coerce')
df['year'] = pd.to_numeric(df['year'].str.strip(), errors='coerce')
return df
def load_tsv(name, path): # simple load funkcija za vse tsv-je; vrne koliko vrstic naloži in koliko časa potrebuje (vsebuje tudi čiščenje podatkov)
s_time = time.time()
df = pd.read_csv(f'{path}/{name}.tsv', sep='\t')
df = clean_eurostat_df(df)
e_time = time.time()
print(f"Loaded {name} in {e_time - s_time:.3f}s - {len(df)} rows")
return df
# Funkcije za nalaganje posameznih datasetov, ki jih potem uporabimo v main.py; vsaka funkcija pokliče load_tsv z ustreznim imenom datoteke in potjo do nje
def energy_balance():
return load_tsv('estat_nrg_bal_s', 'data')
def share_of_renewables():
return load_tsv('estat_nrg_ind_ren', 'data')
def STC_of_renewables():
return load_tsv('estat_nrg_cb_rw', 'data')
def production_of_electricity():
return load_tsv('estat_nrg_ind_peh', 'data')
def get_country_mapping(): #Še za lažjo predstavitev držav namesto njihovih kratic.
return {
'AL': 'Albanija',
'AT': 'Avstrija',
'BA': 'Bosna in Hercegovina',
'BE': 'Belgija',
'BG': 'Bolgarija',
'CY': 'Ciper',
'CZ': 'Češka',
'DE': 'Nemčija',
'DK': 'Danska',
'EE': 'Estonija',
'EL': 'Grčija',
'ES': 'Španija',
'FI': 'Finska',
'FR': 'Francija',
'GE': 'Gruzija',
'HR': 'Hrvaška',
'HU': 'Madžarska',
'IE': 'Irska',
'IS': 'Islandija',
'IT': 'Italija',
'LT': 'Litva',
'LU': 'Luksemburg',
'LV': 'Latvija',
'MD': 'Moldavija',
'ME': 'Črna Gora',
'MK': 'Severna Makedonija',
'MT': 'Malta',
'NL': 'Nizozemska',
'NO': 'Norveška',
'PL': 'Poljska',
'PT': 'Portugalska',
'RO': 'Romunija',
'RS': 'Srbija',
'SE': 'Švedska',
'SI': 'Slovenija',
'SK': 'Slovaška',
'TR': 'Turčija',
'UA': 'Ukrajina',
'UK': 'Združeno kraljestvo',
'XK': 'Kosovo',
'EU27_2020': 'Evropska Unija (27)'
}
def add_country_names(df):
mapping = get_country_mapping()
# Ustvari nov stolpec 'drzava' na podlagi kratice 'geo'
df['drzava'] = df['geo'].map(mapping)
# Če kratice ni v slovarju, obdrži originalno kratico
df['drzava'] = df['drzava'].fillna(df['geo'])
return df