In [1]:
%matplotlib inline

import json
import pandas as pd

Reading the data


In [22]:
def loadContributions(file, withsexe=False):
    contributions = pd.read_json(path_or_buf=file, orient="columns")
    rows = [];
    rindex = [];
    for i in range(0, contributions.shape[0]):
        row = {};
        row['id'] = contributions['id'][i]
        rindex.append(contributions['id'][i])
        if (withsexe):
            if (contributions['sexe'][i] == 'Homme'):
                row['sexe'] = 0
            else:
                row['sexe'] = 1
        for question in contributions['questions'][i]:
            if (question.get('Reponse')):
                row[question['titreQuestion']+' : '+question['texte']] = 1
                for criteres in question.get('Reponse'):
    #                print(criteres['critere'].keys())
                    row[question['titreQuestion']+'. (Réponse) '+question['texte']+' -> '+str(criteres['critere'].get('texte'))] = 1
        rows.append(row)
    df = pd.DataFrame(data=rows)
    df.fillna(0, inplace=True)
    return df

df = loadContributions('../data/EGALITE4.brut.json', True)
df.fillna(0, inplace=True)
df.index = df['id']
#df.to_csv('consultation_an.csv', format='%d')
#df.columns = ['Q_' + str(col+1) for col in range(len(df.columns) - 2)] + ['id' , 'sexe']
df.head()


Out[22]:
Question n° 21 : Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Non Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Oui, dans ses deux volets Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Oui, mais seulement à propos de la pension alimentaire minimale garantie Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Oui, mais seulement à propos de l’aide au recouvrement des pensions alimentaires impayées Question n° 22 : Pensez-vous que la GIPA fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? Question n° 22. (Réponse) Pensez-vous que la GIPA fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Non Question n° 22. (Réponse) Pensez-vous que la GIPA fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Oui Question n° 23 : Selon vous, pour faire face aux conséquences d’une séparation ou d’un divorce, la GIPA est : Question n° 23. (Réponse) Selon vous, pour faire face aux conséquences d’une séparation ou d’un divorce, la GIPA est : -> Adaptée ... Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Autre Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Faciliter l’accès aux informations sur le parent qui doit payer la pension alimentaire, notamment sur le montant de ses ressources Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Faire financer les impayés de pensions alimentaires par un système d’assurance privée plutôt que par la sécurité sociale Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Ne pas tenir compte de l’ASF (pension alimentaire minimale garantie) dans le calcul du RSA Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Simplifier et accélérer la procédure de versement de l’ASF (pension alimentaire minimale garantie) Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Supprimer le droit à l’ASF (pension alimentaire minimale garantie) au-delà d’un plafond de ressources Question n° 25 : Si vous avez d’autres informations ou expériences qui vous semblent intéressantes pour lutter contre les impayés de pensions alimentaires, vous pouvez les exprimer ici : Question n° 25. (Réponse) Si vous avez d’autres informations ou expériences qui vous semblent intéressantes pour lutter contre les impayés de pensions alimentaires, vous pouvez les exprimer ici : -> None id sexe
id
lpucmWo= 1.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0 1.0 0.0 ... 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 lpucmWo= 1
lpucmmU= 1.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 1.0 1.0 ... 0.0 0.0 0.0 1.0 0.0 1.0 0.0 0.0 lpucmmU= 1
mZmc 1.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0 1.0 0.0 ... 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 mZmc 0
lpucmmw= 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 ... 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 lpucmmw= 0
lpucm2k= 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 ... 0.0 0.0 0.0 1.0 1.0 0.0 1.0 1.0 lpucm2k= 1

5 rows × 25 columns

Build clustering model

Here we build a kmeans model , and select the "optimal" of clusters.

Here we see that the optimal number of clusters is 2.


In [23]:
from sklearn.cluster import KMeans
from sklearn import metrics
import numpy as np
X = df.drop('id', axis=1).values

def train_kmeans(nb_clusters, X):
    kmeans = KMeans(n_clusters=nb_clusters, random_state=0).fit(X)
    return kmeans
#print(kmeans.predict(X))
#kmeans.cluster_centers_


def select_nb_clusters():
    perfs = {};
    for nbclust in range(2,10):
        kmeans_model = train_kmeans(nbclust, X);
        labels = kmeans_model.labels_
        # from http://scikit-learn.org/stable/modules/clustering.html#calinski-harabaz-index
        # we are in an unsupervised model. cannot get better!
        # perfs[nbclust] = metrics.calinski_harabaz_score(X, labels);
        perfs[nbclust] = metrics.silhouette_score(X, labels);
    print(perfs);
    return perfs;


df['clusterindex'] = train_kmeans(4, X).predict(X)
#df 

perfs = select_nb_clusters();
# result :
# {2: 341.07570462155348, 3: 227.39963334619881, 4: 186.90438345452918, 5: 151.03979976346525, 6: 129.11214073405731, 7: 112.37235520885432, 8: 102.35994869157568, 9: 93.848315820675438}

optimal_nb_clusters = max(perfs, key=perfs.get);

print("optimal_nb_clusters" , optimal_nb_clusters);


{2: 0.12231658213837278, 3: 0.12666337577487072, 4: 0.13380893417544898, 5: 0.12206621371901658, 6: 0.13532818599761862, 7: 0.12059029045187272, 8: 0.14220240230172082, 9: 0.13917517592030879}
optimal_nb_clusters 8

Build the optimal model and apply it


In [24]:
km_model = train_kmeans(optimal_nb_clusters, X);
df['clusterindex'] = km_model.predict(X)
lGroupBy = df.groupby(['clusterindex']).mean();

In [25]:
cluster_profile_counts = df.groupby(['clusterindex']).count();
cluster_profile_means = df.groupby(['clusterindex']).mean();
global_counts = df.count()
global_means = df.mean()

In [26]:
cluster_profile_counts.head(10)


Out[26]:
Question n° 21 : Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Non Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Oui, dans ses deux volets Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Oui, mais seulement à propos de la pension alimentaire minimale garantie Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Oui, mais seulement à propos de l’aide au recouvrement des pensions alimentaires impayées Question n° 22 : Pensez-vous que la GIPA fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? Question n° 22. (Réponse) Pensez-vous que la GIPA fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Non Question n° 22. (Réponse) Pensez-vous que la GIPA fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Oui Question n° 23 : Selon vous, pour faire face aux conséquences d’une séparation ou d’un divorce, la GIPA est : Question n° 23. (Réponse) Selon vous, pour faire face aux conséquences d’une séparation ou d’un divorce, la GIPA est : -> Adaptée ... Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Autre Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Faciliter l’accès aux informations sur le parent qui doit payer la pension alimentaire, notamment sur le montant de ses ressources Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Faire financer les impayés de pensions alimentaires par un système d’assurance privée plutôt que par la sécurité sociale Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Ne pas tenir compte de l’ASF (pension alimentaire minimale garantie) dans le calcul du RSA Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Simplifier et accélérer la procédure de versement de l’ASF (pension alimentaire minimale garantie) Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Supprimer le droit à l’ASF (pension alimentaire minimale garantie) au-delà d’un plafond de ressources Question n° 25 : Si vous avez d’autres informations ou expériences qui vous semblent intéressantes pour lutter contre les impayés de pensions alimentaires, vous pouvez les exprimer ici : Question n° 25. (Réponse) Si vous avez d’autres informations ou expériences qui vous semblent intéressantes pour lutter contre les impayés de pensions alimentaires, vous pouvez les exprimer ici : -> None id sexe
clusterindex
0 73 73 73 73 73 73 73 73 73 73 ... 73 73 73 73 73 73 73 73 73 73
1 169 169 169 169 169 169 169 169 169 169 ... 169 169 169 169 169 169 169 169 169 169
2 130 130 130 130 130 130 130 130 130 130 ... 130 130 130 130 130 130 130 130 130 130
3 122 122 122 122 122 122 122 122 122 122 ... 122 122 122 122 122 122 122 122 122 122
4 120 120 120 120 120 120 120 120 120 120 ... 120 120 120 120 120 120 120 120 120 120
5 100 100 100 100 100 100 100 100 100 100 ... 100 100 100 100 100 100 100 100 100 100
6 73 73 73 73 73 73 73 73 73 73 ... 73 73 73 73 73 73 73 73 73 73
7 55 55 55 55 55 55 55 55 55 55 ... 55 55 55 55 55 55 55 55 55 55

8 rows × 25 columns


In [27]:
df_profiles = pd.DataFrame();
nbclusters = cluster_profile_means.shape[0]
df_profiles['clusterindex'] = range(nbclusters)
for col in cluster_profile_means.columns:
    if(col != "clusterindex"):
        df_profiles[col] = np.zeros(nbclusters)
        for cluster in range(nbclusters):
            df_profiles[col][cluster] = cluster_profile_means[col][cluster]
#        row.append(df[col].mean());
df_profiles.head()

#print(df_profiles.columns) 

intereseting_columns = {};
for col in df_profiles.columns:
    if(col != "clusterindex"):
        global_mean = df[col].mean()
        diff_means_global = abs(df_profiles[col] - global_mean). max();
        # print(col , diff_means_global)
        if(diff_means_global > 0.05):
            intereseting_columns[col] = True
            
#print(intereseting_columns)

In [28]:
%matplotlib inline

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

Cluster Profiles

Here, the optimal model ihas two clusters , cluster 0 with 399 cases, and 1 with 537 cases.

As this model is based on binary inputs. Given this, the best description of the clusters is by the distribution of zeros and ones of each input (question).

The figure below gives the cluster profiles of this model. Cluster 0 on the left. 1 on the right. The questions invloved as different (highest bars)


In [29]:
interesting = list(intereseting_columns.keys())
df_profiles_sorted = df_profiles[interesting].sort_index(axis=1)
df_profiles_sorted.plot.bar(figsize =(1, 1))
df_profiles_sorted.plot.bar(figsize =(16, 8), legend=False)


Out[29]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f55103c4828>

In [30]:
df_profiles_sorted.T


Out[30]:
0 1 2 3 4 5 6 7
Question n° 21 : Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? 0.986301 0.994083 0.992308 1.000000 0.975000 1.00 1.000000 0.581818
Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Non 0.671233 0.911243 0.000000 0.385246 0.825000 0.00 0.041096 0.400000
Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Oui, dans ses deux volets 0.082192 0.000000 0.838462 0.286885 0.000000 0.00 0.726027 0.090909
Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Oui, mais seulement à propos de la pension alimentaire minimale garantie 0.054795 0.082840 0.153846 0.106557 0.150000 0.00 0.109589 0.036364
Question n° 21. (Réponse) Avez-vous déjà entendu parler de la garantie publique contre les impayés de pensions alimentaires (GIPA) ? -> Oui, mais seulement à propos de l’aide au recouvrement des pensions alimentaires impayées 0.178082 0.000000 0.000000 0.221311 0.000000 1.00 0.123288 0.054545
Question n° 22 : Pensez-vous que la GIPA fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? 0.986301 0.982249 0.992308 0.983607 1.000000 0.95 1.000000 0.018182
Question n° 22. (Réponse) Pensez-vous que la GIPA fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Non 0.931507 0.946746 0.992308 0.967213 0.991667 0.92 0.000000 0.000000
Question n° 22. (Réponse) Pensez-vous que la GIPA fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Oui 0.054795 0.035503 0.000000 0.016393 0.008333 0.03 1.000000 0.018182
Question n° 23 : Selon vous, pour faire face aux conséquences d’une séparation ou d’un divorce, la GIPA est : 0.794521 1.000000 0.992308 0.967213 0.858333 0.98 1.000000 0.181818
Question n° 23. (Réponse) Selon vous, pour faire face aux conséquences d’une séparation ou d’un divorce, la GIPA est : -> Adaptée 0.452055 1.000000 0.676923 0.475410 0.000000 0.59 0.493151 0.036364
Question n° 23. (Réponse) Selon vous, pour faire face aux conséquences d’une séparation ou d’un divorce, la GIPA est : -> Parfaitement adaptée 0.013699 0.000000 0.092308 0.040984 0.050000 0.04 0.123288 0.018182
Question n° 23. (Réponse) Selon vous, pour faire face aux conséquences d’une séparation ou d’un divorce, la GIPA est : -> Pas du tout adaptée 0.068493 0.000000 0.000000 0.106557 0.133333 0.01 0.232877 0.000000
Question n° 23. (Réponse) Selon vous, pour faire face aux conséquences d’une séparation ou d’un divorce, la GIPA est : -> Peu adaptée 0.260274 0.000000 0.223077 0.344262 0.675000 0.34 0.150685 0.127273
Question n° 24 : Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> 0.000000 1.000000 1.000000 0.918033 1.000000 1.00 0.863014 0.436364
Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Augmenter le montant de l’ASF (pension alimentaire minimale garantie) pour le rapprocher de la moyenne des pensions alimentaires dues 0.000000 0.284024 0.415385 0.254098 0.283333 0.27 0.205479 0.090909
Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Autre 0.000000 0.017751 0.053846 0.180328 0.050000 0.01 0.273973 0.018182
Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Faciliter l’accès aux informations sur le parent qui doit payer la pension alimentaire, notamment sur le montant de ses ressources 0.000000 0.591716 0.523077 0.524590 0.525000 0.57 0.315068 0.218182
Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Faire financer les impayés de pensions alimentaires par un système d’assurance privée plutôt que par la sécurité sociale 0.000000 0.130178 0.038462 0.122951 0.166667 0.09 0.178082 0.054545
Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Ne pas tenir compte de l’ASF (pension alimentaire minimale garantie) dans le calcul du RSA 0.000000 0.177515 0.392308 0.254098 0.275000 0.33 0.178082 0.163636
Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Simplifier et accélérer la procédure de versement de l’ASF (pension alimentaire minimale garantie) 0.000000 0.615385 0.523077 0.401639 0.583333 0.62 0.315068 0.218182
Question n° 24. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour mieux garantir le paiement des pensions alimentaires ? <i>(merci de cocher deux cases)</i> -> Supprimer le droit à l’ASF (pension alimentaire minimale garantie) au-delà d’un plafond de ressources 0.000000 0.183432 0.053846 0.098361 0.116667 0.11 0.260274 0.109091
Question n° 25 : Si vous avez d’autres informations ou expériences qui vous semblent intéressantes pour lutter contre les impayés de pensions alimentaires, vous pouvez les exprimer ici : 0.000000 0.000000 0.000000 1.000000 0.000000 0.00 0.397260 0.181818
Question n° 25. (Réponse) Si vous avez d’autres informations ou expériences qui vous semblent intéressantes pour lutter contre les impayés de pensions alimentaires, vous pouvez les exprimer ici : -> None 0.000000 0.000000 0.000000 1.000000 0.000000 0.00 0.397260 0.181818
sexe 0.863014 0.792899 0.846154 0.803279 0.858333 0.81 0.602740 0.763636

In [31]:
#df_profiles.sort_index(axis=1).T

Analyse

Thématique n° 4 : La lutte contre les impayés de pensions alimentaires

  • 73 personnes qui n'a pas d'option sur les mesures à mettre en oeuvre en matière de recouvrement
  • 169 personnes qui n'a pas entendu parler de la GIPA mais qui trouve la mesure adpatée. Elles pensent plus que les autres que la mesure à mettre en oeuvre est de simplifier et accélérer le versement de l'ASF
  • 130 personnes qui connaissent la GIPA dans ces deux volets. Elles pensent plus que les autres que c'est un système adapté, qu'il faut augmenter le montant de l’ASF et simplifier son versement. Les femmes sont plus nombreuses dans cet échatillon.
  • 122 personnes qui ont une opinion moyenne
  • 120 personnes qui n'a pas entendu parler de la GIPA mais qui trouve plutot la mesure peu adpatée. Les femmes sont plus nombreuses dans cet échatillon
  • 100 personnes qui ne connaissent que le recouvrement des pensions alimentaires impayées.
  • 73 personnes qui connaissence les deux volets et qui trouvent le niveau d'information plutot bon. Elle sont moins nombreuses que la moyenne à estimer qu'il faut simplifier les procédures de versement. Les hommes y sont plus nombreux dans cet échantillon
  • 55 personnes qui ont peu répondu à cette partie du questionnaire

In [ ]: