Introduction

Ce notebook a été réalisé en grande partie lors du #DataFin où le but était d'exploiter des jeux de données ouverts sur les finances publiques. Le jeu de donnée sur lequel repose ce notebook est celui de la Cour des Comptes. Il consiste en une analyse visuelle et dynamique des donnée, et une analyse sémantique sur les recommendations.

Version Python : 2.7.14

Importation des données

On importe les données et les reformate par soucis de simplicité.

In [118]:
import pandas as pd
import unicodedata

df = pd.read_csv('TdB_Cour_des_comptes.txt', sep='\t', encoding = 'Windows-1252')
df = df.dropna(axis=1, how='all')
#on renomme les colonnes
def strip_accents(c):
    s2 = unicodedata.normalize('NFD', c).encode('ascii', 'ignore')  
    return s2
columns = df.columns
df.columns = [strip_accents(c.replace(' ', '_').lower()) for c in columns]

#des destinataires ne sont pas mentionnés
df['destinataire_1'] = df['destinataire_1'].replace(' ', 'VIDE')

df.head()
Out[118]:
date_publication type_de_publication titre libelle_recommandation destinataire_1 destinataire_2 destinataire_3
0 18/09/2015 RALFSS L'accès aux soins des ménages défavorisés : un... Favoriser le recours à la CMU-C et à l'ACS en ... Ministère chargé de la Santé et des affaires s... UNCAM/CNAMTS Fonds de financement de la protection compléme...
1 18/09/2015 RALFSS L'accès aux soins des ménages défavorisés : un... En fonction de la réalisation des risques de d... Ministère chargé de la Santé et des affaires s... UNCAM/CNAMTS Fonds de financement de la protection compléme...
2 18/09/2015 RALFSS L'accès aux soins des ménages défavorisés : un... Dans l'éventualité où les études à mener ferai... Ministère chargé de la Santé et des affaires s... UNCAM/CNAMTS Fonds de financement de la protection compléme...
3 18/09/2015 RALFSS L'accès aux soins des ménages défavorisés : un... Refondre le processus d'instruction des demand... Ministère chargé de la Santé et des affaires s...
4 18/09/2015 RALFSS L'accès aux soins des ménages défavorisés : un... Assurer la transparence sur les fréquences d'a... Ministère chargé de la Santé et des affaires s... UNCAM/CNAMTS Fonds de financement de la protection compléme...

Visualisation dynamique des publications par administration destinataire

In [108]:
import plotly.plotly as py
import plotly.graph_objs as go 
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot

init_notebook_mode(connected=False)

pubs = df.iloc[:,1].unique()

def build_button(name):
    return  dict(
                label=name,
                method='update',
                args =[
                    {'visible': [x == name for x in pubs]},
                    {'name': name},
                    {'title': u'Nombre de recommendations entre 2015 et 2018 pour le type de publication test'.format(name)}
                ]
            )

def get_data_for_pub(pub):
    return df[df['type_de_publication'] == pub]

def compute_sum(df, pub):
    sub_df = df[df['type_de_publication'] == pub]
    return sub_df['destinataire_1'].value_counts().to_dict()

traces = [
    go.Bar(
    x=compute_sum(df, x).keys(),
    y=compute_sum(df,x).values(),
    name=x
    ) for x in pubs
]


updatemenus=list([
    dict(
        buttons=list([   
            build_button(x) for x in pubs             
        ]),
        showactive = True,
        type = 'buttons',
    ),
])

layout = go.Layout(
    title='Nombre de recommendation totale par destinataire entre 2015 et 2018 par publication.',
    barmode='group',
    showlegend=False
)

layout['updatemenus'] = updatemenus
data = traces

fig = dict(data=data, layout=layout)
iplot(fig)

print 'Nombre total de recommendations par type de publication: \n'
for k,v in df['type_de_publication'].value_counts().to_dict().items():
    print k + ' : ' + str(v)