IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Questionnaire à choix multiples : question explosée en N colonnes [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut Questionnaire à choix multiples : question explosée en N colonnes
    Bonjour les experts,

    J'ai un souci avec un fichier .csv qui contient le résultat d'un sondage.
    Le type de question est le suivant :
    "Q9 : Which of the following integrated development environments (IDE's) do you use on a regular basis? (Select all that apply)
    ● JupyterLab (or products based off of Jupyter)
    ● RStudio
    ● Visual Studio
    ● Visual Studio Code (VSCode)
    ● PyCharm
    ● Spyder
    ● Notepad++
    ● Sublime Text
    ● Vim, Emacs, or similar
    ● MATLAB
    ● None
    ● Other"


    Dans le csv, j'ai 12 colonnes "Q9_Part_1 Q9_Part_2 Q9_Part_3 Q9_Part_4 Q9_Part_5 Q9_Part_6 Q9_Part_7 Q9_Part_8 Q9_Part_9 Q9_Part_10 Q9_Part_11 Q9_OTHER" : un choix va dans une colonne et pas dans une autre.
    Exemple pour les trois premiers choix de la Q9.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    df_jobs = pd.read_csv("E:\kaggle_data_jobs.csv")
    df_jobs[["Q9_Part_1", "Q9_Part_2", "Q9_Part_3"]]
     	Q9_Part_1 	Q9_Part_2 	Q9_Part_3
    0 	Which of the following integrated development ... 	Which of the following integrated development ... 	Which of the following integrated development ...
    1 	Jupyter (JupyterLab, Jupyter Notebooks, etc) 	NaN 	NaN
    2 	NaN 	NaN 	Visual Studio
    3 	NaN 	NaN 	NaN
    4 	NaN 	NaN 	NaN
    ... 	... 	... 	...
    20032 	NaN 	NaN 	NaN
    20033 	Jupyter (JupyterLab, Jupyter Notebooks, etc) 	RStudio 	NaN
    20034 	Jupyter (JupyterLab, Jupyter Notebooks, etc) 	NaN 	NaN
    20035 	Jupyter (JupyterLab, Jupyter Notebooks, etc) 	RStudio 	NaN
    20036 	Jupyter (JupyterLab, Jupyter Notebooks, etc) 	NaN 	NaN
     
    20037 rows × 3 columns

    Le pb est que nous avons 355 colonnes en tout pour 39 questions.
    Nous avons décidé de fusionner ces colonnes à choix multiples en une seule, avec comme séparateur le | car la virgule était déjà utilisée dans les libellés des questions.

    Dans le nouveau fichier csv, on a renommé cette colonne Q9 en "ide".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    df_jobs02 = pd.read_csv("E:\kaggle_data_jobs_OK.csv")
    display(df_jobs02["ide"].head(10))
     
    0             Visual Studio| PyCharm |  Sublime Text  
    1    Visual Studio Code (VSCode)|  Notepad++  |  Su...
    2                                             PyCharm 
    3                                                  NaN
    4    Jupyter (JupyterLab, Jupyter Notebooks, etc) |...
    5    Jupyter (JupyterLab, Jupyter Notebooks, etc) |...
    6                                             RStudio 
    7        Jupyter (JupyterLab, Jupyter Notebooks, etc) 
    8                                                 None
    9    Jupyter (JupyterLab, Jupyter Notebooks, etc) |...
    Name: ide, dtype: object

    Le pb maintenant, pour faire un graphique via Seaborn, c'est que nous avons, pour les 12 choix de la question, un résultat sous la forme de 726 chaînes de caractères différentes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    df_jobs02["ide"].value_counts()
    Jupyter (JupyterLab, Jupyter Notebooks, etc)                                                                  1014
    Jupyter (JupyterLab, Jupyter Notebooks, etc) |Visual Studio Code (VSCode)                                      505
    Jupyter (JupyterLab, Jupyter Notebooks, etc) | PyCharm                                                         397
    Visual Studio Code (VSCode)                                                                                    353
     RStudio                                                                                                       341
                                                                                                                  ... 
    Jupyter (JupyterLab, Jupyter Notebooks, etc) | RStudio |  Spyder  |  Notepad++  |  Sublime Text  | MATLAB        1
     RStudio | PyCharm |  Vim / Emacs  | MATLAB                                                                      1
     RStudio |  Spyder  |  Notepad++  |  Sublime Text  | MATLAB                                                      1
    Visual Studio Code (VSCode)|  Spyder  |  Notepad++  |  Sublime Text  |  Vim / Emacs  | MATLAB                    1
    Jupyter (JupyterLab, Jupyter Notebooks, etc) |Visual Studio Code (VSCode)| PyCharm | MATLAB |Other               1
    Name: ide, Length: 726, dtype: int64

    Mon objectif est de faire un graphique, genre countplot, montrant quels sont les langages les plus utilisés. Il me faut donc le nombre de choix associés aux 12 réponses MAIS de façon dissociée.
    Vous me direz que c'était le cas au début mais on a jugé que cette présentation éclatée en N colonnes n'était pas bonne.

    Voilà, je ne trouve pas de solution à mon pb, un gros merci par avance pour vos conseils :-)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par Ikebukuro Voir le message
    Mon objectif est de faire un graphique, genre countplot, montrant quels sont les langages les plus utilisés. Il me faut donc le nombre de choix associés aux 12 réponses MAIS de façon dissociée.
    Si vous voulez avoir le nombre de réponses pour un langage donné (pour les classer ensuite...) à la fin vous aurez une association entre nom du langage et nombre de réponses réalisée via la ligne d'un tableau ou un dictionnaire. Reste à savoir comment fabriquer ce tableau mais je ne suis pas certain d'avoir compris ce qu'étaient les données de départ.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Les données de départ sont le résultat d'un sondage.
    Pour une question Q9 avec 12 choix possibles (on peut choisir de 1 à 12 réponses), le fichier .csv va contenir 12 colonnes pour la question Q9 : une colonne par choix possible.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    Les données de départ sont le résultat d'un sondage.
    Pour une question Q9 avec 12 choix possibles (on peut choisir de 1 à 12 réponses), le fichier .csv va contenir 12 colonnes pour la question Q9 : une colonne par choix possible.
    Oui mais un sondage, c'est les réponses de N personnes => dans la ligne Q9, on devrait avoir 12 cases contenant le cumul des réponses ou lire N fichiers pour le réaliser.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 539
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 539
    Par défaut
    Si je résume, à l'origine, tu as 39 fichiers csv, 1 par question, avec autant de colonnes séparées par tabulation qu'il y avait de réponses, et N lignes (si N participants au sondage) (Après relecture, pas 39 fichiers, mais 39 x M(i) colonnes, M(i) étant le nombre de réponses possibles pour la question i)

    Ensuite il y a fusion des 39 csv, pour n'en avoir qu'un seul avec 39 colonnes dont les réponses ont été fusionnées (concaténée) avec le séparateur |, et la tabulation entre chaque colonne/questions.

    Il suffit de dé-concaténer les réponses, peut-être avec le split https://pandas.pydata.org/docs/user_...lacing-strings ?

  6. #6
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    C'est bon, j'ai réussi :-)

    @umfred : j'ai un seul fichier csv, pas 39. 39, c'est le nombre de questions et, 355, c'est le nombre de colonnes du fichier csv (soit les 355 réponses possibles).

    La ligne importante, celle que je cherchais, c'est la première
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    liste = df["ide"].str.split("\|").explode()
     
    liste_ide = pd.DataFrame(liste)
    chart = sns.countplot(x = "ide", data = liste_ide, color = "Blue", order=liste_ide['ide'].value_counts(ascending=False).index)
    chart.set_xticklabels(chart.get_xticklabels(), rotation=45, horizontalalignment='right');
    chart.set_title('Répartition des sondés par ide')
    plt.xlabel("ide")
    plt.ylabel("Nb de personnes")

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Questionnaire à choix multiple
    Par hyassinimo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/06/2018, 21h22
  2. [MCD] Questionnaire à choix multiple - Exigence liée à la fonction
    Par anywenjenkins dans le forum Schéma
    Réponses: 0
    Dernier message: 21/03/2017, 14h52
  3. Réponses: 4
    Dernier message: 20/04/2009, 09h58
  4. Réponses: 3
    Dernier message: 21/04/2008, 10h29
  5. questionnaire à choix multiple dans excel
    Par antasalam dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/03/2008, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo