<jupyter_start><jupyter_text>1A.data - visualisation des données - correctionCorrection.<jupyter_code>%matplotlib inline
import matplotlib.pyplot as plt
from jyquickhelper import add_notebook_menu
add_notebook_menu()<jupyter_output><empty_output><jupyter_text>Exercice 1 : écart entre les mariésOn reprend d'abord le code qui permet de récupérer les données.<jupyter_code>from urllib.error import URLError
import pyensae
from pyensae.datasource import dBase2df, DownloadDataException
files = ["etatcivil2012_nais2012_dbase.zip",
         "etatcivil2012_dec2012_dbase.zip",
         "etatcivil2012_mar2012_dbase.zip" ]

try:
    pyensae.download_data(files[-1], 
                          website='http://telechargement.insee.fr/fichiersdetail/etatcivil2012/dbase/')
except (DownloadDataException, URLError, TimeoutError):
    # backup plan
    pyensae.download_data(files[-1], website="xd")

df = dBase2df("mar2012.dbf")
print(df.shape, df.columns)
df.head()<jupyter_output>(246123, 16) Index(['ANAISH', 'DEPNAISH', 'INDNATH', 'ETAMATH', 'ANAISF', 'DEPNAISF',
       'INDNATF', 'ETAMATF', 'AMAR', 'MMAR', 'JSEMAINE', 'DEPMAR', 'DEPDOM',
       'TUDOM', 'TUCOM', 'NBENFCOM'],
      dtype='object')<jupyter_text>Puis on effectue les opérations suggérées par l'énoncé.<jupyter_code>df["ANAISH"] = df.apply (lambda r:  int(r["ANAISH"]), axis=1)
df["ANAISF"] = df.apply (lambda r:  int(r["ANAISF"]), axis=1)
df["differenceHF"] = df.ANAISH - df.ANAISF
df["nb"] = 1
dist = df[["nb","differenceHF"]].groupby("differenceHF", as_index=False).count()
import pandas
pandas.concat([dist.head(n=2), dist.tail(n=3)])<jupyter_output><empty_output><jupyter_text>Exercice 2 : graphe de la distribution avec pandasL'exemple est suggéré par le paragraphe : [bar plots](http://pandas.pydata.org/pandas-docs/stable/visualization.htmlbar-plots).<jupyter_code>dist.plot (kind="bar", y="nb", x="differenceHF", figsize=(16,6))<jupyter_output><empty_output><jupyter_text>Mais on pouvait directement dessiner la distribution sans passer par un ``group by`` comme suggérée par le paragraphe [histograms](http://pandas.pydata.org/pandas-docs/stable/visualization.htmlhistograms).<jupyter_code>df["differenceHF"].hist(figsize=(16,6), bins=50)<jupyter_output><empty_output><jupyter_text>Ou encore la distribution lissée (voir [density plot](http://pandas.pydata.org/pandas-docs/stable/visualization.htmldensity-plot)) (cela prend une minute environ) :<jupyter_code>df["differenceHF"].plot(figsize=(16,6), kind="kde")<jupyter_output><empty_output><jupyter_text>Le second graphique peut être obtenu en écrivant :<jupyter_code>df["ageH"] = -df.ANAISH + 2012
df["ageF"] = -df.ANAISF + 2012
df.plot(x="ageH", y="ageF", kind="scatter")<jupyter_output><empty_output><jupyter_text>Il y a trop de points pour que cela soit lisible. C'est pourquoi, on utilise souvent une [heatmap](http://pandas.pydata.org/pandas-docs/stable/visualization.htmlhexagonal-bin-plot).<jupyter_code>df.plot(kind='hexbin', x="ageH", y="ageF", gridsize=25, figsize=(7,6))<jupyter_output><empty_output><jupyter_text>Exercice 3 : distribution des mariages par jourOn veut obtenir un graphe qui contient l'histogramme de la distribution du nombre de mariages par jour de la semaine et d'ajouter une seconde courbe correspond avec un second axe à la répartition cumulée.https://github.com/pydata/pandas/issues/11111<jupyter_code># ce code échoue pour pandas 0.17.rc1, prendre 0.16.2 ou 0.17.rc2
df["nb"] = 1
dissem = df[["JSEMAINE","nb"]].groupby("JSEMAINE",as_index=False).sum()
total = dissem["nb"].sum()
repsem = dissem.cumsum() 
repsem["nb"] /= total

ax = dissem["nb"].plot(kind="bar")
repsem["nb"].plot(ax=ax, secondary_y=True)
ax.set_title("distribution des mariages par jour de la semaine")<jupyter_output><empty_output><jupyter_text>Exercice 4 : dessin d'un graphe avec networkxOn construit un graphe aléatoire, ses 20 arcs sont obtenus en tirant 20 fois deux nombres entiers entre 1 et 10.  Chaque arc doit avoir une épaisseur aléatoire.<jupyter_code>import random
import networkx as nx
G=nx.Graph()
edge_width = [ ]
for i in range(20) :
    G.add_edge ( random.randint(0,10),  random.randint(0,10) )
    edge_width.append( random.randint( 1,5) )
    
import matplotlib.pyplot as plt
f, ax = plt.subplots(figsize=(8,4))

pos=nx.spring_layout(G) 
nx.draw_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos,width=edge_width,ax=ax)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1420777449420323, 'fraction_numerical': 0.02591498067742669, 'mean_word_length': 6.482993197278912, 'pattern_counts': {'":': 0, '<': 40, '<?xml version=': 0, '>': 40, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '10', 'dir': 'jupyter-structured-clean-dedup', 'id': '339917', 'license': 'MIT', 'n_tokens_mistral': 1759, 'n_tokens_neox': 1650, 'n_words': 327, 'path': '_doc/notebooks/td1a_dfnp/td1a_correction_session_12.ipynb', 'repo_name': 'mohamedelkansouli/Ensae_py', 'size': '4399'}