<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 2A.eco - Mise en pratique des séances 1 et 2 - Utilisation de pandas et visualisation - correction
Correction de l'exercice 2 et manipulations classiques de texte.
Step1:  Exercice 2 - Les villes
Durée 
Step2:  Nettoyage des noms
Step3:  Nombre de codes commune
Step4:  Stats desc
Step5:  Régions et nombre de communes
Step6:  Représenter visuellement les communes
La conversion depuis Excel (un copier coller) a laissé quelques cellules négative et presque nulles -. On les remplace par des valeurs nulles.
Step7:  matplotlib
Step8:  Exemple avec Folium
<ASSISTANT_TASK:>
Python Code:
%matplotlib inline
from jyquickhelper import add_notebook_menu
add_notebook_menu()
from pyensae.datasource import download_data
files = download_data("td2a_eco_exercices_de_manipulation_de_donnees.zip",
                      url="https://github.com/sdpython/ensae_teaching_cs/raw/master/_doc/notebooks/td2a_eco/data/")
files
Explanation: 2A.eco - Mise en pratique des séances 1 et 2 - Utilisation de pandas et visualisation - correction
Correction de l'exercice 2 et manipulations classiques de texte.
End of explanation
import pandas
df_villes = pandas.read_csv("villes.txt", sep="\t", encoding="utf-8")
print(df_villes.columns)
df_villes.head()
Explanation: Exercice 2 - Les villes
Durée : 40 minutes
Importer la base des villes villes.xls
Les noms de variables et les observations contiennent des espaces inutiles (exemple : 'MAJ   ') : commnecer par nettoyer l'ensemble des chaines de caractères (à la fois dans les noms de colonnes et dans les observations)
Trouver le nombre de codes INSEE différents (attention aux doublons)
Comment calculer rapidement la moyenne, le nombre et le maximum pour chaque variable numérique ? (une ligne de code)
Compter le nombre de villes dans chaque Region et en faire un dictionnaire où la clé est la région et la valeur le nombre de villes
Représenter les communes en utilisant  
matplotlib   
une librairie de cartographie (ex : folium)
End of explanation
# Corriger les espaces en trop
# solution pour les espaces
# les colonnes
df_villes.rename(columns=lambda x: x.strip(),inplace = True)
# les observations
df_villes['Nom Ville'] = df_villes[['Nom Ville']].applymap(lambda x: x.strip())
df_villes['MAJ'] = df_villes[['MAJ']].applymap(lambda x: x.strip())
df_villes.columns
Explanation: Nettoyage des noms
End of explanation
len(df_villes['Code INSEE'].unique())
Explanation: Nombre de codes commune
End of explanation
df_villes.describe()
Explanation: Stats desc
End of explanation
df_villes.groupby(['Code Région']).size().to_dict()
Explanation: Régions et nombre de communes
End of explanation
import pandas
df_villes.Longitude = df_villes.Longitude.apply(lambda x: "0" if x.strip() == "-" else x)
df_villes.Longitude = pandas.to_numeric(df_villes.Longitude)
Explanation: Représenter visuellement les communes
La conversion depuis Excel (un copier coller) a laissé quelques cellules négative et presque nulles -. On les remplace par des valeurs nulles.
End of explanation
import matplotlib.pyplot as plt
plt.figure(figsize=(10,10))
plt.scatter(df_villes.Longitude, df_villes.Latitude, s=0.1)
Explanation: matplotlib
End of explanation
import folium
import random
locations = df_villes[['Latitude', 'Longitude']].copy()
print(locations.shape, locations.dropna().shape)
locations.dropna(inplace = True)
locationlist = locations.values.tolist()
len(locationlist)
locationlist[7]
communes_random = random.sample(locationlist, 50)
map = folium.Map(location=[47.088615, 2.637424], zoom_start=6)
for point in range(0,len(communes_random)) :
    folium.Marker(communes_random[point]).add_to(map)
map
Explanation: Exemple avec Folium
End of explanation
<END_TASK>