2 votes

Comment tracer un diagramme de dispersion en comptant le nombre d'employés à l'aide de python ?

J'ai un jeu de données comme ci-dessous :

Employee_No    Hire_Date    Status
000001         01/23/2019    T
000002         01/28/2019    A
000003         02/02/2019    A
000004         02/06/2019    A
000005         02/08/2019    T

J'aimerais tracer un graphique comme celui-ci en utilisant seaborn : enter image description here

J'aimerais que l'axe X soit la date d'embauche groupée par mois. L'axe Y est le nombre d'employés. Les points doivent être colorés en fonction de leur statut (actif ou résilié).

J'ai essayé :

sns.scatterplot(x = 'Hire_Date', y = 'employee_No', hue = 'target', data = workdata1)

Je ne sais pas comment exécuter la fonction de comptage et regrouper les données x dans le mois.

Quelqu'un peut-il nous aider ?

3voto

Ali Tarraf Points 23

Vous pouvez y parvenir en utilisant le regroupement dans pandas. Importez les bibliothèques.

import pandas as pd
import seaborn as sns

Importez ensuite vos données dans un cadre de données.

df = pd.read_csv("data.csv")

    Employee_No     Hire_Date   Status
0   1   1/23/2019   T
1   2   1/28/2019   A
2   3   2/2/2019    A
3   4   2/6/2019    A
4   5   2/8/2019    T
5   6   3/1/2019    A
6   7   3/7/2019    A
7   8   3/15/2019   T
8   9   4/18/2019   A
9   10  4/29/2019   T

Veillez à modifier le type de colonne de la date en datetime à l'aide de la commande

df['Hire_Date'] = pd.to_datetime(df['Hire_Date'])

Il est important d'avoir un cadre de données bien ordonné pour pouvoir utiliser le nuage de points seaborn, alors ajoutons les colonnes année et mois.

df['year']= df['Hire_Date'].map(lambda x: x.year)
df['month'] = df['Hire_Date'].map(lambda x: x.month)

Si vous regroupez les données par mois et par statut, vous obtenez les salariés licenciés et les salariés actifs pour chaque mois.

df.groupby(["month","Status"]).count().Employee_No

month  Status  Employee_No Count
1      A         1
       T         1
2      A         2
       T         1
3      A         2
       T         1
4      A         1
       T         1

Pour pouvoir utiliser le nuage de points dans sns, réinitialiser l'index de l'opération de groupe

df_tidy = df.groupby(["month","Status"]).count().reset_index()

Et maintenant, utilisez le nuage de points :

sns.scatterplot(x = 'month', y = 'Employee_No', hue='Status', data = df.tidy)

Scatter plot of count of employees per status

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X