In [1]:
%matplotlib inline

import json
import pandas as pd

Reading the data


In [2]:
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] != 'Savez') :
                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/EGALITE1.brut.json', True)
df.fillna(0, inplace=True)
df.index = df['id']
df.head()


Out[2]:
Question n° 1 : 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Assurer aux femmes la maîtrise de leur sexualité, notamment par l'accès à la contraception et à l'interruption volontaire de grossesse Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Autre Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Diffuser les recherches sur la construction sociale des rôles sexués Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Favoriser 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° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Favoriser une meilleure articulation des temps de vie et un partage équilibré des responsabilités parentales Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Garantir l'égalité professionnelle et salariale et la mixité dans les métiers Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Garantir 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° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre la prostitution Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre la précarité des femmes Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre les préjugés sur la place et le rôle des femmes et des hommes dans la société Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre les violences faites aux femmes et les atteintes à leur dignité id sexe
id
lpucmWo= 1 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 lpucmWo= 1
lpucmWw= 1 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 lpucmWw= 0
lpucmmU= 1 1.0 0.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 1.0 lpucmmU= 1
mZmc 1 1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 mZmc 0
lpucmmw= 1 0.0 0.0 1.0 0.0 1.0 1.0 0.0 0.0 0.0 1.0 0.0 lpucmmw= 0

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 [3]:
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.17319716053388026, 3: 0.15095377031477664, 4: 0.15433628898687049, 5: 0.15678969108043847, 6: 0.16630863873461921, 7: 0.15803839867590133, 8: 0.16046402137993482, 9: 0.15465613480978088}
optimal_nb_clusters 2

Build the optimal model and apply it


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

In [5]:
# km_model.__dict__

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()


Out[7]:
Question n° 1 : 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Assurer aux femmes la maîtrise de leur sexualité, notamment par l'accès à la contraception et à l'interruption volontaire de grossesse Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Autre Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Diffuser les recherches sur la construction sociale des rôles sexués Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Favoriser 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° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Favoriser une meilleure articulation des temps de vie et un partage équilibré des responsabilités parentales Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Garantir l'égalité professionnelle et salariale et la mixité dans les métiers Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Garantir 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° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre la prostitution Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre la précarité des femmes Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre les préjugés sur la place et le rôle des femmes et des hommes dans la société Question n° 1. (Réponse) 1. Quels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre les violences faites aux femmes et les atteintes à leur dignité id sexe
clusterindex
0 343 343 343 343 343 343 343 343 343 343 343 343 343 343
1 558 558 558 558 558 558 558 558 558 558 558 558 558 558

In [12]:
#cluster_profile_means.head()

In [13]:
#df.info()

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.1):
            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 0x7fc4fb349ac8>

In [11]:
df_profiles_sorted.T


Out[11]:
0 1
Question n° 1. (Réponse) 1.\tQuels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Assurer aux femmes la maîtrise de leur sexualité, notamment par l'accès à la contraception et à l'interruption volontaire de grossesse 0.895044 0.388889
Question n° 1. (Réponse) 1.\tQuels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Diffuser les recherches sur la construction sociale des rôles sexués 0.615160 0.150538
Question n° 1. (Réponse) 1.\tQuels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Favoriser 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.842566 0.360215
Question n° 1. (Réponse) 1.\tQuels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Favoriser une meilleure articulation des temps de vie et un partage équilibré des responsabilités parentales 0.711370 0.295699
Question n° 1. (Réponse) 1.\tQuels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Garantir l'égalité professionnelle et salariale et la mixité dans les métiers 0.938776 0.636201
Question n° 1. (Réponse) 1.\tQuels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Garantir 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.586006 0.057348
Question n° 1. (Réponse) 1.\tQuels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre la prostitution 0.411079 0.118280
Question n° 1. (Réponse) 1.\tQuels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre la précarité des femmes 0.746356 0.229391
Question n° 1. (Réponse) 1.\tQuels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre les préjugés sur la place et le rôle des femmes et des hommes dans la société 0.938776 0.584229
Question n° 1. (Réponse) 1.\tQuels sont selon vous les domaines où il est le plus urgent d’agir pour réduire les inégalités entre les femmes et les hommes ? <i>(vous pouvez cocher plusieurs cases)</i> -> Lutter contre les violences faites aux femmes et les atteintes à leur dignité 0.959184 0.659498

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

Analyse

Thématique n° 1

Deux populations émergent :

  • 343 personnes qui associent 4 thèmes principaux : les préjugés, les violences, l'égalité salariale, la maitrise de la sexualité et l'accès aux mandats. Ces personnes citent également beaucoup plus les autres thèmes
  • 558 personnes pour qui les thèmes ne sont pas ou moins liés

In [ ]: