In [2]:
%matplotlib inline

import json
import pandas as pd

Reading the data


In [3]:
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['titreQuestion'][-2:] != '38' and question['titreQuestion'][-2:] != '37':
                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/EGALITE6.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[3]:
Question n° 35 : Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> Autre Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L'égal accès des femmes et des hommes aux mandats électoraux et aux fonctions électives, ainsi qu'aux responsabilités professionnelles et sociales Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L'égalité professionnelle et salariale et la mixité dans les métiers Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La maîtrise de la sexualité, notamment par l'accès à la contraception et à l'interruption volontaire de grossesse Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La prostitution Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La précarité des femmes Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La recherche sur la construction sociale des rôles sexués Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> Les préjugés sur la place et le rôle des femmes et des hommes dans la société Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> Les violences faites aux femmes et les atteintes à leur dignité Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L’articulation des temps de vie et le partage des responsabilités parentales Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L’égal accès des femmes et des hommes à la création et à la production culturelle et artistique, ainsi qu'à la diffusion des œuvres Question n° 36 : Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous avez une opinion à exprimer sur ce problème Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous faites des recherches approfondies sur ce problème Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous pouvez, par votre action, résoudre ou améliorer ce problème Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous subissez ou avez subi ce problème Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous êtes en contact avec des personnes qui subissent ou ont subi ce problème id sexe
id
lpucmWo= 1.0 1.0 0.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 lpucmWo= 1
lpucmmU= 1.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 lpucmmU= 1
mZmc 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 mZmc 0
lpucmmw= 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 lpucmmw= 0
lpucm2k= 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 lpucm2k= 1

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 [4]:
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.1022948444498088, 3: 0.089892671087531822, 4: 0.084850469187806449, 5: 0.087176553371703089, 6: 0.086745080854009643, 7: 0.088138123748739097, 8: 0.085930085539231232, 9: 0.089193013261875662}
optimal_nb_clusters 2

Build the optimal model and apply it


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

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

In [7]:
cluster_profile_counts.head(10)


Out[7]:
Question n° 35 : Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> Autre Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L'égal accès des femmes et des hommes aux mandats électoraux et aux fonctions électives, ainsi qu'aux responsabilités professionnelles et sociales Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L'égalité professionnelle et salariale et la mixité dans les métiers Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La maîtrise de la sexualité, notamment par l'accès à la contraception et à l'interruption volontaire de grossesse Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La prostitution Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La précarité des femmes Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La recherche sur la construction sociale des rôles sexués Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> Les préjugés sur la place et le rôle des femmes et des hommes dans la société Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> Les violences faites aux femmes et les atteintes à leur dignité Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L’articulation des temps de vie et le partage des responsabilités parentales Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L’égal accès des femmes et des hommes à la création et à la production culturelle et artistique, ainsi qu'à la diffusion des œuvres Question n° 36 : Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous avez une opinion à exprimer sur ce problème Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous faites des recherches approfondies sur ce problème Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous pouvez, par votre action, résoudre ou améliorer ce problème Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous subissez ou avez subi ce problème Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous êtes en contact avec des personnes qui subissent ou ont subi ce problème id sexe
clusterindex
0 464 464 464 464 464 464 464 464 464 464 464 464 464 464 464 464 464 464 464 464
1 371 371 371 371 371 371 371 371 371 371 371 371 371 371 371 371 371 371 371 371

In [8]:
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)


-c:8: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

In [9]:
%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 [10]:
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[10]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fe9046de978>

In [11]:
df_profiles_sorted.T


Out[11]:
0 1
Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L'égal accès des femmes et des hommes aux mandats électoraux et aux fonctions électives, ainsi qu'aux responsabilités professionnelles et sociales 0.159483 0.417790
Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L'égalité professionnelle et salariale et la mixité dans les métiers 0.403017 0.673854
Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La maîtrise de la sexualité, notamment par l'accès à la contraception et à l'interruption volontaire de grossesse 0.140086 0.525606
Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La prostitution 0.025862 0.132075
Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La précarité des femmes 0.105603 0.409704
Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> La recherche sur la construction sociale des rôles sexués 0.118534 0.436658
Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> Les préjugés sur la place et le rôle des femmes et des hommes dans la société 0.571121 0.886792
Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> Les violences faites aux femmes et les atteintes à leur dignité 0.226293 0.762803
Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L’articulation des temps de vie et le partage des responsabilités parentales 0.265086 0.466307
Question n° 35. (Réponse) Pour préciser les raisons qui vous ont incité-e à répondre à ce questionnaire, merci d’indiquer dans quel domaine vous pouvez par votre information ou votre expérience aider à améliorer l’égalité entre les femmes et les hommes : <i>(vous pouvez cocher plusieurs cases)</i> -> L’égal accès des femmes et des hommes à la création et à la production culturelle et artistique, ainsi qu'à la diffusion des œuvres 0.079741 0.266846
Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous avez une opinion à exprimer sur ce problème 0.497845 0.654987
Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous faites des recherches approfondies sur ce problème 0.165948 0.415094
Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous pouvez, par votre action, résoudre ou améliorer ce problème 0.299569 0.606469
Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous subissez ou avez subi ce problème 0.269397 0.541779
Question n° 36. (Réponse) Vous pouvez aider à améliorer le ou les problèmes identifiés à la question précédente, car : <i>(vous pouvez cocher plusieurs cases)</i> -> Vous êtes en contact avec des personnes qui subissent ou ont subi ce problème 0.301724 0.735849
sexe 0.741379 0.870620

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

Analyse

Questions finales

Deux groupes de personnes émergent

  • 537 personnes n'ont pas répondu à la question ouverte
  • 298 y ont répondu

Ces dernières sont plus favorable à être contactée et déclare plus largement pouvoir améliorer ou être en contact avec des personnes ayant subi le problème

En ignorant les deux dernières questions, on obtient deux autres groupes :

  • 464 personnes répondant dans la moyenne
  • 371 personnes déclarant pouvoir aider plus majoritairement sur les préjugés et les violences

Ce dernier groupe ont déclarer plus de motivation à répondre sur d'auters thèmes et pense pouvoir plus aider


In [ ]: