-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathget_data_power_plants.py
More file actions
90 lines (74 loc) · 2.78 KB
/
get_data_power_plants.py
File metadata and controls
90 lines (74 loc) · 2.78 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
"""
Ce module a pour but de récupérer la liste des centrales
electriques au Royaume Uni puis de préparer ces donnés
pour pour les afficher sur une carte en fonction
de leur type et capacité.
"""
import urllib.request
from bs4 import BeautifulSoup
def parse_html(html_data):
"""
Récupère les tables contenant les données utiles
présentes sur la page.
Puis, à partir de chaque ligne (et donc colonne)
va créer une liste qui correspondra à une station
le tout est ensuite mis dans la liste des stations
qui sera retournée ensuite
"""
soup = BeautifulSoup(html_data, 'html.parser')
raw_list = []
station = []
for table in soup.find_all("table", {"class": "wikitable sortable"}):
for row in table.find_all("tr"):
for column in row.find_all("td"):
station.append(column.text)
if station != []:
raw_list.append(station)
station = []
return raw_list
def filter_coordinates(liste_stations):
"""
Sert à filtrer les coordonnées afin qu'elle soit exploitable.
Les données sont converties au format (°N,°E)
"""
for station in liste_stations:
coords = station[1].split("/")[1][1:-1].split(" ")
coords[0] = float(coords[0][1:-3])
coords[1] = -float(coords[1][:-3]) if coords[1][-2] == "W" \
else float(coords[1][:-3])
station[1] = (coords[0], coords[1])
def filter_open(liste_stations):
"""
Retourne la liste des stations ouvertes/en activité
"""
return [station for station in liste_stations \
if not (station[9] or station[8] or station[7] == "TBD" or station[1] == '')]
def get_usefull_data(liste):
"""
Retourne une liste contenant seuls les élements intéressants:
Coordonnées, type, capacité de production
"""
prepared_list = []
for station in liste:
prepared_list.append([station[1], station[5].lower(), float(station[6])])
return prepared_list
def filter_out_small_plants(liste, cap):
"""
Retourne les cap plus grandes stations
"""
return sorted(liste, key=lambda x: x[2])[-cap:]
def get_data_plants():
"""
Fonction principale qui va récupérer les données puis tout trier
"""
url = "https://en.wikipedia.org/wiki/List_of_power_stations_in_England"
url_data = urllib.request.urlopen(url)
data = url_data.read().decode('utf8')
raw_list = parse_html(data)
filtered_open_list = filter_open(raw_list)
filter_coordinates(filtered_open_list)
prepared_data = get_usefull_data(filtered_open_list)
prepared_data = filter_out_small_plants(prepared_data, 20)
return prepared_data
if __name__ == "__main__":
get_data_plants()