Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@cerisara
Created March 21, 2020 10:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save cerisara/c98b1ae553756a74596b7341e5bdd566 to your computer and use it in GitHub Desktop.
Save cerisara/c98b1ae553756a74596b7341e5bdd566 to your computer and use it in GitHub Desktop.
afficher carte des malades du COVID par département
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
Copy link
Author

map2103

@JiPiBi
Copy link

JiPiBi commented Mar 28, 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 ;-)

@cerisara
Copy link
Author

J'avais oublié: il faut aussi le fond de carte de la france pour que le script ci-dessus marche (provient de openstreemap)

france

@cerisara
Copy link
Author

cerisara commented Mar 28, 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 ;-)

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

@JiPiBi
Copy link

JiPiBi commented Mar 28, 2020

Désolé mais je suis en python3 je ne changerai pas :-(

@LefrancoisJean
Copy link

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:

@cerisara
Copy link
Author

Merci, je ne le savais pas !

@JiPiBi
Copy link

JiPiBi commented Mar 30, 2020

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 ....

image

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

@cerisara
Copy link
Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment