In [1]:
%matplotlib inline

import json
import pandas as pd

Reading the data


In [21]:
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')) and question['texte'][0:5] != 'Conna' and question['titreQuestion'][-2:] != '34':
                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/EGALITE5.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[21]:
Question n° 27 : Pensez-vous que l’ordonnance de protection fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? Question n° 27. (Réponse) Pensez-vous que l’ordonnance de protection fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Non Question n° 27. (Réponse) Pensez-vous que l’ordonnance de protection fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Oui Question n° 28 : Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Adaptée Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Parfaitement adaptée Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Pas du tout adaptée Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Peu adaptée Question n° 29 : Parmi les mesures que le juge aux affaires familiales peut prendre par ordonnance de protection, quelles sont les deux mesures que vous jugez les plus efficaces ? <i>(merci de cocher deux cases)</i> Question n° 29. (Réponse) Parmi les mesures que le juge aux affaires familiales peut prendre par ordonnance de protection, quelles sont les deux mesures que vous jugez les plus efficaces ? <i>(merci de cocher deux cases)</i> -> Accorder provisoirement l’aide juridictionnelle à la victime des violences ... Question n° 32 : Pensez-vous que le téléphone « grand danger » fait l’objet d’une information suffisante pour être connu de toutes les personnes qui en ont besoin ? Question n° 32. (Réponse) Pensez-vous que le téléphone « grand danger » fait l’objet d’une information suffisante pour être connu de toutes les personnes qui en ont besoin ? -> Non Question n° 32. (Réponse) Pensez-vous que le téléphone « grand danger » fait l’objet d’une information suffisante pour être connu de toutes les personnes qui en ont besoin ? -> Oui Question n° 33 : La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Adapté Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Parfaitement adapté Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Pas du tout adapté Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Peu adapté id sexe
id
lpucmWo= 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 ... 1.0 1.0 0.0 1.0 1.0 0.0 0.0 0.0 lpucmWo= 1
lpucmmU= 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 1.0 ... 1.0 1.0 0.0 1.0 1.0 0.0 0.0 0.0 lpucmmU= 1
mZmc 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 ... 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 mZmc 0
lpucmmw= 1.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 1.0 0.0 ... 1.0 1.0 0.0 1.0 1.0 0.0 0.0 0.0 lpucmmw= 0
lpucm2k= 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 ... 1.0 1.0 0.0 1.0 0.0 1.0 0.0 0.0 lpucm2k= 1

5 rows × 32 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 [22]:
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.086725582135840543, 3: 0.08770326548246378, 4: 0.098144686969291892, 5: 0.090707646039210402, 6: 0.080809966373850767, 7: 0.078219768196054848, 8: 0.082925670915879657, 9: 0.079234613933169371}
optimal_nb_clusters 4

Build the optimal model and apply it


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

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

In [25]:
cluster_profile_counts.head(10)


Out[25]:
Question n° 27 : Pensez-vous que l’ordonnance de protection fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? Question n° 27. (Réponse) Pensez-vous que l’ordonnance de protection fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Non Question n° 27. (Réponse) Pensez-vous que l’ordonnance de protection fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Oui Question n° 28 : Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Adaptée Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Parfaitement adaptée Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Pas du tout adaptée Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Peu adaptée Question n° 29 : Parmi les mesures que le juge aux affaires familiales peut prendre par ordonnance de protection, quelles sont les deux mesures que vous jugez les plus efficaces ? <i>(merci de cocher deux cases)</i> Question n° 29. (Réponse) Parmi les mesures que le juge aux affaires familiales peut prendre par ordonnance de protection, quelles sont les deux mesures que vous jugez les plus efficaces ? <i>(merci de cocher deux cases)</i> -> Accorder provisoirement l’aide juridictionnelle à la victime des violences ... Question n° 32 : Pensez-vous que le téléphone « grand danger » fait l’objet d’une information suffisante pour être connu de toutes les personnes qui en ont besoin ? Question n° 32. (Réponse) Pensez-vous que le téléphone « grand danger » fait l’objet d’une information suffisante pour être connu de toutes les personnes qui en ont besoin ? -> Non Question n° 32. (Réponse) Pensez-vous que le téléphone « grand danger » fait l’objet d’une information suffisante pour être connu de toutes les personnes qui en ont besoin ? -> Oui Question n° 33 : La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Adapté Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Parfaitement adapté Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Pas du tout adapté Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Peu adapté id sexe
clusterindex
0 95 95 95 95 95 95 95 95 95 95 ... 95 95 95 95 95 95 95 95 95 95
1 276 276 276 276 276 276 276 276 276 276 ... 276 276 276 276 276 276 276 276 276 276
2 353 353 353 353 353 353 353 353 353 353 ... 353 353 353 353 353 353 353 353 353 353
3 114 114 114 114 114 114 114 114 114 114 ... 114 114 114 114 114 114 114 114 114 114

4 rows × 32 columns


In [26]:
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 [27]:
%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 [28]:
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[28]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f5b78511908>

In [29]:
df_profiles_sorted.T


Out[29]:
0 1 2 3
Question n° 27 : Pensez-vous que l’ordonnance de protection fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? 0.473684 0.989130 0.997167 0.956140
Question n° 27. (Réponse) Pensez-vous que l’ordonnance de protection fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Non 0.452632 0.989130 0.997167 0.000000
Question n° 27. (Réponse) Pensez-vous que l’ordonnance de protection fait l’objet d’une information suffisante pour être connue de toutes les personnes qui en ont besoin ? -> Oui 0.021053 0.000000 0.000000 0.956140
Question n° 28 : Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : 0.105263 1.000000 0.977337 0.964912
Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Adaptée 0.031579 0.992754 0.000000 0.587719
Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Parfaitement adaptée 0.010526 0.007246 0.048159 0.087719
Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Pas du tout adaptée 0.010526 0.000000 0.138810 0.052632
Question n° 28. (Réponse) Selon vous, pour protéger les victimes de violences conjugales, l’ordonnance de protection est : -> Peu adaptée 0.052632 0.000000 0.790368 0.236842
Question n° 29 : Parmi les mesures que le juge aux affaires familiales peut prendre par ordonnance de protection, quelles sont les deux mesures que vous jugez les plus efficaces ? <i>(merci de cocher deux cases)</i> 0.747368 0.981884 0.988669 0.956140
Question n° 29. (Réponse) Parmi les mesures que le juge aux affaires familiales peut prendre par ordonnance de protection, quelles sont les deux mesures que vous jugez les plus efficaces ? <i>(merci de cocher deux cases)</i> -> Accorder provisoirement l’aide juridictionnelle à la victime des violences 0.378947 0.250000 0.320113 0.254386
Question n° 29. (Réponse) Parmi les mesures que le juge aux affaires familiales peut prendre par ordonnance de protection, quelles sont les deux mesures que vous jugez les plus efficaces ? <i>(merci de cocher deux cases)</i> -> Autoriser la victime des violences à dissimuler son domicile ou sa résidence 0.326316 0.623188 0.682720 0.517544
Question n° 29. (Réponse) Parmi les mesures que le juge aux affaires familiales peut prendre par ordonnance de protection, quelles sont les deux mesures que vous jugez les plus efficaces ? <i>(merci de cocher deux cases)</i> -> Interdire au conjoint violent de détenir une arme 0.105263 0.137681 0.141643 0.228070
Question n° 29. (Réponse) Parmi les mesures que le juge aux affaires familiales peut prendre par ordonnance de protection, quelles sont les deux mesures que vous jugez les plus efficaces ? <i>(merci de cocher deux cases)</i> -> Interdire au conjoint violent de prendre contact avec certaines personnes 0.210526 0.358696 0.351275 0.342105
Question n° 29. (Réponse) Parmi les mesures que le juge aux affaires familiales peut prendre par ordonnance de protection, quelles sont les deux mesures que vous jugez les plus efficaces ? <i>(merci de cocher deux cases)</i> -> Réserver l’occupation du logement au conjoint victime des violences 0.357895 0.442029 0.325779 0.385965
Question n° 30 : Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour améliorer l’efficacité de l’ordonnance de protection ? <i>(merci de cocher deux cases)</i> 0.673684 0.978261 0.980170 0.964912
Question n° 30. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour améliorer l’efficacité de l’ordonnance de protection ? <i>(merci de cocher deux cases)</i> -> Accélérer la délivrance de l’ordonnance par le juge 0.284211 0.557971 0.450425 0.508772
Question n° 30. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour améliorer l’efficacité de l’ordonnance de protection ? <i>(merci de cocher deux cases)</i> -> Mieux prendre en compte les violences psychologiques 0.389474 0.547101 0.657224 0.526316
Question n° 30. (Réponse) Parmi les propositions suivantes, quelles seraient selon vous les deux principales mesures qu’il faudrait mettre en œuvre pour améliorer l’efficacité de l’ordonnance de protection ? <i>(merci de cocher deux cases)</i> -> Renforcer l’accompagnement des victimes pendant l’application de l’ordonnance 0.326316 0.409420 0.487252 0.464912
Question n° 32 : Pensez-vous que le téléphone « grand danger » fait l’objet d’une information suffisante pour être connu de toutes les personnes qui en ont besoin ? 0.621053 0.978261 0.968839 0.973684
Question n° 32. (Réponse) Pensez-vous que le téléphone « grand danger » fait l’objet d’une information suffisante pour être connu de toutes les personnes qui en ont besoin ? -> Non 0.600000 0.898551 0.929178 0.605263
Question n° 32. (Réponse) Pensez-vous que le téléphone « grand danger » fait l’objet d’une information suffisante pour être connu de toutes les personnes qui en ont besoin ? -> Oui 0.021053 0.079710 0.039660 0.368421
Question n° 33 : La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : 0.621053 0.974638 0.977337 0.973684
Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Adapté 0.400000 0.666667 0.541076 0.491228
Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Parfaitement adapté 0.063158 0.148551 0.113314 0.236842
Question n° 33. (Réponse) La géolocalisation de la victime (sous réserve de son accord) est selon vous un dispositif de protection contre les violences conjugales : -> Peu adapté 0.115789 0.144928 0.266289 0.201754
sexe 0.757895 0.811594 0.835694 0.701754

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

Analyse

Thématique n° 5 : La protection contre les violences conjugales

Deux groupes de personnes émergent

  • 502 personnes qui ne connaissent pas le téléphone grand danger
  • 336 qui le connaissent

Celles qui le connaissent ont moins l'impression qu'il y a un déficit d'information sur cette mesure, approuve plus la géolocalisation des victimes et connaissent la disposition d'ordonnance à laquelle elles sont plus favorable. Elles sont plus favorables (bien que minoritaires) au fait de réserver l’occupation du logement au conjoint victime des violences. Les personnes qui connaissent pas le téléphone grand danger ont tendance à apporter plus un peu plus d'importance à l'aide juridictionnelle et aux violences psychologiques.

En ignorant la connaissance du téléphone grand danger (et le fait d'avoir répondu à question ouverte), on a 4 groupes :

  • 95 personnes sans profil particulier
  • 276 personnes qui pensent que l'ordonnance est une disposition adpatée. Elles pensent que l'ordonnance a un déficit d'information, dissimuler son domicile et que la géolocalisation est adaptée
  • 353 personnes qui trouve la disposition d'ordonnance peu adpatée. Elles pointent le manque d'information de cette disposition et du téléphone grand danger et valorisent plus le fait de mieux prendre en compte les violence pyschologiques
  • 114 personnes qui pensent que le niveau d'information sur l'ordonnance est adaptée. Dans cet échantillon, il y a proportionnellement plus d'homme que dans les autres.

In [ ]: