{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tracer des cas de Cholera à Londres"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Charger les modules utiles"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import folium # librairie pour afficher les cartes\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# les données"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Source : http://blog.rtwilson.com/john-snows-cholera-data-in-more-formats/ \n",
"KLM data ZIP file: http://rtwilson.com/downloads/SnowGIS_KML.zip\n",
"\n",
"Le dossier dezippé contient les données pumps et death dans des fichiers au format kml.\n",
"\n",
"Là j'avais 2 choix : utiliser une bibliothèque pour lire les kml (plus simple) ou coder un lecteur. Je n'ai pas réussi à installer pykml, ni fastkml ... J'ai donc du aller sur l'option code.\n",
"\n",
"Les fichiers kml sont des fichiers texte (xml) et les informations dont nous avons besoin sont encadrées dans des balises (coordinates et value pour les deaths).\n",
"\n",
"Le principe de mon code est de lire le fichier texte, puis chercher les balises. Je fais l'hypothèse que le fichier a été généré par un code et sera donc avec un format très régulier (pas d'exception). Le nombre de charactères à enlever avant et après sera donc le même pour chaque ligne. Cette hypothèse se vérifie et permet de simplifier le code en utilisant le slicing (str[35:34] par ex).\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## fonction pour lire les données\n",
"\n",
"Comme il y a 2 fichiers à traiter, je crée une petite fonction qui me renvoie les informations. Si on ne trouve rien cela renvoie un tableau vide (cas du nb de morts pour les pompes)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def read_kml(fname):\n",
" # lit un fichier et extrait les informations pertinentes\n",
" nb = [] # nb de morts\n",
" lat =[] \n",
" long= []\n",
" with open(fname) as f :\n",
" for line in f :\n",
" if \"value\" in line:\n",
" # ligne avec valeur, on enlève les tabuluations et espaces, les balises et il reste une string à convertir en int\n",
" # ex : (tab)