-
-
Save cerisara/c98b1ae553756a74596b7341e5bdd566 to your computer and use it in GitHub Desktop.
01 46°05’58" 5°20’56" E AIN | |
02 49°33’34" 3°33’30" E AISNE | |
03 46°23’37" 3°11’18" E ALLIER | |
04 44°06’22" 6°14’38" E ALPES-DE-HAUTEPROVENCE | |
05 44°39’49" 6°15’47" E HAUTES-ALPES | |
06 43°56’15" 7°06’59" E ALPES-MARITIMES | |
07 44°45’06" 4°25’29" E ARDECHE | |
08 49°36’56" 4°38’27" E ARDENNES | |
09 42°55’15" 1°30’14" E ARIEGE | |
10 48°18’16" 4°09’42" E AUBE | |
11 43°06’12" 2°24’51" E AUDE | |
12 44°16’49" 2°40’47" E AVEYRON | |
13 43°32’36" 5°05’11" E BOUCHES-DU-RHÔNE | |
14 49°05’59" 0°21’49"O CALVADOS | |
15 45°03’04" 2°40’07" E CANTAL | |
16 45°43’05" 0°12’06" E CHARENTE | |
17 45°46’51" 0°40’28"O CHARENTE-MARITIME | |
18 47°03’53" 2°29’28" E CHER | |
19 45°21’25" 1°52’37" E CORREZE | |
20 41°51’49" 8°59’17" E CORSE-DU-SUD | |
20 42°23’39" 9°12’23" E HAUTE-CORSE | |
21 47°25’29" 4°46’20" E CÔTE-D’OR | |
22 48°26’28" 2°51’51" O CÔTES-D’ARMOR | |
23 46°05’25" 2°01’08" E CREUSE | |
24 45°06’15" 0°44’29" E DORDOGNE | |
25 47°09’55" 6°21’42" E DOUBS | |
26 44°41’03" 5°10’05" E DROME | |
27 49°06’49" 0°59’46" E EURE | |
28 48°23’15" 1°22’13" E EURE-ET-LOIR | |
29 48°15’40" 4°03’32" O FINISTÈRE | |
30 43°59’36" 4°10’49" E GARD | |
31 43°21’31" 1°10’22" E HAUTE-GARONNE | |
32 43°41’34" 0°27’12" E GERS | |
33 44°49’31" 0°34’31" O GIRONDE | |
34 43°34’47" 3°22’02" E HÉRAULT | |
35 48°09’16" 1°38’19" O ILLE-ET-VILAINE | |
36 46°46’40" 1°34’33" E INDRE | |
37 47°15’29" 0°41’29" E INDRE-ET-LOIRE | |
38 45°15’48" 5°34’34" E ISÈRE | |
39 46°43’42" 5°41’52" E JURA | |
40 43°57’56" 0°47’02" O LANDES | |
41 47°37’00" 1°25’46" E LOIR-ET-CHER | |
42 45°43’37" 4°09’57" E LOIRE | |
43 45°07’41" 3°48’23" E HAUTE-LOIRE | |
44 47°21’41" 1°40’56" O LOIRE-ATLANTIQUE | |
45 47°54’43" 2°20’39" E LOIRET | |
46 44°37’27" 1°36’17" E LOT | |
47 44°22’03" 0°27’37" E LOT-ET-GARONNE | |
48 44°31’02" 3°30’01" E LOZÈRE | |
49 47°23’27" 0°33’51" O MAINE-ET-LOIRE | |
50 49°04’46" 1°19’39" O MANCHE | |
51 48°56’57" 4°14’19" E MARNE | |
52 48°06’34" 5°13’35" E HAUTE-MARNE | |
53 48°08’48" 0°39’29" O MAYENNE | |
54 48°47’13" 6°09’54" E MEURTHE-ET-MOSELLE | |
55 48°59’22" 5°22’54" E MEUSE | |
56 47°50’47" 2°48’36" O MORBIHAN | |
57 49°02’14" 6°39’48" E MOSELLE | |
58 47°06’55" 3°30’17" E NIÈVRE | |
59 50°26’50" 3°13’14" E NORD | |
60 49°24’37" 2°25’31" E OISE | |
61 48°37’25" 0°07’44" E ORNE | |
62 50°29’37" 2°17’19" E PAS-DE-CALAIS | |
63 45°43’33" 3°08’27" E PUY-DE-DÔME | |
64 43°15’24" 0°45’41" O PYRÉNÉES-ATLANTIQUES | |
65 43°03’11" 0°09’50" E HAUTES-PYRÉNÉES | |
66 42°36’00" 2°31’20" E PYRÉNÉES-ORIENTALES | |
67 48°40’15" 7°33’05" E BAS-RHIN | |
68 47°51’31" 7°16’27" E HAUT-RHIN | |
69 45°52’13" 4°38’29" E RHONE | |
70 47°38’28" 6°05’10" E HAUTE-SAÔNE | |
71 46°38’41" 4°32’32" E SAÔNE-ET-LOIRE | |
72 47°59’40" 0°13’20" E SARTHE | |
73 45°28’39" 6°26’37" E SAVOIE | |
74 46°02’04" 6°25’41" E HAUTE-SAVOIE | |
75 48°51’24" 2°20’32" E PARIS | |
76 49°39’18" 1°01’35" E SEINE-MARITIME | |
77 48°37’36" 2°56’00" E SEINE-ET-MARNE | |
78 48°48’54" 1°50’30" E YVELINES | |
79 46°33’20" 0°19’02" O DEUX-SÈVRES | |
80 49°57’29" 2°16’40" E SOMME | |
81 43°47’07" 2°09’58" E TARN | |
82 44°05’09" 1°16’55" E TARN-ET-GARONNE | |
83 43°27’38" 6°13’05" E VAR | |
84 43°59’38" 5°11’10" E VAUCLUSE | |
85 46°40’29" 1°17’52" O VENDÉE | |
86 46°33’50" 0°27’37" E VIENNE | |
87 45°53’30" 1°14’07" E HAUTE-VIENNE | |
88 48°11’48" 6°22’50" E VOSGES | |
89 47°50’23" 3°33’52" E YONNE | |
90 47°37’54" 6°55’43" E TERRITOIRE DE BELFORT | |
91 48°31’20" 2°14’35" E ESSONNE | |
92 48°50’50" 2°14’45" E HAUTS-DE-SEINE | |
93 48°55’03" 2°28’41" E SEINE-SAINT-DENIS | |
94 48°46’39" 2°28’08" E VAL-DE-MARNE | |
95 49°04’58" 2°07’52" E VAL-D’OISE |
# coding=utf-8 | |
""" | |
Requiert le fichier par departement depuis datagouv: https://www.data.gouv.fr/fr/datasets/donnees-relatives-a-lepidemie-du-covid-19/ | |
Affiche, par departement, le cumul des personnes hospitalisées avec présomption de COVID sur toute la période. | |
Requiert le fichier contenant la localisation des centres des departements ci-dessous | |
""" | |
from LatLon import string2latlon | |
import matplotlib.pyplot as plt | |
import time | |
import threading | |
import random | |
ps, codes = [], [] | |
def locDept(d): | |
for i in range(len(ps)): | |
if str(codes[i])==str(d): | |
return float(ps[i].lon), float(ps[i].lat) | |
return -1.,-1. | |
def getVirusMap(): | |
lons,lats=[],[] | |
with open("sursaud-covid19-quotidien-2020-03-20-19h44-feuille1.csv","r") as f: lines=f.readlines() | |
lines=lines[1:] | |
for l in lines: | |
s=l.split(",") | |
dat = s[1] | |
dep = s[0] | |
lon,lat = locDept(dep) | |
if lon>=0 and lat>=0 and len(s[5])>0: | |
mal = int(s[5]) | |
for i in range(mal): | |
lo = lon+random.uniform(-0.5,0.5) | |
la = lat+random.uniform(-0.5,0.5) | |
lons.append(lo) | |
lats.append(la) | |
return lons, lats | |
with open("centres_dept.txt","r") as f: | |
for l in f: | |
s = l.split("\t") | |
slat, slon = s[1], s[2] | |
slat+=" N" | |
slon=slon.replace('O',' W') | |
slon=slon.replace(' ',' ') | |
p = string2latlon(slat,slon,'d%°%m%’%S%" %H') | |
ps.append(p) | |
codes.append(s[0]) | |
lons = [float(p.lon) for p in ps] | |
lats = [float(p.lat) for p in ps] | |
BBox = (-5.3, 8.6, 42.4, 51.4) | |
print(BBox) | |
img = plt.imread('france.png') | |
fig, ax = plt.subplots(figsize = (8,7)) | |
# Paris et Marseille | |
vlons = (2.348338,5.410880) | |
vlats = (48.859292,43.325250) | |
vscat = ax.scatter(vlons, vlats, zorder=1, alpha= 0.9, c='r', s=10) | |
dscat = ax.scatter(lons, lats, zorder=1, alpha= 0.9, c='black', s=1) | |
tlons,tlats = getVirusMap() | |
scat = ax.scatter(tlons, tlats, zorder=1, alpha= 0.9, c='blue', s=10) | |
dbuglon, dbuglat = locDept("29") | |
ax.scatter((dbuglon,), (dbuglat,), zorder=1, alpha= 0.9, c='green', s=100) | |
ax.set_title('COVID hopitaux') | |
ax.set_xlim(BBox[0],BBox[1]) | |
ax.set_ylim(BBox[2],BBox[3]) | |
ax.imshow(img, zorder=0, extent = BBox, aspect= 'equal') | |
""" | |
def update(): | |
global lons | |
for i in range(10): | |
time.sleep(1) | |
xoff=float(i) | |
print(xoff) | |
newpts = [(lons[i]+xoff,lats[i]) for i in range(len(lons))] | |
scat.set_offsets(newpts) | |
plt.draw() | |
t = threading.Thread(target=update) | |
t.daemon=True | |
t.start() | |
""" | |
plt.show() |
cerisara
commented
Mar 21, 2020
J'ai essayé de charger votre code mais j'ai le pb suivant après avoir installé LatLon
<ipython-input-3-a7176c3bd9a2> in <module>
7 """
8
----> 9 from LatLon import string2latlon
10 import matplotlib.pyplot as plt
11 import time
~\Anaconda3\lib\site-packages\LatLon\__init__.py in <module>
----> 1 from lat_lon import Latitude, Longitude, LatLon, string2geocoord, string2latlon, GeoVector
J'ai essayé d'installer lat_lon , mais pip install me remonte un pb , donc je ne peux aller plus loin ;-)
J'ai essayé de charger votre code mais j'ai le pb suivant après avoir installé LatLon
<ipython-input-3-a7176c3bd9a2> in <module> 7 """ 8 ----> 9 from LatLon import string2latlon 10 import matplotlib.pyplot as plt 11 import time ~\Anaconda3\lib\site-packages\LatLon\__init__.py in <module> ----> 1 from lat_lon import Latitude, Longitude, LatLon, string2geocoord, string2latlon, GeoVector
J'ai essayé d'installer lat_lon , mais pip install me remonte un pb , donc je ne peux aller plus loin ;-)
Alors j'utilise python2.7 (pas sur que ca marche en python3 ou avec jupyter) et pip pour que ça marche; voici la liste des packages que j'ai installés dans le virtuelenv dédié à ce programme:
(les plus importants sont LatLon et pyproj il me semble)
$ pip list
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Package Version
aenum 2.2.3
backports.functools-lru-cache 1.6.1
cycler 0.10.0
kiwisolver 1.1.0
LatLon 1.0.2
matplotlib 2.2.5
numpy 1.16.6
pip 20.0.2
pyparsing 2.4.6
pyproj 2.2.2
python-dateutil 2.8.1
pytz 2019.3
setuptools 44.0.0
six 1.14.0
subprocess32 3.5.4
wheel 0.34.2
Désolé mais je suis en python3 je ne changerai pas :-(
Pour le faire fonctionner en python 3, il faut remplacer LatLon par LatLon23 :
from LatLon23 import string2latlon
et ne pas oublier de préciser l'encodage quand on ouvre centres_dept.txt
:
with open("centres_dept.txt","r", encoding='utf-8') as f:
Merci, je ne le savais pas !
Ok , j'arrive à lancer avec les fix de @LefrancoisJean (merci à lui) et avec Jupyter Notebook, mais
- quel est le fichier à utiliser car ils ont changé de nom , j'ai utilisé 'sursaud-covid19-quotidien.........csv
- j'ai utilisé votre image de la France mais le résultat global est pauvre ....
Je ne sais pas ce que vous vouliez faire apparaitre au depart , mais il me semble qu'avec votre code chaque fois qu'un département apparait dans le fichier vous ajoutez un point sur la carte , donc si un departement est présent 30 jours vous avez 30 points aleatoirement répartis d'où ce brouillard
Si vous vouliez faire apparaitre les départements en fonction d'un critère de nombre il faudrait faire un filtre et ne prendre qu'une fois le departement ) , mais peut etre n'ai je pas compris votre intention
Edit : autre idée commmunement utilisée danns tous les dashboard, faire un cercle proportionnel au nombre avec une liste des rayons en // des lat lon
Oui, le code n'est absolument pas une version "finalisée": il ne fait que mettre en place tous les éléments pour réaliser cet affichage, i.e. le fond de carte, les coordonnées GPS des départements, l'import du fichier de données, etc.
L'idée de base est de créer une animation jour par jour, car effectivement, tout afficher d'un coup n'est plus très utile au bout d'un moment.
Il y a encore des paramètres à régler pour améliorer la lisibilité: l'écart de la distribution "random" par département, peut-être aussi le calibrage des coordonnées GPS qui me semblent étrange... Mais le code n'est pas loin de cet objectif.
Bref, ce n'est qu'un débroussaillage, utile en tant que librairie pas en tant qu'application finalisée.